├── example ├── allowlist.txt ├── blocklist.txt ├── main.go └── Corefile ├── ready.go ├── .github ├── dependabot.yml └── workflows │ ├── main.yml │ └── release.yml ├── .gitignore ├── Makefile ├── list_loader_test.go ├── metrics.go ├── readme.md ├── setup.go ├── setup_test.go ├── list_loader.go ├── blocklist.go ├── blocklist_test.go ├── go.mod └── go.sum /example/allowlist.txt: -------------------------------------------------------------------------------- 1 | appleid.apple.com 2 | -------------------------------------------------------------------------------- /example/blocklist.txt: -------------------------------------------------------------------------------- 1 | diagnostics.meethue.com 2 | ocsp.apple.com 3 | -------------------------------------------------------------------------------- /ready.go: -------------------------------------------------------------------------------- 1 | package blocklist 2 | 3 | // Ready implements the ready.Readiness interface, once this flips to true CoreDNS 4 | // assumes this plugin is ready for queries; it is not checked again. 5 | func (e Blocklist) Ready() bool { return true } 6 | -------------------------------------------------------------------------------- /.github/dependabot.yml: -------------------------------------------------------------------------------- 1 | version: 2 2 | updates: 3 | - package-ecosystem: "gomod" 4 | directory: "/" 5 | schedule: 6 | interval: "daily" 7 | - package-ecosystem: "github-actions" 8 | directory: "/" 9 | schedule: 10 | interval: "weekly" 11 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Binaries for programs and plugins 2 | *.exe 3 | *.exe~ 4 | *.dll 5 | *.so 6 | *.dylib 7 | 8 | # Test binary, built with `go test -c` 9 | *.test 10 | 11 | # Output of the go coverage tool, specifically when used with LiteIDE 12 | *.out 13 | 14 | # Dependency directories (remove the comment below to include it) 15 | # vendor/ 16 | 17 | linux 18 | coredns 19 | -------------------------------------------------------------------------------- /example/main.go: -------------------------------------------------------------------------------- 1 | package main 2 | 3 | import ( 4 | _ "github.com/coredns/coredns/core/plugin" 5 | _ "github.com/relekang/coredns-blocklist" 6 | 7 | "github.com/coredns/coredns/core/dnsserver" 8 | "github.com/coredns/coredns/coremain" 9 | ) 10 | 11 | func init() { 12 | dnsserver.Directives = append( 13 | []string{"log", "blocklist"}, 14 | dnsserver.Directives..., 15 | ) 16 | } 17 | 18 | func main() { 19 | coremain.Run() 20 | } 21 | -------------------------------------------------------------------------------- /example/Corefile: -------------------------------------------------------------------------------- 1 | . { 2 | log 3 | debug 4 | prometheus 5 | 6 | blocklist https://raw.githubusercontent.com/StevenBlack/hosts/master/hosts { 7 | # if CoreDNS listens at 53, you need another DNS to bootstrap the download 8 | bootstrap_dns 1.1.1.1:53 9 | } 10 | 11 | blocklist blocklist.txt { 12 | allowlist allowlist.txt 13 | domain_metrics 14 | block_response refused 15 | } 16 | 17 | forward . 1.1.1.1 1.0.0.1 18 | } 19 | -------------------------------------------------------------------------------- /.github/workflows/main.yml: -------------------------------------------------------------------------------- 1 | name: Build and test Go 2 | on: 3 | - push 4 | - pull_request 5 | 6 | jobs: 7 | build: 8 | name: Build 9 | runs-on: ubuntu-latest 10 | steps: 11 | - name: Set up Go 1.20 12 | uses: actions/setup-go@v1 13 | with: 14 | go-version: 1.20 15 | 16 | - name: Check out source code 17 | uses: actions/checkout@v1 18 | 19 | - name: Build 20 | run: go build 21 | 22 | - name: Test 23 | run: go test -test.v 24 | -------------------------------------------------------------------------------- /Makefile: -------------------------------------------------------------------------------- 1 | GO_FILES=$(shell find . -name '*.go') 2 | 3 | default: coredns 4 | 5 | install: go.sum go.mod 6 | go get 7 | 8 | test: $(GO_FILES) 9 | go test -test.v 10 | 11 | linux/arm: $(GO_FILES) 12 | mkdir -p linux/arm 13 | GOOS=linux GOARCH=arm go build -o linux/arm/coredns ./example/main.go 14 | 15 | linux/arm64: $(GO_FILES) 16 | mkdir -p linux/arm64 17 | GOOS=linux GOARCH=arm64 go build -o linux/arm64/coredns ./example/main.go 18 | 19 | linux/amd64: $(GO_FILES) 20 | mkdir -p linux/amd64 21 | GOOS=linux GOARCH=amd64 go build -o linux/amd64/coredns ./example/main.go 22 | 23 | linux/386: $(GO_FILES) 24 | mkdir -p linux/386 25 | GOOS=linux GOARCH=386 go build -o linux/386/coredns ./example/main.go 26 | 27 | coredns: $(GO_FILES) 28 | go build -o coredns ./example/main.go 29 | 30 | run: coredns 31 | cd example && ../coredns -conf ./Corefile 32 | 33 | clean: 34 | rm -rf coredns linux 35 | 36 | dist: linux/arm linux/arm64 linux/amd64 linux/386 37 | 38 | .PHONY: dist clean 39 | -------------------------------------------------------------------------------- /list_loader_test.go: -------------------------------------------------------------------------------- 1 | package blocklist 2 | 3 | import ( 4 | "strings" 5 | "testing" 6 | 7 | "github.com/stretchr/testify/assert" 8 | ) 9 | 10 | var tests = []struct { 11 | in []string 12 | out map[string]bool 13 | }{ 14 | {[]string{"bad.domain"}, map[string]bool{"bad.domain.": true}}, 15 | {[]string{"bad.domain."}, map[string]bool{"bad.domain.": true}}, 16 | {[]string{"0.0.0.0 bad.domain"}, map[string]bool{"bad.domain.": true}}, 17 | {[]string{"127.0.0.1 bad.domain"}, map[string]bool{"bad.domain.": true}}, 18 | {[]string{"# comment with.domain", "bad.domain."}, map[string]bool{"bad.domain.": true}}, 19 | {[]string{"bad.domain # With a comment"}, map[string]bool{"bad.domain.": true}}, 20 | {[]string{"localhost"}, map[string]bool{}}, 21 | {[]string{"something else"}, map[string]bool{}}, 22 | } 23 | 24 | func TestToMap(t *testing.T) { 25 | for _, item := range tests { 26 | t.Run(strings.Join(item.in, ","), func(t *testing.T) { 27 | assert.Equal(t, item.out, toMap(item.in)) 28 | }) 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /metrics.go: -------------------------------------------------------------------------------- 1 | package blocklist 2 | 3 | import ( 4 | "sync" 5 | 6 | "github.com/coredns/coredns/plugin" 7 | 8 | "github.com/prometheus/client_golang/prometheus" 9 | "github.com/prometheus/client_golang/prometheus/promauto" 10 | ) 11 | 12 | var blockCount = promauto.NewCounterVec(prometheus.CounterOpts{ 13 | Namespace: plugin.Namespace, 14 | Subsystem: "blocklist", 15 | Name: "block_count_total", 16 | Help: "Counter of blocks made.", 17 | }, []string{"server"}) 18 | 19 | var allowCount = promauto.NewCounterVec(prometheus.CounterOpts{ 20 | Namespace: plugin.Namespace, 21 | Subsystem: "blocklist", 22 | Name: "allow_count_total", 23 | Help: "Counter of allows that have overridden blocks.", 24 | }, []string{"server"}) 25 | 26 | var blockWithDomainsCount = promauto.NewCounterVec(prometheus.CounterOpts{ 27 | Namespace: plugin.Namespace, 28 | Subsystem: "blocklist", 29 | Name: "block_count_with_domains_total", 30 | Help: "Counter of blocks made.", 31 | }, []string{"server", "domain"}) 32 | 33 | var allowWithDomainsCount = promauto.NewCounterVec(prometheus.CounterOpts{ 34 | Namespace: plugin.Namespace, 35 | Subsystem: "blocklist", 36 | Name: "allow_count_with_domains_total", 37 | Help: "Counter of allows that have overridden blocks, with domain.", 38 | }, []string{"server", "domain"}) 39 | 40 | var domainCount = promauto.NewGaugeVec(prometheus.GaugeOpts{ 41 | Namespace: plugin.Namespace, 42 | Subsystem: "blocklist", 43 | Name: "list_size", 44 | Help: "Number of domains in list.", 45 | }, []string{"file"}) 46 | 47 | var once sync.Once 48 | -------------------------------------------------------------------------------- /.github/workflows/release.yml: -------------------------------------------------------------------------------- 1 | name: Create release from tag 2 | 3 | on: 4 | push: 5 | tags: 6 | - 'v*' 7 | 8 | jobs: 9 | create-release: 10 | name: Create release 11 | runs-on: ubuntu-latest 12 | steps: 13 | - name: Create Release 14 | id: create_release 15 | uses: actions/create-release@v1 16 | env: 17 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 18 | with: 19 | tag_name: ${{ github.ref }} 20 | release_name: Release ${{ github.ref }} 21 | draft: false 22 | prerelease: false 23 | outputs: 24 | upload_url: ${{ steps.create_release.outputs.upload_url }} 25 | 26 | releases-matrix: 27 | name: Release Go Binary 28 | runs-on: ubuntu-latest 29 | needs: create-release 30 | strategy: 31 | matrix: 32 | goos: [linux] 33 | goarch: ["386", amd64, arm, arm64] 34 | steps: 35 | - name: Set up Go 1.20 36 | uses: actions/setup-go@v1 37 | with: 38 | go-version: 1.20 39 | - uses: actions/checkout@v2 40 | - name: Build artifact 41 | run: | 42 | go build -o coredns example/main.go 43 | zip "coredns-with-blocklist-${{ matrix.goos }}-${{ matrix.goarch }}" coredns 44 | env: 45 | GOOS: ${{ matrix.goos }} 46 | GOARCH: ${{ matrix.goarch }} 47 | 48 | - name: Upload Release Asset 49 | id: upload-release-asset 50 | uses: actions/upload-release-asset@v1 51 | env: 52 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 53 | with: 54 | upload_url: ${{ needs.create-release.outputs.upload_url }} 55 | asset_path: ./coredns-with-blocklist-${{ matrix.goos }}-${{ matrix.goarch }}.zip 56 | asset_name: coredns-with-blocklist-${{ matrix.goos }}-${{ matrix.goarch }}.zip 57 | asset_content_type: application/zip 58 | -------------------------------------------------------------------------------- /readme.md: -------------------------------------------------------------------------------- 1 | # coredns-blocklist 2 | 3 | This is a [coredns][] plugin to return NXDOMAIN response for any domain 4 | on preloaded lists. It can be useful to block malware domains or trackers. 5 | 6 | ## Usage 7 | 8 | It is possible to use this plugin with both files from disk and fetch 9 | files from http servers by passing an url. The file should contain one 10 | domain on each line. There is an example file in the example folder. 11 | 12 | ``` 13 | . { 14 | log 15 | prometheus 16 | 17 | # load from url 18 | blocklist https://mirror1.malwaredomains.com/files/justdomains { 19 | # if CoreDNS listens at 53, you need another DNS to bootstrap the download 20 | bootstrap_dns 1.1.1.1:53 21 | } 22 | 23 | # load from file, if the path is not absolute it will be relative to the Corefile 24 | blocklist blocklist.txt 25 | 26 | forward . 1.1.1.1 1.0.0.1 27 | } 28 | ``` 29 | 30 | ## Installation 31 | 32 | There is multiple ways to add plugins in [coredns][], but no matter the 33 | way you choose **the order matters**. The order sets the precedense of 34 | the plugins when resolving queries. This means the blocklist plugin 35 | should be before any plugins that would resolve the domains correctly. 36 | Furthermore, the log plugin should be before this plugin to get proper 37 | logging. 38 | 39 | ### Using plugin.cfg file 40 | 41 | Add the following to the plugin.cfg file in your clone of coredns and follow 42 | the instructions from coredns. 43 | 44 | ``` 45 | blocklist:github.com/relekang/coredns-blocklist 46 | ``` 47 | 48 | ### Using a go file to compile the bundle 49 | 50 | See the [example/main.go](./example/main.go) for how to create a file that you 51 | can compile to get coredns with this plugin. This file will work with the 52 | coredns version defined in [go.mod](./go.mod). 53 | 54 | The example is bundled up with releases of on the [release page][] of this 55 | repository. There it can be downloaded prebuilt for a bunch of environments. 56 | 57 | [coredns]: https://coredns.io 58 | [release page]: https://github.com/relekang/coredns-blocklist/releases 59 | -------------------------------------------------------------------------------- /setup.go: -------------------------------------------------------------------------------- 1 | package blocklist 2 | 3 | import ( 4 | "errors" 5 | "fmt" 6 | 7 | "github.com/coredns/caddy" 8 | "github.com/coredns/coredns/core/dnsserver" 9 | "github.com/coredns/coredns/plugin" 10 | 11 | "github.com/miekg/dns" 12 | ) 13 | 14 | func init() { plugin.Register("blocklist", setup) } 15 | 16 | func setup(c *caddy.Controller) error { 17 | for c.Next() { 18 | domainMetrics := false 19 | var blocklistLocation string 20 | var allowlistLocation string 21 | var allowlist []string 22 | var blockResponse string 23 | var bootStrapDNS string 24 | c.Args(&blocklistLocation) 25 | 26 | if blocklistLocation == "" { 27 | return plugin.Error("blocklist", errors.New("Missing url or path to blocklist.")) 28 | } 29 | 30 | for c.NextBlock() { 31 | option := c.Val() 32 | switch option { 33 | case "allowlist": 34 | remaining := c.RemainingArgs() 35 | if len(remaining) != 1 { 36 | return plugin.Error("blocklist", errors.New("allowlist requires a single argument.")) 37 | } 38 | 39 | allowlistLocation = remaining[0] 40 | log.Debugf("Setting allowlist location to %s", allowlistLocation) 41 | case "domain_metrics": 42 | domainMetrics = true 43 | case "bootstrap_dns": 44 | bootStrapDNS = c.RemainingArgs()[0] 45 | case "block_response": 46 | remaining := c.RemainingArgs() 47 | if len(remaining) != 1 { 48 | return plugin.Error("blocklist", errors.New("block_response requires a single argument.")) 49 | } 50 | 51 | blockResponse = remaining[0] 52 | log.Debugf("Setting block response code to %s", blockResponse) 53 | default: 54 | return plugin.Error("blocklist", c.Errf("unexpected '%v' command", option)) 55 | } 56 | } 57 | 58 | if c.NextArg() { 59 | return plugin.Error("blocklist", errors.New("To many arguments for blocklist.")) 60 | } 61 | 62 | blocklist, err := loadList(c, blocklistLocation, bootStrapDNS) 63 | if err != nil { 64 | return plugin.Error("blocklist", err) 65 | } 66 | 67 | if allowlistLocation != "" { 68 | allowlist, err = loadList(c, allowlistLocation, bootStrapDNS) 69 | if err != nil { 70 | return plugin.Error("blocklist", err) 71 | } 72 | } 73 | 74 | if blockResponse == "" { 75 | blockResponse = "nxdomain" 76 | } 77 | blockResponseCode, err := getBlockResponseCode(blockResponse) 78 | if err != nil { 79 | return plugin.Error("blocklist", err) 80 | } 81 | 82 | dnsserver.GetConfig(c). 83 | AddPlugin(func(next plugin.Handler) plugin.Handler { 84 | return NewBlocklistPlugin(next, blocklist, allowlist, domainMetrics, blockResponseCode) 85 | }) 86 | } 87 | 88 | return nil 89 | } 90 | 91 | func getBlockResponseCode(blockResponse string) (int, error) { 92 | switch blockResponse { 93 | case "nxdomain": 94 | return dns.RcodeNameError, nil 95 | case "refused": 96 | return dns.RcodeRefused, nil 97 | default: 98 | return 0, fmt.Errorf("unknown response code '%s', must be either 'nxdomain' or 'refused'", blockResponse) 99 | } 100 | } 101 | -------------------------------------------------------------------------------- /setup_test.go: -------------------------------------------------------------------------------- 1 | package blocklist 2 | 3 | import ( 4 | "testing" 5 | 6 | "github.com/coredns/caddy" 7 | "github.com/stretchr/testify/assert" 8 | 9 | "github.com/miekg/dns" 10 | ) 11 | 12 | func TestSetupInvalidConfig(t *testing.T) { 13 | c := caddy.NewTestController("dns", `blocklist`) 14 | 15 | err := setup(c) 16 | assert.EqualError( 17 | t, 18 | err, 19 | "plugin/blocklist: Missing url or path to blocklist.", 20 | ) 21 | 22 | c = caddy.NewTestController("dns", `blocklist example/blocklist.txt example/blocklist.txt`) 23 | err = setup(c) 24 | assert.EqualError( 25 | t, 26 | err, 27 | "plugin/blocklist: To many arguments for blocklist.", 28 | ) 29 | } 30 | 31 | func TestSetupAllowlistWithNoLocation(t *testing.T) { 32 | cfg := `blocklist https://mirror1.malwaredomains.com/files/justdomains { 33 | allowlist 34 | }` 35 | c := caddy.NewTestController("dns", cfg) 36 | 37 | err := setup(c) 38 | assert.EqualError( 39 | t, 40 | err, 41 | "plugin/blocklist: allowlist requires a single argument.", 42 | ) 43 | } 44 | 45 | func TestSetupValidConfigWithAllowlist(t *testing.T) { 46 | cfg := `blocklist https://mirror1.malwaredomains.com/files/justdomains { 47 | allowlist example/allowlist.txt 48 | }` 49 | c := caddy.NewTestController("dns", cfg) 50 | 51 | err := setup(c) 52 | assert.NoError(t, err) 53 | } 54 | 55 | func TestSetupValidConfig(t *testing.T) { 56 | c := caddy.NewTestController("dns", `blocklist example/blocklist.txt`) 57 | err := setup(c) 58 | assert.NoError(t, err) 59 | 60 | c = caddy.NewTestController("dns", `blocklist https://mirror1.malwaredomains.com/files/justdomains { domain_metrics }`) 61 | err = setup(c) 62 | assert.NoError(t, err) 63 | } 64 | 65 | func TestSetupValidConfigWithRefusedResponse(t *testing.T) { 66 | cfg := `blocklist example/blocklist.txt { 67 | block_response refused 68 | }` 69 | c := caddy.NewTestController("dns", cfg) 70 | 71 | err := setup(c) 72 | assert.NoError(t, err) 73 | } 74 | 75 | func TestSetupMissingBlockResponseValue(t *testing.T) { 76 | cfg := `blocklist example/blocklist.txt { 77 | block_response 78 | }` 79 | c := caddy.NewTestController("dns", cfg) 80 | 81 | err := setup(c) 82 | assert.EqualError( 83 | t, 84 | err, 85 | "plugin/blocklist: block_response requires a single argument.", 86 | ) 87 | } 88 | 89 | func TestSetupInvalidBlockResponse(t *testing.T) { 90 | cfg := `blocklist example/blocklist.txt { 91 | block_response invalid 92 | }` 93 | c := caddy.NewTestController("dns", cfg) 94 | 95 | err := setup(c) 96 | assert.Error(t, err) 97 | assert.EqualError( 98 | t, 99 | err, 100 | "plugin/blocklist: unknown response code 'invalid', must be either 'nxdomain' or 'refused'", 101 | ) 102 | } 103 | 104 | func TestSetupNxdomainBlockResponseCode(t *testing.T) { 105 | r, err := getBlockResponseCode("nxdomain") 106 | assert.NoError(t, err) 107 | assert.Equal(t, r, dns.RcodeNameError) 108 | } 109 | 110 | func TestSetupRefusedBlockResponseCode(t *testing.T) { 111 | r, err := getBlockResponseCode("refused") 112 | assert.NoError(t, err) 113 | assert.Equal(t, r, dns.RcodeRefused) 114 | } 115 | -------------------------------------------------------------------------------- /list_loader.go: -------------------------------------------------------------------------------- 1 | package blocklist 2 | 3 | import ( 4 | "bufio" 5 | "context" 6 | "io" 7 | "net" 8 | "net/http" 9 | "os" 10 | "path/filepath" 11 | "regexp" 12 | "strings" 13 | "time" 14 | 15 | "github.com/coredns/caddy" 16 | ) 17 | 18 | func loadList(c *caddy.Controller, location string, bootStrapDNS string) ([]string, error) { 19 | log.Infof("Loading from %s", location) 20 | if strings.HasPrefix(location, "http://") || strings.HasPrefix(location, "https://") { 21 | return loadListFromUrl(c, location, bootStrapDNS) 22 | } 23 | return loadListFromFile(c, location) 24 | } 25 | 26 | func loadListFromUrl(c *caddy.Controller, name string, bootStrapDNS string) ([]string, error) { 27 | client := &http.Client{} 28 | if bootStrapDNS != "" { 29 | client = customDNS(bootStrapDNS) 30 | } 31 | response, err := client.Get(name) 32 | if err != nil { 33 | return nil, err 34 | } 35 | defer response.Body.Close() 36 | return collectDomains(response.Body, name) 37 | } 38 | 39 | func customDNS(bootStrapDNS string) *http.Client { 40 | var ( 41 | dnsResolverIP = bootStrapDNS // Google DNS resolver. 42 | dnsResolverProto = "udp" // Protocol to use for the DNS resolver 43 | dnsResolverTimeoutMs = 5000 // Timeout (ms) for the DNS resolver (optional) 44 | ) 45 | 46 | dialer := &net.Dialer{ 47 | Resolver: &net.Resolver{ 48 | PreferGo: true, 49 | Dial: func(ctx context.Context, network, address string) (net.Conn, error) { 50 | d := net.Dialer{ 51 | Timeout: time.Duration(dnsResolverTimeoutMs) * time.Millisecond, 52 | } 53 | return d.DialContext(ctx, dnsResolverProto, dnsResolverIP) 54 | }, 55 | }, 56 | } 57 | dialContext := func(ctx context.Context, network, addr string) (net.Conn, error) { 58 | return dialer.DialContext(ctx, network, addr) 59 | } 60 | tr := &http.Transport{ 61 | MaxIdleConns: 10, 62 | IdleConnTimeout: 30 * time.Second, 63 | DisableCompression: true, 64 | DialContext: dialContext, 65 | } 66 | client := &http.Client{Transport: tr} 67 | 68 | return client 69 | } 70 | 71 | func loadListFromFile(c *caddy.Controller, name string) ([]string, error) { 72 | if !filepath.IsAbs(name) { 73 | name = filepath.Join( 74 | filepath.Dir(c.File()), 75 | name, 76 | ) 77 | } 78 | readFile, err := os.Open(name) 79 | if err != nil { 80 | return nil, err 81 | } 82 | defer readFile.Close() 83 | return collectDomains(readFile, name) 84 | } 85 | 86 | func collectDomains(r io.Reader, name string) ([]string, error) { 87 | var domains []string 88 | scanner := bufio.NewScanner(r) 89 | for scanner.Scan() { 90 | domains = append(domains, scanner.Text()) 91 | } 92 | if scanner.Err() != nil { 93 | return nil, scanner.Err() 94 | } 95 | log.Infof("Loaded %d domains from %s", len(domains), name) 96 | domainCount.WithLabelValues(name).Set(float64(len(domains))) 97 | return domains, nil 98 | } 99 | 100 | func toMap(domains []string) map[string]bool { 101 | domainsMap := map[string]bool{} 102 | fullLineCommentRegex := regexp.MustCompile(`^[ ]*#`) 103 | inlineCommentRegex := regexp.MustCompile(`[ ]*#.*$`) 104 | for _, line := range domains { 105 | if fullLineCommentRegex.MatchString(line) { 106 | log.Debugf("Filtered out comment '%s' from blocklist", line) 107 | continue 108 | } 109 | line = inlineCommentRegex.ReplaceAllString(line, "") 110 | line = strings.Replace(line, "0.0.0.0 ", "", 1) 111 | line = strings.Replace(line, "127.0.0.1 ", "", 1) 112 | if line == "" || line == "localhost" || strings.Contains(line, " ") { 113 | continue 114 | } 115 | log.Debugf("Loaded '%s' into blocklist", line) 116 | if strings.HasSuffix(line, ".") { 117 | domainsMap[line] = true 118 | } else { 119 | domainsMap[line+"."] = true 120 | } 121 | } 122 | return domainsMap 123 | } 124 | -------------------------------------------------------------------------------- /blocklist.go: -------------------------------------------------------------------------------- 1 | package blocklist 2 | 3 | import ( 4 | "context" 5 | 6 | "github.com/coredns/coredns/plugin" 7 | "github.com/coredns/coredns/plugin/metrics" 8 | clog "github.com/coredns/coredns/plugin/pkg/log" 9 | "github.com/coredns/coredns/request" 10 | 11 | "github.com/miekg/dns" 12 | 13 | "strings" 14 | ) 15 | 16 | var log = clog.NewWithPlugin("blocklist") 17 | 18 | type Blocklist struct { 19 | blockDomains map[string]bool 20 | allowDomains map[string]bool 21 | Next plugin.Handler 22 | domainMetrics bool 23 | blockResponse int 24 | } 25 | 26 | func NewBlocklistPlugin(next plugin.Handler, blockDomains []string, allowDomains []string, domainMetrics bool, blockResponse int) Blocklist { 27 | 28 | log.Debugf( 29 | "Creating blocklist plugin with %d blocks, %d allows, domain metrics set to %v, and a block response code of %d", 30 | len(blockDomains), 31 | len(allowDomains), 32 | domainMetrics, 33 | blockResponse, 34 | ) 35 | 36 | return Blocklist{ 37 | blockDomains: toMap(blockDomains), 38 | allowDomains: toMap(allowDomains), 39 | Next: next, 40 | domainMetrics: domainMetrics, 41 | blockResponse: blockResponse, 42 | } 43 | } 44 | 45 | // ServeDNS handles processing the DNS query in relation to the blocklist 46 | // A count of metrics around the blocking and allowing status is maintained 47 | // It returns the DNS RCODE 48 | func (b Blocklist) ServeDNS(ctx context.Context, w dns.ResponseWriter, r *dns.Msg) (int, error) { 49 | state := request.Request{W: w, Req: r} 50 | 51 | shouldBlock, shouldAllow := b.shouldBlock(state.Name()) 52 | 53 | if shouldBlock { 54 | // If an RR should be both blocked and allowed, 55 | // then allow it and update appropriate metrics 56 | if shouldAllow { 57 | allowCount.WithLabelValues(metrics.WithServer(ctx)).Inc() 58 | if b.domainMetrics { 59 | allowWithDomainsCount.WithLabelValues(metrics.WithServer(ctx), state.Name()).Inc() 60 | } 61 | 62 | } else { 63 | // Handle the blocking of the RR 64 | resp := new(dns.Msg) 65 | resp.SetRcode(r, b.blockResponse) 66 | err := w.WriteMsg(resp) 67 | 68 | if err != nil { 69 | log.Errorf("failed to write block for %s, %v+", state.Name(), err) 70 | } 71 | 72 | blockCount.WithLabelValues(metrics.WithServer(ctx)).Inc() 73 | if b.domainMetrics { 74 | blockWithDomainsCount.WithLabelValues(metrics.WithServer(ctx), state.Name()).Inc() 75 | } 76 | 77 | log.Debugf( 78 | "blocked \"%s IN %s %s\" from %s", 79 | state.Type(), 80 | state.Name(), 81 | state.Proto(), 82 | state.RemoteAddr(), 83 | ) 84 | 85 | return b.blockResponse, nil 86 | } 87 | } 88 | 89 | return plugin.NextOrFailure(b.Name(), b.Next, ctx, w, r) 90 | } 91 | 92 | // shouldBlock checks for the presence of a DNS name in the block and allow lists 93 | // It returns the blockList and allowList status for that RR 94 | func (b Blocklist) shouldBlock(name string) (isBlocked bool, isAllowed bool) { 95 | log.Debugf("shouldBlock(%s)", name) 96 | 97 | if name == "localhost." { 98 | return false, false 99 | } 100 | 101 | isBlocked = inList(name, b.blockDomains) 102 | isAllowed = inList(name, b.allowDomains) 103 | 104 | return isBlocked, isAllowed 105 | } 106 | 107 | func inList(name string, domainList map[string]bool) bool { 108 | inList := false 109 | 110 | nameParts := strings.Split(name, ".") 111 | for i := range nameParts { 112 | n := strings.Join(nameParts[i:], ".") 113 | 114 | // Because of how domains are passed through, the final iteration 115 | // of the joined array will be a zero-length string 116 | // Manually override that to be the DNS root RR 117 | if len(n) == 0 { 118 | n = "." 119 | } 120 | 121 | if _, inList = domainList[n]; inList { 122 | break 123 | } 124 | } 125 | 126 | return inList 127 | } 128 | 129 | func (b Blocklist) Name() string { return "blocklist" } 130 | -------------------------------------------------------------------------------- /blocklist_test.go: -------------------------------------------------------------------------------- 1 | package blocklist 2 | 3 | import ( 4 | "bytes" 5 | "context" 6 | golog "log" 7 | "testing" 8 | 9 | "github.com/coredns/coredns/plugin/pkg/dnstest" 10 | "github.com/coredns/coredns/plugin/test" 11 | "github.com/stretchr/testify/assert" 12 | 13 | "github.com/miekg/dns" 14 | ) 15 | 16 | func NextHandler() test.Handler { 17 | return test.HandlerFunc(func(ctx context.Context, w dns.ResponseWriter, r *dns.Msg) (int, error) { 18 | return r.Rcode, nil 19 | }) 20 | } 21 | 22 | func TestExample(t *testing.T) { 23 | x := Blocklist{Next: test.NextHandler(dns.RcodeSuccess, nil)} 24 | 25 | b := &bytes.Buffer{} 26 | golog.SetOutput(b) 27 | 28 | ctx := context.TODO() 29 | r := new(dns.Msg) 30 | r.SetQuestion("example.org.", dns.TypeA) 31 | rec := dnstest.NewRecorder(&test.ResponseWriter{}) 32 | 33 | x.ServeDNS(ctx, rec, r) 34 | 35 | assert.Equal(t, dns.RcodeSuccess, rec.Rcode) 36 | } 37 | 38 | func TestAllowedDomain(t *testing.T) { 39 | x := Blocklist{Next: NextHandler(), blockDomains: map[string]bool{"bad.domain.": true}, allowDomains: map[string]bool{"good.domain.": true}} 40 | 41 | b := &bytes.Buffer{} 42 | golog.SetOutput(b) 43 | 44 | ctx := context.TODO() 45 | r := new(dns.Msg) 46 | r.SetQuestion("good.domain.", dns.TypeA) 47 | 48 | rec := dnstest.NewRecorder(&test.ResponseWriter{}) 49 | 50 | x.ServeDNS(ctx, rec, r) 51 | 52 | assert.Equal(t, dns.RcodeSuccess, rec.Rcode) 53 | } 54 | 55 | func TestBlockedDomain(t *testing.T) { 56 | x := Blocklist{Next: NextHandler(), blockDomains: map[string]bool{"bad.domain.": true}} 57 | 58 | b := &bytes.Buffer{} 59 | golog.SetOutput(b) 60 | 61 | ctx := context.TODO() 62 | r := new(dns.Msg) 63 | r.SetQuestion("bad.domain.", dns.TypeA) 64 | 65 | rec := dnstest.NewRecorder(&test.ResponseWriter{}) 66 | 67 | x.ServeDNS(ctx, rec, r) 68 | 69 | assert.Equal(t, x.blockResponse, rec.Rcode) 70 | } 71 | 72 | func TestBlockedParentDomain(t *testing.T) { 73 | x := Blocklist{Next: NextHandler(), blockDomains: map[string]bool{"bad.domain.": true}} 74 | 75 | b := &bytes.Buffer{} 76 | golog.SetOutput(b) 77 | 78 | ctx := context.TODO() 79 | r := new(dns.Msg) 80 | r.SetQuestion("child.bad.domain.", dns.TypeA) 81 | 82 | rec := dnstest.NewRecorder(&test.ResponseWriter{}) 83 | 84 | x.ServeDNS(ctx, rec, r) 85 | 86 | assert.Equal(t, x.blockResponse, rec.Rcode) 87 | } 88 | 89 | func TestBlockedChildDomain(t *testing.T) { 90 | x := Blocklist{Next: NextHandler(), blockDomains: map[string]bool{"child.bad.domain.": true}} 91 | 92 | b := &bytes.Buffer{} 93 | golog.SetOutput(b) 94 | 95 | ctx := context.TODO() 96 | r := new(dns.Msg) 97 | r.SetQuestion("bad.domain.", dns.TypeA) 98 | 99 | rec := dnstest.NewRecorder(&test.ResponseWriter{}) 100 | 101 | x.ServeDNS(ctx, rec, r) 102 | 103 | assert.Equal(t, dns.RcodeSuccess, rec.Rcode) 104 | } 105 | 106 | func TestBlockedRoot(t *testing.T) { 107 | x := Blocklist{Next: NextHandler(), blockDomains: map[string]bool{".": true}} 108 | 109 | b := &bytes.Buffer{} 110 | golog.SetOutput(b) 111 | 112 | ctx := context.TODO() 113 | r := new(dns.Msg) 114 | r.SetQuestion("bad.domain.", dns.TypeA) 115 | 116 | rec := dnstest.NewRecorder(&test.ResponseWriter{}) 117 | 118 | x.ServeDNS(ctx, rec, r) 119 | 120 | assert.Equal(t, x.blockResponse, rec.Rcode) 121 | } 122 | 123 | func TestAllowedDomainWithBlockedParentDomain(t *testing.T) { 124 | x := Blocklist{Next: NextHandler(), blockDomains: map[string]bool{"bad.domain.": true}, allowDomains: map[string]bool{"sub.good.domain.": true}} 125 | 126 | b := &bytes.Buffer{} 127 | golog.SetOutput(b) 128 | 129 | ctx := context.TODO() 130 | r := new(dns.Msg) 131 | r.SetQuestion("sub.good.domain.", dns.TypeA) 132 | 133 | rec := dnstest.NewRecorder(&test.ResponseWriter{}) 134 | 135 | x.ServeDNS(ctx, rec, r) 136 | 137 | assert.Equal(t, dns.RcodeSuccess, rec.Rcode) 138 | } 139 | 140 | func TestBlockedDomainWithAllowedParentDomain(t *testing.T) { 141 | // This test should succeed, as the allowlist always takes precedence, even with a more-specific 142 | // block in place 143 | x := Blocklist{Next: NextHandler(), blockDomains: map[string]bool{"sub.bad.domain.": true}, allowDomains: map[string]bool{"good.domain.": true}} 144 | 145 | b := &bytes.Buffer{} 146 | golog.SetOutput(b) 147 | 148 | ctx := context.TODO() 149 | r := new(dns.Msg) 150 | r.SetQuestion("sub.good.domain.", dns.TypeA) 151 | 152 | rec := dnstest.NewRecorder(&test.ResponseWriter{}) 153 | 154 | x.ServeDNS(ctx, rec, r) 155 | 156 | assert.Equal(t, dns.RcodeSuccess, rec.Rcode) 157 | } 158 | 159 | func TestAllowedDomainWithDomainMetrics(t *testing.T) { 160 | x := Blocklist{Next: NextHandler(), blockDomains: map[string]bool{"bad.domain.": true}, allowDomains: map[string]bool{"allow.bad.domain.": true}, domainMetrics: true} 161 | 162 | b := &bytes.Buffer{} 163 | golog.SetOutput(b) 164 | 165 | ctx := context.TODO() 166 | r := new(dns.Msg) 167 | r.SetQuestion("allow.bad.domain.", dns.TypeA) 168 | 169 | rec := dnstest.NewRecorder(&test.ResponseWriter{}) 170 | 171 | x.ServeDNS(ctx, rec, r) 172 | 173 | assert.Equal(t, dns.RcodeSuccess, rec.Rcode) 174 | } 175 | 176 | func TestBlockedDomainWithDomainMetrics(t *testing.T) { 177 | x := Blocklist{Next: NextHandler(), blockDomains: map[string]bool{"bad.domain.": true}, domainMetrics: true} 178 | 179 | b := &bytes.Buffer{} 180 | golog.SetOutput(b) 181 | 182 | ctx := context.TODO() 183 | r := new(dns.Msg) 184 | r.SetQuestion("bad.domain.", dns.TypeA) 185 | 186 | rec := dnstest.NewRecorder(&test.ResponseWriter{}) 187 | 188 | x.ServeDNS(ctx, rec, r) 189 | 190 | assert.Equal(t, x.blockResponse, rec.Rcode) 191 | } 192 | 193 | func TestBlockedLocalhostStillAllowed(t *testing.T) { 194 | x := Blocklist{Next: NextHandler(), blockDomains: map[string]bool{"localhost.": true}} 195 | 196 | b := &bytes.Buffer{} 197 | golog.SetOutput(b) 198 | 199 | ctx := context.TODO() 200 | r := new(dns.Msg) 201 | r.SetQuestion("localhost.", dns.TypeA) 202 | 203 | rec := dnstest.NewRecorder(&test.ResponseWriter{}) 204 | 205 | x.ServeDNS(ctx, rec, r) 206 | 207 | assert.Equal(t, dns.RcodeSuccess, rec.Rcode) 208 | } 209 | 210 | func TestBlockedDomainWithNxdomain(t *testing.T) { 211 | x := Blocklist{Next: NextHandler(), blockDomains: map[string]bool{"bad.domain.": true}, blockResponse: dns.RcodeNameError} 212 | 213 | b := &bytes.Buffer{} 214 | golog.SetOutput(b) 215 | 216 | ctx := context.TODO() 217 | r := new(dns.Msg) 218 | r.SetQuestion("bad.domain.", dns.TypeA) 219 | 220 | rec := dnstest.NewRecorder(&test.ResponseWriter{}) 221 | 222 | x.ServeDNS(ctx, rec, r) 223 | 224 | assert.Equal(t, dns.RcodeNameError, rec.Rcode) 225 | } 226 | 227 | func TestBlockedDomainWithRefused(t *testing.T) { 228 | x := Blocklist{Next: NextHandler(), blockDomains: map[string]bool{"bad.domain.": true}, blockResponse: dns.RcodeRefused} 229 | 230 | b := &bytes.Buffer{} 231 | golog.SetOutput(b) 232 | 233 | ctx := context.TODO() 234 | r := new(dns.Msg) 235 | r.SetQuestion("bad.domain.", dns.TypeA) 236 | 237 | rec := dnstest.NewRecorder(&test.ResponseWriter{}) 238 | 239 | x.ServeDNS(ctx, rec, r) 240 | 241 | assert.Equal(t, dns.RcodeRefused, rec.Rcode) 242 | } 243 | -------------------------------------------------------------------------------- /go.mod: -------------------------------------------------------------------------------- 1 | module github.com/relekang/coredns-blocklist 2 | 3 | go 1.24.0 4 | 5 | require ( 6 | github.com/coredns/caddy v1.1.4-0.20250930002214-15135a999495 7 | github.com/coredns/coredns v1.13.1 8 | github.com/miekg/dns v1.1.68 9 | github.com/prometheus/client_golang v1.23.2 10 | github.com/stretchr/testify v1.11.1 11 | ) 12 | 13 | require ( 14 | cloud.google.com/go/auth v0.16.5 // indirect 15 | cloud.google.com/go/auth/oauth2adapt v0.2.8 // indirect 16 | cloud.google.com/go/compute/metadata v0.9.0 // indirect 17 | github.com/Azure/azure-sdk-for-go v68.0.0+incompatible // indirect 18 | github.com/Azure/go-autorest v14.2.0+incompatible // indirect 19 | github.com/Azure/go-autorest/autorest v0.11.30 // indirect 20 | github.com/Azure/go-autorest/autorest/adal v0.9.22 // indirect 21 | github.com/Azure/go-autorest/autorest/azure/auth v0.5.13 // indirect 22 | github.com/Azure/go-autorest/autorest/azure/cli v0.4.6 // indirect 23 | github.com/Azure/go-autorest/autorest/date v0.3.0 // indirect 24 | github.com/Azure/go-autorest/autorest/to v0.2.0 // indirect 25 | github.com/Azure/go-autorest/logger v0.2.1 // indirect 26 | github.com/Azure/go-autorest/tracing v0.6.0 // indirect 27 | github.com/DataDog/appsec-internal-go v1.13.0 // indirect 28 | github.com/DataDog/datadog-agent/comp/core/tagger/origindetection v0.67.0 // indirect 29 | github.com/DataDog/datadog-agent/pkg/obfuscate v0.67.0 // indirect 30 | github.com/DataDog/datadog-agent/pkg/proto v0.67.0 // indirect 31 | github.com/DataDog/datadog-agent/pkg/remoteconfig/state v0.69.0 // indirect 32 | github.com/DataDog/datadog-agent/pkg/trace v0.67.0 // indirect 33 | github.com/DataDog/datadog-agent/pkg/util/log v0.67.0 // indirect 34 | github.com/DataDog/datadog-agent/pkg/util/scrubber v0.67.0 // indirect 35 | github.com/DataDog/datadog-agent/pkg/version v0.67.0 // indirect 36 | github.com/DataDog/datadog-go/v5 v5.6.0 // indirect 37 | github.com/DataDog/dd-trace-go/v2 v2.2.3 // indirect 38 | github.com/DataDog/go-libddwaf/v4 v4.3.2 // indirect 39 | github.com/DataDog/go-runtime-metrics-internal v0.0.4-0.20250721125240-fdf1ef85b633 // indirect 40 | github.com/DataDog/go-sqllexer v0.1.6 // indirect 41 | github.com/DataDog/go-tuf v1.1.0-0.5.2 // indirect 42 | github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/attributes v0.27.0 // indirect 43 | github.com/DataDog/sketches-go v1.4.7 // indirect 44 | github.com/Masterminds/semver/v3 v3.3.1 // indirect 45 | github.com/Microsoft/go-winio v0.6.2 // indirect 46 | github.com/apparentlymart/go-cidr v1.1.0 // indirect 47 | github.com/aws/aws-sdk-go-v2 v1.39.2 // indirect 48 | github.com/aws/aws-sdk-go-v2/config v1.31.12 // indirect 49 | github.com/aws/aws-sdk-go-v2/credentials v1.18.16 // indirect 50 | github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.18.9 // indirect 51 | github.com/aws/aws-sdk-go-v2/internal/configsources v1.4.9 // indirect 52 | github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.7.9 // indirect 53 | github.com/aws/aws-sdk-go-v2/internal/ini v1.8.3 // indirect 54 | github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.13.1 // indirect 55 | github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.13.9 // indirect 56 | github.com/aws/aws-sdk-go-v2/service/route53 v1.58.4 // indirect 57 | github.com/aws/aws-sdk-go-v2/service/secretsmanager v1.39.6 // indirect 58 | github.com/aws/aws-sdk-go-v2/service/sso v1.29.6 // indirect 59 | github.com/aws/aws-sdk-go-v2/service/ssooidc v1.35.1 // indirect 60 | github.com/aws/aws-sdk-go-v2/service/sts v1.38.6 // indirect 61 | github.com/aws/smithy-go v1.23.0 // indirect 62 | github.com/beorn7/perks v1.0.1 // indirect 63 | github.com/cespare/xxhash/v2 v2.3.0 // indirect 64 | github.com/cihub/seelog v0.0.0-20170130134532-f561c5e57575 // indirect 65 | github.com/coreos/go-semver v0.3.1 // indirect 66 | github.com/coreos/go-systemd/v22 v22.5.0 // indirect 67 | github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect 68 | github.com/dimchansky/utfbom v1.1.1 // indirect 69 | github.com/dnstap/golang-dnstap v0.4.0 // indirect 70 | github.com/dustin/go-humanize v1.0.1 // indirect 71 | github.com/eapache/queue/v2 v2.0.0-20230407133247-75960ed334e4 // indirect 72 | github.com/ebitengine/purego v0.8.3 // indirect 73 | github.com/emicklei/go-restful/v3 v3.12.2 // indirect 74 | github.com/expr-lang/expr v1.17.6 // indirect 75 | github.com/farsightsec/golang-framestream v0.3.0 // indirect 76 | github.com/felixge/httpsnoop v1.0.4 // indirect 77 | github.com/flynn/go-shlex v0.0.0-20150515145356-3f9db97f8568 // indirect 78 | github.com/fxamacker/cbor/v2 v2.9.0 // indirect 79 | github.com/go-logr/logr v1.4.3 // indirect 80 | github.com/go-logr/stdr v1.2.2 // indirect 81 | github.com/go-ole/go-ole v1.3.0 // indirect 82 | github.com/go-openapi/jsonpointer v0.21.0 // indirect 83 | github.com/go-openapi/jsonreference v0.20.2 // indirect 84 | github.com/go-openapi/swag v0.23.0 // indirect 85 | github.com/go-viper/mapstructure/v2 v2.4.0 // indirect 86 | github.com/gogo/protobuf v1.3.2 // indirect 87 | github.com/golang-jwt/jwt/v4 v4.5.2 // indirect 88 | github.com/golang/protobuf v1.5.4 // indirect 89 | github.com/google/gnostic-models v0.7.0 // indirect 90 | github.com/google/go-cmp v0.7.0 // indirect 91 | github.com/google/pprof v0.0.0-20241210010833-40e02aabc2ad // indirect 92 | github.com/google/s2a-go v0.1.9 // indirect 93 | github.com/google/uuid v1.6.0 // indirect 94 | github.com/googleapis/enterprise-certificate-proxy v0.3.6 // indirect 95 | github.com/googleapis/gax-go/v2 v2.15.0 // indirect 96 | github.com/gorilla/websocket v1.5.4-0.20250319132907-e064f32e3674 // indirect 97 | github.com/grpc-ecosystem/grpc-gateway/v2 v2.26.3 // indirect 98 | github.com/grpc-ecosystem/grpc-opentracing v0.0.0-20180507213350-8e809c8a8645 // indirect 99 | github.com/hashicorp/cronexpr v1.1.3 // indirect 100 | github.com/hashicorp/errwrap v1.1.0 // indirect 101 | github.com/hashicorp/go-cleanhttp v0.5.2 // indirect 102 | github.com/hashicorp/go-multierror v1.1.1 // indirect 103 | github.com/hashicorp/go-rootcerts v1.0.2 // indirect 104 | github.com/hashicorp/go-version v1.7.0 // indirect 105 | github.com/hashicorp/nomad/api v0.0.0-20250909143645-a3b86c697f38 // indirect 106 | github.com/infobloxopen/go-trees v0.0.0-20200715205103-96a057b8dfb9 // indirect 107 | github.com/josharian/intern v1.0.0 // indirect 108 | github.com/json-iterator/go v1.1.12 // indirect 109 | github.com/lufia/plan9stats v0.0.0-20250317134145-8bc96cf8fc35 // indirect 110 | github.com/mailru/easyjson v0.7.7 // indirect 111 | github.com/matttproud/golang_protobuf_extensions v1.0.4 // indirect 112 | github.com/mitchellh/go-homedir v1.1.0 // indirect 113 | github.com/mitchellh/mapstructure v1.5.1-0.20231216201459-8508981c8b6c // indirect 114 | github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect 115 | github.com/modern-go/reflect2 v1.0.3-0.20250322232337-35a7c28c31ee // indirect 116 | github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect 117 | github.com/opentracing-contrib/go-observer v0.0.0-20170622124052-a52f23424492 // indirect 118 | github.com/opentracing/opentracing-go v1.2.0 // indirect 119 | github.com/openzipkin-contrib/zipkin-go-opentracing v0.5.0 // indirect 120 | github.com/openzipkin/zipkin-go v0.4.3 // indirect 121 | github.com/oschwald/geoip2-golang v1.13.0 // indirect 122 | github.com/oschwald/maxminddb-golang v1.13.0 // indirect 123 | github.com/outcaste-io/ristretto v0.2.3 // indirect 124 | github.com/philhofer/fwd v1.1.3-0.20240916144458-20a13a1f6b7c // indirect 125 | github.com/pkg/errors v0.9.1 // indirect 126 | github.com/planetscale/vtprotobuf v0.6.1-0.20240319094008-0393e58bdf10 // indirect 127 | github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect 128 | github.com/power-devops/perfstat v0.0.0-20240221224432-82ca36839d55 // indirect 129 | github.com/prometheus/client_model v0.6.2 // indirect 130 | github.com/prometheus/common v0.66.1 // indirect 131 | github.com/prometheus/procfs v0.16.1 // indirect 132 | github.com/puzpuzpuz/xsync/v3 v3.5.1 // indirect 133 | github.com/quic-go/quic-go v0.55.0 // indirect 134 | github.com/secure-systems-lab/go-securesystemslib v0.9.0 // indirect 135 | github.com/shirou/gopsutil/v4 v4.25.3 // indirect 136 | github.com/spf13/pflag v1.0.6 // indirect 137 | github.com/tinylib/msgp v1.2.5 // indirect 138 | github.com/tklauser/go-sysconf v0.3.15 // indirect 139 | github.com/tklauser/numcpus v0.10.0 // indirect 140 | github.com/x448/float16 v0.8.4 // indirect 141 | github.com/yusufpapurcu/wmi v1.2.4 // indirect 142 | go.etcd.io/etcd/api/v3 v3.6.5 // indirect 143 | go.etcd.io/etcd/client/pkg/v3 v3.6.5 // indirect 144 | go.etcd.io/etcd/client/v3 v3.6.5 // indirect 145 | go.opentelemetry.io/auto/sdk v1.1.0 // indirect 146 | go.opentelemetry.io/collector/component v1.31.0 // indirect 147 | go.opentelemetry.io/collector/featuregate v1.31.0 // indirect 148 | go.opentelemetry.io/collector/internal/telemetry v0.125.0 // indirect 149 | go.opentelemetry.io/collector/pdata v1.31.0 // indirect 150 | go.opentelemetry.io/collector/semconv v0.125.0 // indirect 151 | go.opentelemetry.io/contrib/bridges/otelzap v0.10.0 // indirect 152 | go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.61.0 // indirect 153 | go.opentelemetry.io/otel v1.37.0 // indirect 154 | go.opentelemetry.io/otel/log v0.11.0 // indirect 155 | go.opentelemetry.io/otel/metric v1.37.0 // indirect 156 | go.opentelemetry.io/otel/sdk v1.37.0 // indirect 157 | go.opentelemetry.io/otel/trace v1.37.0 // indirect 158 | go.uber.org/atomic v1.11.0 // indirect 159 | go.uber.org/automaxprocs v1.6.0 // indirect 160 | go.uber.org/multierr v1.11.0 // indirect 161 | go.uber.org/zap v1.27.0 // indirect 162 | go.yaml.in/yaml/v2 v2.4.2 // indirect 163 | go.yaml.in/yaml/v3 v3.0.4 // indirect 164 | golang.org/x/crypto v0.42.0 // indirect 165 | golang.org/x/exp v0.0.0-20250408133849-7e4ce0ab07d0 // indirect 166 | golang.org/x/mod v0.27.0 // indirect 167 | golang.org/x/net v0.45.0 // indirect 168 | golang.org/x/oauth2 v0.31.0 // indirect 169 | golang.org/x/sync v0.17.0 // indirect 170 | golang.org/x/sys v0.36.0 // indirect 171 | golang.org/x/term v0.35.0 // indirect 172 | golang.org/x/text v0.29.0 // indirect 173 | golang.org/x/time v0.13.0 // indirect 174 | golang.org/x/tools v0.36.0 // indirect 175 | golang.org/x/xerrors v0.0.0-20231012003039-104605ab7028 // indirect 176 | google.golang.org/api v0.251.0 // indirect 177 | google.golang.org/genproto/googleapis/api v0.0.0-20250707201910-8d1bb00bc6a7 // indirect 178 | google.golang.org/genproto/googleapis/rpc v0.0.0-20250929231259-57b25ae835d4 // indirect 179 | google.golang.org/grpc v1.75.1 // indirect 180 | google.golang.org/protobuf v1.36.10 // indirect 181 | gopkg.in/evanphx/json-patch.v4 v4.12.0 // indirect 182 | gopkg.in/inf.v0 v0.9.1 // indirect 183 | gopkg.in/ini.v1 v1.67.0 // indirect 184 | gopkg.in/yaml.v3 v3.0.1 // indirect 185 | k8s.io/api v0.34.1 // indirect 186 | k8s.io/apimachinery v0.34.1 // indirect 187 | k8s.io/client-go v0.34.1 // indirect 188 | k8s.io/klog/v2 v2.130.1 // indirect 189 | k8s.io/kube-openapi v0.0.0-20250710124328-f3f2b991d03b // indirect 190 | k8s.io/utils v0.0.0-20250604170112-4c0f3b243397 // indirect 191 | sigs.k8s.io/json v0.0.0-20241014173422-cfa47c3a1cc8 // indirect 192 | sigs.k8s.io/mcs-api v0.3.0 // indirect 193 | sigs.k8s.io/randfill v1.0.0 // indirect 194 | sigs.k8s.io/structured-merge-diff/v6 v6.3.0 // indirect 195 | sigs.k8s.io/yaml v1.6.0 // indirect 196 | ) 197 | -------------------------------------------------------------------------------- /go.sum: -------------------------------------------------------------------------------- 1 | cloud.google.com/go/auth v0.16.5 h1:mFWNQ2FEVWAliEQWpAdH80omXFokmrnbDhUS9cBywsI= 2 | cloud.google.com/go/auth v0.16.5/go.mod h1:utzRfHMP+Vv0mpOkTRQoWD2q3BatTOoWbA7gCc2dUhQ= 3 | cloud.google.com/go/auth/oauth2adapt v0.2.8 h1:keo8NaayQZ6wimpNSmW5OPc283g65QNIiLpZnkHRbnc= 4 | cloud.google.com/go/auth/oauth2adapt v0.2.8/go.mod h1:XQ9y31RkqZCcwJWNSx2Xvric3RrU88hAYYbjDWYDL+c= 5 | cloud.google.com/go/compute/metadata v0.9.0 h1:pDUj4QMoPejqq20dK0Pg2N4yG9zIkYGdBtwLoEkH9Zs= 6 | cloud.google.com/go/compute/metadata v0.9.0/go.mod h1:E0bWwX5wTnLPedCKqk3pJmVgCBSM6qQI1yTBdEb3C10= 7 | github.com/Azure/azure-sdk-for-go v68.0.0+incompatible h1:fcYLmCpyNYRnvJbPerq7U0hS+6+I79yEDJBqVNcqUzU= 8 | github.com/Azure/azure-sdk-for-go v68.0.0+incompatible/go.mod h1:9XXNKU+eRnpl9moKnB4QOLf1HestfXbmab5FXxiDBjc= 9 | github.com/Azure/go-autorest v14.2.0+incompatible h1:V5VMDjClD3GiElqLWO7mz2MxNAK/vTfRHdAubSIPRgs= 10 | github.com/Azure/go-autorest v14.2.0+incompatible/go.mod h1:r+4oMnoxhatjLLJ6zxSWATqVooLgysK6ZNox3g/xq24= 11 | github.com/Azure/go-autorest/autorest v0.11.28/go.mod h1:MrkzG3Y3AH668QyF9KRk5neJnGgmhQ6krbhR8Q5eMvA= 12 | github.com/Azure/go-autorest/autorest v0.11.30 h1:iaZ1RGz/ALZtN5eq4Nr1SOFSlf2E4pDI3Tcsl+dZPVE= 13 | github.com/Azure/go-autorest/autorest v0.11.30/go.mod h1:t1kpPIOpIVX7annvothKvb0stsrXa37i7b+xpmBW8Fs= 14 | github.com/Azure/go-autorest/autorest/adal v0.9.18/go.mod h1:XVVeme+LZwABT8K5Lc3hA4nAe8LDBVle26gTrguhhPQ= 15 | github.com/Azure/go-autorest/autorest/adal v0.9.22 h1:/GblQdIudfEM3AWWZ0mrYJQSd7JS4S/Mbzh6F0ov0Xc= 16 | github.com/Azure/go-autorest/autorest/adal v0.9.22/go.mod h1:XuAbAEUv2Tta//+voMI038TrJBqjKam0me7qR+L8Cmk= 17 | github.com/Azure/go-autorest/autorest/azure/auth v0.5.13 h1:Ov8avRZi2vmrE2JcXw+tu5K/yB41r7xK9GZDiBF7NdM= 18 | github.com/Azure/go-autorest/autorest/azure/auth v0.5.13/go.mod h1:5BAVfWLWXihP47vYrPuBKKf4cS0bXI+KM9Qx6ETDJYo= 19 | github.com/Azure/go-autorest/autorest/azure/cli v0.4.6 h1:w77/uPk80ZET2F+AfQExZyEWtn+0Rk/uw17m9fv5Ajc= 20 | github.com/Azure/go-autorest/autorest/azure/cli v0.4.6/go.mod h1:piCfgPho7BiIDdEQ1+g4VmKyD5y+p/XtSNqE6Hc4QD0= 21 | github.com/Azure/go-autorest/autorest/date v0.3.0 h1:7gUk1U5M/CQbp9WoqinNzJar+8KY+LPI6wiWrP/myHw= 22 | github.com/Azure/go-autorest/autorest/date v0.3.0/go.mod h1:BI0uouVdmngYNUzGWeSYnokU+TrmwEsOqdt8Y6sso74= 23 | github.com/Azure/go-autorest/autorest/mocks v0.4.1/go.mod h1:LTp+uSrOhSkaKrUy935gNZuuIPPVsHlr9DSOxSayd+k= 24 | github.com/Azure/go-autorest/autorest/mocks v0.4.2 h1:PGN4EDXnuQbojHbU0UWoNvmu9AGVwYHG9/fkDYhtAfw= 25 | github.com/Azure/go-autorest/autorest/mocks v0.4.2/go.mod h1:Vy7OitM9Kei0i1Oj+LvyAWMXJHeKH1MVlzFugfVrmyU= 26 | github.com/Azure/go-autorest/autorest/to v0.2.0 h1:nQOZzFCudTh+TvquAtCRjM01VEYx85e9qbwt5ncW4L8= 27 | github.com/Azure/go-autorest/autorest/to v0.2.0/go.mod h1:GunWKJp1AEqgMaGLV+iocmRAJWqST1wQYhyyjXJ3SJc= 28 | github.com/Azure/go-autorest/logger v0.2.1 h1:IG7i4p/mDa2Ce4TRyAO8IHnVhAVF3RFU+ZtXWSmf4Tg= 29 | github.com/Azure/go-autorest/logger v0.2.1/go.mod h1:T9E3cAhj2VqvPOtCYAvby9aBXkZmbF5NWuPV8+WeEW8= 30 | github.com/Azure/go-autorest/tracing v0.6.0 h1:TYi4+3m5t6K48TGI9AUdb+IzbnSxvnvUMfuitfgcfuo= 31 | github.com/Azure/go-autorest/tracing v0.6.0/go.mod h1:+vhtPC754Xsa23ID7GlGsrdKBpUA79WCAKPPZVC2DeU= 32 | github.com/DataDog/appsec-internal-go v1.13.0 h1:aO6DmHYsAU8BNFuvYJByhMKGgcQT3WAbj9J/sgAJxtA= 33 | github.com/DataDog/appsec-internal-go v1.13.0/go.mod h1:9YppRCpElfGX+emXOKruShFYsdPq7WEPq/Fen4tYYpk= 34 | github.com/DataDog/datadog-agent/comp/core/tagger/origindetection v0.67.0 h1:2mEwRWvhIPHMPK4CMD8iKbsrYBxeMBSuuCXumQAwShU= 35 | github.com/DataDog/datadog-agent/comp/core/tagger/origindetection v0.67.0/go.mod h1:ejJHsyJTG7NU6c6TDbF7dmckD3g+AUGSdiSXy+ZyaCE= 36 | github.com/DataDog/datadog-agent/pkg/obfuscate v0.67.0 h1:NcvyDVIUA0NbBDbp7QJnsYhoBv548g8bXq886795mCQ= 37 | github.com/DataDog/datadog-agent/pkg/obfuscate v0.67.0/go.mod h1:1oPcs3BUTQhiTkmk789rb7ob105MxNV6OuBa28BdukQ= 38 | github.com/DataDog/datadog-agent/pkg/proto v0.67.0 h1:7dO6mKYRb7qSiXEu7Q2mfeKbhp4hykCAULy4BfMPmsQ= 39 | github.com/DataDog/datadog-agent/pkg/proto v0.67.0/go.mod h1:bKVXB7pxBg0wqXF6YSJ+KU6PeCWKDyJj83kUH1ab+7o= 40 | github.com/DataDog/datadog-agent/pkg/remoteconfig/state v0.69.0 h1:/DsN4R+IkC6t1+4cHSfkxzLtDl84rBbPC5Wa9srBAoM= 41 | github.com/DataDog/datadog-agent/pkg/remoteconfig/state v0.69.0/go.mod h1:Th2LD/IGid5Rza55pzqGu6nUdOv/Rts6wPwLjTyOSTs= 42 | github.com/DataDog/datadog-agent/pkg/trace v0.67.0 h1:dqt+/nObo0JKyaEqIMZgfqGZbx9TfEHpCkrjQ/zzH7k= 43 | github.com/DataDog/datadog-agent/pkg/trace v0.67.0/go.mod h1:zmZoEtKvOnaKHbJGBKH3a4xuyPrSfBaF0ZE3Q3rCoDw= 44 | github.com/DataDog/datadog-agent/pkg/util/log v0.67.0 h1:xrH15QNqeJZkYoXYi44VCIvGvTwlQ3z2iT2QVTGiT7s= 45 | github.com/DataDog/datadog-agent/pkg/util/log v0.67.0/go.mod h1:dfVLR+euzEyg1CeiExgJQq1c1dod42S6IeiRPj8H7Yk= 46 | github.com/DataDog/datadog-agent/pkg/util/scrubber v0.67.0 h1:aIWF85OKxXGo7rVyqJ7jm7lm2qCQrgyXzYyFuw0T2EQ= 47 | github.com/DataDog/datadog-agent/pkg/util/scrubber v0.67.0/go.mod h1:Lfap5FuM4b/Pw9IrTuAvWBWZEmXOvZhCya3dYv4G8O0= 48 | github.com/DataDog/datadog-agent/pkg/version v0.67.0 h1:TB8H8r+laB1Qdttvvc6XJVyLGxp8E6j2f2Mh5IPbYmQ= 49 | github.com/DataDog/datadog-agent/pkg/version v0.67.0/go.mod h1:kvAw/WbI7qLAsDI2wHabZfM7Cv2zraD3JA3323GEB+8= 50 | github.com/DataDog/datadog-go/v5 v5.6.0 h1:2oCLxjF/4htd55piM75baflj/KoE6VYS7alEUqFvRDw= 51 | github.com/DataDog/datadog-go/v5 v5.6.0/go.mod h1:K9kcYBlxkcPP8tvvjZZKs/m1edNAUFzBbdpTUKfCsuw= 52 | github.com/DataDog/dd-trace-go/v2 v2.2.3 h1:6RvVdY9suR/rYYYZHjx4txrtSYcRZ5u5Cs2sXMsIBf4= 53 | github.com/DataDog/dd-trace-go/v2 v2.2.3/go.mod h1:1LcqWELgQwgk6x7sO0MXUgsvxcAVjxSA423cUjvUqR0= 54 | github.com/DataDog/go-libddwaf/v4 v4.3.2 h1:YGvW2Of1C4e1yU+p7iibmhN2zEOgi9XEchbhQjBxb/A= 55 | github.com/DataDog/go-libddwaf/v4 v4.3.2/go.mod h1:/AZqP6zw3qGJK5mLrA0PkfK3UQDk1zCI2fUNCt4xftE= 56 | github.com/DataDog/go-runtime-metrics-internal v0.0.4-0.20250721125240-fdf1ef85b633 h1:ZRLR9Lbym748e8RznWzmSoK+OfV+8qW6SdNYA4/IqdA= 57 | github.com/DataDog/go-runtime-metrics-internal v0.0.4-0.20250721125240-fdf1ef85b633/go.mod h1:YFoTl1xsMzdSRFIu33oCSPS/3+HZAPGpO3oOM96wXCM= 58 | github.com/DataDog/go-sqllexer v0.1.6 h1:skEXpWEVCpeZFIiydoIa2f2rf+ymNpjiIMqpW4w3YAk= 59 | github.com/DataDog/go-sqllexer v0.1.6/go.mod h1:GGpo1h9/BVSN+6NJKaEcJ9Jn44Hqc63Rakeb+24Mjgo= 60 | github.com/DataDog/go-tuf v1.1.0-0.5.2 h1:4CagiIekonLSfL8GMHRHcHudo1fQnxELS9g4tiAupQ4= 61 | github.com/DataDog/go-tuf v1.1.0-0.5.2/go.mod h1:zBcq6f654iVqmkk8n2Cx81E1JnNTMOAx1UEO/wZR+P0= 62 | github.com/DataDog/gostackparse v0.7.0 h1:i7dLkXHvYzHV308hnkvVGDL3BR4FWl7IsXNPz/IGQh4= 63 | github.com/DataDog/gostackparse v0.7.0/go.mod h1:lTfqcJKqS9KnXQGnyQMCugq3u1FP6UZMfWR0aitKFMM= 64 | github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/attributes v0.27.0 h1:5US5SqqhfkZkg/E64uvn7YmeTwnudJHtlPEH/LOT99w= 65 | github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/attributes v0.27.0/go.mod h1:VRo4D6rj92AExpVBlq3Gcuol9Nm1bber12KyxRjKGWw= 66 | github.com/DataDog/sketches-go v1.4.7 h1:eHs5/0i2Sdf20Zkj0udVFWuCrXGRFig2Dcfm5rtcTxc= 67 | github.com/DataDog/sketches-go v1.4.7/go.mod h1:eAmQ/EBmtSO+nQp7IZMZVRPT4BQTmIc5RZQ+deGlTPM= 68 | github.com/Masterminds/semver/v3 v3.3.1 h1:QtNSWtVZ3nBfk8mAOu/B6v7FMJ+NHTIgUPi7rj+4nv4= 69 | github.com/Masterminds/semver/v3 v3.3.1/go.mod h1:4V+yj/TJE1HU9XfppCwVMZq3I84lprf4nC11bSS5beM= 70 | github.com/Microsoft/go-winio v0.5.0/go.mod h1:JPGBdM1cNvN/6ISo+n8V5iA4v8pBzdOpzfwIujj1a84= 71 | github.com/Microsoft/go-winio v0.6.2 h1:F2VQgta7ecxGYO8k3ZZz3RS8fVIXVxONVUPlNERoyfY= 72 | github.com/Microsoft/go-winio v0.6.2/go.mod h1:yd8OoFMLzJbo9gZq8j5qaps8bJ9aShtEA8Ipt1oGCvU= 73 | github.com/apparentlymart/go-cidr v1.1.0 h1:2mAhrMoF+nhXqxTzSZMUzDHkLjmIHC+Zzn4tdgBZjnU= 74 | github.com/apparentlymart/go-cidr v1.1.0/go.mod h1:EBcsNrHc3zQeuaeCeCtQruQm+n9/YjEn/vI25Lg7Gwc= 75 | github.com/aws/aws-sdk-go-v2 v1.39.2 h1:EJLg8IdbzgeD7xgvZ+I8M1e0fL0ptn/M47lianzth0I= 76 | github.com/aws/aws-sdk-go-v2 v1.39.2/go.mod h1:sDioUELIUO9Znk23YVmIk86/9DOpkbyyVb1i/gUNFXY= 77 | github.com/aws/aws-sdk-go-v2/config v1.31.12 h1:pYM1Qgy0dKZLHX2cXslNacbcEFMkDMl+Bcj5ROuS6p8= 78 | github.com/aws/aws-sdk-go-v2/config v1.31.12/go.mod h1:/MM0dyD7KSDPR+39p9ZNVKaHDLb9qnfDurvVS2KAhN8= 79 | github.com/aws/aws-sdk-go-v2/credentials v1.18.16 h1:4JHirI4zp958zC026Sm+V4pSDwW4pwLefKrc0bF2lwI= 80 | github.com/aws/aws-sdk-go-v2/credentials v1.18.16/go.mod h1:qQMtGx9OSw7ty1yLclzLxXCRbrkjWAM7JnObZjmCB7I= 81 | github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.18.9 h1:Mv4Bc0mWmv6oDuSWTKnk+wgeqPL5DRFu5bQL9BGPQ8Y= 82 | github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.18.9/go.mod h1:IKlKfRppK2a1y0gy1yH6zD+yX5uplJ6UuPlgd48dJiQ= 83 | github.com/aws/aws-sdk-go-v2/internal/configsources v1.4.9 h1:se2vOWGD3dWQUtfn4wEjRQJb1HK1XsNIt825gskZ970= 84 | github.com/aws/aws-sdk-go-v2/internal/configsources v1.4.9/go.mod h1:hijCGH2VfbZQxqCDN7bwz/4dzxV+hkyhjawAtdPWKZA= 85 | github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.7.9 h1:6RBnKZLkJM4hQ+kN6E7yWFveOTg8NLPHAkqrs4ZPlTU= 86 | github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.7.9/go.mod h1:V9rQKRmK7AWuEsOMnHzKj8WyrIir1yUJbZxDuZLFvXI= 87 | github.com/aws/aws-sdk-go-v2/internal/ini v1.8.3 h1:bIqFDwgGXXN1Kpp99pDOdKMTTb5d2KyU5X/BZxjOkRo= 88 | github.com/aws/aws-sdk-go-v2/internal/ini v1.8.3/go.mod h1:H5O/EsxDWyU+LP/V8i5sm8cxoZgc2fdNR9bxlOFrQTo= 89 | github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.13.1 h1:oegbebPEMA/1Jny7kvwejowCaHz1FWZAQ94WXFNCyTM= 90 | github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.13.1/go.mod h1:kemo5Myr9ac0U9JfSjMo9yHLtw+pECEHsFtJ9tqCEI8= 91 | github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.13.9 h1:5r34CgVOD4WZudeEKZ9/iKpiT6cM1JyEROpXjOcdWv8= 92 | github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.13.9/go.mod h1:dB12CEbNWPbzO2uC6QSWHteqOg4JfBVJOojbAoAUb5I= 93 | github.com/aws/aws-sdk-go-v2/service/route53 v1.58.4 h1:KycXrohD5OxAZ5h02YechO2gevvoHfAPAaJM5l8zqb0= 94 | github.com/aws/aws-sdk-go-v2/service/route53 v1.58.4/go.mod h1:xNLZLn4SusktBQ5moqUOgiDKGz3a7vHwF4W0KD+WBPc= 95 | github.com/aws/aws-sdk-go-v2/service/secretsmanager v1.39.6 h1:9PWl450XOG+m5lKv+qg5BXso1eLxpsZLqq7VPug5km0= 96 | github.com/aws/aws-sdk-go-v2/service/secretsmanager v1.39.6/go.mod h1:hwt7auGsDcaNQ8pzLgE2kCNyIWouYlAKSjuUu5Dqr7I= 97 | github.com/aws/aws-sdk-go-v2/service/sso v1.29.6 h1:A1oRkiSQOWstGh61y4Wc/yQ04sqrQZr1Si/oAXj20/s= 98 | github.com/aws/aws-sdk-go-v2/service/sso v1.29.6/go.mod h1:5PfYspyCU5Vw1wNPsxi15LZovOnULudOQuVxphSflQA= 99 | github.com/aws/aws-sdk-go-v2/service/ssooidc v1.35.1 h1:5fm5RTONng73/QA73LhCNR7UT9RpFH3hR6HWL6bIgVY= 100 | github.com/aws/aws-sdk-go-v2/service/ssooidc v1.35.1/go.mod h1:xBEjWD13h+6nq+z4AkqSfSvqRKFgDIQeaMguAJndOWo= 101 | github.com/aws/aws-sdk-go-v2/service/sts v1.38.6 h1:p3jIvqYwUZgu/XYeI48bJxOhvm47hZb5HUQ0tn6Q9kA= 102 | github.com/aws/aws-sdk-go-v2/service/sts v1.38.6/go.mod h1:WtKK+ppze5yKPkZ0XwqIVWD4beCwv056ZbPQNoeHqM8= 103 | github.com/aws/smithy-go v1.23.0 h1:8n6I3gXzWJB2DxBDnfxgBaSX6oe0d/t10qGz7OKqMCE= 104 | github.com/aws/smithy-go v1.23.0/go.mod h1:t1ufH5HMublsJYulve2RKmHDC15xu1f26kHCp/HgceI= 105 | github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= 106 | github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= 107 | github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= 108 | github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs= 109 | github.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= 110 | github.com/cihub/seelog v0.0.0-20170130134532-f561c5e57575 h1:kHaBemcxl8o/pQ5VM1c8PVE1PubbNx3mjUr09OqWGCs= 111 | github.com/cihub/seelog v0.0.0-20170130134532-f561c5e57575/go.mod h1:9d6lWj8KzO/fd/NrVaLscBKmPigpZpn5YawRPw+e3Yo= 112 | github.com/coredns/caddy v1.1.4-0.20250930002214-15135a999495 h1:JFeOmbjLnVRhvmLHyuO3M1pfXWlPWpwkdM8UqXZRtBg= 113 | github.com/coredns/caddy v1.1.4-0.20250930002214-15135a999495/go.mod h1:A6ntJQlAWuQfFlsd9hvigKbo2WS0VUs2l1e2F+BawD4= 114 | github.com/coredns/coredns v1.13.1 h1:yhYvf/QVwHNjBK65RkC8d9VW91dP9XKem3BOon4eokg= 115 | github.com/coredns/coredns v1.13.1/go.mod h1:UHmBXdGEn/WQ1jdyMYgOxFh/VklkE//arIAxptwVAZI= 116 | github.com/coreos/go-semver v0.3.1 h1:yi21YpKnrx1gt5R+la8n5WgS0kCrsPp33dmEyHReZr4= 117 | github.com/coreos/go-semver v0.3.1/go.mod h1:irMmmIw/7yzSRPWryHsK7EYSg09caPQL03VsM8rvUec= 118 | github.com/coreos/go-systemd/v22 v22.5.0 h1:RrqgGjYQKalulkV8NGVIfkXQf6YYmOyiJKk8iXXhfZs= 119 | github.com/coreos/go-systemd/v22 v22.5.0/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc= 120 | github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= 121 | github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= 122 | github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= 123 | github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM= 124 | github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= 125 | github.com/dgryski/go-farm v0.0.0-20190423205320-6a90982ecee2/go.mod h1:SqUrOPUnsFjfmXRMNPybcSiG0BgUW2AuFH8PAnS2iTw= 126 | github.com/dgryski/go-farm v0.0.0-20240924180020-3414d57e47da h1:aIftn67I1fkbMa512G+w+Pxci9hJPB8oMnkcP3iZF38= 127 | github.com/dgryski/go-farm v0.0.0-20240924180020-3414d57e47da/go.mod h1:SqUrOPUnsFjfmXRMNPybcSiG0BgUW2AuFH8PAnS2iTw= 128 | github.com/dimchansky/utfbom v1.1.1 h1:vV6w1AhK4VMnhBno/TPVCoK9U/LP0PkLCS9tbxHdi/U= 129 | github.com/dimchansky/utfbom v1.1.1/go.mod h1:SxdoEBH5qIqFocHMyGOXVAybYJdr71b1Q/j0mACtrfE= 130 | github.com/dnstap/golang-dnstap v0.4.0 h1:KRHBoURygdGtBjDI2w4HifJfMAhhOqDuktAokaSa234= 131 | github.com/dnstap/golang-dnstap v0.4.0/go.mod h1:FqsSdH58NAmkAvKcpyxht7i4FoBjKu8E4JUPt8ipSUs= 132 | github.com/docker/go-units v0.5.0 h1:69rxXcBk27SvSaaxTtLh/8llcHD8vYHT7WSdRZ/jvr4= 133 | github.com/docker/go-units v0.5.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk= 134 | github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= 135 | github.com/dustin/go-humanize v1.0.1 h1:GzkhY7T5VNhEkwH0PVJgjz+fX1rhBrR7pRT3mDkpeCY= 136 | github.com/dustin/go-humanize v1.0.1/go.mod h1:Mu1zIs6XwVuF/gI1OepvI0qD18qycQx+mFykh5fBlto= 137 | github.com/eapache/queue/v2 v2.0.0-20230407133247-75960ed334e4 h1:8EXxF+tCLqaVk8AOC29zl2mnhQjwyLxxOTuhUazWRsg= 138 | github.com/eapache/queue/v2 v2.0.0-20230407133247-75960ed334e4/go.mod h1:I5sHm0Y0T1u5YjlyqC5GVArM7aNZRUYtTjmJ8mPJFds= 139 | github.com/ebitengine/purego v0.8.3 h1:K+0AjQp63JEZTEMZiwsI9g0+hAMNohwUOtY0RPGexmc= 140 | github.com/ebitengine/purego v0.8.3/go.mod h1:iIjxzd6CiRiOG0UyXP+V1+jWqUXVjPKLAI0mRfJZTmQ= 141 | github.com/emicklei/go-restful/v3 v3.12.2 h1:DhwDP0vY3k8ZzE0RunuJy8GhNpPL6zqLkDf9B/a0/xU= 142 | github.com/emicklei/go-restful/v3 v3.12.2/go.mod h1:6n3XBCmQQb25CM2LCACGz8ukIrRry+4bhvbpWn3mrbc= 143 | github.com/expr-lang/expr v1.17.6 h1:1h6i8ONk9cexhDmowO/A64VPxHScu7qfSl2k8OlINec= 144 | github.com/expr-lang/expr v1.17.6/go.mod h1:8/vRC7+7HBzESEqt5kKpYXxrxkr31SaO8r40VO/1IT4= 145 | github.com/farsightsec/golang-framestream v0.3.0 h1:/spFQHucTle/ZIPkYqrfshQqPe2VQEzesH243TjIwqA= 146 | github.com/farsightsec/golang-framestream v0.3.0/go.mod h1:eNde4IQyEiA5br02AouhEHCu3p3UzrCdFR4LuQHklMI= 147 | github.com/felixge/httpsnoop v1.0.4 h1:NFTV2Zj1bL4mc9sqWACXbQFVBBg2W3GPvqp8/ESS2Wg= 148 | github.com/felixge/httpsnoop v1.0.4/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= 149 | github.com/flynn/go-shlex v0.0.0-20150515145356-3f9db97f8568 h1:BHsljHzVlRcyQhjrss6TZTdY2VfCqZPbv5k3iBFa2ZQ= 150 | github.com/flynn/go-shlex v0.0.0-20150515145356-3f9db97f8568/go.mod h1:xEzjJPgXI435gkrCt3MPfRiAkVrwSbHsst4LCFVfpJc= 151 | github.com/fxamacker/cbor/v2 v2.9.0 h1:NpKPmjDBgUfBms6tr6JZkTHtfFGcMKsw3eGcmD/sapM= 152 | github.com/fxamacker/cbor/v2 v2.9.0/go.mod h1:vM4b+DJCtHn+zz7h3FFp/hDAI9WNWCsZj23V5ytsSxQ= 153 | github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= 154 | github.com/go-logr/logr v1.4.3 h1:CjnDlHq8ikf6E492q6eKboGOC0T8CDaOvkHCIg8idEI= 155 | github.com/go-logr/logr v1.4.3/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= 156 | github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag= 157 | github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE= 158 | github.com/go-ole/go-ole v1.2.6/go.mod h1:pprOEPIfldk/42T2oK7lQ4v4JSDwmV0As9GaiUsvbm0= 159 | github.com/go-ole/go-ole v1.3.0 h1:Dt6ye7+vXGIKZ7Xtk4s6/xVdGDQynvom7xCFEdWr6uE= 160 | github.com/go-ole/go-ole v1.3.0/go.mod h1:5LS6F96DhAwUc7C+1HLexzMXY1xGRSryjyPPKW6zv78= 161 | github.com/go-openapi/jsonpointer v0.19.6/go.mod h1:osyAmYz/mB/C3I+WsTTSgw1ONzaLJoLCyoi6/zppojs= 162 | github.com/go-openapi/jsonpointer v0.21.0 h1:YgdVicSA9vH5RiHs9TZW5oyafXZFc6+2Vc1rr/O9oNQ= 163 | github.com/go-openapi/jsonpointer v0.21.0/go.mod h1:IUyH9l/+uyhIYQ/PXVA41Rexl+kOkAPDdXEYns6fzUY= 164 | github.com/go-openapi/jsonreference v0.20.2 h1:3sVjiK66+uXK/6oQ8xgcRKcFgQ5KXa2KvnJRumpMGbE= 165 | github.com/go-openapi/jsonreference v0.20.2/go.mod h1:Bl1zwGIM8/wsvqjsOQLJ/SH+En5Ap4rVB5KVcIDZG2k= 166 | github.com/go-openapi/swag v0.22.3/go.mod h1:UzaqsxGiab7freDnrUUra0MwWfN/q7tE4j+VcZ0yl14= 167 | github.com/go-openapi/swag v0.23.0 h1:vsEVJDUo2hPJ2tu0/Xc+4noaxyEffXNIs3cOULZ+GrE= 168 | github.com/go-openapi/swag v0.23.0/go.mod h1:esZ8ITTYEsH1V2trKHjAN8Ai7xHb8RV+YSZ577vPjgQ= 169 | github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572 h1:tfuBGBXKqDEevZMzYi5KSi8KkcZtzBcTgAUUtapy0OI= 170 | github.com/go-task/slim-sprig/v3 v3.0.0 h1:sUs3vkvUymDpBKi3qH1YSqBQk9+9D/8M2mN1vB6EwHI= 171 | github.com/go-task/slim-sprig/v3 v3.0.0/go.mod h1:W848ghGpv3Qj3dhTPRyJypKRiqCdHZiAzKg9hl15HA8= 172 | github.com/go-viper/mapstructure/v2 v2.4.0 h1:EBsztssimR/CONLSZZ04E8qAkxNYq4Qp9LvH92wZUgs= 173 | github.com/go-viper/mapstructure/v2 v2.4.0/go.mod h1:oJDH3BJKyqBA2TXFhDsKDGDTlndYOZ6rGS0BRZIxGhM= 174 | github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= 175 | github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q= 176 | github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= 177 | github.com/golang-jwt/jwt/v4 v4.0.0/go.mod h1:/xlHOz8bRuivTWchD4jCa+NbatV+wEUSzwAxVc6locg= 178 | github.com/golang-jwt/jwt/v4 v4.2.0/go.mod h1:/xlHOz8bRuivTWchD4jCa+NbatV+wEUSzwAxVc6locg= 179 | github.com/golang-jwt/jwt/v4 v4.5.0/go.mod h1:m21LjoU+eqJr34lmDMbreY2eSTRJ1cv77w39/MY0Ch0= 180 | github.com/golang-jwt/jwt/v4 v4.5.2 h1:YtQM7lnr8iZ+j5q71MGKkNw9Mn7AjHM68uc9g5fXeUI= 181 | github.com/golang-jwt/jwt/v4 v4.5.2/go.mod h1:m21LjoU+eqJr34lmDMbreY2eSTRJ1cv77w39/MY0Ch0= 182 | github.com/golang/mock v1.6.0/go.mod h1:p6yTPP+5HYm5mzsMV8JkE6ZKdX+/wYM6Hr+LicevLPs= 183 | github.com/golang/mock v1.7.0-rc.1 h1:YojYx61/OLFsiv6Rw1Z96LpldJIy31o+UHmwAUMJ6/U= 184 | github.com/golang/mock v1.7.0-rc.1/go.mod h1:s42URUywIqd+OcERslBJvOjepvNymP31m3q8d/GkuRs= 185 | github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= 186 | github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8= 187 | github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA= 188 | github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs= 189 | github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w= 190 | github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0= 191 | github.com/golang/protobuf v1.5.4 h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek= 192 | github.com/golang/protobuf v1.5.4/go.mod h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6rSs7xps= 193 | github.com/google/gnostic-models v0.7.0 h1:qwTtogB15McXDaNqTZdzPJRHvaVJlAl+HVQnLmJEJxo= 194 | github.com/google/gnostic-models v0.7.0/go.mod h1:whL5G0m6dmc5cPxKc5bdKdEN3UjI7OUGxBlw57miDrQ= 195 | github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= 196 | github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= 197 | github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= 198 | github.com/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8= 199 | github.com/google/go-cmp v0.7.0/go.mod h1:pXiqmnSA92OHEEa9HXL2W4E7lf9JzCmGVUdgjX3N/iU= 200 | github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= 201 | github.com/google/gofuzz v1.2.0 h1:xRy4A+RhZaiKjJ1bPfwQ8sedCA+YS2YcCHW6ec7JMi0= 202 | github.com/google/gofuzz v1.2.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= 203 | github.com/google/pprof v0.0.0-20241210010833-40e02aabc2ad h1:a6HEuzUHeKH6hwfN/ZoQgRgVIWFJljSWa/zetS2WTvg= 204 | github.com/google/pprof v0.0.0-20241210010833-40e02aabc2ad/go.mod h1:vavhavw2zAxS5dIdcRluK6cSGGPlZynqzFM8NdvU144= 205 | github.com/google/s2a-go v0.1.9 h1:LGD7gtMgezd8a/Xak7mEWL0PjoTQFvpRudN895yqKW0= 206 | github.com/google/s2a-go v0.1.9/go.mod h1:YA0Ei2ZQL3acow2O62kdp9UlnvMmU7kA6Eutn0dXayM= 207 | github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= 208 | github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= 209 | github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= 210 | github.com/googleapis/enterprise-certificate-proxy v0.3.6 h1:GW/XbdyBFQ8Qe+YAmFU9uHLo7OnF5tL52HFAgMmyrf4= 211 | github.com/googleapis/enterprise-certificate-proxy v0.3.6/go.mod h1:MkHOF77EYAE7qfSuSS9PU6g4Nt4e11cnsDUowfwewLA= 212 | github.com/googleapis/gax-go/v2 v2.15.0 h1:SyjDc1mGgZU5LncH8gimWo9lW1DtIfPibOG81vgd/bo= 213 | github.com/googleapis/gax-go/v2 v2.15.0/go.mod h1:zVVkkxAQHa1RQpg9z2AUCMnKhi0Qld9rcmyfL1OZhoc= 214 | github.com/gorilla/websocket v1.5.4-0.20250319132907-e064f32e3674 h1:JeSE6pjso5THxAzdVpqr6/geYxZytqFMBCOtn/ujyeo= 215 | github.com/gorilla/websocket v1.5.4-0.20250319132907-e064f32e3674/go.mod h1:r4w70xmWCQKmi1ONH4KIaBptdivuRPyosB9RmPlGEwA= 216 | github.com/grpc-ecosystem/grpc-gateway/v2 v2.26.3 h1:5ZPtiqj0JL5oKWmcsq4VMaAW5ukBEgSGXEN89zeH1Jo= 217 | github.com/grpc-ecosystem/grpc-gateway/v2 v2.26.3/go.mod h1:ndYquD05frm2vACXE1nsccT4oJzjhw2arTS2cpUD1PI= 218 | github.com/grpc-ecosystem/grpc-opentracing v0.0.0-20180507213350-8e809c8a8645 h1:MJG/KsmcqMwFAkh8mTnAwhyKoB+sTAnY4CACC110tbU= 219 | github.com/grpc-ecosystem/grpc-opentracing v0.0.0-20180507213350-8e809c8a8645/go.mod h1:6iZfnjpejD4L/4DwD7NryNaJyCQdzwWwH2MWhCA90Kw= 220 | github.com/hashicorp/cronexpr v1.1.3 h1:rl5IkxXN2m681EfivTlccqIryzYJSXRGRNa0xeG7NA4= 221 | github.com/hashicorp/cronexpr v1.1.3/go.mod h1:P4wA0KBl9C5q2hABiMO7cp6jcIg96CDh1Efb3g1PWA4= 222 | github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= 223 | github.com/hashicorp/errwrap v1.1.0 h1:OxrOeh75EUXMY8TBjag2fzXGZ40LB6IKw45YeGUDY2I= 224 | github.com/hashicorp/errwrap v1.1.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= 225 | github.com/hashicorp/go-cleanhttp v0.5.2 h1:035FKYIWjmULyFRBKPs8TBQoi0x6d9G4xc9neXJWAZQ= 226 | github.com/hashicorp/go-cleanhttp v0.5.2/go.mod h1:kO/YDlP8L1346E6Sodw+PrpBSV4/SoxCXGY6BqNFT48= 227 | github.com/hashicorp/go-multierror v1.1.1 h1:H5DkEtf6CXdFp0N0Em5UCwQpXMWke8IA0+lD48awMYo= 228 | github.com/hashicorp/go-multierror v1.1.1/go.mod h1:iw975J/qwKPdAO1clOe2L8331t/9/fmwbPZ6JB6eMoM= 229 | github.com/hashicorp/go-rootcerts v1.0.2 h1:jzhAVGtqPKbwpyCPELlgNWhE1znq+qwJtW5Oi2viEzc= 230 | github.com/hashicorp/go-rootcerts v1.0.2/go.mod h1:pqUvnprVnM5bf7AOirdbb01K4ccR319Vf4pU3K5EGc8= 231 | github.com/hashicorp/go-version v1.7.0 h1:5tqGy27NaOTB8yJKUZELlFAS/LTKJkrmONwQKeRZfjY= 232 | github.com/hashicorp/go-version v1.7.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= 233 | github.com/hashicorp/nomad/api v0.0.0-20250909143645-a3b86c697f38 h1:1LTbcTpGdSdbj0ee7YZHNe4R2XqxfyWwIkSGWRhgkfM= 234 | github.com/hashicorp/nomad/api v0.0.0-20250909143645-a3b86c697f38/go.mod h1:0Tdp+9HbvwrxprXv/LfYZ8P21bOl4oA8Afyet1kUvhI= 235 | github.com/infobloxopen/go-trees v0.0.0-20200715205103-96a057b8dfb9 h1:w66aaP3c6SIQ0pi3QH1Tb4AMO3aWoEPxd1CNvLphbkA= 236 | github.com/infobloxopen/go-trees v0.0.0-20200715205103-96a057b8dfb9/go.mod h1:BaIJzjD2ZnHmx2acPF6XfGLPzNCMiBbMRqJr+8/8uRI= 237 | github.com/josharian/intern v1.0.0 h1:vlS4z54oSdjm0bgjRigI+G1HpF+tI+9rE5LLzOg8HmY= 238 | github.com/josharian/intern v1.0.0/go.mod h1:5DoeVV0s6jJacbCEi61lwdGj/aVlrQvzHFFd8Hwg//Y= 239 | github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM= 240 | github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo= 241 | github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= 242 | github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= 243 | github.com/klauspost/compress v1.18.0 h1:c/Cqfb0r+Yi+JtIEq73FWXVkRonBlf0CRNYc8Zttxdo= 244 | github.com/klauspost/compress v1.18.0/go.mod h1:2Pp+KzxcywXVXMr50+X0Q/Lsb43OQHYWRCY2AiWywWQ= 245 | github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= 246 | github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= 247 | github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk= 248 | github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= 249 | github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= 250 | github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= 251 | github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= 252 | github.com/kylelemons/godebug v1.1.0 h1:RPNrshWIDI6G2gRW9EHilWtl7Z6Sb1BR0xunSBf0SNc= 253 | github.com/kylelemons/godebug v1.1.0/go.mod h1:9/0rRGxNHcop5bhtWyNeEfOS8JIWk580+fNqagV/RAw= 254 | github.com/lufia/plan9stats v0.0.0-20250317134145-8bc96cf8fc35 h1:PpXWgLPs+Fqr325bN2FD2ISlRRztXibcX6e8f5FR5Dc= 255 | github.com/lufia/plan9stats v0.0.0-20250317134145-8bc96cf8fc35/go.mod h1:autxFIvghDt3jPTLoqZ9OZ7s9qTGNAWmYCjVFWPX/zg= 256 | github.com/mailru/easyjson v0.7.7 h1:UGYAvKxe3sBsEDzO8ZeWOSlIQfWFlxbzLZe7hwFURr0= 257 | github.com/mailru/easyjson v0.7.7/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc= 258 | github.com/matttproud/golang_protobuf_extensions v1.0.4 h1:mmDVorXM7PCGKw94cs5zkfA9PSy5pEvNWRP0ET0TIVo= 259 | github.com/matttproud/golang_protobuf_extensions v1.0.4/go.mod h1:BSXmuO+STAnVfrANrmjBb36TMTDstsz7MSK+HVaYKv4= 260 | github.com/miekg/dns v1.1.31/go.mod h1:KNUDUusw/aVsxyTYZM1oqvCicbwhgbNgztCETuNZ7xM= 261 | github.com/miekg/dns v1.1.68 h1:jsSRkNozw7G/mnmXULynzMNIsgY2dHC8LO6U6Ij2JEA= 262 | github.com/miekg/dns v1.1.68/go.mod h1:fujopn7TB3Pu3JM69XaawiU0wqjpL9/8xGop5UrTPps= 263 | github.com/mitchellh/go-homedir v1.1.0 h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG+4E0Y= 264 | github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= 265 | github.com/mitchellh/mapstructure v1.5.1-0.20231216201459-8508981c8b6c h1:cqn374mizHuIWj+OSJCajGr/phAmuMug9qIX3l9CflE= 266 | github.com/mitchellh/mapstructure v1.5.1-0.20231216201459-8508981c8b6c/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= 267 | github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= 268 | github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg= 269 | github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= 270 | github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk= 271 | github.com/modern-go/reflect2 v1.0.3-0.20250322232337-35a7c28c31ee h1:W5t00kpgFdJifH4BDsTlE89Zl93FEloxaWZfGcifgq8= 272 | github.com/modern-go/reflect2 v1.0.3-0.20250322232337-35a7c28c31ee/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk= 273 | github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 h1:C3w9PqII01/Oq1c1nUAm88MOHcQC9l5mIlSMApZMrHA= 274 | github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ= 275 | github.com/onsi/ginkgo/v2 v2.22.1 h1:QW7tbJAUDyVDVOM5dFa7qaybo+CRfR7bemlQUN6Z8aM= 276 | github.com/onsi/ginkgo/v2 v2.22.1/go.mod h1:S6aTpoRsSq2cZOd+pssHAlKW/Q/jZt6cPrPlnj4a1xM= 277 | github.com/onsi/gomega v1.36.2 h1:koNYke6TVk6ZmnyHrCXba/T/MoLBXFjeC1PtvYgw0A8= 278 | github.com/onsi/gomega v1.36.2/go.mod h1:DdwyADRjrc825LhMEkD76cHR5+pUnjhUN8GlHlRPHzY= 279 | github.com/open-telemetry/opentelemetry-collector-contrib/pkg/sampling v0.125.0 h1:0dOJCEtabevxxDQmxed69oMzSw+gb3ErCnFwFYZFu0M= 280 | github.com/open-telemetry/opentelemetry-collector-contrib/pkg/sampling v0.125.0/go.mod h1:QwzQhtxPThXMUDW1XRXNQ+l0GrI2BRsvNhX6ZuKyAds= 281 | github.com/open-telemetry/opentelemetry-collector-contrib/processor/probabilisticsamplerprocessor v0.125.0 h1:F68/Nbpcvo3JZpaWlRUDJtG7xs8FHBZ7A8GOMauDkyc= 282 | github.com/open-telemetry/opentelemetry-collector-contrib/processor/probabilisticsamplerprocessor v0.125.0/go.mod h1:haO4cJtAk05Y0p7NO9ME660xxtSh54ifCIIT7+PO9C0= 283 | github.com/opentracing-contrib/go-observer v0.0.0-20170622124052-a52f23424492 h1:lM6RxxfUMrYL/f8bWEUqdXrANWtrL7Nndbm9iFN0DlU= 284 | github.com/opentracing-contrib/go-observer v0.0.0-20170622124052-a52f23424492/go.mod h1:Ngi6UdF0k5OKD5t5wlmGhe/EDKPoUM3BXZSSfIuJbis= 285 | github.com/opentracing/opentracing-go v1.2.0 h1:uEJPy/1a5RIPAJ0Ov+OIO8OxWu77jEv+1B0VhjKrZUs= 286 | github.com/opentracing/opentracing-go v1.2.0/go.mod h1:GxEUsuufX4nBwe+T+Wl9TAgYrxe9dPLANfrWvHYVTgc= 287 | github.com/openzipkin-contrib/zipkin-go-opentracing v0.5.0 h1:uhcF5Jd7rP9DVEL10Siffyepr6SvlKbUsjH5JpNCRi8= 288 | github.com/openzipkin-contrib/zipkin-go-opentracing v0.5.0/go.mod h1:+oCZ5GXXr7KPI/DNOQORPTq5AWHfALJj9c72b0+YsEY= 289 | github.com/openzipkin/zipkin-go v0.4.3 h1:9EGwpqkgnwdEIJ+Od7QVSEIH+ocmm5nPat0G7sjsSdg= 290 | github.com/openzipkin/zipkin-go v0.4.3/go.mod h1:M9wCJZFWCo2RiY+o1eBCEMe0Dp2S5LDHcMZmk3RmK7c= 291 | github.com/oschwald/geoip2-golang v1.13.0 h1:Q44/Ldc703pasJeP5V9+aFSZFmBN7DKHbNsSFzQATJI= 292 | github.com/oschwald/geoip2-golang v1.13.0/go.mod h1:P9zG+54KPEFOliZ29i7SeYZ/GM6tfEL+rgSn03hYuUo= 293 | github.com/oschwald/maxminddb-golang v1.13.0 h1:R8xBorY71s84yO06NgTmQvqvTvlS/bnYZrrWX1MElnU= 294 | github.com/oschwald/maxminddb-golang v1.13.0/go.mod h1:BU0z8BfFVhi1LQaonTwwGQlsHUEu9pWNdMfmq4ztm0o= 295 | github.com/outcaste-io/ristretto v0.2.3 h1:AK4zt/fJ76kjlYObOeNwh4T3asEuaCmp26pOvUOL9w0= 296 | github.com/outcaste-io/ristretto v0.2.3/go.mod h1:W8HywhmtlopSB1jeMg3JtdIhf+DYkLAr0VN/s4+MHac= 297 | github.com/philhofer/fwd v1.1.3-0.20240916144458-20a13a1f6b7c h1:dAMKvw0MlJT1GshSTtih8C2gDs04w8dReiOGXrGLNoY= 298 | github.com/philhofer/fwd v1.1.3-0.20240916144458-20a13a1f6b7c/go.mod h1:RqIHx9QI14HlwKwm98g9Re5prTQ6LdeRQn+gXJFxsJM= 299 | github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= 300 | github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= 301 | github.com/planetscale/vtprotobuf v0.6.1-0.20240319094008-0393e58bdf10 h1:GFCKgmp0tecUJ0sJuv4pzYCqS9+RGSn52M3FUwPs+uo= 302 | github.com/planetscale/vtprotobuf v0.6.1-0.20240319094008-0393e58bdf10/go.mod h1:t/avpk3KcrXxUnYOhZhMXJlSEyie6gQbtLq5NM3loB8= 303 | github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= 304 | github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U= 305 | github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= 306 | github.com/power-devops/perfstat v0.0.0-20240221224432-82ca36839d55 h1:o4JXh1EVt9k/+g42oCprj/FisM4qX9L3sZB3upGN2ZU= 307 | github.com/power-devops/perfstat v0.0.0-20240221224432-82ca36839d55/go.mod h1:OmDBASR4679mdNQnz2pUhc2G8CO2JrUAVFDRBDP/hJE= 308 | github.com/prashantv/gostub v1.1.0 h1:BTyx3RfQjRHnUWaGF9oQos79AlQ5k8WNktv7VGvVH4g= 309 | github.com/prashantv/gostub v1.1.0/go.mod h1:A5zLQHz7ieHGG7is6LLXLz7I8+3LZzsrV0P1IAHhP5U= 310 | github.com/prometheus/client_golang v1.23.2 h1:Je96obch5RDVy3FDMndoUsjAhG5Edi49h0RJWRi/o0o= 311 | github.com/prometheus/client_golang v1.23.2/go.mod h1:Tb1a6LWHB3/SPIzCoaDXI4I8UHKeFTEQ1YCr+0Gyqmg= 312 | github.com/prometheus/client_model v0.6.2 h1:oBsgwpGs7iVziMvrGhE53c/GrLUsZdHnqNwqPLxwZyk= 313 | github.com/prometheus/client_model v0.6.2/go.mod h1:y3m2F6Gdpfy6Ut/GBsUqTWZqCUvMVzSfMLjcu6wAwpE= 314 | github.com/prometheus/common v0.66.1 h1:h5E0h5/Y8niHc5DlaLlWLArTQI7tMrsfQjHV+d9ZoGs= 315 | github.com/prometheus/common v0.66.1/go.mod h1:gcaUsgf3KfRSwHY4dIMXLPV0K/Wg1oZ8+SbZk/HH/dA= 316 | github.com/prometheus/procfs v0.16.1 h1:hZ15bTNuirocR6u0JZ6BAHHmwS1p8B4P6MRqxtzMyRg= 317 | github.com/prometheus/procfs v0.16.1/go.mod h1:teAbpZRB1iIAJYREa1LsoWUXykVXA1KlTmWl8x/U+Is= 318 | github.com/puzpuzpuz/xsync/v3 v3.5.1 h1:GJYJZwO6IdxN/IKbneznS6yPkVC+c3zyY/j19c++5Fg= 319 | github.com/puzpuzpuz/xsync/v3 v3.5.1/go.mod h1:VjzYrABPabuM4KyBh1Ftq6u8nhwY5tBPKP9jpmh0nnA= 320 | github.com/quic-go/quic-go v0.55.0 h1:zccPQIqYCXDt5NmcEabyYvOnomjs8Tlwl7tISjJh9Mk= 321 | github.com/quic-go/quic-go v0.55.0/go.mod h1:DR51ilwU1uE164KuWXhinFcKWGlEjzys2l8zUl5Ss1U= 322 | github.com/richardartoul/molecule v1.0.1-0.20240531184615-7ca0df43c0b3 h1:4+LEVOB87y175cLJC/mbsgKmoDOjrBldtXvioEy96WY= 323 | github.com/richardartoul/molecule v1.0.1-0.20240531184615-7ca0df43c0b3/go.mod h1:vl5+MqJ1nBINuSsUI2mGgH79UweUT/B5Fy8857PqyyI= 324 | github.com/rogpeppe/go-internal v1.14.1 h1:UQB4HGPB6osV0SQTLymcB4TgvyWu6ZyliaW0tI/otEQ= 325 | github.com/rogpeppe/go-internal v1.14.1/go.mod h1:MaRKkUm5W0goXpeCfT7UZI6fk/L7L7so1lCWt35ZSgc= 326 | github.com/secure-systems-lab/go-securesystemslib v0.9.0 h1:rf1HIbL64nUpEIZnjLZ3mcNEL9NBPB0iuVjyxvq3LZc= 327 | github.com/secure-systems-lab/go-securesystemslib v0.9.0/go.mod h1:DVHKMcZ+V4/woA/peqr+L0joiRXbPpQ042GgJckkFgw= 328 | github.com/shirou/gopsutil/v4 v4.25.3 h1:SeA68lsu8gLggyMbmCn8cmp97V1TI9ld9sVzAUcKcKE= 329 | github.com/shirou/gopsutil/v4 v4.25.3/go.mod h1:xbuxyoZj+UsgnZrENu3lQivsngRR5BdjbJwf2fv4szA= 330 | github.com/shoenig/test v1.12.1 h1:mLHfnMv7gmhhP44WrvT+nKSxKkPDiNkIuHGdIGI9RLU= 331 | github.com/shoenig/test v1.12.1/go.mod h1:UxJ6u/x2v/TNs/LoLxBNJRV9DiwBBKYxXSyczsBHFoI= 332 | github.com/sirupsen/logrus v1.7.0/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= 333 | github.com/spaolacci/murmur3 v1.1.0 h1:7c1g84S4BPRrfL5Xrdp6fOJ206sU9y293DDHaoy0bLI= 334 | github.com/spaolacci/murmur3 v1.1.0/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= 335 | github.com/spf13/pflag v1.0.6 h1:jFzHGLGAlb3ruxLB8MhbI6A8+AQX/2eW4qeyNZXNp2o= 336 | github.com/spf13/pflag v1.0.6/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= 337 | github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= 338 | github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= 339 | github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= 340 | github.com/stretchr/objx v0.5.2 h1:xuMeJ0Sdp5ZMRXx/aWO6RZxdr3beISkG5/G/aIRr3pY= 341 | github.com/stretchr/objx v0.5.2/go.mod h1:FRsXN1f5AsAjCGJKqEizvkpNtU+EGNCLh3NxZ/8L+MA= 342 | github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= 343 | github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= 344 | github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= 345 | github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= 346 | github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= 347 | github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= 348 | github.com/stretchr/testify v1.11.1 h1:7s2iGBzp5EwR7/aIZr8ao5+dra3wiQyKjjFuvgVKu7U= 349 | github.com/stretchr/testify v1.11.1/go.mod h1:wZwfW3scLgRK+23gO65QZefKpKQRnfz6sD981Nm4B6U= 350 | github.com/tinylib/msgp v1.2.5 h1:WeQg1whrXRFiZusidTQqzETkRpGjFjcIhW6uqWH09po= 351 | github.com/tinylib/msgp v1.2.5/go.mod h1:ykjzy2wzgrlvpDCRc4LA8UXy6D8bzMSuAF3WD57Gok0= 352 | github.com/tklauser/go-sysconf v0.3.15 h1:VE89k0criAymJ/Os65CSn1IXaol+1wrsFHEB8Ol49K4= 353 | github.com/tklauser/go-sysconf v0.3.15/go.mod h1:Dmjwr6tYFIseJw7a3dRLJfsHAMXZ3nEnL/aZY+0IuI4= 354 | github.com/tklauser/numcpus v0.10.0 h1:18njr6LDBk1zuna922MgdjQuJFjrdppsZG60sHGfjso= 355 | github.com/tklauser/numcpus v0.10.0/go.mod h1:BiTKazU708GQTYF4mB+cmlpT2Is1gLk7XVuEeem8LsQ= 356 | github.com/vmihailenco/msgpack/v4 v4.3.13 h1:A2wsiTbvp63ilDaWmsk2wjx6xZdxQOvpiNlKBGKKXKI= 357 | github.com/vmihailenco/msgpack/v4 v4.3.13/go.mod h1:gborTTJjAo/GWTqqRjrLCn9pgNN+NXzzngzBKDPIqw4= 358 | github.com/vmihailenco/tagparser v0.1.2 h1:gnjoVuB/kljJ5wICEEOpx98oXMWPLj22G67Vbd1qPqc= 359 | github.com/vmihailenco/tagparser v0.1.2/go.mod h1:OeAg3pn3UbLjkWt+rN9oFYB6u/cQgqMEUPoW2WPyhdI= 360 | github.com/x448/float16 v0.8.4 h1:qLwI1I70+NjRFUR3zs1JPUCgaCXSh3SW62uAKT1mSBM= 361 | github.com/x448/float16 v0.8.4/go.mod h1:14CWIYCyZA/cWjXOioeEpHeN/83MdbZDRQHoFcYsOfg= 362 | github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= 363 | github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= 364 | github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= 365 | github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= 366 | github.com/yusufpapurcu/wmi v1.2.4 h1:zFUKzehAFReQwLys1b/iSMl+JQGSCSjtVqQn9bBrPo0= 367 | github.com/yusufpapurcu/wmi v1.2.4/go.mod h1:SBZ9tNy3G9/m5Oi98Zks0QjeHVDvuK0qfxQmPyzfmi0= 368 | go.etcd.io/etcd/api/v3 v3.6.5 h1:pMMc42276sgR1j1raO/Qv3QI9Af/AuyQUW6CBAWuntA= 369 | go.etcd.io/etcd/api/v3 v3.6.5/go.mod h1:ob0/oWA/UQQlT1BmaEkWQzI0sJ1M0Et0mMpaABxguOQ= 370 | go.etcd.io/etcd/client/pkg/v3 v3.6.5 h1:Duz9fAzIZFhYWgRjp/FgNq2gO1jId9Yae/rLn3RrBP8= 371 | go.etcd.io/etcd/client/pkg/v3 v3.6.5/go.mod h1:8Wx3eGRPiy0qOFMZT/hfvdos+DjEaPxdIDiCDUv/FQk= 372 | go.etcd.io/etcd/client/v3 v3.6.5 h1:yRwZNFBx/35VKHTcLDeO7XVLbCBFbPi+XV4OC3QJf2U= 373 | go.etcd.io/etcd/client/v3 v3.6.5/go.mod h1:ZqwG/7TAFZ0BJ0jXRPoJjKQJtbFo/9NIY8uoFFKcCyo= 374 | go.opentelemetry.io/auto/sdk v1.1.0 h1:cH53jehLUN6UFLY71z+NDOiNJqDdPRaXzTel0sJySYA= 375 | go.opentelemetry.io/auto/sdk v1.1.0/go.mod h1:3wSPjt5PWp2RhlCcmmOial7AvC4DQqZb7a7wCow3W8A= 376 | go.opentelemetry.io/collector/component v1.31.0 h1:9LzU8X1RhV3h8/QsAoTX23aFUfoJ3EUc9O/vK+hFpSI= 377 | go.opentelemetry.io/collector/component v1.31.0/go.mod h1:JbZl/KywXJxpUXPbt96qlEXJSym1zQ2hauMxYMuvlxM= 378 | go.opentelemetry.io/collector/component/componentstatus v0.125.0 h1:zlxGQZYd9kknRZSjRpOYW5SBjl0a5zYFYRPbreobXoU= 379 | go.opentelemetry.io/collector/component/componentstatus v0.125.0/go.mod h1:bHXc2W8bqqo9adOvCgvhcO7pYzJOSpyV4cuQ1wiIl04= 380 | go.opentelemetry.io/collector/component/componenttest v0.125.0 h1:E2mpnMQbkMpYoZ3Q8pHx4kod7kedjwRs1xqDpzCe/84= 381 | go.opentelemetry.io/collector/component/componenttest v0.125.0/go.mod h1:pQtsE1u/SPZdTphP5BZP64XbjXSq6wc+mDut5Ws/JDI= 382 | go.opentelemetry.io/collector/consumer v1.31.0 h1:L+y66ywxLHnAxnUxv0JDwUf5bFj53kMxCCyEfRKlM7s= 383 | go.opentelemetry.io/collector/consumer v1.31.0/go.mod h1:rPsqy5ni+c6xNMUkOChleZYO/nInVY6eaBNZ1FmWJVk= 384 | go.opentelemetry.io/collector/consumer/consumertest v0.125.0 h1:TUkxomGS4DAtjBvcWQd2UY4FDLLEKMQD6iOIDUr/5dM= 385 | go.opentelemetry.io/collector/consumer/consumertest v0.125.0/go.mod h1:vkHf3y85cFLDHARO/cTREVjLjOPAV+cQg7lkC44DWOY= 386 | go.opentelemetry.io/collector/consumer/xconsumer v0.125.0 h1:oTreUlk1KpMSWwuHFnstW+orrjGTyvs2xd3o/Dpy+hI= 387 | go.opentelemetry.io/collector/consumer/xconsumer v0.125.0/go.mod h1:FX0G37r0W+wXRgxxFtwEJ4rlsCB+p0cIaxtU3C4hskw= 388 | go.opentelemetry.io/collector/featuregate v1.31.0 h1:20q7plPQZwmAiaYAa6l1m/i2qDITZuWlhjr4EkmeQls= 389 | go.opentelemetry.io/collector/featuregate v1.31.0/go.mod h1:Y/KsHbvREENKvvN9RlpiWk/IGBK+CATBYzIIpU7nccc= 390 | go.opentelemetry.io/collector/internal/telemetry v0.125.0 h1:6lcGOxw3dAg7LfXTKdN8ZjR+l7KvzLdEiPMhhLwG4r4= 391 | go.opentelemetry.io/collector/internal/telemetry v0.125.0/go.mod h1:5GyFslLqjZgq1DZTtFiluxYhhXrCofHgOOOybodDPGE= 392 | go.opentelemetry.io/collector/pdata v1.31.0 h1:P5WuLr1l2JcIvr6Dw2hl01ltp2ZafPnC4Isv+BLTBqU= 393 | go.opentelemetry.io/collector/pdata v1.31.0/go.mod h1:m41io9nWpy7aCm/uD1L9QcKiZwOP0ldj83JEA34dmlk= 394 | go.opentelemetry.io/collector/pdata/pprofile v0.125.0 h1:Qqlx8w1HpiYZ9RQqjmMQIysI0cHNO1nh3E/fCTeFysA= 395 | go.opentelemetry.io/collector/pdata/pprofile v0.125.0/go.mod h1:p/yK023VxAp8hm27/1G5DPTcMIpnJy3cHGAFUQZGyaQ= 396 | go.opentelemetry.io/collector/pdata/testdata v0.125.0 h1:due1Hl0EEVRVwfCkiamRy5E8lS6yalv0lo8Zl/SJtGw= 397 | go.opentelemetry.io/collector/pdata/testdata v0.125.0/go.mod h1:1GpEWlgdMrd+fWsBk37ZC2YmOP5YU3gFQ4rWuCu9g24= 398 | go.opentelemetry.io/collector/pipeline v0.125.0 h1:oitBgcAFqntDB4ihQJUHJSQ8IHqKFpPkaTVbTYdIUzM= 399 | go.opentelemetry.io/collector/pipeline v0.125.0/go.mod h1:TO02zju/K6E+oFIOdi372Wk0MXd+Szy72zcTsFQwXl4= 400 | go.opentelemetry.io/collector/processor v1.31.0 h1:+u7sBUpnCBsHYoALp4hfr9VEjLHHYa4uKENGITe0K9Q= 401 | go.opentelemetry.io/collector/processor v1.31.0/go.mod h1:5hDYJ7/hTdfd2tF2Rj5Hs6+mfyFz2O7CaPzVvW1qHQc= 402 | go.opentelemetry.io/collector/processor/processorhelper v0.125.0 h1:QRpX7oFW88DAZhy+Q93npklRoaQr8ue0GKpeup7C/Fk= 403 | go.opentelemetry.io/collector/processor/processorhelper v0.125.0/go.mod h1:oXRvslUuN62wErcoJrcEJYoTXu5wHyNyJsE+/a9Cc9s= 404 | go.opentelemetry.io/collector/processor/processortest v0.125.0 h1:ZVAN4iZPDcWhpzKqnuok2NIuS5hwGVVQUOWkJFR12tA= 405 | go.opentelemetry.io/collector/processor/processortest v0.125.0/go.mod h1:VAw0IRG35cWTBjBtreXeXJEgqkRegfjrH/EuLhNX2+I= 406 | go.opentelemetry.io/collector/processor/xprocessor v0.125.0 h1:VWYPMW1VmDq6xB7M5SYjBpQCCIq3MhQ3W++wU47QpZM= 407 | go.opentelemetry.io/collector/processor/xprocessor v0.125.0/go.mod h1:bCxUyFVlksANg8wjYZqWVsRB33lkLQ294rTrju/IZiM= 408 | go.opentelemetry.io/collector/semconv v0.125.0 h1:SyRP617YGvNSWRSKMy7Lbk9RaJSR+qFAAfyxJOeZe4s= 409 | go.opentelemetry.io/collector/semconv v0.125.0/go.mod h1:te6VQ4zZJO5Lp8dM2XIhDxDiL45mwX0YAQQWRQ0Qr9U= 410 | go.opentelemetry.io/contrib/bridges/otelzap v0.10.0 h1:ojdSRDvjrnm30beHOmwsSvLpoRF40MlwNCA+Oo93kXU= 411 | go.opentelemetry.io/contrib/bridges/otelzap v0.10.0/go.mod h1:oTTm4g7NEtHSV2i/0FeVdPaPgUIZPfQkFbq0vbzqnv0= 412 | go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.61.0 h1:F7Jx+6hwnZ41NSFTO5q4LYDtJRXBf2PD0rNBkeB/lus= 413 | go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.61.0/go.mod h1:UHB22Z8QsdRDrnAtX4PntOl36ajSxcdUMt1sF7Y6E7Q= 414 | go.opentelemetry.io/otel v1.37.0 h1:9zhNfelUvx0KBfu/gb+ZgeAfAgtWrfHJZcAqFC228wQ= 415 | go.opentelemetry.io/otel v1.37.0/go.mod h1:ehE/umFRLnuLa/vSccNq9oS1ErUlkkK71gMcN34UG8I= 416 | go.opentelemetry.io/otel/log v0.11.0 h1:c24Hrlk5WJ8JWcwbQxdBqxZdOK7PcP/LFtOtwpDTe3Y= 417 | go.opentelemetry.io/otel/log v0.11.0/go.mod h1:U/sxQ83FPmT29trrifhQg+Zj2lo1/IPN1PF6RTFqdwc= 418 | go.opentelemetry.io/otel/metric v1.37.0 h1:mvwbQS5m0tbmqML4NqK+e3aDiO02vsf/WgbsdpcPoZE= 419 | go.opentelemetry.io/otel/metric v1.37.0/go.mod h1:04wGrZurHYKOc+RKeye86GwKiTb9FKm1WHtO+4EVr2E= 420 | go.opentelemetry.io/otel/sdk v1.37.0 h1:ItB0QUqnjesGRvNcmAcU0LyvkVyGJ2xftD29bWdDvKI= 421 | go.opentelemetry.io/otel/sdk v1.37.0/go.mod h1:VredYzxUvuo2q3WRcDnKDjbdvmO0sCzOvVAiY+yUkAg= 422 | go.opentelemetry.io/otel/sdk/metric v1.37.0 h1:90lI228XrB9jCMuSdA0673aubgRobVZFhbjxHHspCPc= 423 | go.opentelemetry.io/otel/sdk/metric v1.37.0/go.mod h1:cNen4ZWfiD37l5NhS+Keb5RXVWZWpRE+9WyVCpbo5ps= 424 | go.opentelemetry.io/otel/trace v1.37.0 h1:HLdcFNbRQBE2imdSEgm/kwqmQj1Or1l/7bW6mxVK7z4= 425 | go.opentelemetry.io/otel/trace v1.37.0/go.mod h1:TlgrlQ+PtQO5XFerSPUYG0JSgGyryXewPGyayAWSBS0= 426 | go.uber.org/atomic v1.9.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= 427 | go.uber.org/atomic v1.11.0 h1:ZvwS0R+56ePWxUNi+Atn9dWONBPp/AUETXlHW0DxSjE= 428 | go.uber.org/atomic v1.11.0/go.mod h1:LUxbIzbOniOlMKjJjyPfpl4v+PKK2cNJn91OQbhoJI0= 429 | go.uber.org/automaxprocs v1.6.0 h1:O3y2/QNTOdbF+e/dpXNNW7Rx2hZ4sTIPyybbxyNqTUs= 430 | go.uber.org/automaxprocs v1.6.0/go.mod h1:ifeIMSnPZuznNm6jmdzmU3/bfk01Fe2fotchwEFJ8r8= 431 | go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto= 432 | go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE= 433 | go.uber.org/mock v0.5.2 h1:LbtPTcP8A5k9WPXj54PPPbjcI4Y6lhyOZXn+VS7wNko= 434 | go.uber.org/mock v0.5.2/go.mod h1:wLlUxC2vVTPTaE3UD51E0BGOAElKrILxhVSDYQLld5o= 435 | go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0= 436 | go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y= 437 | go.uber.org/zap v1.27.0 h1:aJMhYGrd5QSmlpLMr2MftRKl7t8J8PTZPA732ud/XR8= 438 | go.uber.org/zap v1.27.0/go.mod h1:GB2qFLM7cTU87MWRP2mPIjqfIDnGu+VIO4V/SdhGo2E= 439 | go.yaml.in/yaml/v2 v2.4.2 h1:DzmwEr2rDGHl7lsFgAHxmNz/1NlQ7xLIrlN2h5d1eGI= 440 | go.yaml.in/yaml/v2 v2.4.2/go.mod h1:081UH+NErpNdqlCXm3TtEran0rJZGxAYx9hb/ELlsPU= 441 | go.yaml.in/yaml/v3 v3.0.4 h1:tfq32ie2Jv2UxXFdLJdh3jXuOzWiL1fo0bu/FbuKpbc= 442 | go.yaml.in/yaml/v3 v3.0.4/go.mod h1:DhzuOOF2ATzADvBadXxruRBLzYTpT36CKvDb3+aBEFg= 443 | golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= 444 | golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= 445 | golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= 446 | golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= 447 | golang.org/x/crypto v0.0.0-20220722155217-630584e8d5aa/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= 448 | golang.org/x/crypto v0.17.0/go.mod h1:gCAAfMLgwOJRpTjQ2zCCt2OcSfYMTeZVSRtQlPC7Nq4= 449 | golang.org/x/crypto v0.42.0 h1:chiH31gIWm57EkTXpwnqf8qeuMUi0yekh6mT2AvFlqI= 450 | golang.org/x/crypto v0.42.0/go.mod h1:4+rDnOTJhQCx2q7/j6rAN5XDw8kPjeaXEUR2eL94ix8= 451 | golang.org/x/exp v0.0.0-20250408133849-7e4ce0ab07d0 h1:R84qjqJb5nVJMxqWYb3np9L5ZsaDtB+a39EqjV0JSUM= 452 | golang.org/x/exp v0.0.0-20250408133849-7e4ce0ab07d0/go.mod h1:S9Xr4PYopiDyqSyp5NjCrhFrqg6A5zA2E/iPHPhqnS8= 453 | golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= 454 | golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= 455 | golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= 456 | golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= 457 | golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= 458 | golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= 459 | golang.org/x/mod v0.27.0 h1:kb+q2PyFnEADO2IEF935ehFUXlWiNjJWtRNgBLSfbxQ= 460 | golang.org/x/mod v0.27.0/go.mod h1:rWI627Fq0DEoudcK+MBkNkCe0EetEaDSwJJkCcjpazc= 461 | golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= 462 | golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= 463 | golang.org/x/net v0.0.0-20190923162816-aa69164e4478/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= 464 | golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= 465 | golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= 466 | golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= 467 | golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= 468 | golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= 469 | golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= 470 | golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= 471 | golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg= 472 | golang.org/x/net v0.45.0 h1:RLBg5JKixCy82FtLJpeNlVM0nrSqpCRYzVU1n8kj0tM= 473 | golang.org/x/net v0.45.0/go.mod h1:ECOoLqd5U3Lhyeyo/QDCEVQ4sNgYsqvCZ722XogGieY= 474 | golang.org/x/oauth2 v0.31.0 h1:8Fq0yVZLh4j4YA47vHKFTa9Ew5XIrCP8LC6UeNZnLxo= 475 | golang.org/x/oauth2 v0.31.0/go.mod h1:lzm5WQJQwKZ3nwavOZ3IS5Aulzxi68dUSgRHujetwEA= 476 | golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= 477 | golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= 478 | golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= 479 | golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= 480 | golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= 481 | golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= 482 | golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= 483 | golang.org/x/sync v0.17.0 h1:l60nONMj9l5drqw6jlhIELNv9I0A4OFgRsG9k2oT9Ug= 484 | golang.org/x/sync v0.17.0/go.mod h1:9KTHXmSnoGruLpwFjVSX0lNNA75CykiMECbovNTZqGI= 485 | golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= 486 | golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= 487 | golang.org/x/sys v0.0.0-20190916202348-b4ddaad3f8a3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= 488 | golang.org/x/sys v0.0.0-20190924154521-2837fb4f24fe/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= 489 | golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= 490 | golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= 491 | golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= 492 | golang.org/x/sys v0.0.0-20201204225414-ed752295db88/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= 493 | golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= 494 | golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= 495 | golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= 496 | golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= 497 | golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= 498 | golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= 499 | golang.org/x/sys v0.0.0-20220627191245-f75cf1eec38b/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= 500 | golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= 501 | golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= 502 | golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= 503 | golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= 504 | golang.org/x/sys v0.15.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= 505 | golang.org/x/sys v0.36.0 h1:KVRy2GtZBrk1cBYA7MKu5bEZFxQk4NIDV6RLVcC8o0k= 506 | golang.org/x/sys v0.36.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks= 507 | golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= 508 | golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= 509 | golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= 510 | golang.org/x/term v0.8.0/go.mod h1:xPskH00ivmX89bAKVGSKKtLOWNx2+17Eiy94tnKShWo= 511 | golang.org/x/term v0.15.0/go.mod h1:BDl952bC7+uMoWR75FIrCDx79TPU9oHkTZ9yRbYOrX0= 512 | golang.org/x/term v0.35.0 h1:bZBVKBudEyhRcajGcNc3jIfWPqV4y/Kt2XcoigOWtDQ= 513 | golang.org/x/term v0.35.0/go.mod h1:TPGtkTLesOwf2DE8CgVYiZinHAOuy5AYUYT1lENIZnA= 514 | golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= 515 | golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= 516 | golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= 517 | golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= 518 | golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= 519 | golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= 520 | golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= 521 | golang.org/x/text v0.29.0 h1:1neNs90w9YzJ9BocxfsQNHKuAT4pkghyXc4nhZ6sJvk= 522 | golang.org/x/text v0.29.0/go.mod h1:7MhJOA9CD2qZyOKYazxdYMF85OwPdEr9jTtBpO7ydH4= 523 | golang.org/x/time v0.13.0 h1:eUlYslOIt32DgYD6utsuUeHs4d7AsEYLuIAdg7FlYgI= 524 | golang.org/x/time v0.13.0/go.mod h1:eL/Oa2bBBK0TkX57Fyni+NgnyQQN4LitPmob2Hjnqw4= 525 | golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= 526 | golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= 527 | golang.org/x/tools v0.0.0-20191216052735-49a3e744a425/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= 528 | golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= 529 | golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= 530 | golang.org/x/tools v0.1.1/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= 531 | golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= 532 | golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU= 533 | golang.org/x/tools v0.36.0 h1:kWS0uv/zsvHEle1LbV5LE8QujrxB3wfQyxHfhOk0Qkg= 534 | golang.org/x/tools v0.36.0/go.mod h1:WBDiHKJK8YgLHlcQPYQzNCkUxUypCaa5ZegCVutKm+s= 535 | golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= 536 | golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= 537 | golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= 538 | golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= 539 | golang.org/x/xerrors v0.0.0-20231012003039-104605ab7028 h1:+cNy6SZtPcJQH3LJVLOSmiC7MMxXNOb3PU/VUEz+EhU= 540 | golang.org/x/xerrors v0.0.0-20231012003039-104605ab7028/go.mod h1:NDW/Ps6MPRej6fsCIbMTohpP40sJ/P/vI1MoTEGwX90= 541 | gonum.org/v1/gonum v0.16.0 h1:5+ul4Swaf3ESvrOnidPp4GZbzf0mxVQpDCYUQE7OJfk= 542 | gonum.org/v1/gonum v0.16.0/go.mod h1:fef3am4MQ93R2HHpKnLk4/Tbh/s0+wqD5nfa6Pnwy4E= 543 | google.golang.org/api v0.251.0 h1:6lea5nHRT8RUmpy9kkC2PJYnhnDAB13LqrLSVQlMIE8= 544 | google.golang.org/api v0.251.0/go.mod h1:Rwy0lPf/TD7+T2VhYcffCHhyyInyuxGjICxdfLqT7KI= 545 | google.golang.org/appengine v1.6.8 h1:IhEN5q69dyKagZPYMSdIjS2HqprW324FRQZJcGqPAsM= 546 | google.golang.org/appengine v1.6.8/go.mod h1:1jJ3jBArFh5pcgW8gCtRJnepW8FzD1V44FJffLiz/Ds= 547 | google.golang.org/genproto v0.0.0-20250603155806-513f23925822 h1:rHWScKit0gvAPuOnu87KpaYtjK5zBMLcULh7gxkCXu4= 548 | google.golang.org/genproto v0.0.0-20250603155806-513f23925822/go.mod h1:HubltRL7rMh0LfnQPkMH4NPDFEWp0jw3vixw7jEM53s= 549 | google.golang.org/genproto/googleapis/api v0.0.0-20250707201910-8d1bb00bc6a7 h1:FiusG7LWj+4byqhbvmB+Q93B/mOxJLN2DTozDuZm4EU= 550 | google.golang.org/genproto/googleapis/api v0.0.0-20250707201910-8d1bb00bc6a7/go.mod h1:kXqgZtrWaf6qS3jZOCnCH7WYfrvFjkC51bM8fz3RsCA= 551 | google.golang.org/genproto/googleapis/rpc v0.0.0-20250929231259-57b25ae835d4 h1:i8QOKZfYg6AbGVZzUAY3LrNWCKF8O6zFisU9Wl9RER4= 552 | google.golang.org/genproto/googleapis/rpc v0.0.0-20250929231259-57b25ae835d4/go.mod h1:HSkG/KdJWusxU1F6CNrwNDjBMgisKxGnc5dAZfT0mjQ= 553 | google.golang.org/grpc v1.75.1 h1:/ODCNEuf9VghjgO3rqLcfg8fiOP0nSluljWFlDxELLI= 554 | google.golang.org/grpc v1.75.1/go.mod h1:JtPAzKiq4v1xcAB2hydNlWI2RnF85XXcV0mhKXr2ecQ= 555 | google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= 556 | google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= 557 | google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= 558 | google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE= 559 | google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo= 560 | google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= 561 | google.golang.org/protobuf v1.36.10 h1:AYd7cD/uASjIL6Q9LiTjz8JLcrh/88q5UObnmY3aOOE= 562 | google.golang.org/protobuf v1.36.10/go.mod h1:HTf+CrKn2C3g5S8VImy6tdcUvCska2kB7j23XfzDpco= 563 | gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= 564 | gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= 565 | gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= 566 | gopkg.in/evanphx/json-patch.v4 v4.12.0 h1:n6jtcsulIzXPJaxegRbvFNNrZDjbij7ny3gmSPG+6V4= 567 | gopkg.in/evanphx/json-patch.v4 v4.12.0/go.mod h1:p8EYWUEYMpynmqDbY58zCKCFZw8pRWMG4EsWvDvM72M= 568 | gopkg.in/inf.v0 v0.9.1 h1:73M5CoZyi3ZLMOyDlQh031Cx6N9NDJ2Vvfl76EDAgDc= 569 | gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw= 570 | gopkg.in/ini.v1 v1.67.0 h1:Dgnx+6+nfE+IfzjUEISNeydPJh9AXNNsWbGP9KzCsOA= 571 | gopkg.in/ini.v1 v1.67.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= 572 | gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= 573 | gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= 574 | gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= 575 | gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= 576 | k8s.io/api v0.34.1 h1:jC+153630BMdlFukegoEL8E/yT7aLyQkIVuwhmwDgJM= 577 | k8s.io/api v0.34.1/go.mod h1:SB80FxFtXn5/gwzCoN6QCtPD7Vbu5w2n1S0J5gFfTYk= 578 | k8s.io/apimachinery v0.34.1 h1:dTlxFls/eikpJxmAC7MVE8oOeP1zryV7iRyIjB0gky4= 579 | k8s.io/apimachinery v0.34.1/go.mod h1:/GwIlEcWuTX9zKIg2mbw0LRFIsXwrfoVxn+ef0X13lw= 580 | k8s.io/client-go v0.34.1 h1:ZUPJKgXsnKwVwmKKdPfw4tB58+7/Ik3CrjOEhsiZ7mY= 581 | k8s.io/client-go v0.34.1/go.mod h1:kA8v0FP+tk6sZA0yKLRG67LWjqufAoSHA2xVGKw9Of8= 582 | k8s.io/klog/v2 v2.130.1 h1:n9Xl7H1Xvksem4KFG4PYbdQCQxqc/tTUyrgXaOhHSzk= 583 | k8s.io/klog/v2 v2.130.1/go.mod h1:3Jpz1GvMt720eyJH1ckRHK1EDfpxISzJ7I9OYgaDtPE= 584 | k8s.io/kube-openapi v0.0.0-20250710124328-f3f2b991d03b h1:MloQ9/bdJyIu9lb1PzujOPolHyvO06MXG5TUIj2mNAA= 585 | k8s.io/kube-openapi v0.0.0-20250710124328-f3f2b991d03b/go.mod h1:UZ2yyWbFTpuhSbFhv24aGNOdoRdJZgsIObGBUaYVsts= 586 | k8s.io/utils v0.0.0-20250604170112-4c0f3b243397 h1:hwvWFiBzdWw1FhfY1FooPn3kzWuJ8tmbZBHi4zVsl1Y= 587 | k8s.io/utils v0.0.0-20250604170112-4c0f3b243397/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0= 588 | sigs.k8s.io/json v0.0.0-20241014173422-cfa47c3a1cc8 h1:gBQPwqORJ8d8/YNZWEjoZs7npUVDpVXUUOFfW6CgAqE= 589 | sigs.k8s.io/json v0.0.0-20241014173422-cfa47c3a1cc8/go.mod h1:mdzfpAEoE6DHQEN0uh9ZbOCuHbLK5wOm7dK4ctXE9Tg= 590 | sigs.k8s.io/mcs-api v0.3.0 h1:LjRvgzjMrvO1904GP6XBJSnIX221DJMyQlZOYt9LAnM= 591 | sigs.k8s.io/mcs-api v0.3.0/go.mod h1:zZ5CK8uS6HaLkxY4HqsmcBHfzHuNMrY2uJy8T7jffK4= 592 | sigs.k8s.io/randfill v1.0.0 h1:JfjMILfT8A6RbawdsK2JXGBR5AQVfd+9TbzrlneTyrU= 593 | sigs.k8s.io/randfill v1.0.0/go.mod h1:XeLlZ/jmk4i1HRopwe7/aU3H5n1zNUcX6TM94b3QxOY= 594 | sigs.k8s.io/structured-merge-diff/v6 v6.3.0 h1:jTijUJbW353oVOd9oTlifJqOGEkUw2jB/fXCbTiQEco= 595 | sigs.k8s.io/structured-merge-diff/v6 v6.3.0/go.mod h1:M3W8sfWvn2HhQDIbGWj3S099YozAsymCo/wrT5ohRUE= 596 | sigs.k8s.io/yaml v1.6.0 h1:G8fkbMSAFqgEFgh4b1wmtzDnioxFCUgTZhlbj5P9QYs= 597 | sigs.k8s.io/yaml v1.6.0/go.mod h1:796bPqUfzR/0jLAl6XjHl3Ck7MiyVv8dbTdyT3/pMf4= 598 | --------------------------------------------------------------------------------