├── .gitignore
├── img
└── logo.png
├── .github
├── workflows
│ └── release.yml
└── ISSUE_TEMPLATE
│ ├── feature_request.md
│ └── bug_report.md
├── go.mod
├── README.md
├── utils
└── subbdom_api.go
├── main.go
└── go.sum
/.gitignore:
--------------------------------------------------------------------------------
1 | /.vscode
2 | /subbdom-cli
3 |
--------------------------------------------------------------------------------
/img/logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/a2dom/subbdom-cli/HEAD/img/logo.png
--------------------------------------------------------------------------------
/.github/workflows/release.yml:
--------------------------------------------------------------------------------
1 | on:
2 | release:
3 | types: [created]
4 |
5 | jobs:
6 | release-linux-amd64:
7 | name: release linux/amd64
8 | runs-on: ubuntu-latest
9 | strategy:
10 | matrix:
11 | goos: [linux, darwin, windows]
12 | goarch: [amd64, arm64]
13 | steps:
14 | - uses: actions/checkout@v2
15 | - uses: wangyoucao577/go-release-action@v1.53
16 | with:
17 | github_token: ${{ secrets.GITHUB_TOKEN }}
18 | goos: ${{ matrix.goos }}
19 | goarch: ${{ matrix.goarch }}
20 | ldflags: "-s -w -X main.version=${GITHUB_REF##*/}"
21 | sha256sum: TRUE
22 |
--------------------------------------------------------------------------------
/.github/ISSUE_TEMPLATE/feature_request.md:
--------------------------------------------------------------------------------
1 | ---
2 | name: Feature request
3 | about: Suggest an idea for this project
4 | title: ''
5 | labels: ''
6 | assignees: ''
7 |
8 | ---
9 |
10 | **Is your feature request related to a problem? Please describe.**
11 | A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
12 |
13 | **Describe the solution you'd like**
14 | A clear and concise description of what you want to happen.
15 |
16 | **Describe alternatives you've considered**
17 | A clear and concise description of any alternative solutions or features you've considered.
18 |
19 | **Additional context**
20 | Add any other context or screenshots about the feature request here.
21 |
--------------------------------------------------------------------------------
/.github/ISSUE_TEMPLATE/bug_report.md:
--------------------------------------------------------------------------------
1 | ---
2 | name: Bug report
3 | about: Create a report to help us improve
4 | title: ''
5 | labels: ''
6 | assignees: ''
7 |
8 | ---
9 |
10 | **Describe the bug**
11 | A clear and concise description of what the bug is.
12 |
13 | **To Reproduce**
14 | Steps to reproduce the behavior:
15 | 1. Go to '...'
16 | 2. Click on '....'
17 | 3. Scroll down to '....'
18 | 4. See error
19 |
20 | **Expected behavior**
21 | A clear and concise description of what you expected to happen.
22 |
23 | **Screenshots**
24 | If applicable, add screenshots to help explain your problem.
25 |
26 | **Desktop (please complete the following information):**
27 | - OS: [e.g. iOS]
28 | - Browser [e.g. chrome, safari]
29 | - Version [e.g. 22]
30 |
31 | **Smartphone (please complete the following information):**
32 | - Device: [e.g. iPhone6]
33 | - OS: [e.g. iOS8.1]
34 | - Browser [e.g. stock browser, safari]
35 | - Version [e.g. 22]
36 |
37 | **Additional context**
38 | Add any other context about the problem here.
39 |
--------------------------------------------------------------------------------
/go.mod:
--------------------------------------------------------------------------------
1 | module github.com/a2dom/subbdom-cli
2 |
3 | go 1.23.1
4 |
5 | require github.com/spf13/viper v1.19.0
6 |
7 | require (
8 | github.com/fsnotify/fsnotify v1.7.0 // indirect
9 | github.com/hashicorp/hcl v1.0.0 // indirect
10 | github.com/magiconair/properties v1.8.7 // indirect
11 | github.com/mitchellh/mapstructure v1.5.0 // indirect
12 | github.com/pelletier/go-toml/v2 v2.2.2 // indirect
13 | github.com/sagikazarmark/locafero v0.4.0 // indirect
14 | github.com/sagikazarmark/slog-shim v0.1.0 // indirect
15 | github.com/sourcegraph/conc v0.3.0 // indirect
16 | github.com/spf13/afero v1.11.0 // indirect
17 | github.com/spf13/cast v1.6.0 // indirect
18 | github.com/spf13/pflag v1.0.5 // indirect
19 | github.com/subosito/gotenv v1.6.0 // indirect
20 | go.uber.org/atomic v1.9.0 // indirect
21 | go.uber.org/multierr v1.9.0 // indirect
22 | golang.org/x/exp v0.0.0-20230905200255-921286631fa9 // indirect
23 | golang.org/x/sys v0.18.0 // indirect
24 | golang.org/x/text v0.14.0 // indirect
25 | gopkg.in/ini.v1 v1.67.0 // indirect
26 | gopkg.in/yaml.v3 v3.0.1 // indirect
27 | )
28 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | # Subbdom CLI
6 |
7 | ## Description
8 | `subbdom-cli` is a Go-based CLI tool that interacts with the Subbdom API to retrieve subdomains for a specified zone. The tool supports output in both plain text and JSON formats.
9 |
10 | ## Features
11 | - Fetch subdomains from the Subbdom API.
12 | - Supports output in JSON format.
13 | - Requires an API key for authentication.
14 | - Mandatory zone specification using the `-z` flag.
15 |
16 | ## Installation
17 |
18 | ### From releases
19 |
20 | Simply download from release page.
21 |
22 | ### Build from source
23 |
24 | Ensure you have Go installed on your system. Then, clone the repository and build the project:
25 |
26 | ```sh
27 | $ git clone https://github.com/a2dom/subbdom-cli.git
28 | $ cd subbdom-cli
29 | $ go build -o subbdom-cli
30 | ```
31 |
32 | ## Usage
33 |
34 | Run the tool using:
35 |
36 | ```sh
37 | $ ./subbdom-cli -z [-o json]
38 | ```
39 |
40 | ### Options:
41 | - `-z ` (Required): Specifies the zone to fetch subdomains for.
42 | - `-o json` (Optional): Outputs the results in JSON format.
43 | - `-t ` (Optional): Set timeout (default 5sec).
44 |
45 | ### Example:
46 |
47 | #### Plain text output
48 | ```sh
49 | $ ./subbdom-cli -z example.com
50 | sub1.example.com
51 | sub2.example.com
52 | sub3.example.com
53 | ```
54 |
55 | #### JSON output
56 | ```sh
57 | $ ./subbdom-cli -z example.com -o json
58 | [
59 | "sub1.example.com",
60 | "sub2.example.com",
61 | "sub3.example.com"
62 | ]
63 | ```
64 |
65 | ## Configuration
66 | The API key is required and should be set in the configuration file ($HOME/.subbdom-cli.yaml):
67 |
68 | ```yaml
69 | subbdom_api_key: "your_api_key"
70 | ```
71 |
72 | ## License
73 | This project is licensed under the MIT License.
74 |
--------------------------------------------------------------------------------
/utils/subbdom_api.go:
--------------------------------------------------------------------------------
1 | // Copyright (c) 2025 a2dom - subbdom.com
2 | //
3 | // Permission is hereby granted, free of charge, to any person obtaining a copy
4 | // of this software and associated documentation files (the "Software"), to deal
5 | // in the Software without restriction, including without limitation the rights
6 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
7 | // copies of the Software, and to permit persons to whom the Software is
8 | // furnished to do so, subject to the following conditions:
9 | //
10 | // The above copyright notice and this permission notice shall be included in
11 | // all copies or substantial portions of the Software.
12 | //
13 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
16 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
17 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
18 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
19 | // THE SOFTWARE.
20 | //
21 | // File: utils/subbdom_api.go
22 |
23 | package utils
24 |
25 | import (
26 | "compress/gzip"
27 | "encoding/json"
28 | "fmt"
29 | "io"
30 | "net/http"
31 | "time"
32 | )
33 |
34 | func FetchSubdomains(apiKey string, dataSources string, timeout int, version string, zone string) ([]string, error) {
35 | url := fmt.Sprintf("https://api.subbdom.com/v1/search?z=%s&ds=%s", zone, dataSources)
36 |
37 | req, err := http.NewRequest("GET", url, nil)
38 | if err != nil {
39 | return nil, err
40 | }
41 | req.Header.Set("X-API-Key", apiKey)
42 | req.Header.Set("User-Agent", fmt.Sprintf("subbdom-cli - %s", version))
43 | req.Header.Set("Accept-Encoding", "gzip") // Request gzip compression
44 |
45 | client := http.Client{
46 | Timeout: time.Duration(timeout) * time.Second,
47 | }
48 | resp, err := client.Do(req)
49 | if err != nil {
50 | return nil, err
51 | }
52 | defer resp.Body.Close()
53 |
54 | if resp.StatusCode != http.StatusOK {
55 | return nil, fmt.Errorf("unexpected status code: %d", resp.StatusCode)
56 | }
57 |
58 | var reader io.Reader = resp.Body
59 | if resp.Header.Get("Content-Encoding") == "gzip" {
60 | gzipReader, err := gzip.NewReader(resp.Body)
61 | if err != nil {
62 | return nil, err
63 | }
64 | defer gzipReader.Close()
65 | reader = gzipReader // Use the decompressed stream
66 | }
67 |
68 | body, err := io.ReadAll(reader)
69 | if err != nil {
70 | return nil, err
71 | }
72 |
73 | var hostnames []string
74 | if err := json.Unmarshal(body, &hostnames); err != nil {
75 | return nil, err
76 | }
77 |
78 | return hostnames, nil
79 | }
80 |
--------------------------------------------------------------------------------
/main.go:
--------------------------------------------------------------------------------
1 | // Copyright (c) 2025 a2dom - subbdom.com
2 | //
3 | // Permission is hereby granted, free of charge, to any person obtaining a copy
4 | // of this software and associated documentation files (the "Software"), to deal
5 | // in the Software without restriction, including without limitation the rights
6 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
7 | // copies of the Software, and to permit persons to whom the Software is
8 | // furnished to do so, subject to the following conditions:
9 | //
10 | // The above copyright notice and this permission notice shall be included in
11 | // all copies or substantial portions of the Software.
12 | //
13 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
16 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
17 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
18 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
19 | // THE SOFTWARE.
20 | //
21 | // File: main.go
22 |
23 | package main
24 |
25 | import (
26 | "encoding/json"
27 | "flag"
28 | "fmt"
29 | "log"
30 | "os"
31 |
32 | "github.com/a2dom/subbdom-cli/utils"
33 | "github.com/spf13/viper"
34 | )
35 |
36 | var (
37 | version string
38 | )
39 |
40 | func main() {
41 | home, _ := os.UserHomeDir()
42 | viper.SetConfigName(".subbdom-cli")
43 | viper.SetConfigType("yaml")
44 | viper.AddConfigPath("/etc/subbdom-cli/")
45 | viper.AddConfigPath(home)
46 |
47 | var outputFormat string
48 | var dataSources string
49 | var zone string
50 | var timeout int
51 | flag.StringVar(&outputFormat, "o", "text", "Output format (text,json)")
52 | flag.StringVar(&dataSources, "ds", "db", "Datasources")
53 | flag.StringVar(&zone, "z", "", "Zone")
54 | flag.IntVar(&timeout, "t", 5, "Timeout")
55 | flag.Parse()
56 |
57 | if zone == "" {
58 | fmt.Println("Error: -z (zone) flag is required")
59 | flag.Usage()
60 | os.Exit(1)
61 | }
62 |
63 | if err := viper.ReadInConfig(); err != nil {
64 | log.Fatalf("Error reading config file: %v", err)
65 | }
66 |
67 | // Retrieve API keys from the config
68 | apiKey := viper.GetString("subbdom_api_key")
69 | if apiKey == "" {
70 | log.Fatal("No API keys found.")
71 | }
72 |
73 | subdomains, err := utils.FetchSubdomains(apiKey, dataSources, timeout, version, zone)
74 | if err != nil {
75 | fmt.Println("Error:", err)
76 | return
77 | }
78 |
79 | if outputFormat == "json" {
80 | jsonOutput, err := json.Marshal(subdomains)
81 | if err != nil {
82 | fmt.Println("Error encoding JSON:", err)
83 | return
84 | }
85 | fmt.Println(string(jsonOutput))
86 | } else {
87 | for _, hostname := range subdomains {
88 | fmt.Println(hostname)
89 | }
90 | }
91 | }
92 |
--------------------------------------------------------------------------------
/go.sum:
--------------------------------------------------------------------------------
1 | github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
2 | github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
3 | github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM=
4 | github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
5 | github.com/frankban/quicktest v1.14.6 h1:7Xjx+VpznH+oBnejlPUj8oUpdxnVs4f8XU8WnHkI4W8=
6 | github.com/frankban/quicktest v1.14.6/go.mod h1:4ptaffx2x8+WTWXmUCuVU6aPUX1/Mz7zb5vbUoiM6w0=
7 | github.com/fsnotify/fsnotify v1.7.0 h1:8JEhPFa5W2WU7YfeZzPNqzMP6Lwt7L2715Ggo0nosvA=
8 | github.com/fsnotify/fsnotify v1.7.0/go.mod h1:40Bi/Hjc2AVfZrqy+aj+yEI+/bRxZnMJyTJwOpGvigM=
9 | github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38=
10 | github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
11 | github.com/hashicorp/hcl v1.0.0 h1:0Anlzjpi4vEasTeNFn2mLJgTSwt0+6sfsiTG8qcWGx4=
12 | github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ=
13 | github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE=
14 | github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk=
15 | github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
16 | github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
17 | github.com/magiconair/properties v1.8.7 h1:IeQXZAiQcpL9mgcAe1Nu6cX9LLw6ExEHKjN0VQdvPDY=
18 | github.com/magiconair/properties v1.8.7/go.mod h1:Dhd985XPs7jluiymwWYZ0G4Z61jb3vdS329zhj2hYo0=
19 | github.com/mitchellh/mapstructure v1.5.0 h1:jeMsZIYE/09sWLaz43PL7Gy6RuMjD2eJVyuac5Z2hdY=
20 | github.com/mitchellh/mapstructure v1.5.0/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo=
21 | github.com/pelletier/go-toml/v2 v2.2.2 h1:aYUidT7k73Pcl9nb2gScu7NSrKCSHIDE89b3+6Wq+LM=
22 | github.com/pelletier/go-toml/v2 v2.2.2/go.mod h1:1t835xjRzz80PqgE6HHgN2JOsmgYu/h4qDAS4n929Rs=
23 | github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
24 | github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U=
25 | github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
26 | github.com/rogpeppe/go-internal v1.9.0 h1:73kH8U+JUqXU8lRuOHeVHaa/SZPifC7BkcraZVejAe8=
27 | github.com/rogpeppe/go-internal v1.9.0/go.mod h1:WtVeX8xhTBvf0smdhujwtBcq4Qrzq/fJaraNFVN+nFs=
28 | github.com/sagikazarmark/locafero v0.4.0 h1:HApY1R9zGo4DBgr7dqsTH/JJxLTTsOt7u6keLGt6kNQ=
29 | github.com/sagikazarmark/locafero v0.4.0/go.mod h1:Pe1W6UlPYUk/+wc/6KFhbORCfqzgYEpgQ3O5fPuL3H4=
30 | github.com/sagikazarmark/slog-shim v0.1.0 h1:diDBnUNK9N/354PgrxMywXnAwEr1QZcOr6gto+ugjYE=
31 | github.com/sagikazarmark/slog-shim v0.1.0/go.mod h1:SrcSrq8aKtyuqEI1uvTDTK1arOWRIczQRv+GVI1AkeQ=
32 | github.com/sourcegraph/conc v0.3.0 h1:OQTbbt6P72L20UqAkXXuLOj79LfEanQ+YQFNpLA9ySo=
33 | github.com/sourcegraph/conc v0.3.0/go.mod h1:Sdozi7LEKbFPqYX2/J+iBAM6HpqSLTASQIKqDmF7Mt0=
34 | github.com/spf13/afero v1.11.0 h1:WJQKhtpdm3v2IzqG8VMqrr6Rf3UYpEF239Jy9wNepM8=
35 | github.com/spf13/afero v1.11.0/go.mod h1:GH9Y3pIexgf1MTIWtNGyogA5MwRIDXGUr+hbWNoBjkY=
36 | github.com/spf13/cast v1.6.0 h1:GEiTHELF+vaR5dhz3VqZfFSzZjYbgeKDpBxQVS4GYJ0=
37 | github.com/spf13/cast v1.6.0/go.mod h1:ancEpBxwJDODSW/UG4rDrAqiKolqNNh2DX3mk86cAdo=
38 | github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA=
39 | github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg=
40 | github.com/spf13/viper v1.19.0 h1:RWq5SEjt8o25SROyN3z2OrDB9l7RPd3lwTWU8EcEdcI=
41 | github.com/spf13/viper v1.19.0/go.mod h1:GQUN9bilAbhU/jgc1bKs99f/suXKeUMct8Adx5+Ntkg=
42 | github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
43 | github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw=
44 | github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo=
45 | github.com/stretchr/objx v0.5.2/go.mod h1:FRsXN1f5AsAjCGJKqEizvkpNtU+EGNCLh3NxZ/8L+MA=
46 | github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
47 | github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
48 | github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU=
49 | github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo=
50 | github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg=
51 | github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
52 | github.com/subosito/gotenv v1.6.0 h1:9NlTDc1FTs4qu0DDq7AEtTPNw6SVm7uBMsUCUjABIf8=
53 | github.com/subosito/gotenv v1.6.0/go.mod h1:Dk4QP5c2W3ibzajGcXpNraDfq2IrhjMIvMSWPKKo0FU=
54 | go.uber.org/atomic v1.9.0 h1:ECmE8Bn/WFTYwEW/bpKD3M8VtR/zQVbavAoalC1PYyE=
55 | go.uber.org/atomic v1.9.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc=
56 | go.uber.org/multierr v1.9.0 h1:7fIwc/ZtS0q++VgcfqFDxSBZVv/Xo49/SYnDFupUwlI=
57 | go.uber.org/multierr v1.9.0/go.mod h1:X2jQV1h+kxSjClGpnseKVIxpmcjrj7MNnI0bnlfKTVQ=
58 | golang.org/x/exp v0.0.0-20230905200255-921286631fa9 h1:GoHiUyI/Tp2nVkLI2mCxVkOjsbSXD66ic0XW0js0R9g=
59 | golang.org/x/exp v0.0.0-20230905200255-921286631fa9/go.mod h1:S2oDrQGGwySpoQPVqRShND87VCbxmc6bL1Yd2oYrm6k=
60 | golang.org/x/sys v0.18.0 h1:DBdB3niSjOA/O0blCZBqDefyWNYveAYMNF1Wum0DYQ4=
61 | golang.org/x/sys v0.18.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
62 | golang.org/x/text v0.14.0 h1:ScX5w1eTa3QqT8oi6+ziP7dTV1S2+ALU0bI+0zXKWiQ=
63 | golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU=
64 | gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
65 | gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15 h1:YR8cESwS4TdDjEe65xsg0ogRM/Nc3DYOhEAlW+xobZo=
66 | gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
67 | gopkg.in/ini.v1 v1.67.0 h1:Dgnx+6+nfE+IfzjUEISNeydPJh9AXNNsWbGP9KzCsOA=
68 | gopkg.in/ini.v1 v1.67.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k=
69 | gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
70 | gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
71 | gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
72 |
--------------------------------------------------------------------------------