[
  {
    "path": ".github/workflows/buildx.yml",
    "content": "# ref: https://docs.docker.com/ci-cd/github-actions/\n# https://blog.oddbit.com/post/2020-09-25-building-multi-architecture-im/\n\nname: docker\n\non: \n  push:\n    branches:\n    - master\n    tags:\n    - 'v*'\n\njobs:\n  build:\n    runs-on: ubuntu-latest\n    steps:\n    - name: Prepare\n      id: prepare\n      run: |\n        DOCKER_IMAGE=${{ secrets.DOCKER_IMAGE }}\n        VERSION=latest\n\n        # If this is git tag, use the tag name as a docker tag\n        if [[ $GITHUB_REF == refs/tags/* ]]; then\n          VERSION=${GITHUB_REF#refs/tags/v}\n        fi\n        TAGS=\"${DOCKER_IMAGE}:${VERSION}\"\n\n        # If the VERSION looks like a version number, assume that\n        # this is the most recent version of the image and also\n        # tag it 'latest'.\n        if [[ $VERSION =~ ^[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}$ ]]; then\n          MAJOR_VERSION=`echo $VERSION | awk '{split($0,a,\".\"); print a[1]}'`\n          MINOR_VERSION=`echo $VERSION | awk '{split($0,a,\".\"); print a[2]}'`\n          TAGS=\"$TAGS,${DOCKER_IMAGE}:${MAJOR_VERSION},${DOCKER_IMAGE}:${MAJOR_VERSION}.${MINOR_VERSION},${DOCKER_IMAGE}:latest\"\n        fi\n\n        # Set output parameters.\n        echo \"tags=${TAGS}\" >> $GITHUB_OUTPUT\n        echo \"docker_image=${DOCKER_IMAGE}\" >> $GITHUB_OUTPUT\n        echo \"docker_platforms=linux/386,linux/amd64,linux/arm/v6,linux/arm/v7,linux/arm64/v8,linux/s390x,linux/riscv64\" >> $GITHUB_OUTPUT\n\n    - name: Set up Docker Buildx\n      id: buildx\n      uses: docker/setup-buildx-action@v3\n\n    - name: Environment\n      run: |\n        echo home=$HOME\n        echo git_ref=$GITHUB_REF\n        echo git_sha=$GITHUB_SHA\n        echo image=${{ steps.prepare.outputs.docker_image }}\n        echo tags=${{ steps.prepare.outputs.tags }}\n        echo platforms=${{ steps.prepare.outputs.docker_platforms }}\n        echo avail_platforms=${{ steps.buildx.outputs.platforms }}\n\n    - name: Login to DockerHub\n      if: github.event_name != 'pull_request'\n      uses: docker/login-action@v3\n      with:\n        username: ${{ secrets.DOCKER_USERNAME }}\n        password: ${{ secrets.DOCKER_PASSWORD }}\n\n    - name: Buildx and push\n      uses: docker/build-push-action@v6\n      with:\n        platforms: ${{ steps.prepare.outputs.docker_platforms }}\n        push: true\n        tags: ${{ steps.prepare.outputs.tags }}"
  },
  {
    "path": ".github/workflows/release.yml",
    "content": "name: goreleaser\n\non:\n  push:\n    # run only against tags\n    tags:\n      - 'v*'\n\npermissions:\n  contents: write\n  # packages: write\n  # issues: write\n\njobs:\n  goreleaser:\n    runs-on: ubuntu-latest\n    steps:\n      - uses: actions/checkout@v4\n        with:\n          fetch-depth: 0\n      - run: git fetch --force --tags\n      - uses: actions/setup-go@v5\n        with:\n          go-version: '1.25'\n          cache: true\n      - name: Install UPX\n        uses: crazy-max/ghaction-upx@v3\n        with:\n          install-only: true\n      # More assembly might be required: Docker logins, GPG, etc. It all depends\n      # on your needs.\n      - uses: goreleaser/goreleaser-action@v6\n        with:\n          # either 'goreleaser' (default) or 'goreleaser-pro':\n          distribution: goreleaser\n          version: '~> v2'\n          args: release --clean\n        env:\n          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}\n          # Your GoReleaser Pro key, if you are using the 'goreleaser-pro'\n          # distribution:\n          # GORELEASER_KEY: ${{ secrets.GORELEASER_KEY }}\n"
  },
  {
    "path": ".github/workflows/trigger-nightly.yml",
    "content": "name: Trigger nightly build\n\non:\n  schedule:\n    # * is a special character in YAML, so you have to quote this string\n    - cron:  '00 15 * * *'\n  workflow_dispatch:\n\njobs:\n  check_date:\n    runs-on: ubuntu-latest\n    name: Check latest commit\n    outputs:\n      should_run: ${{ steps.should_run.outputs.should_run }}\n    steps:\n      - uses: actions/checkout@v4\n      - name: print latest_commit\n        run: echo ${{ github.sha }}\n      - id: should_run\n        continue-on-error: true\n        name: check latest commit is less than a day\n        if: ${{ github.event_name == 'schedule' }}\n        run: test -z $(git rev-list --after=\"24 hours\" ${{ github.sha }}) && echo \"should_run=false\" >> $GITHUB_OUTPUT\n\n  trigger-nightly:\n    needs: check_date\n    if: ${{ needs.check_date.outputs.should_run != 'false' }}\n    name: Push tag for nightly build\n    runs-on: ubuntu-latest\n    steps:\n      -\n        name: 'Checkout'\n        uses: actions/checkout@v4\n        with:\n          token: ${{ secrets.NIGHTLY_BUILD_GH_TOKEN }}\n          fetch-depth: 0\n      -\n        name: 'Push new tag'\n        run: |\n          git config user.name \"${GITHUB_ACTOR}\"\n          git config user.email \"${GITHUB_ACTOR}@users.noreply.github.com\"\n\n          # A previous release was created using a lightweight tag\n          # git describe by default includes only annotated tags\n          # git describe --tags includes lightweight tags as well\n          DESCRIBE=`git tag -l --sort=-v:refname | grep -v nightly | head -n 1`\n          MAJOR_VERSION=`echo $DESCRIBE | awk '{split($0,a,\".\"); print a[1]}'`\n          MINOR_VERSION=`echo $DESCRIBE | awk '{split($0,a,\".\"); print a[2]}'`\n          PATCH_VERSION=`echo $DESCRIBE | awk '{split($0,a,\".\"); print a[3]}'`\n          PATCH_VERSION=\"$((${PATCH_VERSION} + 1))\"\n          TAG=\"${MAJOR_VERSION}.${MINOR_VERSION}.${PATCH_VERSION}-nightly.$(date +'%Y%m%d')\"\n          git tag -a $TAG -m \"$TAG: nightly build\"\n          git push origin $TAG\n      - name: 'Clean up nightly releases'\n        uses: dev-drprasad/delete-older-releases@v0.3.3\n        with:\n          keep_latest: 2\n          delete_tags: true\n          delete_tag_pattern: nightly\n        env:\n          GITHUB_TOKEN: ${{ secrets.NIGHTLY_BUILD_GH_TOKEN }}"
  },
  {
    "path": ".gitignore",
    "content": "# Compiled Object files, Static and Dynamic libs (Shared Objects)\n*.o\n*.a\n*.so\n\n# Folders\n_obj\n_test\nrelease\ndebian\nbin\n.vscode\n\n# Architecture specific extensions/prefixes\n*.[568vq]\n[568vq].out\n\n*.cgo1.go\n*.cgo2.c\n_cgo_defun.c\n_cgo_gotypes.go\n_cgo_export.*\n\n_testmain.go\n\n*.swp\n*.swo\n\n*.exe\n*.test\n\n*.bak\n\ncmd/gost/gost\nsnap\n\n*.pem\n*.yaml\n*.txt\ndist/\n"
  },
  {
    "path": "Dockerfile",
    "content": "FROM --platform=$BUILDPLATFORM tonistiigi/xx:1.6.1 AS xx\n\nFROM --platform=$BUILDPLATFORM golang:1.25-alpine3.22 AS builder\n\n# add upx for binary compression\nRUN apk add --no-cache upx || echo \"upx not found\"\n\nCOPY --from=xx / /\n\nARG TARGETPLATFORM\n\nRUN xx-info env\n\nENV CGO_ENABLED=0\n\nENV XX_VERIFY_STATIC=1\n\nWORKDIR /app\n\nCOPY . .\n\nRUN cd cmd/gost && \\\n    xx-go build -ldflags \"-s -w\" && \\\n    xx-verify gost && \\\n    { upx --best gost || true; }\n\nFROM alpine:3.22\n\n# add iptables for tun/tap\nRUN apk add --no-cache iptables\n\nWORKDIR /bin/\n\nCOPY --from=builder /app/cmd/gost/gost .\n\nENTRYPOINT [\"/bin/gost\"]"
  },
  {
    "path": "LICENSE",
    "content": "MIT License\n\nCopyright (c) 2016 ginuerzh\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": "Makefile",
    "content": "NAME=gost\nBINDIR=bin\nVERSION=$(shell cat cmd/gost/version.go | grep 'version =' | sed 's/.*\\\"\\(.*\\)\\\".*/\\1/g')\nGOBUILD=CGO_ENABLED=0 go build --ldflags=\"-s -w\" -v -x -a\nGOFILES=cmd/gost/*.go\n\nPLATFORM_LIST = \\\n\tdarwin-amd64 \\\n\tdarwin-arm64 \\\n\tlinux-386 \\\n\tlinux-amd64 \\\n\tlinux-amd64v3 \\\n\tlinux-armv5 \\\n\tlinux-armv6 \\\n\tlinux-armv7 \\\n\tlinux-armv8 \\\n\tlinux-mips-softfloat \\\n\tlinux-mips-hardfloat \\\n\tlinux-mipsle-softfloat \\\n\tlinux-mipsle-hardfloat \\\n\tlinux-mips64 \\\n\tlinux-mips64le \\\n\tlinux-s390x \\\n\tlinux-riscv64 \\\n\tfreebsd-386 \\\n\tfreebsd-amd64\n\nWINDOWS_ARCH_LIST = \\\n\twindows-386 \\\n\twindows-amd64 \\\n\twindows-amd64v3 \\\n\twindows-arm64\n\nall: linux-amd64 darwin-amd64 darwin-arm64 windows-amd64 # Most used\n\ndarwin-amd64:\n\tGOARCH=amd64 GOOS=darwin $(GOBUILD) -o $(BINDIR)/$(NAME)-$@ $(GOFILES)\n\ndarwin-arm64:\n\tGOARCH=arm64 GOOS=darwin $(GOBUILD) -o $(BINDIR)/$(NAME)-$@ $(GOFILES)\n\nlinux-386:\n\tGOARCH=386 GOOS=linux $(GOBUILD) -o $(BINDIR)/$(NAME)-$@ $(GOFILES)\n\nlinux-amd64:\n\tGOARCH=amd64 GOOS=linux $(GOBUILD) -o $(BINDIR)/$(NAME)-$@ $(GOFILES)\n\nlinux-amd64v3:\n\tGOARCH=amd64 GOOS=linux GOAMD64=v3 $(GOBUILD) -o $(BINDIR)/$(NAME)-$@ $(GOFILES)\n\nlinux-armv5:\n\tGOARCH=arm GOOS=linux GOARM=5 $(GOBUILD) -o $(BINDIR)/$(NAME)-$@ $(GOFILES)\n\nlinux-armv6:\n\tGOARCH=arm GOOS=linux GOARM=6 $(GOBUILD) -o $(BINDIR)/$(NAME)-$@ $(GOFILES)\n\nlinux-armv7:\n\tGOARCH=arm GOOS=linux GOARM=7 $(GOBUILD) -o $(BINDIR)/$(NAME)-$@ $(GOFILES)\n\nlinux-armv8:\n\tGOARCH=arm64 GOOS=linux $(GOBUILD) -o $(BINDIR)/$(NAME)-$@ $(GOFILES)\n\nlinux-mips-softfloat:\n\tGOARCH=mips GOMIPS=softfloat GOOS=linux $(GOBUILD) -o $(BINDIR)/$(NAME)-$@ $(GOFILES)\n\nlinux-mips-hardfloat:\n\tGOARCH=mips GOMIPS=hardfloat GOOS=linux $(GOBUILD) -o $(BINDIR)/$(NAME)-$@ $(GOFILES)\n\nlinux-mipsle-softfloat:\n\tGOARCH=mipsle GOMIPS=softfloat GOOS=linux $(GOBUILD) -o $(BINDIR)/$(NAME)-$@ $(GOFILES)\n\nlinux-mipsle-hardfloat:\n\tGOARCH=mipsle GOMIPS=hardfloat GOOS=linux $(GOBUILD) -o $(BINDIR)/$(NAME)-$@ $(GOFILES)\n\nlinux-mips64:\n\tGOARCH=mips64 GOOS=linux $(GOBUILD) -o $(BINDIR)/$(NAME)-$@ $(GOFILES)\n\nlinux-mips64le:\n\tGOARCH=mips64le GOOS=linux $(GOBUILD) -o $(BINDIR)/$(NAME)-$@ $(GOFILES)\n\nlinux-s390x:\n\tGOARCH=s390x GOOS=linux $(GOBUILD) -o $(BINDIR)/$(NAME)-$@ $(GOFILES)\n\nlinux-riscv64:\n\tGOARCH=riscv64 GOOS=linux $(GOBUILD) -o $(BINDIR)/$(NAME)-$@ $(GOFILES)\n\nfreebsd-386:\n\tGOARCH=386 GOOS=freebsd $(GOBUILD) -o $(BINDIR)/$(NAME)-$@ $(GOFILES)\n\nfreebsd-amd64:\n\tGOARCH=amd64 GOOS=freebsd $(GOBUILD) -o $(BINDIR)/$(NAME)-$@ $(GOFILES)\n\nwindows-386:\n\tGOARCH=386 GOOS=windows $(GOBUILD) -o $(BINDIR)/$(NAME)-$@.exe $(GOFILES)\n\nwindows-amd64:\n\tGOARCH=amd64 GOOS=windows $(GOBUILD) -o $(BINDIR)/$(NAME)-$@.exe $(GOFILES)\n\nwindows-amd64v3:\n\tGOARCH=amd64 GOOS=windows GOAMD64=v3 $(GOBUILD) -o $(BINDIR)/$(NAME)-$@.exe $(GOFILES)\n\nwindows-arm64:\n\tGOARCH=arm64 GOOS=windows $(GOBUILD) -o $(BINDIR)/$(NAME)-$@.exe $(GOFILES)\n\ngz_releases=$(addsuffix .gz, $(PLATFORM_LIST))\nzip_releases=$(addsuffix .zip, $(WINDOWS_ARCH_LIST))\n\n$(gz_releases): %.gz : %\n\tchmod +x $(BINDIR)/$(NAME)-$(basename $@)\n\tgzip -f -S -$(VERSION).gz $(BINDIR)/$(NAME)-$(basename $@)\n\n$(zip_releases): %.zip : %\n\tzip -m -j $(BINDIR)/$(NAME)-$(basename $@)-$(VERSION).zip $(BINDIR)/$(NAME)-$(basename $@).exe\n\nall-arch: $(PLATFORM_LIST) $(WINDOWS_ARCH_LIST)\n\nreleases: $(gz_releases) $(zip_releases)\nclean:\n\trm $(BINDIR)/*\n"
  },
  {
    "path": "README.md",
    "content": "# GO Simple Tunnel\n\n### GO语言实现的安全隧道\n\n[![zh](https://img.shields.io/badge/Chinese%20README-green)](README.md) [![en](https://img.shields.io/badge/English%20README-gray)](README_en.md)\n\n## 功能特性\n\n- [x] [多端口监听](https://gost.run/getting-started/quick-start/)\n- [x] [多级转发链](https://gost.run/concepts/chain/)\n- [x] [多协议支持](https://gost.run/tutorials/protocols/overview/)\n- [x] [TCP/UDP端口转发](https://gost.run/tutorials/port-forwarding/)\n- [x] [反向代理](https://gost.run/tutorials/reverse-proxy/)和[隧道](https://gost.run/tutorials/reverse-proxy-tunnel/)\n- [x] [TCP/UDP透明代理](https://gost.run/tutorials/redirect/)\n- [x] DNS[解析](https://gost.run/concepts/resolver/)和[代理](https://gost.run/tutorials/dns/)\n- [x] [TUN/TAP设备](https://gost.run/tutorials/tuntap/)与[TUN2SOCKS](https://gost.run/tutorials/tungo/)\n- [x] [负载均衡](https://gost.run/concepts/selector/)\n- [x] [路由控制](https://gost.run/concepts/bypass/)\n- [x] [准入控制](https://gost.run/concepts/admission/)\n- [x] [限速限流](https://gost.run/concepts/limiter/)\n- [x] [插件系统](https://gost.run/concepts/plugin/)\n- [x] [Prometheus监控指标](https://gost.run/tutorials/metrics/)\n- [x] [动态配置](https://gost.run/tutorials/api/config/)\n- [x] [Web API](https://gost.run/tutorials/api/overview/)\n- [x] [GUI](https://github.com/go-gost/gostctl)/[WebUI](https://github.com/go-gost/gost-ui)\n\n## 概览\n\n![Overview](https://gost.run/images/overview.png)\n\nGOST作为隧道有三种主要使用方式。\n\n### 正向代理\n\n作为代理服务访问网络，可以组合使用多种协议组成转发链进行转发。\n\n![Proxy](https://gost.run/images/proxy.png)\n\n### 端口转发\n\n将一个服务的端口映射到另外一个服务的端口，同样可以组合使用多种协议组成转发链进行转发。\n\n![Forward](https://gost.run/images/forward.png)\n\n### 反向代理\n\n利用隧道和内网穿透将内网服务暴露到公网访问。\n\n![Reverse Proxy](https://gost.run/images/reverse-proxy.png)\n\n## 下载安装\n\n### 二进制文件\n\n[https://github.com/go-gost/gost/releases](https://github.com/go-gost/gost/releases)\n\n### 安装脚本\n\n```bash\n# 安装最新版本 [https://github.com/go-gost/gost/releases](https://github.com/go-gost/gost/releases)\nbash <(curl -fsSL https://github.com/go-gost/gost/raw/master/install.sh) --install\n```\n```bash\n# 选择要安装的版本\nbash <(curl -fsSL https://github.com/go-gost/gost/raw/master/install.sh)\n```\n\n### 源码编译\n\n```\ngit clone https://github.com/go-gost/gost.git\ncd gost/cmd/gost\ngo build\n```\n\n### Docker\n\n```\ndocker run --rm gogost/gost -V\n```\n\n## 工具\n\n### GUI\n\n[go-gost/gostctl](https://github.com/go-gost/gostctl)\n\n### WebUI\n\n[go-gost/gost-ui](https://github.com/go-gost/gost-ui)\n\n### Shadowsocks Android插件\n\n[hamid-nazari/ShadowsocksGostPlugin](https://github.com/hamid-nazari/ShadowsocksGostPlugin)\n\n## 帮助与支持\n\nWiki站点：[https://gost.run](https://gost.run)\n\nYouTube: [https://www.youtube.com/@gost-tunnel](https://www.youtube.com/@gost-tunnel)\n\nTelegram：[https://t.me/gogost](https://t.me/gogost)\n\nGoogle讨论组：[https://groups.google.com/d/forum/go-gost](https://groups.google.com/d/forum/go-gost)\n\n旧版入口：[v2.gost.run](https://v2.gost.run)\n"
  },
  {
    "path": "README_en.md",
    "content": "# GO Simple Tunnel\n\n### A simple security tunnel written in golang\n\n[![en](https://img.shields.io/badge/English%20README-green)](README_en.md) [![zh](https://img.shields.io/badge/Chinese%20README-gray)](README.md)\n\n## Features\n\n- [x] [Listening on multiple ports](https://gost.run/en/getting-started/quick-start/)\n- [x] [Multi-level forwarding chain](https://gost.run/en/concepts/chain/)\n- [x] Rich protocol\n- [x] [TCP/UDP port forwarding](https://gost.run/en/tutorials/port-forwarding/)\n- [x] [Reverse Proxy](https://gost.run/en/tutorials/reverse-proxy/) and [Tunnel](https://gost.run/en/tutorials/reverse-proxy-tunnel/)\n- [x] [TCP/UDP transparent proxy](https://gost.run/en/tutorials/redirect/)\n- [x] DNS [resolver](https://gost.run/en/concepts/resolver/) and [proxy](https://gost.run/en/tutorials/dns/)\n- [x] [TUN/TAP device](https://gost.run/en/tutorials/tuntap/) and [TUN2SOCKS](https://gost.run/en/tutorials/tungo/)\n- [x] [Load balancing](https://gost.run/en/concepts/selector/)\n- [x] [Routing control](https://gost.run/en/concepts/bypass/)\n- [x] [Admission control](https://gost.run/en/concepts/limiter/)\n- [x] [Bandwidth/Rate Limiter](https://gost.run/en/concepts/limiter/)\n- [x] [Plugin System](https://gost.run/en/concepts/plugin/)\n- [x] [Prometheus metrics](https://gost.run/en/tutorials/metrics/)\n- [x] [Dynamic configuration](https://gost.run/en/tutorials/api/config/)\n- [x] [Web API](https://gost.run/en/tutorials/api/overview/)\n- [x] [GUI](https://github.com/go-gost/gostctl)/[WebUI](https://github.com/go-gost/gost-ui)\n\n## Overview\n\n![Overview](https://gost.run/images/overview.png)\n\nThere are three main ways to use GOST as a tunnel.\n\n### Proxy\n\nAs a proxy service to access the network, multiple protocols can be used in combination to form a forwarding chain for traffic forwarding.\n\n![Proxy](https://gost.run/images/proxy.png)\n\n### Port Forwarding\n\nMapping the port of one service to the port of another service, you can also use a combination of multiple protocols to form a forwarding chain for traffic forwarding.\n\n![Forward](https://gost.run/images/forward.png)\n\n### Reverse Proxy\n\nUse tunnel and intranet penetration to expose local services behind NAT or firewall to public network for access.\n\n![Reverse Proxy](https://gost.run/images/reverse-proxy.png)\n\n## Installation\n\n### Binary files\n\n[https://github.com/go-gost/gost/releases](https://github.com/go-gost/gost/releases)\n\n### install script\n\n```bash\n# install latest from [https://github.com/go-gost/gost/releases](https://github.com/go-gost/gost/releases)\nbash <(curl -fsSL https://github.com/go-gost/gost/raw/master/install.sh) --install\n```\n```bash\n# select version for install \nbash <(curl -fsSL https://github.com/go-gost/gost/raw/master/install.sh)\n```\n\n### From source\n\n```\ngit clone https://github.com/go-gost/gost.git\ncd gost/cmd/gost\ngo build\n```\n\n### Docker\n\n```\ndocker run --rm gogost/gost -V\n```\n\n## Tools\n\n### GUI\n\n[go-gost/gostctl](https://github.com/go-gost/gostctl)\n\n### WebUI\n\n[go-gost/gost-ui](https://github.com/go-gost/gost-ui)\n\n### Shadowsocks Android\n\n[hamid-nazari/ShadowsocksGostPlugin](https://github.com/hamid-nazari/ShadowsocksGostPlugin)\n\n## Support\n\nWiki: [https://gost.run](https://gost.run/en/)\n\nYouTube: [https://www.youtube.com/@gost-tunnel](https://www.youtube.com/@gost-tunnel)\n\nTelegram: [https://t.me/gogost](https://t.me/gogost)\n\nGoogle group: [https://groups.google.com/d/forum/go-gost](https://groups.google.com/d/forum/go-gost)\n\nLegacy version: [v2.gost.run](https://v2.gost.run/en/)\n"
  },
  {
    "path": "cmd/gost/main.go",
    "content": "package main\n\nimport (\n\t\"context\"\n\t\"flag\"\n\t\"fmt\"\n\t\"log\"\n\t_ \"net/http/pprof\"\n\t\"os\"\n\t\"os/exec\"\n\t\"runtime\"\n\t\"strings\"\n\t\"sync\"\n\n\t\"github.com/go-gost/core/logger\"\n\txlogger \"github.com/go-gost/x/logger\"\n\t\"github.com/judwhite/go-svc\"\n)\n\ntype stringList []string\n\nfunc (l *stringList) String() string {\n\treturn fmt.Sprintf(\"%s\", *l)\n}\nfunc (l *stringList) Set(value string) error {\n\t*l = append(*l, value)\n\treturn nil\n}\n\nvar (\n\tcfgFile      string\n\toutputFormat string\n\tservices     stringList\n\tnodes        stringList\n\tdebug        bool\n\ttrace        bool\n\tapiAddr      string\n\tmetricsAddr  string\n)\n\nfunc init() {\n\tlog.SetFlags(log.LstdFlags | log.Lshortfile | log.Lmicroseconds)\n\n\targs := strings.Join(os.Args[1:], \"  \")\n\n\tif strings.Contains(args, \" -- \") {\n\t\tvar (\n\t\t\twg  sync.WaitGroup\n\t\t\tret int\n\t\t)\n\n\t\tctx, cancel := context.WithCancel(context.Background())\n\t\tdefer cancel()\n\n\t\tfor wid, wargs := range strings.Split(\" \"+args+\" \", \" -- \") {\n\t\t\twg.Add(1)\n\t\t\tgo func(wid int, wargs string) {\n\t\t\t\tdefer wg.Done()\n\t\t\t\tdefer cancel()\n\t\t\t\tworker(wid, strings.Split(wargs, \"  \"), &ctx, &ret)\n\t\t\t}(wid, strings.TrimSpace(wargs))\n\t\t}\n\n\t\twg.Wait()\n\n\t\tos.Exit(ret)\n\t}\n}\n\nfunc worker(id int, args []string, ctx *context.Context, ret *int) {\n\tcmd := exec.CommandContext(*ctx, os.Args[0], args...)\n\n\tcmd.Stdout = os.Stdout\n\tcmd.Stderr = os.Stderr\n\tcmd.Env = append(os.Environ(), fmt.Sprintf(\"_GOST_ID=%d\", id))\n\n\tif err := cmd.Run(); err != nil {\n\t\tlog.Fatal(err)\n\t}\n\tif cmd.ProcessState.Exited() {\n\t\t*ret = cmd.ProcessState.ExitCode()\n\t}\n}\n\nfunc init() {\n\tvar printVersion bool\n\n\tflag.Var(&services, \"L\", \"service list\")\n\tflag.Var(&nodes, \"F\", \"chain node list\")\n\tflag.StringVar(&cfgFile, \"C\", \"\", \"configuration file\")\n\tflag.BoolVar(&printVersion, \"V\", false, \"print version\")\n\tflag.StringVar(&outputFormat, \"O\", \"\", \"output format, one of yaml|json format\")\n\tflag.BoolVar(&debug, \"D\", false, \"debug mode\")\n\tflag.BoolVar(&trace, \"DD\", false, \"trace mode\")\n\tflag.StringVar(&apiAddr, \"api\", \"\", \"api service address\")\n\tflag.StringVar(&metricsAddr, \"metrics\", \"\", \"metrics service address\")\n\tflag.Parse()\n\n\tif printVersion {\n\t\tfmt.Fprintf(os.Stdout, \"gost %s (%s %s/%s)\\n\",\n\t\t\tversion, runtime.Version(), runtime.GOOS, runtime.GOARCH)\n\t\tos.Exit(0)\n\t}\n}\n\nfunc main() {\n\tlog := xlogger.NewLogger()\n\tlogger.SetDefault(log)\n\n\tp := &program{}\n\n\tif err := svc.Run(p); err != nil {\n\t\tlogger.Default().Fatal(err)\n\t}\n}\n"
  },
  {
    "path": "cmd/gost/program.go",
    "content": "package main\n\nimport (\n\t\"context\"\n\t\"errors\"\n\t\"net/http\"\n\t\"os\"\n\t\"os/signal\"\n\t\"strings\"\n\t\"syscall\"\n\n\t\"github.com/go-gost/core/auth\"\n\t\"github.com/go-gost/core/logger\"\n\t\"github.com/go-gost/core/service\"\n\tapi_service \"github.com/go-gost/x/api/service\"\n\txauth \"github.com/go-gost/x/auth\"\n\t\"github.com/go-gost/x/config\"\n\t\"github.com/go-gost/x/config/loader\"\n\tauth_parser \"github.com/go-gost/x/config/parsing/auth\"\n\t\"github.com/go-gost/x/config/parsing/parser\"\n\txmetrics \"github.com/go-gost/x/metrics\"\n\tmetrics \"github.com/go-gost/x/metrics/service\"\n\t\"github.com/go-gost/x/registry\"\n\t\"github.com/judwhite/go-svc\"\n)\n\ntype program struct {\n\tsrvApi       service.Service\n\tsrvMetrics   service.Service\n\tsrvProfiling *http.Server\n\n\tcancel context.CancelFunc\n}\n\nfunc (p *program) Init(env svc.Environment) error {\n\tparser.Init(parser.Args{\n\t\tCfgFile:     cfgFile,\n\t\tServices:    services,\n\t\tNodes:       nodes,\n\t\tDebug:       debug,\n\t\tTrace:       trace,\n\t\tApiAddr:     apiAddr,\n\t\tMetricsAddr: metricsAddr,\n\t})\n\n\treturn nil\n}\n\nfunc (p *program) Start() error {\n\tcfg, err := parser.Parse()\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tif outputFormat != \"\" {\n\t\tif err := cfg.Write(os.Stdout, outputFormat); err != nil {\n\t\t\treturn err\n\t\t}\n\t\tos.Exit(0)\n\t}\n\n\tconfig.Set(cfg)\n\n\tif err := loader.Load(cfg); err != nil {\n\t\treturn err\n\t}\n\n\tif err := p.run(cfg); err != nil {\n\t\treturn err\n\t}\n\n\tctx, cancel := context.WithCancel(context.Background())\n\tp.cancel = cancel\n\tgo p.reload(ctx)\n\n\treturn nil\n}\n\nfunc (p *program) run(cfg *config.Config) error {\n\tfor _, svc := range registry.ServiceRegistry().GetAll() {\n\t\tsvc := svc\n\t\tgo func() {\n\t\t\tsvc.Serve()\n\t\t}()\n\t}\n\n\tif p.srvApi != nil {\n\t\tp.srvApi.Close()\n\t\tp.srvApi = nil\n\t}\n\tif cfg.API != nil {\n\t\ts, err := buildApiService(cfg.API)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\n\t\tp.srvApi = s\n\n\t\tgo func() {\n\t\t\tdefer s.Close()\n\n\t\t\tlog := logger.Default().WithFields(map[string]any{\"kind\": \"service\", \"service\": \"@api\"})\n\n\t\t\tlog.Info(\"listening on \", s.Addr())\n\t\t\tif err := s.Serve(); !errors.Is(err, http.ErrServerClosed) {\n\t\t\t\tlog.Error(err)\n\t\t\t}\n\t\t}()\n\t}\n\n\tif p.srvMetrics != nil {\n\t\tp.srvMetrics.Close()\n\t\tp.srvMetrics = nil\n\t}\n\tif cfg.Metrics != nil && cfg.Metrics.Addr != \"\" {\n\t\ts, err := buildMetricsService(cfg.Metrics)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\n\t\tp.srvMetrics = s\n\n\t\txmetrics.Enable(true)\n\n\t\tgo func() {\n\t\t\tdefer s.Close()\n\n\t\t\tlog := logger.Default().WithFields(map[string]any{\"kind\": \"service\", \"service\": \"@metrics\"})\n\n\t\t\tlog.Info(\"listening on \", s.Addr())\n\t\t\tif err := s.Serve(); !errors.Is(err, http.ErrServerClosed) {\n\t\t\t\tlog.Error(err)\n\t\t\t}\n\t\t}()\n\t}\n\n\tif p.srvProfiling != nil {\n\t\tp.srvProfiling.Close()\n\t\tp.srvProfiling = nil\n\t}\n\tif cfg.Profiling != nil {\n\t\taddr := cfg.Profiling.Addr\n\t\tif addr == \"\" {\n\t\t\taddr = \":6060\"\n\t\t}\n\t\ts := &http.Server{\n\t\t\tAddr: addr,\n\t\t}\n\t\tp.srvProfiling = s\n\n\t\tgo func() {\n\t\t\tdefer s.Close()\n\n\t\t\tlog := logger.Default().WithFields(map[string]any{\"kind\": \"service\", \"service\": \"@profiling\"})\n\n\t\t\tlog.Info(\"listening on \", addr)\n\t\t\tif err := s.ListenAndServe(); !errors.Is(err, http.ErrServerClosed) {\n\t\t\t\tlog.Error(err)\n\t\t\t}\n\t\t}()\n\t}\n\n\treturn nil\n}\n\nfunc (p *program) Stop() error {\n\tif p.cancel != nil {\n\t\tp.cancel()\n\t}\n\n\tfor name, srv := range registry.ServiceRegistry().GetAll() {\n\t\tsrv.Close()\n\t\tlogger.Default().Debugf(\"service %s shutdown\", name)\n\t}\n\n\tif p.srvApi != nil {\n\t\tp.srvApi.Close()\n\t\tlogger.Default().Debug(\"service @api shutdown\")\n\t}\n\tif p.srvMetrics != nil {\n\t\tp.srvMetrics.Close()\n\t\tlogger.Default().Debug(\"service @metrics shutdown\")\n\t}\n\tif p.srvProfiling != nil {\n\t\tp.srvProfiling.Close()\n\t\tlogger.Default().Debug(\"service @profiling shutdown\")\n\t}\n\n\treturn nil\n}\n\nfunc (p *program) reload(ctx context.Context) {\n\tc := make(chan os.Signal, 1)\n\tsignal.Notify(c, syscall.SIGHUP)\n\n\tfor {\n\t\tselect {\n\t\tcase <-c:\n\t\t\tif err := p.reloadConfig(); err != nil {\n\t\t\t\tlogger.Default().Error(err)\n\t\t\t} else {\n\t\t\t\tlogger.Default().Info(\"config reloaded\")\n\t\t\t}\n\n\t\tcase <-ctx.Done():\n\t\t\treturn\n\t\t}\n\t}\n}\n\nfunc (p *program) reloadConfig() error {\n\tcfg, err := parser.Parse()\n\tif err != nil {\n\t\treturn err\n\t}\n\tconfig.Set(cfg)\n\n\tif err := loader.Load(cfg); err != nil {\n\t\treturn err\n\t}\n\n\tif err := p.run(cfg); err != nil {\n\t\treturn err\n\t}\n\n\treturn nil\n}\n\nfunc buildApiService(cfg *config.APIConfig) (service.Service, error) {\n\tvar authers []auth.Authenticator\n\tif auther := auth_parser.ParseAutherFromAuth(cfg.Auth); auther != nil {\n\t\tauthers = append(authers, auther)\n\t}\n\tif cfg.Auther != \"\" {\n\t\tauthers = append(authers, registry.AutherRegistry().Get(cfg.Auther))\n\t}\n\n\tvar auther auth.Authenticator\n\tif len(authers) > 0 {\n\t\tauther = xauth.AuthenticatorGroup(authers...)\n\t}\n\n\tnetwork := \"tcp\"\n\taddr := cfg.Addr\n\tif strings.HasPrefix(addr, \"unix://\") {\n\t\tnetwork = \"unix\"\n\t\taddr = strings.TrimPrefix(addr, \"unix://\")\n\t}\n\treturn api_service.NewService(\n\t\tnetwork, addr,\n\t\tapi_service.PathPrefixOption(cfg.PathPrefix),\n\t\tapi_service.AccessLogOption(cfg.AccessLog),\n\t\tapi_service.AutherOption(auther),\n\t)\n}\n\nfunc buildMetricsService(cfg *config.MetricsConfig) (service.Service, error) {\n\tauther := auth_parser.ParseAutherFromAuth(cfg.Auth)\n\tif cfg.Auther != \"\" {\n\t\tauther = registry.AutherRegistry().Get(cfg.Auther)\n\t}\n\n\tnetwork := \"tcp\"\n\taddr := cfg.Addr\n\tif strings.HasPrefix(addr, \"unix://\") {\n\t\tnetwork = \"unix\"\n\t\taddr = strings.TrimPrefix(addr, \"unix://\")\n\t}\n\treturn metrics.NewService(\n\t\tnetwork, addr,\n\t\tmetrics.PathOption(cfg.Path),\n\t\tmetrics.AutherOption(auther),\n\t)\n}\n"
  },
  {
    "path": "cmd/gost/register.go",
    "content": "package main\n\nimport (\n\t// Register connectors\n\t_ \"github.com/go-gost/x/connector/direct\"\n\t_ \"github.com/go-gost/x/connector/forward\"\n\t_ \"github.com/go-gost/x/connector/http\"\n\t_ \"github.com/go-gost/x/connector/http2\"\n\t_ \"github.com/go-gost/x/connector/relay\"\n\t_ \"github.com/go-gost/x/connector/router\"\n\t_ \"github.com/go-gost/x/connector/serial\"\n\t_ \"github.com/go-gost/x/connector/sni\"\n\t_ \"github.com/go-gost/x/connector/socks/v4\"\n\t_ \"github.com/go-gost/x/connector/socks/v5\"\n\t_ \"github.com/go-gost/x/connector/ss\"\n\t_ \"github.com/go-gost/x/connector/ss/udp\"\n\t_ \"github.com/go-gost/x/connector/sshd\"\n\t_ \"github.com/go-gost/x/connector/tcp\"\n\t_ \"github.com/go-gost/x/connector/tunnel\"\n\t_ \"github.com/go-gost/x/connector/unix\"\n\n\t// Register dialers\n\t_ \"github.com/go-gost/x/dialer/direct\"\n\t_ \"github.com/go-gost/x/dialer/dtls\"\n\t_ \"github.com/go-gost/x/dialer/ftcp\"\n\t_ \"github.com/go-gost/x/dialer/grpc\"\n\t_ \"github.com/go-gost/x/dialer/http2\"\n\t_ \"github.com/go-gost/x/dialer/http2/h2\"\n\t_ \"github.com/go-gost/x/dialer/http3\"\n\t_ \"github.com/go-gost/x/dialer/http3/wt\"\n\t_ \"github.com/go-gost/x/dialer/icmp\"\n\t_ \"github.com/go-gost/x/dialer/kcp\"\n\t_ \"github.com/go-gost/x/dialer/mtcp\"\n\t_ \"github.com/go-gost/x/dialer/mtls\"\n\t_ \"github.com/go-gost/x/dialer/mws\"\n\t_ \"github.com/go-gost/x/dialer/obfs/http\"\n\t_ \"github.com/go-gost/x/dialer/obfs/tls\"\n\t_ \"github.com/go-gost/x/dialer/pht\"\n\t_ \"github.com/go-gost/x/dialer/quic\"\n\t_ \"github.com/go-gost/x/dialer/serial\"\n\t_ \"github.com/go-gost/x/dialer/ssh\"\n\t_ \"github.com/go-gost/x/dialer/sshd\"\n\t_ \"github.com/go-gost/x/dialer/tcp\"\n\t_ \"github.com/go-gost/x/dialer/tls\"\n\t_ \"github.com/go-gost/x/dialer/udp\"\n\t_ \"github.com/go-gost/x/dialer/unix\"\n\t_ \"github.com/go-gost/x/dialer/ws\"\n\n\t// Register handlers\n\t_ \"github.com/go-gost/x/handler/api\"\n\t_ \"github.com/go-gost/x/handler/auto\"\n\t_ \"github.com/go-gost/x/handler/dns\"\n\t_ \"github.com/go-gost/x/handler/file\"\n\t_ \"github.com/go-gost/x/handler/forward/local\"\n\t_ \"github.com/go-gost/x/handler/forward/remote\"\n\t_ \"github.com/go-gost/x/handler/http\"\n\t_ \"github.com/go-gost/x/handler/http2\"\n\t_ \"github.com/go-gost/x/handler/http3\"\n\t_ \"github.com/go-gost/x/handler/metrics\"\n\t_ \"github.com/go-gost/x/handler/redirect/tcp\"\n\t_ \"github.com/go-gost/x/handler/redirect/udp\"\n\t_ \"github.com/go-gost/x/handler/relay\"\n\t_ \"github.com/go-gost/x/handler/router\"\n\t_ \"github.com/go-gost/x/handler/serial\"\n\t_ \"github.com/go-gost/x/handler/sni\"\n\t_ \"github.com/go-gost/x/handler/socks/v4\"\n\t_ \"github.com/go-gost/x/handler/socks/v5\"\n\t_ \"github.com/go-gost/x/handler/ss\"\n\t_ \"github.com/go-gost/x/handler/ss/udp\"\n\t_ \"github.com/go-gost/x/handler/sshd\"\n\t_ \"github.com/go-gost/x/handler/tap\"\n\t_ \"github.com/go-gost/x/handler/tun\"\n\t_ \"github.com/go-gost/x/handler/tungo\"\n\t_ \"github.com/go-gost/x/handler/tunnel\"\n\t_ \"github.com/go-gost/x/handler/unix\"\n\n\t// Register listeners\n\t_ \"github.com/go-gost/x/listener/dns\"\n\t_ \"github.com/go-gost/x/listener/dtls\"\n\t_ \"github.com/go-gost/x/listener/ftcp\"\n\t_ \"github.com/go-gost/x/listener/grpc\"\n\t_ \"github.com/go-gost/x/listener/http2\"\n\t_ \"github.com/go-gost/x/listener/http2/h2\"\n\t_ \"github.com/go-gost/x/listener/http3\"\n\t_ \"github.com/go-gost/x/listener/http3/h3\"\n\t_ \"github.com/go-gost/x/listener/http3/wt\"\n\t_ \"github.com/go-gost/x/listener/icmp\"\n\t_ \"github.com/go-gost/x/listener/kcp\"\n\t_ \"github.com/go-gost/x/listener/mtcp\"\n\t_ \"github.com/go-gost/x/listener/mtls\"\n\t_ \"github.com/go-gost/x/listener/mws\"\n\t_ \"github.com/go-gost/x/listener/obfs/http\"\n\t_ \"github.com/go-gost/x/listener/obfs/tls\"\n\t_ \"github.com/go-gost/x/listener/pht\"\n\t_ \"github.com/go-gost/x/listener/quic\"\n\t_ \"github.com/go-gost/x/listener/redirect/tcp\"\n\t_ \"github.com/go-gost/x/listener/redirect/udp\"\n\t_ \"github.com/go-gost/x/listener/rtcp\"\n\t_ \"github.com/go-gost/x/listener/rudp\"\n\t_ \"github.com/go-gost/x/listener/serial\"\n\t_ \"github.com/go-gost/x/listener/ssh\"\n\t_ \"github.com/go-gost/x/listener/sshd\"\n\t_ \"github.com/go-gost/x/listener/tap\"\n\t_ \"github.com/go-gost/x/listener/tcp\"\n\t_ \"github.com/go-gost/x/listener/tls\"\n\t_ \"github.com/go-gost/x/listener/tun\"\n\t_ \"github.com/go-gost/x/listener/tungo\"\n\t_ \"github.com/go-gost/x/listener/udp\"\n\t_ \"github.com/go-gost/x/listener/unix\"\n\t_ \"github.com/go-gost/x/listener/ws\"\n)\n"
  },
  {
    "path": "cmd/gost/version.go",
    "content": "package main\n\nvar (\n\tversion = \"3.2.6\"\n)\n"
  },
  {
    "path": "go.mod",
    "content": "module github.com/go-gost/gost\n\ngo 1.24.0\n\ntoolchain go1.24.5\n\nrequire (\n\tgithub.com/go-gost/core v0.3.3\n\tgithub.com/go-gost/x v0.8.1\n\tgithub.com/judwhite/go-svc v1.2.1\n)\n\nrequire (\n\tgithub.com/alecthomas/units v0.0.0-20211218093645-b94a6e3cc137 // indirect\n\tgithub.com/alessio/shellescape v1.4.1 // indirect\n\tgithub.com/asaskevich/govalidator v0.0.0-20210307081110-f21760c49a8d // indirect\n\tgithub.com/beorn7/perks v1.0.1 // indirect\n\tgithub.com/bytedance/sonic v1.11.6 // indirect\n\tgithub.com/bytedance/sonic/loader v0.1.1 // indirect\n\tgithub.com/cespare/xxhash/v2 v2.3.0 // indirect\n\tgithub.com/cloudwego/base64x v0.1.4 // indirect\n\tgithub.com/cloudwego/iasm v0.2.0 // indirect\n\tgithub.com/coreos/go-iptables v0.5.0 // indirect\n\tgithub.com/danieljoos/wincred v1.2.0 // indirect\n\tgithub.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f // indirect\n\tgithub.com/fsnotify/fsnotify v1.7.0 // indirect\n\tgithub.com/gabriel-vasile/mimetype v1.4.3 // indirect\n\tgithub.com/gin-contrib/cors v1.7.2 // indirect\n\tgithub.com/gin-contrib/sse v0.1.0 // indirect\n\tgithub.com/gin-gonic/gin v1.10.1 // indirect\n\tgithub.com/go-gost/go-shadowsocks2 v0.1.1 // indirect\n\tgithub.com/go-gost/gosocks4 v0.0.1 // indirect\n\tgithub.com/go-gost/gosocks5 v0.4.2 // indirect\n\tgithub.com/go-gost/plugin v0.2.1 // indirect\n\tgithub.com/go-gost/relay v0.5.0 // indirect\n\tgithub.com/go-gost/tls-dissector v0.1.1 // indirect\n\tgithub.com/go-playground/locales v0.14.1 // indirect\n\tgithub.com/go-playground/universal-translator v0.18.1 // indirect\n\tgithub.com/go-playground/validator/v10 v10.20.0 // indirect\n\tgithub.com/go-redis/redis/v8 v8.11.5 // indirect\n\tgithub.com/gobwas/glob v0.2.3 // indirect\n\tgithub.com/goccy/go-json v0.10.2 // indirect\n\tgithub.com/godbus/dbus/v5 v5.1.0 // indirect\n\tgithub.com/golang/snappy v0.0.4 // indirect\n\tgithub.com/google/btree v1.1.3 // indirect\n\tgithub.com/google/gopacket v1.1.19 // indirect\n\tgithub.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510 // indirect\n\tgithub.com/google/uuid v1.6.0 // indirect\n\tgithub.com/gorilla/websocket v1.5.3 // indirect\n\tgithub.com/gravitational/trace v1.1.16-0.20220114165159-14a9a7dd6aaf // indirect\n\tgithub.com/hashicorp/hcl v1.0.0 // indirect\n\tgithub.com/jonboulle/clockwork v0.2.2 // indirect\n\tgithub.com/json-iterator/go v1.1.12 // indirect\n\tgithub.com/klauspost/cpuid/v2 v2.2.7 // indirect\n\tgithub.com/klauspost/reedsolomon v1.11.8 // indirect\n\tgithub.com/leodido/go-urn v1.4.0 // indirect\n\tgithub.com/magiconair/properties v1.8.7 // indirect\n\tgithub.com/mattn/go-isatty v0.0.20 // indirect\n\tgithub.com/miekg/dns v1.1.61 // indirect\n\tgithub.com/mitchellh/go-homedir v1.1.0 // indirect\n\tgithub.com/mitchellh/mapstructure v1.5.0 // indirect\n\tgithub.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect\n\tgithub.com/modern-go/reflect2 v1.0.2 // indirect\n\tgithub.com/patrickmn/go-cache v2.1.0+incompatible // indirect\n\tgithub.com/pelletier/go-toml/v2 v2.2.2 // indirect\n\tgithub.com/pion/dtls/v2 v2.2.6 // indirect\n\tgithub.com/pion/logging v0.2.2 // indirect\n\tgithub.com/pion/transport/v2 v2.0.2 // indirect\n\tgithub.com/pion/udp/v2 v2.0.1 // indirect\n\tgithub.com/pires/go-proxyproto v0.8.1 // indirect\n\tgithub.com/pkg/errors v0.9.1 // indirect\n\tgithub.com/prometheus/client_golang v1.19.1 // indirect\n\tgithub.com/prometheus/client_model v0.6.0 // indirect\n\tgithub.com/prometheus/common v0.48.0 // indirect\n\tgithub.com/prometheus/procfs v0.12.0 // indirect\n\tgithub.com/quic-go/qpack v0.5.1 // indirect\n\tgithub.com/quic-go/quic-go v0.54.1 // indirect\n\tgithub.com/quic-go/webtransport-go v0.9.0 // indirect\n\tgithub.com/riobard/go-bloom v0.0.0-20200614022211-cdc8013cb5b3 // indirect\n\tgithub.com/rs/xid v1.3.0 // indirect\n\tgithub.com/sagikazarmark/locafero v0.4.0 // indirect\n\tgithub.com/sagikazarmark/slog-shim v0.1.0 // indirect\n\tgithub.com/shadowsocks/go-shadowsocks2 v0.1.6-0.20241020092332-e1fe9ea73740 // indirect\n\tgithub.com/sirupsen/logrus v1.9.3 // indirect\n\tgithub.com/songgao/water v0.0.0-20200317203138-2b4b6d7c09d8 // indirect\n\tgithub.com/sourcegraph/conc v0.3.0 // indirect\n\tgithub.com/spf13/afero v1.11.0 // indirect\n\tgithub.com/spf13/cast v1.6.0 // indirect\n\tgithub.com/spf13/pflag v1.0.5 // indirect\n\tgithub.com/spf13/viper v1.19.0 // indirect\n\tgithub.com/subosito/gotenv v1.6.0 // indirect\n\tgithub.com/templexxx/cpu v0.1.1 // indirect\n\tgithub.com/templexxx/xorsimd v0.4.3 // indirect\n\tgithub.com/tjfoc/gmsm v1.4.1 // indirect\n\tgithub.com/twitchyliquid64/golang-asm v0.15.1 // indirect\n\tgithub.com/ugorji/go/codec v1.2.12 // indirect\n\tgithub.com/vishvananda/netlink v1.1.1-0.20211118161826-650dca95af54 // indirect\n\tgithub.com/vishvananda/netns v0.0.4 // indirect\n\tgithub.com/vulcand/predicate v1.2.0 // indirect\n\tgithub.com/xjasonlyu/tun2socks/v2 v2.6.0 // indirect\n\tgithub.com/xtaci/kcp-go/v5 v5.6.5 // indirect\n\tgithub.com/xtaci/smux v1.5.31 // indirect\n\tgithub.com/xtaci/tcpraw v1.2.25 // indirect\n\tgithub.com/yl2chen/cidranger v1.0.2 // indirect\n\tgithub.com/zalando/go-keyring v0.2.4 // indirect\n\tgithub.com/zeebo/blake3 v0.2.4 // indirect\n\tgo.uber.org/mock v0.5.0 // indirect\n\tgo.uber.org/multierr v1.11.0 // indirect\n\tgolang.org/x/arch v0.8.0 // indirect\n\tgolang.org/x/crypto v0.45.0 // indirect\n\tgolang.org/x/exp v0.0.0-20241210194714-1829a127f884 // indirect\n\tgolang.org/x/mod v0.29.0 // indirect\n\tgolang.org/x/net v0.47.0 // indirect\n\tgolang.org/x/sync v0.18.0 // indirect\n\tgolang.org/x/sys v0.38.0 // indirect\n\tgolang.org/x/term v0.37.0 // indirect\n\tgolang.org/x/text v0.31.0 // indirect\n\tgolang.org/x/time v0.11.0 // indirect\n\tgolang.org/x/tools v0.38.0 // indirect\n\tgolang.zx2c4.com/wintun v0.0.0-20230126152724-0fa3db229ce2 // indirect\n\tgolang.zx2c4.com/wireguard v0.0.0-20250521234502-f333402bd9cb // indirect\n\tgoogle.golang.org/genproto/googleapis/rpc v0.0.0-20240903143218-8af14fe29dc1 // indirect\n\tgoogle.golang.org/grpc v1.67.1 // indirect\n\tgoogle.golang.org/protobuf v1.35.1 // indirect\n\tgopkg.in/ini.v1 v1.67.0 // indirect\n\tgopkg.in/natefinch/lumberjack.v2 v2.2.1 // indirect\n\tgopkg.in/yaml.v3 v3.0.1 // indirect\n\tgvisor.dev/gvisor v0.0.0-20250523182742-eede7a881b20 // indirect\n)\n"
  },
  {
    "path": "go.sum",
    "content": "cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=\ngithub.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=\ngithub.com/alecthomas/units v0.0.0-20211218093645-b94a6e3cc137 h1:s6gZFSlWYmbqAuRjVTiNNhvNRfY2Wxp9nhfyel4rklc=\ngithub.com/alecthomas/units v0.0.0-20211218093645-b94a6e3cc137/go.mod h1:OMCwj8VM1Kc9e19TLln2VL61YJF0x1XFtfdL4JdbSyE=\ngithub.com/alessio/shellescape v1.4.1 h1:V7yhSDDn8LP4lc4jS8pFkt0zCnzVJlG5JXy9BVKJUX0=\ngithub.com/alessio/shellescape v1.4.1/go.mod h1:PZAiSCk0LJaZkiCSkPv8qIobYglO3FPpyFjDCtHLS30=\ngithub.com/asaskevich/govalidator v0.0.0-20210307081110-f21760c49a8d h1:Byv0BzEl3/e6D5CLfI0j/7hiIEtvGVFPCZ7Ei2oq8iQ=\ngithub.com/asaskevich/govalidator v0.0.0-20210307081110-f21760c49a8d/go.mod h1:WaHUgvxTVq04UNunO+XhnAqY/wQc+bxr74GqbsZ/Jqw=\ngithub.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM=\ngithub.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw=\ngithub.com/bytedance/sonic v1.11.6 h1:oUp34TzMlL+OY1OUWxHqsdkgC/Zfc85zGqw9siXjrc0=\ngithub.com/bytedance/sonic v1.11.6/go.mod h1:LysEHSvpvDySVdC2f87zGWf6CIKJcAvqab1ZaiQtds4=\ngithub.com/bytedance/sonic/loader v0.1.1 h1:c+e5Pt1k/cy5wMveRDyk2X4B9hF4g7an8N3zCYjJFNM=\ngithub.com/bytedance/sonic/loader v0.1.1/go.mod h1:ncP89zfokxS5LZrJxl5z0UJcsk4M4yY2JpfqGeCtNLU=\ngithub.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=\ngithub.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs=\ngithub.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=\ngithub.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw=\ngithub.com/cloudwego/base64x v0.1.4 h1:jwCgWpFanWmN8xoIUHa2rtzmkd5J2plF/dnLS6Xd/0Y=\ngithub.com/cloudwego/base64x v0.1.4/go.mod h1:0zlkT4Wn5C6NdauXdJRhSKRlJvmclQ1hhJgA0rcu/8w=\ngithub.com/cloudwego/iasm v0.2.0 h1:1KNIy1I1H9hNNFEEH3DVnI4UujN+1zjpuk6gwHLTssg=\ngithub.com/cloudwego/iasm v0.2.0/go.mod h1:8rXZaNYT2n95jn+zTI1sDr+IgcD2GVs0nlbbQPiEFhY=\ngithub.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc=\ngithub.com/coreos/go-iptables v0.5.0 h1:mw6SAibtHKZcNzAsOxjoHIG0gy5YFHhypWSSNc6EjbQ=\ngithub.com/coreos/go-iptables v0.5.0/go.mod h1:/mVI274lEDI2ns62jHCDnCyBF9Iwsmekav8Dbxlm1MU=\ngithub.com/danieljoos/wincred v1.2.0 h1:ozqKHaLK0W/ii4KVbbvluM91W2H3Sh0BncbUNPS7jLE=\ngithub.com/danieljoos/wincred v1.2.0/go.mod h1:FzQLLMKBFdvu+osBrnFODiv32YGwCfx0SkRa/eYHgec=\ngithub.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=\ngithub.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=\ngithub.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM=\ngithub.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=\ngithub.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f h1:lO4WD4F/rVNCu3HqELle0jiPLLBs70cWOduZpkS1E78=\ngithub.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f/go.mod h1:cuUVRXasLTGF7a8hSLbxyZXjz+1KgoB3wDUb6vlszIc=\ngithub.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=\ngithub.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=\ngithub.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98=\ngithub.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c=\ngithub.com/francoispqt/gojay v1.2.13 h1:d2m3sFjloqoIUQU3TsHBgj6qg/BVGlTBeHDUmyJnXKk=\ngithub.com/francoispqt/gojay v1.2.13/go.mod h1:ehT5mTG4ua4581f1++1WLG0vPdaA9HaiDsoyrBGkyDY=\ngithub.com/frankban/quicktest v1.14.6 h1:7Xjx+VpznH+oBnejlPUj8oUpdxnVs4f8XU8WnHkI4W8=\ngithub.com/frankban/quicktest v1.14.6/go.mod h1:4ptaffx2x8+WTWXmUCuVU6aPUX1/Mz7zb5vbUoiM6w0=\ngithub.com/fsnotify/fsnotify v1.7.0 h1:8JEhPFa5W2WU7YfeZzPNqzMP6Lwt7L2715Ggo0nosvA=\ngithub.com/fsnotify/fsnotify v1.7.0/go.mod h1:40Bi/Hjc2AVfZrqy+aj+yEI+/bRxZnMJyTJwOpGvigM=\ngithub.com/gabriel-vasile/mimetype v1.4.3 h1:in2uUcidCuFcDKtdcBxlR0rJ1+fsokWf+uqxgUFjbI0=\ngithub.com/gabriel-vasile/mimetype v1.4.3/go.mod h1:d8uq/6HKRL6CGdk+aubisF/M5GcPfT7nKyLpA0lbSSk=\ngithub.com/gin-contrib/cors v1.7.2 h1:oLDHxdg8W/XDoN/8zamqk/Drgt4oVZDvaV0YmvVICQw=\ngithub.com/gin-contrib/cors v1.7.2/go.mod h1:SUJVARKgQ40dmrzgXEVxj2m7Ig1v1qIboQkPDTQ9t2E=\ngithub.com/gin-contrib/sse v0.1.0 h1:Y/yl/+YNO8GZSjAhjMsSuLt29uWRFHdHYUb5lYOV9qE=\ngithub.com/gin-contrib/sse v0.1.0/go.mod h1:RHrZQHXnP2xjPF+u1gW/2HnVO7nvIa9PG3Gm+fLHvGI=\ngithub.com/gin-gonic/gin v1.10.1 h1:T0ujvqyCSqRopADpgPgiTT63DUQVSfojyME59Ei63pQ=\ngithub.com/gin-gonic/gin v1.10.1/go.mod h1:4PMNQiOhvDRa013RKVbsiNwoyezlm2rm0uX/T7kzp5Y=\ngithub.com/go-gost/core v0.3.3 h1:YN15FQptQoNB0MlMR283C99w2EeGql9Cm+4QVlN6zs0=\ngithub.com/go-gost/core v0.3.3/go.mod h1:WGI43jOka7FAsSAwi/fSMaqxdR+E339ycb4NBGlFr6A=\ngithub.com/go-gost/go-shadowsocks2 v0.1.1 h1:jHHmHXELQmEheXam65yOm5GhXytqgJT9fHeHLuSNSWQ=\ngithub.com/go-gost/go-shadowsocks2 v0.1.1/go.mod h1:866zFNNI3He6Wef1M/IvAjTal74WhcfKfBgRpTlkKys=\ngithub.com/go-gost/gosocks4 v0.0.1 h1:+k1sec8HlELuQV7rWftIkmy8UijzUt2I6t+iMPlGB2s=\ngithub.com/go-gost/gosocks4 v0.0.1/go.mod h1:3B6L47HbU/qugDg4JnoFPHgJXE43Inz8Bah1QaN9qCc=\ngithub.com/go-gost/gosocks5 v0.4.2 h1:IianxHTkACPqCwiOAT3MHoMdSUl+SEPSRu1ikawC1Pc=\ngithub.com/go-gost/gosocks5 v0.4.2/go.mod h1:1G6I7HP7VFVxveGkoK8mnprnJqSqJjdcASKsdUn4Pp4=\ngithub.com/go-gost/plugin v0.2.1 h1:zkkgCZd+/X+jmaDElP7z2fZVTFv+Pjq2DLmnnNWPMFA=\ngithub.com/go-gost/plugin v0.2.1/go.mod h1:oN23l+yGDCIP9G3KnDl/I/0zVGOobZUDCB2Z5yYYXts=\ngithub.com/go-gost/relay v0.5.0 h1:JG1tgy/KWiVXS0ukuVXvbM0kbYuJTWxYpJ5JwzsCf/c=\ngithub.com/go-gost/relay v0.5.0/go.mod h1:lcX+23LCQ3khIeASBo+tJ/WbwXFO32/N5YN6ucuYTG8=\ngithub.com/go-gost/tls-dissector v0.1.1 h1:2zUOTPzCQAUQ54Rpy0UEi3JPMQSYsIFSeFeKrzmkCoU=\ngithub.com/go-gost/tls-dissector v0.1.1/go.mod h1:/9QfdewqmHdaE362Hv5nDaSWLx3pCmtD870d6GaquXs=\ngithub.com/go-gost/x v0.8.1 h1:cfV/wgagsitTjW18c95OlrrFQTyQtjvDD5+MO3IEIjI=\ngithub.com/go-gost/x v0.8.1/go.mod h1:jJJrR+rhU9kCcQnMMwn9BlLzX7YlpWAGb/T1PNAVcN4=\ngithub.com/go-playground/assert/v2 v2.2.0 h1:JvknZsQTYeFEAhQwI4qEt9cyV5ONwRHC+lYKSsYSR8s=\ngithub.com/go-playground/assert/v2 v2.2.0/go.mod h1:VDjEfimB/XKnb+ZQfWdccd7VUvScMdVu0Titje2rxJ4=\ngithub.com/go-playground/locales v0.14.1 h1:EWaQ/wswjilfKLTECiXz7Rh+3BjFhfDFKv/oXslEjJA=\ngithub.com/go-playground/locales v0.14.1/go.mod h1:hxrqLVvrK65+Rwrd5Fc6F2O76J/NuW9t0sjnWqG1slY=\ngithub.com/go-playground/universal-translator v0.18.1 h1:Bcnm0ZwsGyWbCzImXv+pAJnYK9S473LQFuzCbDbfSFY=\ngithub.com/go-playground/universal-translator v0.18.1/go.mod h1:xekY+UJKNuX9WP91TpwSH2VMlDf28Uj24BCp08ZFTUY=\ngithub.com/go-playground/validator/v10 v10.20.0 h1:K9ISHbSaI0lyB2eWMPJo+kOS/FBExVwjEviJTixqxL8=\ngithub.com/go-playground/validator/v10 v10.20.0/go.mod h1:dbuPbCMFw/DrkbEynArYaCwl3amGuJotoKCe95atGMM=\ngithub.com/go-redis/redis/v8 v8.11.5 h1:AcZZR7igkdvfVmQTPnu9WE37LRrO/YrBH5zWyjDC0oI=\ngithub.com/go-redis/redis/v8 v8.11.5/go.mod h1:gREzHqY1hg6oD9ngVRbLStwAWKhA0FEgq8Jd4h5lpwo=\ngithub.com/gobwas/glob v0.2.3 h1:A4xDbljILXROh+kObIiy5kIaPYD8e96x1tgBhUI5J+Y=\ngithub.com/gobwas/glob v0.2.3/go.mod h1:d3Ez4x06l9bZtSvzIay5+Yzi0fmZzPgnTbPcKjJAkT8=\ngithub.com/goccy/go-json v0.10.2 h1:CrxCmQqYDkv1z7lO7Wbh2HN93uovUHgrECaO5ZrCXAU=\ngithub.com/goccy/go-json v0.10.2/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MGFi0w8I=\ngithub.com/godbus/dbus/v5 v5.1.0 h1:4KLkAxT3aOY8Li4FRJe/KvhoNFFxo0m6fNuFUO8QJUk=\ngithub.com/godbus/dbus/v5 v5.1.0/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA=\ngithub.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q=\ngithub.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A=\ngithub.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=\ngithub.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=\ngithub.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw=\ngithub.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8=\ngithub.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA=\ngithub.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs=\ngithub.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w=\ngithub.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0=\ngithub.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI=\ngithub.com/golang/snappy v0.0.4 h1:yAGX7huGHXlcLOEtBnF4w7FQwA26wojNCwOYAEhLjQM=\ngithub.com/golang/snappy v0.0.4/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=\ngithub.com/google/btree v1.1.3 h1:CVpQJjYgC4VbzxeGVHfvZrv1ctoYCAI8vbl07Fcxlyg=\ngithub.com/google/btree v1.1.3/go.mod h1:qOPhT0dTNdNzV6Z/lhRX0YXUafgPLFUh+gZMl761Gm4=\ngithub.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M=\ngithub.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=\ngithub.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=\ngithub.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=\ngithub.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI=\ngithub.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=\ngithub.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=\ngithub.com/google/gopacket v1.1.19 h1:ves8RnFZPGiFnTS0uPQStjwru6uO6h+nlr9j6fL7kF8=\ngithub.com/google/gopacket v1.1.19/go.mod h1:iJ8V8n6KS+z2U1A8pUwu8bW5SyEMkXJB8Yo/Vo+TKTo=\ngithub.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510 h1:El6M4kTTCOh6aBiKaUGG7oYTSPP8MxqL4YI3kZKwcP4=\ngithub.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510/go.mod h1:pupxD2MaaD3pAXIBCelhxNneeOaAeabZDe5s4K6zSpQ=\ngithub.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0=\ngithub.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=\ngithub.com/gorilla/websocket v1.5.3 h1:saDtZ6Pbx/0u+bgYQ3q96pZgCzfhKXGPqt7kZ72aNNg=\ngithub.com/gorilla/websocket v1.5.3/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE=\ngithub.com/gravitational/trace v1.1.16-0.20220114165159-14a9a7dd6aaf h1:C1GPyPJrOlJlIrcaBBiBpDsqZena2Ks8spa5xZqr1XQ=\ngithub.com/gravitational/trace v1.1.16-0.20220114165159-14a9a7dd6aaf/go.mod h1:zXqxTI6jXDdKnlf8s+nT+3c8LrwUEy3yNpO4XJL90lA=\ngithub.com/hashicorp/hcl v1.0.0 h1:0Anlzjpi4vEasTeNFn2mLJgTSwt0+6sfsiTG8qcWGx4=\ngithub.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ=\ngithub.com/jonboulle/clockwork v0.2.2 h1:UOGuzwb1PwsrDAObMuhUnj0p5ULPj8V/xJ7Kx9qUBdQ=\ngithub.com/jonboulle/clockwork v0.2.2/go.mod h1:Pkfl5aHPm1nk2H9h0bjmnJD/BcgbGXUBGnn1kMkgxc8=\ngithub.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM=\ngithub.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo=\ngithub.com/judwhite/go-svc v1.2.1 h1:a7fsJzYUa33sfDJRF2N/WXhA+LonCEEY8BJb1tuS5tA=\ngithub.com/judwhite/go-svc v1.2.1/go.mod h1:mo/P2JNX8C07ywpP9YtO2gnBgnUiFTHqtsZekJrUuTk=\ngithub.com/klauspost/cpuid/v2 v2.0.9/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg=\ngithub.com/klauspost/cpuid/v2 v2.2.7 h1:ZWSB3igEs+d0qvnxR/ZBzXVmxkgt8DdzP6m9pfuVLDM=\ngithub.com/klauspost/cpuid/v2 v2.2.7/go.mod h1:Lcz8mBdAVJIBVzewtcLocK12l3Y+JytZYpaMropDUws=\ngithub.com/klauspost/reedsolomon v1.11.8 h1:s8RpUW5TK4hjr+djiOpbZJB4ksx+TdYbRH7vHQpwPOY=\ngithub.com/klauspost/reedsolomon v1.11.8/go.mod h1:4bXRN+cVzMdml6ti7qLouuYi32KHJ5MGv0Qd8a47h6A=\ngithub.com/knz/go-libedit v1.10.1/go.mod h1:MZTVkCWyz0oBc7JOWP3wNAzd002ZbM/5hgShxwh4x8M=\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/leodido/go-urn v1.4.0 h1:WT9HwE9SGECu3lg4d/dIA+jxlljEa1/ffXKmRjqdmIQ=\ngithub.com/leodido/go-urn v1.4.0/go.mod h1:bvxc+MVxLKB4z00jd1z+Dvzr47oO32F/QSNjSBOlFxI=\ngithub.com/magiconair/properties v1.8.7 h1:IeQXZAiQcpL9mgcAe1Nu6cX9LLw6ExEHKjN0VQdvPDY=\ngithub.com/magiconair/properties v1.8.7/go.mod h1:Dhd985XPs7jluiymwWYZ0G4Z61jb3vdS329zhj2hYo0=\ngithub.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY=\ngithub.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y=\ngithub.com/miekg/dns v1.1.61 h1:nLxbwF3XxhwVSm8g9Dghm9MHPaUZuqhPiGL+675ZmEs=\ngithub.com/miekg/dns v1.1.61/go.mod h1:mnAarhS3nWaW+NVP2wTkYVIZyHNJ098SJZUki3eykwQ=\ngithub.com/mitchellh/go-homedir v1.1.0 h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG+4E0Y=\ngithub.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0=\ngithub.com/mitchellh/mapstructure v1.5.0 h1:jeMsZIYE/09sWLaz43PL7Gy6RuMjD2eJVyuac5Z2hdY=\ngithub.com/mitchellh/mapstructure v1.5.0/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo=\ngithub.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=\ngithub.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg=\ngithub.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=\ngithub.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M=\ngithub.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk=\ngithub.com/nxadm/tail v1.4.8 h1:nPr65rt6Y5JFSKQO7qToXr7pePgD6Gwiw05lkbyAQTE=\ngithub.com/nxadm/tail v1.4.8/go.mod h1:+ncqLTQzXmGhMZNUePPaPqPvBxHAIsmXswZKocGu+AU=\ngithub.com/onsi/ginkgo v1.16.5 h1:8xi0RTUf59SOSfEtZMvwTvXYMzG4gV23XVHOZiXNtnE=\ngithub.com/onsi/ginkgo v1.16.5/go.mod h1:+E8gABHa3K6zRBolWtd+ROzc/U5bkGt0FwiG042wbpU=\ngithub.com/onsi/gomega v1.34.2 h1:pNCwDkzrsv7MS9kpaQvVb1aVLahQXyJ/Tv5oAZMI3i8=\ngithub.com/onsi/gomega v1.34.2/go.mod h1:v1xfxRgk0KIsG+QOdm7p8UosrOzPYRo60fd3B/1Dukc=\ngithub.com/patrickmn/go-cache v2.1.0+incompatible h1:HRMgzkcYKYpi3C8ajMPV8OFXaaRUnok+kx1WdO15EQc=\ngithub.com/patrickmn/go-cache v2.1.0+incompatible/go.mod h1:3Qf8kWWT7OJRJbdiICTKqZju1ZixQ/KpMGzzAfe6+WQ=\ngithub.com/pelletier/go-toml/v2 v2.2.2 h1:aYUidT7k73Pcl9nb2gScu7NSrKCSHIDE89b3+6Wq+LM=\ngithub.com/pelletier/go-toml/v2 v2.2.2/go.mod h1:1t835xjRzz80PqgE6HHgN2JOsmgYu/h4qDAS4n929Rs=\ngithub.com/pion/dtls/v2 v2.2.6 h1:yXMxKr0Skd+Ub6A8UqXTRLSywskx93ooMRHsQUtd+Z4=\ngithub.com/pion/dtls/v2 v2.2.6/go.mod h1:t8fWJCIquY5rlQZwA2yWxUS1+OCrAdXrhVKXB5oD/wY=\ngithub.com/pion/logging v0.2.2 h1:M9+AIj/+pxNsDfAT64+MAVgJO0rsyLnoJKCqf//DoeY=\ngithub.com/pion/logging v0.2.2/go.mod h1:k0/tDVsRCX2Mb2ZEmTqNa7CWsQPc+YYCB7Q+5pahoms=\ngithub.com/pion/transport/v2 v2.0.2 h1:St+8o+1PEzPT51O9bv+tH/KYYLMNR5Vwm5Z3Qkjsywg=\ngithub.com/pion/transport/v2 v2.0.2/go.mod h1:vrz6bUbFr/cjdwbnxq8OdDDzHf7JJfGsIRkxfpZoTA0=\ngithub.com/pion/udp/v2 v2.0.1 h1:xP0z6WNux1zWEjhC7onRA3EwwSliXqu1ElUZAQhUP54=\ngithub.com/pion/udp/v2 v2.0.1/go.mod h1:B7uvTMP00lzWdyMr/1PVZXtV3wpPIxBRd4Wl6AksXn8=\ngithub.com/pires/go-proxyproto v0.8.1 h1:9KEixbdJfhrbtjpz/ZwCdWDD2Xem0NZ38qMYaASJgp0=\ngithub.com/pires/go-proxyproto v0.8.1/go.mod h1:ZKAAyp3cgy5Y5Mo4n9AlScrkCZwUy0g3Jf+slqQVcuU=\ngithub.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=\ngithub.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=\ngithub.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=\ngithub.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U=\ngithub.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=\ngithub.com/prometheus/client_golang v1.19.1 h1:wZWJDwK+NameRJuPGDhlnFgx8e8HN3XHQeLaYJFJBOE=\ngithub.com/prometheus/client_golang v1.19.1/go.mod h1:mP78NwGzrVks5S2H6ab8+ZZGJLZUq1hoULYBAYBw1Ho=\ngithub.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=\ngithub.com/prometheus/client_model v0.6.0 h1:k1v3CzpSRUTrKMppY35TLwPvxHqBu0bYgxZzqGIgaos=\ngithub.com/prometheus/client_model v0.6.0/go.mod h1:NTQHnmxFpouOD0DpvP4XujX3CdOAGQPoaGhyTchlyt8=\ngithub.com/prometheus/common v0.48.0 h1:QO8U2CdOzSn1BBsmXJXduaaW+dY/5QLjfB8svtSzKKE=\ngithub.com/prometheus/common v0.48.0/go.mod h1:0/KsvlIEfPQCQ5I2iNSAWKPZziNCvRs5EC6ILDTlAPc=\ngithub.com/prometheus/procfs v0.12.0 h1:jluTpSng7V9hY0O2R9DzzJHYb2xULk9VTR1V1R/k6Bo=\ngithub.com/prometheus/procfs v0.12.0/go.mod h1:pcuDEFsWDnvcgNzo4EEweacyhjeA9Zk3cnaOZAZEfOo=\ngithub.com/quic-go/qpack v0.5.1 h1:giqksBPnT/HDtZ6VhtFKgoLOWmlyo9Ei6u9PqzIMbhI=\ngithub.com/quic-go/qpack v0.5.1/go.mod h1:+PC4XFrEskIVkcLzpEkbLqq1uCoxPhQuvK5rH1ZgaEg=\ngithub.com/quic-go/quic-go v0.54.1 h1:4ZAWm0AhCb6+hE+l5Q1NAL0iRn/ZrMwqHRGQiFwj2eg=\ngithub.com/quic-go/quic-go v0.54.1/go.mod h1:e68ZEaCdyviluZmy44P6Iey98v/Wfz6HCjQEm+l8zTY=\ngithub.com/quic-go/webtransport-go v0.9.0 h1:jgys+7/wm6JarGDrW+lD/r9BGqBAmqY/ssklE09bA70=\ngithub.com/quic-go/webtransport-go v0.9.0/go.mod h1:4FUYIiUc75XSsF6HShcLeXXYZJ9AGwo/xh3L8M/P1ao=\ngithub.com/riobard/go-bloom v0.0.0-20200614022211-cdc8013cb5b3 h1:f/FNXud6gA3MNr8meMVVGxhp+QBTqY91tM8HjEuMjGg=\ngithub.com/riobard/go-bloom v0.0.0-20200614022211-cdc8013cb5b3/go.mod h1:HgjTstvQsPGkxUsCd2KWxErBblirPizecHcpD3ffK+s=\ngithub.com/rogpeppe/go-internal v1.10.0 h1:TMyTOH3F/DB16zRVcYyreMH6GnZZrwQVAoYjRBZyWFQ=\ngithub.com/rogpeppe/go-internal v1.10.0/go.mod h1:UQnix2H7Ngw/k4C5ijL5+65zddjncjaFoBhdsK/akog=\ngithub.com/rs/xid v1.3.0 h1:6NjYksEUlhurdVehpc7S7dk6DAmcKv8V9gG0FsVN2U4=\ngithub.com/rs/xid v1.3.0/go.mod h1:trrq9SKmegXys3aeAKXMUTdJsYXVwGY3RLcfgqegfbg=\ngithub.com/sagikazarmark/locafero v0.4.0 h1:HApY1R9zGo4DBgr7dqsTH/JJxLTTsOt7u6keLGt6kNQ=\ngithub.com/sagikazarmark/locafero v0.4.0/go.mod h1:Pe1W6UlPYUk/+wc/6KFhbORCfqzgYEpgQ3O5fPuL3H4=\ngithub.com/sagikazarmark/slog-shim v0.1.0 h1:diDBnUNK9N/354PgrxMywXnAwEr1QZcOr6gto+ugjYE=\ngithub.com/sagikazarmark/slog-shim v0.1.0/go.mod h1:SrcSrq8aKtyuqEI1uvTDTK1arOWRIczQRv+GVI1AkeQ=\ngithub.com/shadowsocks/go-shadowsocks2 v0.1.6-0.20241020092332-e1fe9ea73740 h1:XdDrN8rtxdgW3TLn7pAuobI9PhPMbf6Geu9nvFzXn2E=\ngithub.com/shadowsocks/go-shadowsocks2 v0.1.6-0.20241020092332-e1fe9ea73740/go.mod h1:Oqfn/ykzqjeX00+7IuPyR7wGYgOzld0Tni6djgElacI=\ngithub.com/sirupsen/logrus v1.7.0/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0=\ngithub.com/sirupsen/logrus v1.9.3 h1:dueUQJ1C2q9oE3F7wvmSGAaVtTmUizReu6fjN8uqzbQ=\ngithub.com/sirupsen/logrus v1.9.3/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ=\ngithub.com/songgao/water v0.0.0-20200317203138-2b4b6d7c09d8 h1:TG/diQgUe0pntT/2D9tmUCz4VNwm9MfrtPr0SU2qSX8=\ngithub.com/songgao/water v0.0.0-20200317203138-2b4b6d7c09d8/go.mod h1:P5HUIBuIWKbyjl083/loAegFkfbFNx5i2qEP4CNbm7E=\ngithub.com/sourcegraph/conc v0.3.0 h1:OQTbbt6P72L20UqAkXXuLOj79LfEanQ+YQFNpLA9ySo=\ngithub.com/sourcegraph/conc v0.3.0/go.mod h1:Sdozi7LEKbFPqYX2/J+iBAM6HpqSLTASQIKqDmF7Mt0=\ngithub.com/spf13/afero v1.11.0 h1:WJQKhtpdm3v2IzqG8VMqrr6Rf3UYpEF239Jy9wNepM8=\ngithub.com/spf13/afero v1.11.0/go.mod h1:GH9Y3pIexgf1MTIWtNGyogA5MwRIDXGUr+hbWNoBjkY=\ngithub.com/spf13/cast v1.6.0 h1:GEiTHELF+vaR5dhz3VqZfFSzZjYbgeKDpBxQVS4GYJ0=\ngithub.com/spf13/cast v1.6.0/go.mod h1:ancEpBxwJDODSW/UG4rDrAqiKolqNNh2DX3mk86cAdo=\ngithub.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA=\ngithub.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg=\ngithub.com/spf13/viper v1.19.0 h1:RWq5SEjt8o25SROyN3z2OrDB9l7RPd3lwTWU8EcEdcI=\ngithub.com/spf13/viper v1.19.0/go.mod h1:GQUN9bilAbhU/jgc1bKs99f/suXKeUMct8Adx5+Ntkg=\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 h1:xuMeJ0Sdp5ZMRXx/aWO6RZxdr3beISkG5/G/aIRr3pY=\ngithub.com/stretchr/objx v0.5.2/go.mod h1:FRsXN1f5AsAjCGJKqEizvkpNtU+EGNCLh3NxZ/8L+MA=\ngithub.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=\ngithub.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=\ngithub.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=\ngithub.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=\ngithub.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=\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.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4=\ngithub.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo=\ngithub.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg=\ngithub.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=\ngithub.com/subosito/gotenv v1.6.0 h1:9NlTDc1FTs4qu0DDq7AEtTPNw6SVm7uBMsUCUjABIf8=\ngithub.com/subosito/gotenv v1.6.0/go.mod h1:Dk4QP5c2W3ibzajGcXpNraDfq2IrhjMIvMSWPKKo0FU=\ngithub.com/templexxx/cpu v0.1.1 h1:isxHaxBXpYFWnk2DReuKkigaZyrjs2+9ypIdGP4h+HI=\ngithub.com/templexxx/cpu v0.1.1/go.mod h1:w7Tb+7qgcAlIyX4NhLuDKt78AHA5SzPmq0Wj6HiEnnk=\ngithub.com/templexxx/xorsimd v0.4.3 h1:9AQTFHd7Bhk3dIT7Al2XeBX5DWOvsUPZCuhyAtNbHjU=\ngithub.com/templexxx/xorsimd v0.4.3/go.mod h1:oZQcD6RFDisW2Am58dSAGwwL6rHjbzrlu25VDqfWkQg=\ngithub.com/tjfoc/gmsm v1.4.1 h1:aMe1GlZb+0bLjn+cKTPEvvn9oUEBlJitaZiiBwsbgho=\ngithub.com/tjfoc/gmsm v1.4.1/go.mod h1:j4INPkHWMrhJb38G+J6W4Tw0AbuN8Thu3PbdVYhVcTE=\ngithub.com/twitchyliquid64/golang-asm v0.15.1 h1:SU5vSMR7hnwNxj24w34ZyCi/FmDZTkS4MhqMhdFk5YI=\ngithub.com/twitchyliquid64/golang-asm v0.15.1/go.mod h1:a1lVb/DtPvCB8fslRZhAngC2+aY1QWCk3Cedj/Gdt08=\ngithub.com/ugorji/go/codec v1.2.12 h1:9LC83zGrHhuUA9l16C9AHXAqEV/2wBQ4nkvumAE65EE=\ngithub.com/ugorji/go/codec v1.2.12/go.mod h1:UNopzCgEMSXjBc6AOMqYvWC1ktqTAfzJZUZgYf6w6lg=\ngithub.com/vishvananda/netlink v1.1.1-0.20211118161826-650dca95af54 h1:8mhqcHPqTMhSPoslhGYihEgSfc77+7La1P6kiB6+9So=\ngithub.com/vishvananda/netlink v1.1.1-0.20211118161826-650dca95af54/go.mod h1:twkDnbuQxJYemMlGd4JFIcuhgX83tXhKS2B/PRMpOho=\ngithub.com/vishvananda/netns v0.0.0-20200728191858-db3c7e526aae/go.mod h1:DD4vA1DwXk04H54A1oHXtwZmA0grkVMdPxx/VGLCah0=\ngithub.com/vishvananda/netns v0.0.4 h1:Oeaw1EM2JMxD51g9uhtC0D7erkIjgmj8+JZc26m1YX8=\ngithub.com/vishvananda/netns v0.0.4/go.mod h1:SpkAiCQRtJ6TvvxPnOSyH3BMl6unz3xZlaprSwhNNJM=\ngithub.com/vulcand/predicate v1.2.0 h1:uFsW1gcnnR7R+QTID+FVcs0sSYlIGntoGOTb3rQJt50=\ngithub.com/vulcand/predicate v1.2.0/go.mod h1:VipoNYXny6c8N381zGUWkjuuNHiRbeAZhE7Qm9c+2GA=\ngithub.com/xjasonlyu/tun2socks/v2 v2.6.0 h1:gI9saJT3XgH4e6v9jBuHRLwK7l3aN9YFWec/SsDTDx4=\ngithub.com/xjasonlyu/tun2socks/v2 v2.6.0/go.mod h1:35AwqxIxnMkfBfT0UJ1Lku7PZm2ZiZJ8sxHyp0gt1yw=\ngithub.com/xtaci/kcp-go/v5 v5.6.5 h1:oxGZNobj3OddrLzwdJYnR/waNgwrL98u02u0DWNHE3k=\ngithub.com/xtaci/kcp-go/v5 v5.6.5/go.mod h1:Qy3Zf2tWTdFdEs0E8JvhrX+39r5UDZoYac8anvud7/Q=\ngithub.com/xtaci/lossyconn v0.0.0-20190602105132-8df528c0c9ae h1:J0GxkO96kL4WF+AIT3M4mfUVinOCPgf2uUWYFUzN0sM=\ngithub.com/xtaci/lossyconn v0.0.0-20190602105132-8df528c0c9ae/go.mod h1:gXtu8J62kEgmN++bm9BVICuT/e8yiLI2KFobd/TRFsE=\ngithub.com/xtaci/smux v1.5.31 h1:3ha7sHtH46h85Iv7MfQogxasuRt1KPRhoFB3S4rmHgU=\ngithub.com/xtaci/smux v1.5.31/go.mod h1:OMlQbT5vcgl2gb49mFkYo6SMf+zP3rcjcwQz7ZU7IGY=\ngithub.com/xtaci/tcpraw v1.2.25 h1:VDlqo0op17JeXBM6e2G9ocCNLOJcw9mZbobMbJjo0vk=\ngithub.com/xtaci/tcpraw v1.2.25/go.mod h1:dKyZ2V75s0cZ7cbgJYdxPvms7af0joIeOyx1GgJQbLk=\ngithub.com/yl2chen/cidranger v1.0.2 h1:lbOWZVCG1tCRX4u24kuM1Tb4nHqWkDxwLdoS+SevawU=\ngithub.com/yl2chen/cidranger v1.0.2/go.mod h1:9U1yz7WPYDwf0vpNWFaeRh0bjwz5RVgRy/9UEQfHl0g=\ngithub.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY=\ngithub.com/zalando/go-keyring v0.2.4 h1:wi2xxTqdiwMKbM6TWwi+uJCG/Tum2UV0jqaQhCa9/68=\ngithub.com/zalando/go-keyring v0.2.4/go.mod h1:HL4k+OXQfJUWaMnqyuSOc0drfGPX2b51Du6K+MRgZMk=\ngithub.com/zeebo/assert v1.1.0 h1:hU1L1vLTHsnO8x8c9KAR5GmM5QscxHg5RNU5z5qbUWY=\ngithub.com/zeebo/assert v1.1.0/go.mod h1:Pq9JiuJQpG8JLJdtkwrJESF0Foym2/D9XMU5ciN/wJ0=\ngithub.com/zeebo/blake3 v0.2.4 h1:KYQPkhpRtcqh0ssGYcKLG1JYvddkEA8QwCM/yBqhaZI=\ngithub.com/zeebo/blake3 v0.2.4/go.mod h1:7eeQ6d2iXWRGF6npfaxl2CU+xy2Fjo2gxeyZGCRUjcE=\ngithub.com/zeebo/pcg v1.0.1 h1:lyqfGeWiv4ahac6ttHs+I5hwtH/+1mrhlCtVNQM2kHo=\ngithub.com/zeebo/pcg v1.0.1/go.mod h1:09F0S9iiKrwn9rlI5yjLkmrug154/YRW6KnnXVDM/l4=\ngo.uber.org/mock v0.5.0 h1:KAMbZvZPyBPWgD14IrIQ38QCyjwpvVVV6K/bHl1IwQU=\ngo.uber.org/mock v0.5.0/go.mod h1:ge71pBPLYDk7QIi1LupWxdAykm7KIEFchiOqd6z7qMM=\ngo.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0=\ngo.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y=\ngolang.org/x/arch v0.0.0-20210923205945-b76863e36670/go.mod h1:5om86z9Hs0C8fWVUuoMHwpExlXzs5Tkyp9hOrfG7pp8=\ngolang.org/x/arch v0.8.0 h1:3wRIsP3pM4yUptoR96otTUOXI367OS0+c9eeRi9doIc=\ngolang.org/x/arch v0.8.0/go.mod h1:FEVrYAQjsQXMVJ1nsMoVVXPZg6p2JE2mx8psSWTDQys=\ngolang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=\ngolang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=\ngolang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=\ngolang.org/x/crypto v0.0.0-20201012173705-84dcc777aaee/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=\ngolang.org/x/crypto v0.0.0-20201016220609-9e8e0b390897/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=\ngolang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=\ngolang.org/x/crypto v0.5.0/go.mod h1:NK/OQwhpMQP3MwtdjgLlYHnH9ebylxKWv3e0fK+mkQU=\ngolang.org/x/crypto v0.45.0 h1:jMBrvKuj23MTlT0bQEOBcAE0mjg8mK9RXFhRH6nyF3Q=\ngolang.org/x/crypto v0.45.0/go.mod h1:XTGrrkGJve7CYK7J8PEww4aY7gM3qMCElcJQ8n8JdX4=\ngolang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=\ngolang.org/x/exp v0.0.0-20241210194714-1829a127f884 h1:Y/Mj/94zIQQGHVSv1tTtQBDaQaJe62U9bkDZKKyhPCU=\ngolang.org/x/exp v0.0.0-20241210194714-1829a127f884/go.mod h1:qj5a5QZpwLU2NLQudwIN5koi3beDhSAlJwa67PuM98c=\ngolang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=\ngolang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU=\ngolang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=\ngolang.org/x/lint v0.0.0-20200302205851-738671d3881b/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY=\ngolang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg=\ngolang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4=\ngolang.org/x/mod v0.29.0 h1:HV8lRxZC4l2cr3Zq1LvtOsi/ThTgWnUk/y64QSs8GwA=\ngolang.org/x/mod v0.29.0/go.mod h1:NyhrlYXJ2H4eJiRy/WDBO6HMqZQ6q9nk4JzS3NuCK+w=\ngolang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=\ngolang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=\ngolang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=\ngolang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=\ngolang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=\ngolang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=\ngolang.org/x/net v0.0.0-20201010224723-4f7140c49acb/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=\ngolang.org/x/net v0.0.0-20201031054903-ff519b6c9102/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=\ngolang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=\ngolang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c=\ngolang.org/x/net v0.5.0/go.mod h1:DivGGAXEgPSlEBzxGzZI+ZLohi+xUj054jfeKui00ws=\ngolang.org/x/net v0.7.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs=\ngolang.org/x/net v0.47.0 h1:Mx+4dIFzqraBXUugkia1OOvlD6LemFo1ALMHjrXDOhY=\ngolang.org/x/net v0.47.0/go.mod h1:/jNxtkgq5yWUGYkaZGqo27cfGZ1c5Nen03aYrrKpVRU=\ngolang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=\ngolang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=\ngolang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=\ngolang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=\ngolang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=\ngolang.org/x/sync v0.18.0 h1:kr88TuHDroi+UVf+0hZnirlk8o8T+4MrK6mr60WkH/I=\ngolang.org/x/sync v0.18.0/go.mod h1:9KTHXmSnoGruLpwFjVSX0lNNA75CykiMECbovNTZqGI=\ngolang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=\ngolang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=\ngolang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=\ngolang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=\ngolang.org/x/sys v0.0.0-20200217220822-9197077df867/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=\ngolang.org/x/sys v0.0.0-20200728102440-3e129f6d46b1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=\ngolang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=\ngolang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=\ngolang.org/x/sys v0.0.0-20210124154548-22da62e12c0c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=\ngolang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=\ngolang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=\ngolang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=\ngolang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=\ngolang.org/x/sys v0.4.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=\ngolang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=\ngolang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=\ngolang.org/x/sys v0.38.0 h1:3yZWxaJjBmCWXqhN1qh02AkOnCQ1poK6oF+a7xWL6Gc=\ngolang.org/x/sys v0.38.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks=\ngolang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=\ngolang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=\ngolang.org/x/term v0.4.0/go.mod h1:9P2UbLfCdcvo3p/nzKvsmas4TnlujnuoV9hGgYzW1lQ=\ngolang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k=\ngolang.org/x/term v0.37.0 h1:8EGAD0qCmHYZg6J17DvsMy9/wJ7/D/4pV/wfnld5lTU=\ngolang.org/x/term v0.37.0/go.mod h1:5pB4lxRNYYVZuTLmy8oR2BH8dflOR+IbTYFD8fi3254=\ngolang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=\ngolang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=\ngolang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=\ngolang.org/x/text v0.6.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8=\ngolang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8=\ngolang.org/x/text v0.31.0 h1:aC8ghyu4JhP8VojJ2lEHBnochRno1sgL6nEi9WGFGMM=\ngolang.org/x/text v0.31.0/go.mod h1:tKRAlv61yKIjGGHX/4tP1LTbc13YSec1pxVEWXzfoeM=\ngolang.org/x/time v0.11.0 h1:/bpjEDfN9tkoN/ryeYHnv5hcMlc8ncjMcM4XBk5NWV0=\ngolang.org/x/time v0.11.0/go.mod h1:CDIdPxbZBQxdj6cxyCIdrNogrJKMJ7pr37NYpMcMDSg=\ngolang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=\ngolang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=\ngolang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY=\ngolang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=\ngolang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=\ngolang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=\ngolang.org/x/tools v0.0.0-20200130002326-2f3ba24bd6e7/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=\ngolang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc=\ngolang.org/x/tools v0.38.0 h1:Hx2Xv8hISq8Lm16jvBZ2VQf+RLmbd7wVUsALibYI/IQ=\ngolang.org/x/tools v0.38.0/go.mod h1:yEsQ/d/YK8cjh0L6rZlY8tgtlKiBNTL14pGDJPJpYQs=\ngolang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=\ngolang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=\ngolang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=\ngolang.zx2c4.com/wintun v0.0.0-20230126152724-0fa3db229ce2 h1:B82qJJgjvYKsXS9jeunTOisW56dUokqW/FOteYJJ/yg=\ngolang.zx2c4.com/wintun v0.0.0-20230126152724-0fa3db229ce2/go.mod h1:deeaetjYA+DHMHg+sMSMI58GrEteJUUzzw7en6TJQcI=\ngolang.zx2c4.com/wireguard v0.0.0-20250521234502-f333402bd9cb h1:whnFRlWMcXI9d+ZbWg+4sHnLp52d5yiIPUxMBSt4X9A=\ngolang.zx2c4.com/wireguard v0.0.0-20250521234502-f333402bd9cb/go.mod h1:rpwXGsirqLqN2L0JDJQlwOboGHmptD5ZD6T2VmcqhTw=\ngoogle.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=\ngoogle.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=\ngoogle.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc=\ngoogle.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc=\ngoogle.golang.org/genproto/googleapis/rpc v0.0.0-20240903143218-8af14fe29dc1 h1:pPJltXNxVzT4pK9yD8vR9X75DaWYYmLGMsEvBfFQZzQ=\ngoogle.golang.org/genproto/googleapis/rpc v0.0.0-20240903143218-8af14fe29dc1/go.mod h1:UqMtugtsSgubUsoxbuAoiCXvqvErP7Gf0so0mK9tHxU=\ngoogle.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c=\ngoogle.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg=\ngoogle.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY=\ngoogle.golang.org/grpc v1.27.1/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk=\ngoogle.golang.org/grpc v1.31.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak=\ngoogle.golang.org/grpc v1.67.1 h1:zWnc1Vrcno+lHZCOofnIMvycFcc0QRGIzm9dhnDX68E=\ngoogle.golang.org/grpc v1.67.1/go.mod h1:1gLDyUQU7CTLJI90u3nXZ9ekeghjeM7pTDZlqFNg2AA=\ngoogle.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8=\ngoogle.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0=\ngoogle.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM=\ngoogle.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE=\ngoogle.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo=\ngoogle.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=\ngoogle.golang.org/protobuf v1.35.1 h1:m3LfL6/Ca+fqnjnlqQXNpFPABW1UD7mjh8KO2mKFytA=\ngoogle.golang.org/protobuf v1.35.1/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE=\ngopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=\ngopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk=\ngopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q=\ngopkg.in/ini.v1 v1.67.0 h1:Dgnx+6+nfE+IfzjUEISNeydPJh9AXNNsWbGP9KzCsOA=\ngopkg.in/ini.v1 v1.67.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k=\ngopkg.in/natefinch/lumberjack.v2 v2.2.1 h1:bBRl1b0OH9s/DuPhuXpNl+VtCaJXFZ5/uEFST95x9zc=\ngopkg.in/natefinch/lumberjack.v2 v2.2.1/go.mod h1:YD8tP3GAjkrDg1eZH7EGmyESg/lsYskCTPBJVb9jqSc=\ngopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ=\ngopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw=\ngopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=\ngopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=\ngopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=\ngopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=\ngvisor.dev/gvisor v0.0.0-20250523182742-eede7a881b20 h1:0DxLu8hxI1OGp1qVRPqNd+2k1a7hMNUNqbZG0IrtKlM=\ngvisor.dev/gvisor v0.0.0-20250523182742-eede7a881b20/go.mod h1:3r5CMtNQMKIvBlrmM9xWUNamjKBYPOWyXOjmg5Kts3g=\nhonnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=\nhonnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=\nnullprogram.com/x/optparse v1.0.0/go.mod h1:KdyPE+Igbe0jQUrVfMqDMeJQIJZEuyV7pjYmp6pbG50=\nrsc.io/pdf v0.1.1/go.mod h1:n8OzWcQ6Sp37PL01nO98y4iUCRdTGarVfzxY20ICaU4=\n"
  },
  {
    "path": "gost.yml",
    "content": "services:\n- name: service-0\n  addr: \":8080\"\n  interface: eth0\n  admission: admission-0\n  bypass: bypass-0\n  resolver: resolver-0\n  hosts: hosts-0\n  handler:\n    type: http\n    auth:\n      username: user\n      password: pass\n    auther: auther-0\n    chain: chain-0\n    retries: 1\n    metadata: \n      foo: bar\n      bar: baz\n  listener:\n    type: tcp\n    auth:\n      username: user\n      password: pass\n    auther: auther-0\n    chain: chain-0\n    tls:\n      certFile: cert.pem\n      keyFile: key.pem\n      caFile: ca.pem\n    metadata:\n      abc: xyz\n      def: 456\n  forwarder:\n    nodes:\n    - name: target-0\n      addr: 192.168.1.1:1234\n    - name: target-1\n      addr: 192.168.1.2:2345\n    selector:\n      strategy: rand\n      maxFails: 1\n      failTimeout: 30s\n\nchains:\n- name: chain-0\n  selector:\n    strategy: round\n    maxFails: 1\n    failTimeout: 30s\n  hops:\n  - name: hop-0\n  - name: hop-1\n    interface: 192.168.1.2\n    selector:\n      strategy: rand\n      maxFails: 3\n      failTimeout: 60s\n    bypass: bypass-0\n    nodes:\n    - name: node-0\n      addr: \":1080\"\n      interface: eth1\n      bypass: bypass-0\n      connector:\n        type: socks5\n        auth:\n          username: user\n          password: pass\n        metadata:\n          foo: bar\n      dialer:\n        type: tcp\n        auth:\n          username: user\n          password: pass\n        tls:\n          caFile: \"ca.pem\"\n          secure: true\n          serverName: \"example.com\"\n        metadata:\n          bar: baz \n\nhops:\n- name: hop-0\n  interface: 192.168.1.2\n  selector:\n    strategy: rand\n    maxFails: 3\n    failTimeout: 60s\n  bypass: bypass-0\n  nodes:\n  - name: node-0\n    addr: \":1080\"\n    interface: eth1\n    bypass: bypass-0\n    connector:\n      type: socks5\n      auth:\n        username: user\n        password: pass\n      metadata:\n        foo: bar\n    dialer:\n      type: tcp\n      auth:\n        username: user\n        password: pass\n      tls:\n        caFile: \"ca.pem\"\n        secure: true\n        serverName: \"example.com\"\n      metadata:\n        bar: baz \n  \ntls:\n  certFile: \"cert.pem\"\n  keyFile: \"key.pem\"\n  caFile: \"ca.pem\"\n\nauthers:\n- name: auther-0\n  auths:\n  - username: user1\n    password: pass1\n  - username: user2\n    password: pass2\n\nadmissions:\n- name: admission-0\n  whitelist: false\n  matchers:\n  - 127.0.0.1\n  - 192.168.0.0/16\n\nbypasses:\n- name: bypass-0\n  whitelist: false\n  matchers:\n  - \"*.example.com\"\n  - .example.org\n  - 0.0.0.0/8\n\nresolvers:\n- name: resolver-0\n  nameservers:\n  - addr: udp://8.8.8.8:53\n    chain: chain-0\n    ttl: 60s\n    prefer: ipv4\n    clientIP: 1.2.3.4\n    timeout: 3s\n  - addr: tcp://1.1.1.1:53\n  - addr: tls://1.1.1.1:853\n  - addr: https://1.0.0.1/dns-query\n    hostname: cloudflare-dns.com\n\nhosts:\n- name: hosts-0\n  mappings:\n  - ip: 127.0.0.1\n    hostname: localhost\n  - ip: 192.168.1.10\n    hostname: foo.mydomain.org\n    aliases:\n    - foo\n  - ip: 192.168.1.13\n    hostname: bar.mydomain.org\n    aliases:\n    - bar\n    - baz\n\nlog:\n  output: stderr\n  level: debug\n  format: json\n\nprofiling:\n  addr: \":6060\"\n\napi:\n  addr: \":18080\"\n  pathPrefix: /api\n  accesslog: true\n  auth:\n    username: user\n    password: pass\n  auther: auther-0\n\nmetrics:\n  addr: :9000\n  path: /metrics\n"
  },
  {
    "path": "install.sh",
    "content": "#!/bin/bash\n\n# Check Root User\n\n# If you want to run as another user, please modify $EUID to be owned by this user\nif [[ \"$EUID\" -ne '0' ]]; then\n    echo \"$(tput setaf 1)Error: You must run this script as root!$(tput sgr0)\"\n    exit 1\nfi\n\n# Set the desired GitHub repository\nrepo=\"go-gost/gost\"\nbase_url=\"https://api.github.com/repos/$repo/releases\"\n\n# Function to download and install gost\ninstall_gost() {\n    version=$1\n    # Detect the operating system\n    if [[ \"$(uname)\" == \"Linux\" ]]; then\n        os=\"linux\"\n    elif [[ \"$(uname)\" == \"Darwin\" ]]; then\n        os=\"darwin\"\n    elif [[ \"$(uname)\" == \"MINGW\"* ]]; then\n        os=\"windows\"\n    else\n        echo \"Unsupported operating system.\"\n        exit 1\n    fi\n\n    # Detect the CPU architecture\n    arch=$(uname -m)\n    case $arch in\n    x86_64)\n        cpu_arch=\"amd64\"\n        ;;\n    armv5*)\n        cpu_arch=\"armv5\"\n        ;;\n    armv6*)\n        cpu_arch=\"armv6\"\n        ;;\n    armv7*)\n        cpu_arch=\"armv7\"\n        ;;\n    aarch64)\n        cpu_arch=\"arm64\"\n        ;;\n    i686)\n        cpu_arch=\"386\"\n        ;;\n    mips64*)\n        cpu_arch=\"mips64\"\n        ;;\n    mips*)\n        cpu_arch=\"mips\"\n        ;;\n    mipsel*)\n        cpu_arch=\"mipsle\"\n        ;;\n    riscv64)\n        cpu_arch=\"riscv64\"\n        ;;\n    *)\n        echo \"Unsupported CPU architecture.\"\n        exit 1\n        ;;\n    esac\n    get_download_url=\"$base_url/tags/$version\"\n    download_url=$(curl -s \"$get_download_url\" | grep -Eo \"\\\"browser_download_url\\\": \\\".*${os}.*${cpu_arch}.*\\\"\" | awk -F'[\"]' '{print $4}')\n\n    # Download the binary\n    echo \"Downloading gost version $version...\"\n    curl -fsSL -o gost.tar.gz $download_url\n\n    # Extract and install the binary\n    echo \"Installing gost...\"\n    tar -xzf gost.tar.gz\n    chmod +x gost\n    mv gost /usr/local/bin/gost\n\n    echo \"gost installation completed!\"\n}\n\n# Retrieve available versions from GitHub API\nversions=$(curl -s \"$base_url\" | grep -oP 'tag_name\": \"\\K[^\"]+')\n\n# Check if --install option provided\nif [[ \"$1\" == \"--install\" ]]; then\n    # Install the latest version automatically\n    latest_version=$(echo \"$versions\" | head -n 1)\n    install_gost $latest_version\nelse\n    # Display available versions to the user\n    echo \"Available gost versions:\"\n    select version in $versions; do\n        if [[ -n $version ]]; then\n            install_gost $version\n            break\n        else\n            echo \"Invalid choice! Please select a valid option.\"\n        fi\n    done\nfi\n"
  }
]