From cea02c3b9ee6699d8f7669f35a78c2839ce1f6eb Mon Sep 17 00:00:00 2001 From: Ryan Parman Date: Sat, 9 Mar 2024 15:29:47 -0700 Subject: [PATCH] refactor: Add more support for provider functions. --- Makefile | 3 +- acc-coverage.png | Bin 94305 -> 99287 bytes acc-coverage.svg | 97 +- .../env_ensure_data_source_test.go | 8 +- corefuncprovider/env_ensure_function.go | 147 +++ .../env_ensure_function_fixture.tftpl | 9 + corefuncprovider/env_ensure_function_test.go | 103 ++ .../homedir_expand_data_source_test.go | 3 +- .../homedir_get_data_source_test.go | 3 +- .../int_leftpad_data_source_test.go | 3 +- corefuncprovider/provider.go | 1 + .../runtime_cpuarch_data_source_test.go | 3 +- .../runtime_goroot_data_source_test.go | 3 +- .../runtime_numcpus_data_source_test.go | 3 +- .../runtime_os_data_source_test.go | 3 +- .../str_camel_data_source_test.go | 3 +- .../str_constant_data_source_test.go | 3 +- .../str_iterative_replace_data_source_test.go | 3 +- .../str_kebab_data_source_test.go | 3 +- .../str_leftpad_data_source_test.go | 3 +- .../str_pascal_data_source_test.go | 3 +- .../str_snake_data_source_test.go | 3 +- corefuncprovider/str_snake_function.go | 10 +- corefuncprovider/str_snake_function_test.go | 3 +- .../truncate_label_data_source_test.go | 5 +- .../url_parse_data_source_test.go | 3 +- docs/functions/env_ensure.md | 110 ++ .../function.AWS_DEFAULT_REGION.tf | 7 + .../corefunc_env_ensure/function.AWS_PAGER.tf | 8 + .../corefunc_env_ensure/function.AWS_VAULT.tf | 8 + .../terraform-plan.example | 17 + .../functions/corefunc_env_ensure/versions.tf | 13 + generator/main.go | 4 +- templates/functions/env_ensure.md.tmpl | 44 + terratest/{ => data-sources}/.gitignore | 0 terratest/{ => data-sources}/README.md | 0 terratest/data-sources/env.tf | 8 + terratest/{ => data-sources}/go.mod | 57 +- terratest/{ => data-sources}/go.sum | 56 + terratest/data-sources/homedir.tf | 15 + terratest/data-sources/leftpad.tf | 20 + terratest/{ => data-sources}/locals.tf | 0 terratest/{ => data-sources}/osv-scanner.toml | 0 terratest/data-sources/runtime.tf | 27 + terratest/data-sources/str_format.tf | 44 + terratest/{ => data-sources}/str_replace.tf | 5 + terratest/{ => data-sources}/str_truncate.tf | 6 +- .../{ => data-sources}/terraform_test.go | 56 +- terratest/data-sources/url.tf | 18 + terratest/{ => data-sources}/versions.tf | 0 terratest/env.tf | 3 - terratest/functions/.gitignore | 1 + terratest/functions/README.md | 25 + terratest/functions/env.tf | 9 + terratest/functions/go.mod | 80 ++ terratest/functions/go.sum | 1095 +++++++++++++++++ terratest/functions/locals.tf | 3 + terratest/functions/osv-scanner.toml | 6 + terratest/functions/str_format.tf | 4 + terratest/functions/terraform_test.go | 254 ++++ terratest/functions/versions.tf | 13 + terratest/homedir.tf | 7 - terratest/leftpad.tf | 12 - terratest/outputs.tf | 113 -- terratest/runtime.tf | 11 - terratest/str_format.tf | 24 - terratest/url.tf | 10 - testfixtures/env_ensure.go | 22 +- 68 files changed, 2309 insertions(+), 337 deletions(-) create mode 100644 corefuncprovider/env_ensure_function.go create mode 100644 corefuncprovider/env_ensure_function_fixture.tftpl create mode 100644 corefuncprovider/env_ensure_function_test.go create mode 100644 docs/functions/env_ensure.md create mode 100644 examples/functions/corefunc_env_ensure/function.AWS_DEFAULT_REGION.tf create mode 100644 examples/functions/corefunc_env_ensure/function.AWS_PAGER.tf create mode 100644 examples/functions/corefunc_env_ensure/function.AWS_VAULT.tf create mode 100644 examples/functions/corefunc_env_ensure/terraform-plan.example create mode 100644 examples/functions/corefunc_env_ensure/versions.tf create mode 100644 templates/functions/env_ensure.md.tmpl rename terratest/{ => data-sources}/.gitignore (100%) rename terratest/{ => data-sources}/README.md (100%) create mode 100644 terratest/data-sources/env.tf rename terratest/{ => data-sources}/go.mod (64%) rename terratest/{ => data-sources}/go.sum (95%) create mode 100644 terratest/data-sources/homedir.tf create mode 100644 terratest/data-sources/leftpad.tf rename terratest/{ => data-sources}/locals.tf (100%) rename terratest/{ => data-sources}/osv-scanner.toml (100%) create mode 100644 terratest/data-sources/runtime.tf create mode 100644 terratest/data-sources/str_format.tf rename terratest/{ => data-sources}/str_replace.tf (74%) rename terratest/{ => data-sources}/str_truncate.tf (55%) rename terratest/{ => data-sources}/terraform_test.go (85%) create mode 100644 terratest/data-sources/url.tf rename terratest/{ => data-sources}/versions.tf (100%) delete mode 100644 terratest/env.tf create mode 100644 terratest/functions/.gitignore create mode 100644 terratest/functions/README.md create mode 100644 terratest/functions/env.tf create mode 100644 terratest/functions/go.mod create mode 100644 terratest/functions/go.sum create mode 100644 terratest/functions/locals.tf create mode 100644 terratest/functions/osv-scanner.toml create mode 100644 terratest/functions/str_format.tf create mode 100644 terratest/functions/terraform_test.go create mode 100644 terratest/functions/versions.tf delete mode 100644 terratest/homedir.tf delete mode 100644 terratest/leftpad.tf delete mode 100644 terratest/outputs.tf delete mode 100644 terratest/runtime.tf delete mode 100644 terratest/str_format.tf delete mode 100644 terratest/url.tf diff --git a/Makefile b/Makefile index 6b14e001..0ebb7916 100644 --- a/Makefile +++ b/Makefile @@ -328,7 +328,8 @@ mutate: terratest: @ $(ECHO) " " @ $(ECHO) "\033[1;33m=====> Running Terratest tests...\033[0m" - cd ./terratest && $(GO) test -count 1 + cd ./terratest/data-sources && $(GO) test -count 1 + cd ./terratest/functions && $(GO) test -count 1 .PHONY: examples ## examples: [test] Runs tests for examples. Set NAME= (without 'Example') to run a specific test by name. diff --git a/acc-coverage.png b/acc-coverage.png index b2691961bd23b46f623d15aa26735b66af2e5c7d..e4e2f40e151e3e95c31dece843be34e92b9006d1 100644 GIT binary patch literal 99287 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

5`` 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 literal 94305 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ɥ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

n>tC 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 diff --git a/acc-coverage.svg b/acc-coverage.svg index 73e5095a..b0aba707 100644 --- a/acc-coverage.svg +++ b/acc-coverage.svg @@ -7,7 +7,7 @@ > - + - + env_ensure_data_source.go @@ -33,12 +33,25 @@ - + env_ensure_function.go + + + + + + + +helpers.go @@ -46,12 +59,12 @@ - + homedir_expand_data_source.go @@ -59,12 +72,12 @@ - + homedir_get_data_source.go @@ -72,12 +85,12 @@ - + int_leftpad_data_source.go @@ -85,12 +98,12 @@ - + provider.go @@ -98,12 +111,12 @@ - + runtime_cpuarch_data_source.go @@ -111,12 +124,12 @@ - + runtime_goroot_data_source.go @@ -124,12 +137,12 @@ - + runtime_numcpus_data_source.go @@ -137,12 +150,12 @@ - + runtime_os_data_source.go @@ -150,12 +163,12 @@ - + str_camel_data_source.go @@ -163,12 +176,12 @@ - + str_constant_data_source.go @@ -176,12 +189,12 @@ - + str_iterative_replace_data_source.go @@ -189,12 +202,12 @@ - + str_kebab_data_source.go @@ -202,12 +215,12 @@ - + str_leftpad_data_source.go @@ -215,12 +228,12 @@ - + str_pascal_data_source.go @@ -228,12 +241,12 @@ - + str_snake_data_source.go @@ -241,25 +254,25 @@ - + str_snake_function.go - + truncate_label_data_source.go @@ -267,12 +280,12 @@ - + url_parse_data_source.go diff --git a/corefuncprovider/env_ensure_data_source_test.go b/corefuncprovider/env_ensure_data_source_test.go index d4a9619c..ea9958a7 100644 --- a/corefuncprovider/env_ensure_data_source_test.go +++ b/corefuncprovider/env_ensure_data_source_test.go @@ -18,9 +18,7 @@ package corefuncprovider import ( "bytes" "fmt" - "log" "os" - "regexp" "strings" "testing" "text/template" @@ -44,7 +42,7 @@ func TestAccEnvEnsureDataSource(t *testing.T) { err = os.Setenv(tc.EnvVarName, tc.SetValue) if err != nil { - log.Fatalln(err) + t.Error(err) } buf := &bytes.Buffer{} @@ -54,7 +52,7 @@ func TestAccEnvEnsureDataSource(t *testing.T) { err = tmpl.Execute(buf, tc) if err != nil { - log.Fatalln(err) + t.Error(err) } if os.Getenv("PROVIDER_DEBUG") != "" { @@ -82,7 +80,7 @@ func TestAccEnvEnsureDataSource(t *testing.T) { Steps: []resource.TestStep{ { Config: providerConfig + buf.String(), - ExpectError: regexp.MustCompile(`environment variable (\w+) (is not defined|does not match pattern)`), + ExpectError: tc.ExpectedErrRE, }, }, }) diff --git a/corefuncprovider/env_ensure_function.go b/corefuncprovider/env_ensure_function.go new file mode 100644 index 00000000..e204902b --- /dev/null +++ b/corefuncprovider/env_ensure_function.go @@ -0,0 +1,147 @@ +// Copyright 2023-2024, Northwood Labs +// Copyright 2023-2024, Ryan Parman +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package corefuncprovider // lint:no_dupe + +import ( + "context" + "fmt" + "os" + "regexp" + "strings" + + "github.com/hashicorp/terraform-plugin-framework/function" + "github.com/hashicorp/terraform-plugin-log/tflog" + "github.com/lithammer/dedent" + "github.com/northwood-labs/terraform-provider-corefunc/corefunc" +) + +// Ensure the implementation satisfies the expected interfaces. +var _ function.Function = &envEnsureFunction{} + +type ( + // envEnsureFunction is the function implementation. + envEnsureFunction struct{} +) + +// EnvEnsureFunction is a method that exposes its paired Go function as a +// Terraform Function. +// https://developer.hashicorp.com/terraform/plugin/framework/functions/implementation +func EnvEnsureFunction() function.Function { // lint:allow_return_interface + return &envEnsureFunction{} +} + +func (f *envEnsureFunction) Metadata( + ctx context.Context, + req function.MetadataRequest, + resp *function.MetadataResponse, +) { + tflog.Debug(ctx, "Starting EnvEnsure Function Metadata method.") + + resp.Name = "env_ensure" + + tflog.Debug(ctx, fmt.Sprintf("resp.Name = %s", resp.Name)) + + tflog.Debug(ctx, "Ending EnvEnsure Function Metadata method.") +} + +// Definition defines the parameters and return type for the function. +func (f *envEnsureFunction) Definition( + ctx context.Context, + req function.DefinitionRequest, + resp *function.DefinitionResponse, +) { + tflog.Debug(ctx, "Starting EnvEnsure Function Definition method.") + + resp.Definition = function.Definition{ + Summary: "Ensures that a given environment variable is set to a non-empty value.", + MarkdownDescription: strings.TrimSpace(dedent.Dedent(` + Ensures that a given environment variable is set to a non-empty value. + If the environment variable is unset or if it is set to an empty string, + it will trigger a Terraform-level error. + + -> Not every Terraform provider checks to ensure that the environment variables it + requires are properly set before performing work, leading to late-stage errors. + This will force an error to occur early in the execution if the environment + variable is not set, or if its value doesn't match the expected patttern. + + Maps to the ` + linkPackage("EnvEnsure") + ` Go method, which can be used in + ` + Terratest + `. + `)), + Parameters: []function.Parameter{ + function.StringParameter{ + Name: "name", + MarkdownDescription: "The name of the environment variable to check.", + }, + }, + VariadicParameter: function.StringParameter{ + Name: "pattern", + MarkdownDescription: "A valid Go ([re2](https://github.com/google/re2/wiki/Syntax)) " + + "regular expression pattern.", + AllowNullValue: true, + }, + Return: function.StringReturn{}, + } + + tflog.Debug(ctx, "Ending EnvEnsure Function Definition method.") +} + +func (f *envEnsureFunction) Run(ctx context.Context, req function.RunRequest, resp *function.RunResponse) { + tflog.Debug(ctx, "Starting EnvEnsure Function Run method.") + + var ( + name string + pattern []string + ) + + resp.Error = function.ConcatFuncErrors(req.Arguments.Get(ctx, &name, &pattern)) + if resp.Error != nil { + return + } + + if len(pattern) > 0 && pattern[0] != "" { + rePattern, err := regexp.Compile(pattern[0]) + if err != nil { + resp.Error = function.ConcatFuncErrors( + function.NewArgumentFuncError(1, err.Error()), + ) + + return + } + + err = corefunc.EnvEnsure(name, rePattern) + if err != nil { + resp.Error = function.ConcatFuncErrors( + function.NewArgumentFuncError(0, err.Error()), + ) + + return + } + } else { + err := corefunc.EnvEnsure(name) + if err != nil { + resp.Error = function.ConcatFuncErrors( + function.NewArgumentFuncError(0, err.Error()), + ) + + return + } + } + + value := os.Getenv(name) + resp.Error = function.ConcatFuncErrors(resp.Result.Set(ctx, value)) + + tflog.Debug(ctx, "Ending EnvEnsure Function Run method.") +} diff --git a/corefuncprovider/env_ensure_function_fixture.tftpl b/corefuncprovider/env_ensure_function_fixture.tftpl new file mode 100644 index 00000000..fc2e5a7f --- /dev/null +++ b/corefuncprovider/env_ensure_function_fixture.tftpl @@ -0,0 +1,9 @@ +{{ $root := . }} +output "env_var" { +{{- with .PatternStr }} + value = provider::corefunc::env_ensure("{{ $root.EnvVarName }}", "{{ . }}") +{{- else }} + value = provider::corefunc::env_ensure("{{ $root.EnvVarName }}") +{{- end }} +} +#=> {{ .ExpectedErr }} diff --git a/corefuncprovider/env_ensure_function_test.go b/corefuncprovider/env_ensure_function_test.go new file mode 100644 index 00000000..1abfd9de --- /dev/null +++ b/corefuncprovider/env_ensure_function_test.go @@ -0,0 +1,103 @@ +// Copyright 2023-2024, Northwood Labs +// Copyright 2023-2024, Ryan Parman +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package corefuncprovider // lint:no_dupe + +import ( + "bytes" + "fmt" + "os" + "regexp" + "strings" + "testing" + "text/template" + + "github.com/northwood-labs/terraform-provider-corefunc/testfixtures" + + "github.com/hashicorp/go-version" + "github.com/hashicorp/terraform-plugin-testing/helper/resource" + "github.com/hashicorp/terraform-plugin-testing/tfversion" +) + +func TestAccEnvEnsureFunction(t *testing.T) { + t.Parallel() + + funcName := traceFuncName() + + for name, tc := range testfixtures.EnvEnsureTestTable { // lint:no_dupe + var err error + + fmt.Printf( + "=== RUN %s/%s\n", + strings.TrimSpace(funcName), + strings.TrimSpace(name), + ) + + err = os.Setenv(tc.EnvVarName, tc.SetValue) + if err != nil { + t.Error(err) + } + + buf := &bytes.Buffer{} + tmpl := template.Must( + template.ParseFiles("env_ensure_function_fixture.tftpl"), + ) + + err = tmpl.Execute(buf, tc) + if err != nil { + t.Error(err) + } + + if os.Getenv("PROVIDER_DEBUG") != "" { + fmt.Fprintln(os.Stderr, buf.String()) + } + + if tc.ExpectedErr == nil { + resource.UnitTest(t, resource.TestCase{ + TerraformVersionChecks: []tfversion.TerraformVersionCheck{ + tfversion.SkipBelow( + version.Must(version.NewVersion("1.7.999")), + ), + }, + ProtoV6ProviderFactories: testAccProtoV6ProviderFactories, + Steps: []resource.TestStep{ + { + Config: providerConfig + buf.String(), + Check: resource.ComposeTestCheckFunc( + resource.TestCheckOutput("env_var", tc.SetValue), + ), + }, + }, + }) + } else { + // We DO expect an error. + // https://developer.hashicorp.com/terraform/plugin/testing/testing-patterns + resource.UnitTest(t, resource.TestCase{ + TerraformVersionChecks: []tfversion.TerraformVersionCheck{ + tfversion.SkipBelow( + version.Must(version.NewVersion("1.7.999")), + ), + }, + ProtoV6ProviderFactories: testAccProtoV6ProviderFactories, + Steps: []resource.TestStep{ + { + Config: providerConfig + buf.String(), + ExpectError: regexp.MustCompile(`.*`), + }, + }, + }) + } + } +} diff --git a/corefuncprovider/homedir_expand_data_source_test.go b/corefuncprovider/homedir_expand_data_source_test.go index 7b94a80e..6454c4fe 100644 --- a/corefuncprovider/homedir_expand_data_source_test.go +++ b/corefuncprovider/homedir_expand_data_source_test.go @@ -18,7 +18,6 @@ package corefuncprovider // lint:no_dupe import ( "bytes" "fmt" - "log" "os" "regexp" "strings" @@ -47,7 +46,7 @@ func TestAccHomedirExpandDataSource(t *testing.T) { err := tmpl.Execute(buf, tc) if err != nil { - log.Fatalln(err) + t.Error(err) } if os.Getenv("PROVIDER_DEBUG") != "" { diff --git a/corefuncprovider/homedir_get_data_source_test.go b/corefuncprovider/homedir_get_data_source_test.go index df50995e..d05faa32 100644 --- a/corefuncprovider/homedir_get_data_source_test.go +++ b/corefuncprovider/homedir_get_data_source_test.go @@ -18,7 +18,6 @@ package corefuncprovider // lint:no_dupe import ( "bytes" "fmt" - "log" "os" "strings" "testing" @@ -46,7 +45,7 @@ func TestAccHomedirGetDataSource(t *testing.T) { err := tmpl.Execute(buf, tc) if err != nil { - log.Fatalln(err) + t.Error(err) } if os.Getenv("PROVIDER_DEBUG") != "" { diff --git a/corefuncprovider/int_leftpad_data_source_test.go b/corefuncprovider/int_leftpad_data_source_test.go index cd332961..0378502d 100644 --- a/corefuncprovider/int_leftpad_data_source_test.go +++ b/corefuncprovider/int_leftpad_data_source_test.go @@ -18,7 +18,6 @@ package corefuncprovider // lint:no_dupe import ( "bytes" "fmt" - "log" "os" "strings" "testing" @@ -46,7 +45,7 @@ func TestAccIntLeftpadDataSource(t *testing.T) { err := tmpl.Execute(buf, tc) if err != nil { - log.Fatalln(err) + t.Error(err) } if os.Getenv("PROVIDER_DEBUG") != "" { diff --git a/corefuncprovider/provider.go b/corefuncprovider/provider.go index d04f844a..3f2a00cd 100644 --- a/corefuncprovider/provider.go +++ b/corefuncprovider/provider.go @@ -126,6 +126,7 @@ func (p *coreFuncProvider) DataSources(ctx context.Context) []func() datasource. // Functions defines the functions implemented in the provider. func (p *coreFuncProvider) Functions(ctx context.Context) []func() function.Function { return []func() function.Function{ + EnvEnsureFunction, StrSnakeFunction, } } diff --git a/corefuncprovider/runtime_cpuarch_data_source_test.go b/corefuncprovider/runtime_cpuarch_data_source_test.go index 2747ccc1..00b4d143 100644 --- a/corefuncprovider/runtime_cpuarch_data_source_test.go +++ b/corefuncprovider/runtime_cpuarch_data_source_test.go @@ -18,7 +18,6 @@ package corefuncprovider // lint:no_dupe import ( "bytes" "fmt" - "log" "os" "strings" "testing" @@ -46,7 +45,7 @@ func TestAccRuntimeCpuarchDataSource(t *testing.T) { err := tmpl.Execute(buf, tc) if err != nil { - log.Fatalln(err) + t.Error(err) } if os.Getenv("PROVIDER_DEBUG") != "" { diff --git a/corefuncprovider/runtime_goroot_data_source_test.go b/corefuncprovider/runtime_goroot_data_source_test.go index a2f46b73..5da9b76f 100644 --- a/corefuncprovider/runtime_goroot_data_source_test.go +++ b/corefuncprovider/runtime_goroot_data_source_test.go @@ -18,7 +18,6 @@ package corefuncprovider // lint:no_dupe import ( "bytes" "fmt" - "log" "os" "strings" "testing" @@ -46,7 +45,7 @@ func TestAccRuntimeGorootDataSource(t *testing.T) { err := tmpl.Execute(buf, tc) if err != nil { - log.Fatalln(err) + t.Error(err) } if os.Getenv("PROVIDER_DEBUG") != "" { diff --git a/corefuncprovider/runtime_numcpus_data_source_test.go b/corefuncprovider/runtime_numcpus_data_source_test.go index 59a92421..2ce1ad21 100644 --- a/corefuncprovider/runtime_numcpus_data_source_test.go +++ b/corefuncprovider/runtime_numcpus_data_source_test.go @@ -18,7 +18,6 @@ package corefuncprovider // lint:no_dupe import ( "bytes" "fmt" - "log" "os" "strings" "testing" @@ -46,7 +45,7 @@ func TestAccRuntimeNumcpusDataSource(t *testing.T) { err := tmpl.Execute(buf, tc) if err != nil { - log.Fatalln(err) + t.Error(err) } if os.Getenv("PROVIDER_DEBUG") != "" { diff --git a/corefuncprovider/runtime_os_data_source_test.go b/corefuncprovider/runtime_os_data_source_test.go index 541b624a..34090fb8 100644 --- a/corefuncprovider/runtime_os_data_source_test.go +++ b/corefuncprovider/runtime_os_data_source_test.go @@ -18,7 +18,6 @@ package corefuncprovider // lint:no_dupe import ( "bytes" "fmt" - "log" "os" "strings" "testing" @@ -46,7 +45,7 @@ func TestAccRuntimeOsDataSource(t *testing.T) { err := tmpl.Execute(buf, tc) if err != nil { - log.Fatalln(err) + t.Error(err) } if os.Getenv("PROVIDER_DEBUG") != "" { diff --git a/corefuncprovider/str_camel_data_source_test.go b/corefuncprovider/str_camel_data_source_test.go index 6157735b..3e660bb1 100644 --- a/corefuncprovider/str_camel_data_source_test.go +++ b/corefuncprovider/str_camel_data_source_test.go @@ -18,7 +18,6 @@ package corefuncprovider // lint:no_dupe import ( "bytes" "fmt" - "log" "os" "strings" "testing" @@ -46,7 +45,7 @@ func TestAccStrCamelDataSource(t *testing.T) { err := tmpl.Execute(buf, tc) if err != nil { - log.Fatalln(err) + t.Error(err) } if os.Getenv("PROVIDER_DEBUG") != "" { diff --git a/corefuncprovider/str_constant_data_source_test.go b/corefuncprovider/str_constant_data_source_test.go index d407e406..a8bd737d 100644 --- a/corefuncprovider/str_constant_data_source_test.go +++ b/corefuncprovider/str_constant_data_source_test.go @@ -18,7 +18,6 @@ package corefuncprovider // lint:no_dupe import ( "bytes" "fmt" - "log" "os" "strings" "testing" @@ -46,7 +45,7 @@ func TestAccStrConstantDataSource(t *testing.T) { err := tmpl.Execute(buf, tc) if err != nil { - log.Fatalln(err) + t.Error(err) } if os.Getenv("PROVIDER_DEBUG") != "" { diff --git a/corefuncprovider/str_iterative_replace_data_source_test.go b/corefuncprovider/str_iterative_replace_data_source_test.go index 7184553d..3f361914 100644 --- a/corefuncprovider/str_iterative_replace_data_source_test.go +++ b/corefuncprovider/str_iterative_replace_data_source_test.go @@ -18,7 +18,6 @@ package corefuncprovider // lint:no_dupe import ( "bytes" "fmt" - "log" "os" "strings" "testing" @@ -46,7 +45,7 @@ func TestAccStrIterativeReplaceDataSource(t *testing.T) { err := tmpl.Execute(buf, tc) if err != nil { - log.Fatalln(err) + t.Error(err) } if os.Getenv("PROVIDER_DEBUG") != "" { diff --git a/corefuncprovider/str_kebab_data_source_test.go b/corefuncprovider/str_kebab_data_source_test.go index ca7c1d0a..a0e14f72 100644 --- a/corefuncprovider/str_kebab_data_source_test.go +++ b/corefuncprovider/str_kebab_data_source_test.go @@ -18,7 +18,6 @@ package corefuncprovider // lint:no_dupe import ( "bytes" "fmt" - "log" "os" "strings" "testing" @@ -46,7 +45,7 @@ func TestAccStrKebabDataSource(t *testing.T) { err := tmpl.Execute(buf, tc) if err != nil { - log.Fatalln(err) + t.Error(err) } if os.Getenv("PROVIDER_DEBUG") != "" { diff --git a/corefuncprovider/str_leftpad_data_source_test.go b/corefuncprovider/str_leftpad_data_source_test.go index 862ac9aa..91f47c87 100644 --- a/corefuncprovider/str_leftpad_data_source_test.go +++ b/corefuncprovider/str_leftpad_data_source_test.go @@ -18,7 +18,6 @@ package corefuncprovider // lint:no_dupe import ( "bytes" "fmt" - "log" "os" "strings" "testing" @@ -46,7 +45,7 @@ func TestAccStrLeftpadDataSource(t *testing.T) { err := tmpl.Execute(buf, tc) if err != nil { - log.Fatalln(err) + t.Error(err) } if os.Getenv("PROVIDER_DEBUG") != "" { diff --git a/corefuncprovider/str_pascal_data_source_test.go b/corefuncprovider/str_pascal_data_source_test.go index d4bef218..719a63c5 100644 --- a/corefuncprovider/str_pascal_data_source_test.go +++ b/corefuncprovider/str_pascal_data_source_test.go @@ -18,7 +18,6 @@ package corefuncprovider // lint:no_dupe import ( "bytes" "fmt" - "log" "os" "strings" "testing" @@ -46,7 +45,7 @@ func TestAccStrPascalDataSource(t *testing.T) { err := tmpl.Execute(buf, tc) if err != nil { - log.Fatalln(err) + t.Error(err) } if os.Getenv("PROVIDER_DEBUG") != "" { diff --git a/corefuncprovider/str_snake_data_source_test.go b/corefuncprovider/str_snake_data_source_test.go index c43c19fc..7c71e9cb 100644 --- a/corefuncprovider/str_snake_data_source_test.go +++ b/corefuncprovider/str_snake_data_source_test.go @@ -18,7 +18,6 @@ package corefuncprovider // lint:no_dupe import ( "bytes" "fmt" - "log" "os" "strings" "testing" @@ -48,7 +47,7 @@ func TestAccStrSnakeDataSource(t *testing.T) { err := tmpl.Execute(buf, tc) if err != nil { - log.Fatalln(err) + t.Error(err) } if os.Getenv("PROVIDER_DEBUG") != "" { diff --git a/corefuncprovider/str_snake_function.go b/corefuncprovider/str_snake_function.go index 0c0d9e19..d20d8ad4 100644 --- a/corefuncprovider/str_snake_function.go +++ b/corefuncprovider/str_snake_function.go @@ -98,15 +98,7 @@ func (f *strSnakeFunction) Run(ctx context.Context, req function.RunRequest, res return } - value := corefunc.StrSnake( - str, - // opts, - ) - - // Function errors need to be wrapped and passed to resp.Error. - // function.NewArgumentFuncError(1, "") - // https://github.com/Yantrio/terraform-provider-tfutils/blob/main/internal/provider/cidrcontains.go - + value := corefunc.StrSnake(str) resp.Error = function.ConcatFuncErrors(resp.Result.Set(ctx, value)) tflog.Debug(ctx, "Ending StrSnake Function Run method.") diff --git a/corefuncprovider/str_snake_function_test.go b/corefuncprovider/str_snake_function_test.go index fb422b64..78be5fd0 100644 --- a/corefuncprovider/str_snake_function_test.go +++ b/corefuncprovider/str_snake_function_test.go @@ -18,7 +18,6 @@ package corefuncprovider // lint:no_dupe import ( "bytes" "fmt" - "log" "os" "strings" "testing" @@ -50,7 +49,7 @@ func TestAccStrSnakeFunction(t *testing.T) { err := tmpl.Execute(buf, tc) if err != nil { - log.Fatalln(err) + t.Error(err) } if os.Getenv("PROVIDER_DEBUG") != "" { diff --git a/corefuncprovider/truncate_label_data_source_test.go b/corefuncprovider/truncate_label_data_source_test.go index d73a9355..f15c94a4 100644 --- a/corefuncprovider/truncate_label_data_source_test.go +++ b/corefuncprovider/truncate_label_data_source_test.go @@ -18,7 +18,6 @@ package corefuncprovider // lint:no_dupe import ( "bytes" "fmt" - "log" "os" "strings" "testing" @@ -37,7 +36,7 @@ func TestAccTruncateLabelDataSourceDefaultMaxLength64(t *testing.T) { err := tmpl.Execute(buf, nil) if err != nil { - log.Fatalln(err) + t.Error(err) } resource.Test(t, resource.TestCase{ @@ -79,7 +78,7 @@ func TestAccTruncateLabelDataSource(t *testing.T) { err := tmpl.Execute(buf, tc) if err != nil { - log.Fatalln(err) + t.Error(err) } if os.Getenv("PROVIDER_DEBUG") != "" { diff --git a/corefuncprovider/url_parse_data_source_test.go b/corefuncprovider/url_parse_data_source_test.go index 550a4574..d561e83b 100644 --- a/corefuncprovider/url_parse_data_source_test.go +++ b/corefuncprovider/url_parse_data_source_test.go @@ -18,7 +18,6 @@ package corefuncprovider import ( "bytes" "fmt" - "log" "os" "strings" "testing" @@ -47,7 +46,7 @@ func TestAccURLParseDataSource(t *testing.T) { err := tmpl.Execute(buf, tc) if err != nil { - log.Fatalln(err) + t.Error(err) } if os.Getenv("PROVIDER_DEBUG") != "" { diff --git a/docs/functions/env_ensure.md b/docs/functions/env_ensure.md new file mode 100644 index 00000000..45a6b15c --- /dev/null +++ b/docs/functions/env_ensure.md @@ -0,0 +1,110 @@ + + +# env_ensure (function) + +Ensures that a given environment variable is set to a non-empty value. +If the environment variable is unset or if it is set to an empty string, +it will trigger a Terraform-level error. + +-> Not every Terraform provider checks to ensure that the environment variables it +requires are properly set before performing work, leading to late-stage errors. +This will force an error to occur early in the execution if the environment +variable is not set, or if its value doesn't match the expected patttern. + +Maps to the [`corefunc.EnvEnsure()`](https://pkg.go.dev/github.com/northwood-labs/terraform-provider-corefunc/corefunc#EnvEnsure) Go method, which can be used in +[Terratest](https://terratest.gruntwork.io). + +## Signature + + +```text +env_ensure(name string, pattern string...) string +``` + +## Example Usage + +### `AWS_DEFAULT_REGION` is defined (no error) + +```terraform +# AWS_DEFAULT_REGION="us-east-1" + +output "aws_default_region" { + value = provider::corefunc::env_ensure("AWS_DEFAULT_REGION") +} + +#=> us-east-1 +``` + +### `AWS_PAGER` is set to an empty string (error) + +```terraform +# AWS_PAGER="" + +output "aws_pager" { + value = provider::corefunc::env_ensure("AWS_PAGER") +} + +#=> [Error] Problem with Environment Variable: environment variable +#=> AWS_PAGER is not defined +``` + +### `AWS_VAULT` is defined, but does not match pattern (error) + +```terraform +# AWS_VAULT="dev" + +output "aws_vault" { + value = provider::corefunc::env_ensure("AWS_VAULT", "(non)?prod$") # Must end with "prod" or "nonprod". +} + +#=> [Error] Invalid value for "name" parameter: +#=> environment variable AWS_VAULT does not match pattern (non)?prod$ +``` + +### Example plan output + +```bash +AWS_DEFAULT_REGION="us-east-1" AWS_VAULT="dev" terraform plan +``` + +```plain +Error: Invalid function argument + + on function.AWS_PAGER.tf line 4, in output "aws_pager": + 4: value = provider::corefunc::env_ensure("AWS_PAGER") + ├──────────────── + │ while calling provider::corefunc::env_ensure(name, pattern...) + +Invalid value for "name" parameter: environment variable AWS_PAGER is not defined. + +Error: Invalid function argument + + on function.AWS_VAULT.tf line 4, in output "aws_vault": + 4: value = provider::corefunc::env_ensure("AWS_VAULT", "(non)?prod$") # Must end with "prod" or "nonprod". + ├──────────────── + │ while calling provider::corefunc::env_ensure(name, pattern...) + +Invalid value for "name" parameter: environment variable AWS_VAULT does not match pattern (non)?prod$. +``` + +## Arguments + + +1. `name` (String) The name of the environment variable to check. + + diff --git a/examples/functions/corefunc_env_ensure/function.AWS_DEFAULT_REGION.tf b/examples/functions/corefunc_env_ensure/function.AWS_DEFAULT_REGION.tf new file mode 100644 index 00000000..c370b7a1 --- /dev/null +++ b/examples/functions/corefunc_env_ensure/function.AWS_DEFAULT_REGION.tf @@ -0,0 +1,7 @@ +# AWS_DEFAULT_REGION="us-east-1" + +output "aws_default_region" { + value = provider::corefunc::env_ensure("AWS_DEFAULT_REGION") +} + +#=> us-east-1 diff --git a/examples/functions/corefunc_env_ensure/function.AWS_PAGER.tf b/examples/functions/corefunc_env_ensure/function.AWS_PAGER.tf new file mode 100644 index 00000000..c5819c0d --- /dev/null +++ b/examples/functions/corefunc_env_ensure/function.AWS_PAGER.tf @@ -0,0 +1,8 @@ +# AWS_PAGER="" + +output "aws_pager" { + value = provider::corefunc::env_ensure("AWS_PAGER") +} + +#=> [Error] Problem with Environment Variable: environment variable +#=> AWS_PAGER is not defined diff --git a/examples/functions/corefunc_env_ensure/function.AWS_VAULT.tf b/examples/functions/corefunc_env_ensure/function.AWS_VAULT.tf new file mode 100644 index 00000000..19621813 --- /dev/null +++ b/examples/functions/corefunc_env_ensure/function.AWS_VAULT.tf @@ -0,0 +1,8 @@ +# AWS_VAULT="dev" + +output "aws_vault" { + value = provider::corefunc::env_ensure("AWS_VAULT", "(non)?prod$") # Must end with "prod" or "nonprod". +} + +#=> [Error] Invalid value for "name" parameter: +#=> environment variable AWS_VAULT does not match pattern (non)?prod$ diff --git a/examples/functions/corefunc_env_ensure/terraform-plan.example b/examples/functions/corefunc_env_ensure/terraform-plan.example new file mode 100644 index 00000000..3bfc14d9 --- /dev/null +++ b/examples/functions/corefunc_env_ensure/terraform-plan.example @@ -0,0 +1,17 @@ +Error: Invalid function argument + + on function.AWS_PAGER.tf line 4, in output "aws_pager": + 4: value = provider::corefunc::env_ensure("AWS_PAGER") + ├──────────────── + │ while calling provider::corefunc::env_ensure(name, pattern...) + +Invalid value for "name" parameter: environment variable AWS_PAGER is not defined. + +Error: Invalid function argument + + on function.AWS_VAULT.tf line 4, in output "aws_vault": + 4: value = provider::corefunc::env_ensure("AWS_VAULT", "(non)?prod$") # Must end with "prod" or "nonprod". + ├──────────────── + │ while calling provider::corefunc::env_ensure(name, pattern...) + +Invalid value for "name" parameter: environment variable AWS_VAULT does not match pattern (non)?prod$. diff --git a/examples/functions/corefunc_env_ensure/versions.tf b/examples/functions/corefunc_env_ensure/versions.tf new file mode 100644 index 00000000..370ac6a2 --- /dev/null +++ b/examples/functions/corefunc_env_ensure/versions.tf @@ -0,0 +1,13 @@ +terraform { + required_version = "~> 1.8" + + required_providers { + corefunc = { + source = "northwood-labs/corefunc" + version = "~> 1.4" + } + } +} + +# There are no configuration options +provider "corefunc" {} diff --git a/generator/main.go b/generator/main.go index a8506751..a6debd34 100644 --- a/generator/main.go +++ b/generator/main.go @@ -139,7 +139,7 @@ func main() { writeFileFromTemplate( varMap, getAbs("./examples/versions.fn.tftpl"), - getAbs(efPath+"/versions.tftpl"), + getAbs(efPath+"/versions.tf"), ) writeFileFromTemplate( @@ -155,7 +155,7 @@ func main() { writeFileFromTemplate( varMap, getAbs("./examples/versions.ds.tftpl"), - getAbs(edsPath+"/versions.tftpl"), + getAbs(edsPath+"/versions.tf"), ) } diff --git a/templates/functions/env_ensure.md.tmpl b/templates/functions/env_ensure.md.tmpl new file mode 100644 index 00000000..02e3a833 --- /dev/null +++ b/templates/functions/env_ensure.md.tmpl @@ -0,0 +1,44 @@ + + +# {{ .Name }} ({{ .Type }}) + +{{ .Description | trimspace }} + +## Signature + +{{ .FunctionSignatureMarkdown }} + +## Example Usage + +### `AWS_DEFAULT_REGION` is defined (no error) + +{{ tffile "examples/functions/corefunc_env_ensure/function.AWS_DEFAULT_REGION.tf" }} + +### `AWS_PAGER` is set to an empty string (error) + +{{ tffile "examples/functions/corefunc_env_ensure/function.AWS_PAGER.tf" }} + +### `AWS_VAULT` is defined, but does not match pattern (error) + +{{ tffile "examples/functions/corefunc_env_ensure/function.AWS_VAULT.tf" }} + +### Example plan output + +```bash +AWS_DEFAULT_REGION="us-east-1" AWS_VAULT="dev" terraform plan +``` + +{{ codefile "plain" "examples/functions/corefunc_env_ensure/terraform-plan.example" }} + +## Arguments + +{{ .FunctionArgumentsMarkdown | trimspace }} + + diff --git a/terratest/.gitignore b/terratest/data-sources/.gitignore similarity index 100% rename from terratest/.gitignore rename to terratest/data-sources/.gitignore diff --git a/terratest/README.md b/terratest/data-sources/README.md similarity index 100% rename from terratest/README.md rename to terratest/data-sources/README.md diff --git a/terratest/data-sources/env.tf b/terratest/data-sources/env.tf new file mode 100644 index 00000000..37c74056 --- /dev/null +++ b/terratest/data-sources/env.tf @@ -0,0 +1,8 @@ +data "corefunc_env_ensure" "goroot" { + name = "GOROOT" +} + +output "env_ensure_ds" { + description = "This returns the GOROOT environment variable." + value = data.corefunc_env_ensure.goroot.value +} diff --git a/terratest/go.mod b/terratest/data-sources/go.mod similarity index 64% rename from terratest/go.mod rename to terratest/data-sources/go.mod index c4bd8046..df7c0307 100644 --- a/terratest/go.mod +++ b/terratest/data-sources/go.mod @@ -1,7 +1,6 @@ module terratest -go 1.21.5 -toolchain go1.22.1 +go 1.22.1 require ( github.com/gruntwork-io/terratest v0.46.11 @@ -12,27 +11,27 @@ require ( ) require ( - cloud.google.com/go v0.112.0 // indirect - cloud.google.com/go/compute v1.23.3 // indirect + cloud.google.com/go v0.112.1 // indirect + cloud.google.com/go/compute v1.25.0 // indirect cloud.google.com/go/compute/metadata v0.2.3 // indirect - cloud.google.com/go/iam v1.1.5 // indirect - cloud.google.com/go/storage v1.36.0 // indirect + cloud.google.com/go/iam v1.1.6 // indirect + cloud.google.com/go/storage v1.39.0 // indirect github.com/agext/levenshtein v1.2.3 // indirect github.com/apparentlymart/go-textseg/v15 v15.0.0 // indirect - github.com/aws/aws-sdk-go v1.49.4 // indirect + github.com/aws/aws-sdk-go v1.50.35 // indirect github.com/bgentry/go-netrc v0.0.0-20140422174119-9fd32a8b3d3d // indirect github.com/bits-and-blooms/bitset v1.13.0 // indirect github.com/chanced/caps v1.0.2 // indirect github.com/davecgh/go-spew v1.1.1 // indirect github.com/felixge/httpsnoop v1.0.4 // indirect - github.com/go-logr/logr v1.3.0 // indirect + github.com/go-logr/logr v1.4.1 // indirect github.com/go-logr/stdr v1.2.2 // indirect github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect - github.com/golang/protobuf v1.5.3 // indirect + github.com/golang/protobuf v1.5.4 // indirect github.com/google/s2a-go v0.1.7 // indirect github.com/google/uuid v1.6.0 // indirect github.com/googleapis/enterprise-certificate-proxy v0.3.2 // indirect - github.com/googleapis/gax-go/v2 v2.12.0 // indirect + github.com/googleapis/gax-go/v2 v2.12.2 // indirect github.com/hashicorp/errwrap v1.1.0 // indirect github.com/hashicorp/go-cleanhttp v0.5.2 // indirect github.com/hashicorp/go-getter v1.7.3 // indirect @@ -43,7 +42,7 @@ require ( github.com/hashicorp/terraform-json v0.21.0 // indirect github.com/jinzhu/copier v0.4.0 // indirect github.com/jmespath/go-jmespath v0.4.0 // indirect - github.com/klauspost/compress v1.17.4 // indirect + github.com/klauspost/compress v1.17.7 // indirect github.com/mattn/go-zglob v0.0.4 // indirect github.com/mitchellh/go-homedir v1.1.0 // indirect github.com/mitchellh/go-testing-interface v1.14.1 // indirect @@ -51,31 +50,31 @@ require ( github.com/nlnwa/whatwg-url v0.4.0 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect github.com/spf13/afero v1.11.0 // indirect - github.com/tmccombs/hcl2json v0.6.0 // indirect + github.com/tmccombs/hcl2json v0.6.1 // indirect github.com/ulikunitz/xz v0.5.11 // indirect github.com/zclconf/go-cty v1.14.3 // indirect go.opencensus.io v0.24.0 // indirect - go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.46.1 // indirect - go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.46.1 // indirect - go.opentelemetry.io/otel v1.21.0 // indirect - go.opentelemetry.io/otel/metric v1.21.0 // indirect - go.opentelemetry.io/otel/trace v1.21.0 // indirect - golang.org/x/crypto v0.20.0 // indirect - golang.org/x/mod v0.15.0 // indirect - golang.org/x/net v0.21.0 // indirect - golang.org/x/oauth2 v0.16.0 // indirect + go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.49.0 // indirect + go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.49.0 // indirect + go.opentelemetry.io/otel v1.24.0 // indirect + go.opentelemetry.io/otel/metric v1.24.0 // indirect + go.opentelemetry.io/otel/trace v1.24.0 // indirect + golang.org/x/crypto v0.21.0 // indirect + golang.org/x/mod v0.16.0 // indirect + golang.org/x/net v0.22.0 // indirect + golang.org/x/oauth2 v0.18.0 // indirect golang.org/x/sync v0.6.0 // indirect - golang.org/x/sys v0.17.0 // indirect + golang.org/x/sys v0.18.0 // indirect golang.org/x/text v0.14.0 // indirect golang.org/x/time v0.5.0 // indirect - golang.org/x/tools v0.18.0 // indirect + golang.org/x/tools v0.19.0 // indirect golang.org/x/xerrors v0.0.0-20231012003039-104605ab7028 // indirect - google.golang.org/api v0.155.0 // indirect + google.golang.org/api v0.169.0 // indirect google.golang.org/appengine v1.6.8 // indirect - google.golang.org/genproto v0.0.0-20240123012728-ef4313101c80 // indirect - google.golang.org/genproto/googleapis/api v0.0.0-20240123012728-ef4313101c80 // indirect - google.golang.org/genproto/googleapis/rpc v0.0.0-20240228224816-df926f6c8641 // indirect - google.golang.org/grpc v1.62.0 // indirect - google.golang.org/protobuf v1.32.0 // indirect + google.golang.org/genproto v0.0.0-20240308144416-29370a3891b7 // indirect + google.golang.org/genproto/googleapis/api v0.0.0-20240308144416-29370a3891b7 // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20240308144416-29370a3891b7 // indirect + google.golang.org/grpc v1.62.1 // indirect + google.golang.org/protobuf v1.33.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect ) diff --git a/terratest/go.sum b/terratest/data-sources/go.sum similarity index 95% rename from terratest/go.sum rename to terratest/data-sources/go.sum index c1f16def..f4d34caa 100644 --- a/terratest/go.sum +++ b/terratest/data-sources/go.sum @@ -32,6 +32,8 @@ cloud.google.com/go v0.102.1/go.mod h1:XZ77E9qnTEnrgEOvr4xzfdX5TRo7fB4T2F4O6+34h cloud.google.com/go v0.104.0/go.mod h1:OO6xxXdJyvuJPcEPBLN9BJPD+jep5G1+2U5B5gkRYtA= cloud.google.com/go v0.112.0 h1:tpFCD7hpHFlQ8yPwT3x+QeXqc2T6+n6T+hmABHfDUSM= cloud.google.com/go v0.112.0/go.mod h1:3jEEVwZ/MHU4djK5t5RHuKOA/GbLddgTdVubX1qnPD4= +cloud.google.com/go v0.112.1 h1:uJSeirPke5UNZHIb4SxfZklVSiWWVqW4oXlETwZziwM= +cloud.google.com/go v0.112.1/go.mod h1:+Vbu+Y1UU+I1rjmzeMOb/8RfkKJK2Gyxi1X6jJCZLo4= cloud.google.com/go/aiplatform v1.22.0/go.mod h1:ig5Nct50bZlzV6NvKaTwmplLLddFx0YReh9WfTO5jKw= cloud.google.com/go/aiplatform v1.24.0/go.mod h1:67UUvRBKG6GTayHKV8DBv2RtR1t93YRu5B1P3x99mYY= cloud.google.com/go/analytics v0.11.0/go.mod h1:DjEWCu41bVbYcKyvlws9Er60YE4a//bK6mnhWvQeFNI= @@ -70,6 +72,8 @@ cloud.google.com/go/compute v1.7.0/go.mod h1:435lt8av5oL9P3fv1OEzSbSUe+ybHXGMPQH cloud.google.com/go/compute v1.10.0/go.mod h1:ER5CLbMxl90o2jtNbGSbtfOpQKR0t15FOtRsugnLrlU= cloud.google.com/go/compute v1.23.3 h1:6sVlXXBmbd7jNX0Ipq0trII3e4n1/MsADLK6a+aiVlk= cloud.google.com/go/compute v1.23.3/go.mod h1:VCgBUoMnIVIR0CscqQiPJLAG25E3ZRZMzcFZeQ+h8CI= +cloud.google.com/go/compute v1.25.0 h1:H1/4SqSUhjPFE7L5ddzHOfY2bCAvjwNRZPNl6Ni5oYU= +cloud.google.com/go/compute v1.25.0/go.mod h1:GR7F0ZPZH8EhChlMo9FkLd7eUTwEymjqQagxzilIxIE= cloud.google.com/go/compute/metadata v0.2.3 h1:mg4jlk7mCAj6xXp9UJ4fjI9VUI5rubuGBW5aJ7UnBMY= cloud.google.com/go/compute/metadata v0.2.3/go.mod h1:VAV5nSsACxMJvgaAuX6Pk2AawlZn8kiOGuCv6gTkwuA= cloud.google.com/go/containeranalysis v0.5.1/go.mod h1:1D92jd8gRR/c0fGMlymRgxWD3Qw9C1ff6/T7mLgVL8I= @@ -111,6 +115,8 @@ cloud.google.com/go/iam v0.3.0/go.mod h1:XzJPvDayI+9zsASAFO68Hk07u3z+f+JrT2xXNdp cloud.google.com/go/iam v0.5.0/go.mod h1:wPU9Vt0P4UmCux7mqtRu6jcpPAb74cP1fh50J3QpkUc= cloud.google.com/go/iam v1.1.5 h1:1jTsCu4bcsNsE4iiqNT5SHwrDRCfRmIaaaVFhRveTJI= cloud.google.com/go/iam v1.1.5/go.mod h1:rB6P/Ic3mykPbFio+vo7403drjlgvoWfYpJhMXEbzv8= +cloud.google.com/go/iam v1.1.6 h1:bEa06k05IO4f4uJonbB5iAgKTPpABy1ayxaIZV/GHVc= +cloud.google.com/go/iam v1.1.6/go.mod h1:O0zxdPeGBoFdWW3HWmBxJsk0pfvNM/p/qa82rWOGTwI= cloud.google.com/go/language v1.4.0/go.mod h1:F9dRpNFQmJbkaop6g0JhSBXCNlO90e1KWx5iDdxbWic= cloud.google.com/go/language v1.6.0/go.mod h1:6dJ8t3B+lUYfStgls25GusK04NLh3eDLQnWM3mdEbhI= cloud.google.com/go/lifesciences v0.5.0/go.mod h1:3oIKy8ycWGPUyZDR/8RNnTOYevhaMLqh5vLUXs9zvT8= @@ -173,6 +179,8 @@ cloud.google.com/go/storage v1.23.0/go.mod h1:vOEEDNFnciUMhBeT6hsJIn3ieU5cFRmzeL cloud.google.com/go/storage v1.27.0/go.mod h1:x9DOL8TK/ygDUMieqwfhdpQryTeEkhGKMi80i/iqR2s= cloud.google.com/go/storage v1.36.0 h1:P0mOkAcaJxhCTvAkMhxMfrTKiNcub4YmmPBtlhAyTr8= cloud.google.com/go/storage v1.36.0/go.mod h1:M6M/3V/D3KpzMTJyPOR/HU6n2Si5QdaXYEsng2xgOs8= +cloud.google.com/go/storage v1.39.0 h1:brbjUa4hbDHhpQf48tjqMaXEV+f1OGoaTmQau9tmCsA= +cloud.google.com/go/storage v1.39.0/go.mod h1:OAEj/WZwUYjA3YHQ10/YcN9ttGuEpLwvaoyBXIPikEk= cloud.google.com/go/talent v1.1.0/go.mod h1:Vl4pt9jiHKvOgF9KoZo6Kob9oV4lwd/ZD5Cto54zDRw= cloud.google.com/go/talent v1.2.0/go.mod h1:MoNF9bhFQbiJ6eFD3uSsg0uBALw4n4gaCaEjBw9zo8g= cloud.google.com/go/videointelligence v1.6.0/go.mod h1:w0DIDlVRKtwPCn/C4iwZIJdvC69yInhW0cfi+p546uU= @@ -196,6 +204,8 @@ github.com/apparentlymart/go-textseg/v15 v15.0.0/go.mod h1:K8XmNZdhEBkdlyDdvbmms github.com/aws/aws-sdk-go v1.44.122/go.mod h1:y4AeaBuwd2Lk+GepC1E9v0qOiTws0MIWAX4oIKwKHZo= github.com/aws/aws-sdk-go v1.49.4 h1:qiXsqEeLLhdLgUIyfr5ot+N/dGPWALmtM1SetRmbUlY= github.com/aws/aws-sdk-go v1.49.4/go.mod h1:LF8svs817+Nz+DmiMQKTO3ubZ/6IaTpq3TjupRn3Eqk= +github.com/aws/aws-sdk-go v1.50.35 h1:llQnNddBI/64pK7pwUFBoWYmg8+XGQUCs214eMbSDZc= +github.com/aws/aws-sdk-go v1.50.35/go.mod h1:LF8svs817+Nz+DmiMQKTO3ubZ/6IaTpq3TjupRn3Eqk= github.com/bgentry/go-netrc v0.0.0-20140422174119-9fd32a8b3d3d h1:xDfNPAt8lFiC1UJrqV3uuy861HCTo708pDMbjHHdCas= github.com/bgentry/go-netrc v0.0.0-20140422174119-9fd32a8b3d3d/go.mod h1:6QX/PXZ00z/TKoufEY6K/a0k6AhaJrQKdFe6OfVXsa4= github.com/bits-and-blooms/bitset v1.5.0/go.mod h1:gIdJ4wp64HaoK2YrL1Q5/N7Y16edYb8uY+O0FJTyyDA= @@ -249,6 +259,8 @@ github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2 github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= github.com/go-logr/logr v1.3.0 h1:2y3SDp0ZXuc6/cjLSZ+Q3ir+QB9T/iG5yYRXqsagWSY= github.com/go-logr/logr v1.3.0/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= +github.com/go-logr/logr v1.4.1 h1:pKouT5E8xu9zeFC39JXRDukb6JFQPXM5p5I91188VAQ= +github.com/go-logr/logr v1.4.1/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag= github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE= github.com/go-test/deep v1.0.7 h1:/VSMRlnY/JSyqxQUzQLKVMAskpY/NZKFA5j2P+0pP2M= @@ -287,6 +299,8 @@ github.com/golang/protobuf v1.5.1/go.mod h1:DopwsBzvsk0Fs44TXzsVbJyPhcCPeIwnvohx github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= github.com/golang/protobuf v1.5.3 h1:KhyjKVUg7Usr/dYsdSqoFveMYd5ko72D+zANwlG1mmg= github.com/golang/protobuf v1.5.3/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= +github.com/golang/protobuf v1.5.4 h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek= +github.com/golang/protobuf v1.5.4/go.mod h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6rSs7xps= github.com/golang/snappy v0.0.3/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= @@ -351,6 +365,8 @@ github.com/googleapis/gax-go/v2 v2.5.1/go.mod h1:h6B0KMMFNtI2ddbGJn3T3ZbwkeT6yqE github.com/googleapis/gax-go/v2 v2.6.0/go.mod h1:1mjbznJAPHFpesgE5ucqfYEscaz5kMdcIDwU/6+DDoY= github.com/googleapis/gax-go/v2 v2.12.0 h1:A+gCJKdRfqXkr+BIRGtZLibNXf0m1f9E4HG56etFpas= github.com/googleapis/gax-go/v2 v2.12.0/go.mod h1:y+aIqrI5eb1YGMVJfuV3185Ts/D7qKpsEkdD5+I6QGU= +github.com/googleapis/gax-go/v2 v2.12.2 h1:mhN09QQW1jEWeMF74zGR81R30z4VJzjZsfkUhuHF+DA= +github.com/googleapis/gax-go/v2 v2.12.2/go.mod h1:61M8vcyyXR2kqKFxKrfA22jaA8JGF7Dc8App1U3H6jc= github.com/googleapis/go-type-adapters v1.0.0/go.mod h1:zHW75FOG2aur7gAO2B+MLby+cLsWGBF62rFAi7WjWO4= github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw= github.com/gruntwork-io/terratest v0.46.11 h1:1Z9G18I2FNuH87Ro0YtjW4NH9ky4GDpfzE7+ivkPeB8= @@ -394,6 +410,8 @@ github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+o github.com/klauspost/compress v1.15.11/go.mod h1:QPwzmACJjUTFsnSHH934V6woptycfrDDJnH7hvFVbGM= github.com/klauspost/compress v1.17.4 h1:Ej5ixsIri7BrIjBkRZLTo6ghwrEtHFk7ijlczPW4fZ4= github.com/klauspost/compress v1.17.4/go.mod h1:/dCuZOvVtNoHsyb+cuJD3itjs3NbnF6KH9zAO4BDxPM= +github.com/klauspost/compress v1.17.7 h1:ehO88t2UGzQK66LMdE8tibEd1ErmzZjNEqWkjLAKQQg= +github.com/klauspost/compress v1.17.7/go.mod h1:Di0epgTjJY877eYKx5yC51cX2A2Vl2ibi7bDH9ttBbw= github.com/kr/fs v0.1.0/go.mod h1:FFnZGqtBN9Gxj7eW1uZ42v5BccTP0vu6NEaFoC2HwRg= github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= github.com/kr/pretty v0.2.1 h1:Fmg33tUaq4/8ym9TJN1x7sLJnHVwhP33CNkpYV/7rwI= @@ -453,6 +471,8 @@ github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsT github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= github.com/tmccombs/hcl2json v0.6.0 h1:Qc5NL4NQbpNnw8w8HQcA3GsVHvQDJXJwVTUxf2AEhOs= github.com/tmccombs/hcl2json v0.6.0/go.mod h1:QNirG4H64ZvlFsy9werRxXlWNTDR1GhWzXkjqPILHwo= +github.com/tmccombs/hcl2json v0.6.1 h1:KYk0h4vqLR2LzecgsgCEhuDbNfdvSu65CEZ7VGDgBl0= +github.com/tmccombs/hcl2json v0.6.1/go.mod h1:Bqe5itpqem41iD5O2vCfiP1MoDednwR4/vHTRDpjM4A= github.com/ulikunitz/xz v0.5.10/go.mod h1:nbz6k7qbPmH4IRqmfOplQw/tblSgqTqBwxkY0oWt/14= github.com/ulikunitz/xz v0.5.11 h1:kpFauv27b6ynzBNT/Xy+1k+fK4WswhN/6PN5WhFAGw8= github.com/ulikunitz/xz v0.5.11/go.mod h1:nbz6k7qbPmH4IRqmfOplQw/tblSgqTqBwxkY0oWt/14= @@ -475,16 +495,27 @@ go.opencensus.io v0.24.0 h1:y73uSU6J157QMP2kn2r30vwW1A2W2WFwSCGnAVxeaD0= go.opencensus.io v0.24.0/go.mod h1:vNK8G9p7aAivkbmorf4v+7Hgx+Zs0yY+0fOtgBfjQKo= go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.46.1 h1:SpGay3w+nEwMpfVnbqOLH5gY52/foP8RE8UzTZ1pdSE= go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.46.1/go.mod h1:4UoMYEZOC0yN/sPGH76KPkkU7zgiEWYWL9vwmbnTJPE= +go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.49.0 h1:4Pp6oUg3+e/6M4C0A/3kJ2VYa++dsWVTtGgLVj5xtHg= +go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.49.0/go.mod h1:Mjt1i1INqiaoZOMGR1RIUJN+i3ChKoFRqzrRQhlkbs0= go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.46.1 h1:aFJWCqJMNjENlcleuuOkGAPH82y0yULBScfXcIEdS24= go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.46.1/go.mod h1:sEGXWArGqc3tVa+ekntsN65DmVbVeW+7lTKTjZF3/Fo= +go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.49.0 h1:jq9TW8u3so/bN+JPT166wjOI6/vQPF6Xe7nMNIltagk= +go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.49.0/go.mod h1:p8pYQP+m5XfbZm9fxtSKAbM6oIllS7s2AfxrChvc7iw= go.opentelemetry.io/otel v1.21.0 h1:hzLeKBZEL7Okw2mGzZ0cc4k/A7Fta0uoPgaJCr8fsFc= go.opentelemetry.io/otel v1.21.0/go.mod h1:QZzNPQPm1zLX4gZK4cMi+71eaorMSGT3A4znnUvNNEo= +go.opentelemetry.io/otel v1.24.0 h1:0LAOdjNmQeSTzGBzduGe/rU4tZhMwL5rWgtp9Ku5Jfo= +go.opentelemetry.io/otel v1.24.0/go.mod h1:W7b9Ozg4nkF5tWI5zsXkaKKDjdVjpD4oAt9Qi/MArHo= go.opentelemetry.io/otel/metric v1.21.0 h1:tlYWfeo+Bocx5kLEloTjbcDwBuELRrIFxwdQ36PlJu4= go.opentelemetry.io/otel/metric v1.21.0/go.mod h1:o1p3CA8nNHW8j5yuQLdc1eeqEaPfzug24uvsyIEJRWM= +go.opentelemetry.io/otel/metric v1.24.0 h1:6EhoGWWK28x1fbpA4tYTOWBkPefTDQnb8WSGXlc88kI= +go.opentelemetry.io/otel/metric v1.24.0/go.mod h1:VYhLe1rFfxuTXLgj4CBiyz+9WYBA8pNGJgDcSFRKBco= go.opentelemetry.io/otel/sdk v1.21.0 h1:FTt8qirL1EysG6sTQRZ5TokkU8d0ugCj8htOgThZXQ8= go.opentelemetry.io/otel/sdk v1.21.0/go.mod h1:Nna6Yv7PWTdgJHVRD9hIYywQBRx7pbox6nwBnZIxl/E= +go.opentelemetry.io/otel/sdk v1.22.0 h1:6coWHw9xw7EfClIC/+O31R8IY3/+EiRFHevmHafB2Gw= go.opentelemetry.io/otel/trace v1.21.0 h1:WD9i5gzvoUPuXIXH24ZNBudiarZDKuekPqi/E8fpfLc= go.opentelemetry.io/otel/trace v1.21.0/go.mod h1:LGbsEB0f9LGjN+OZaQQ26sohbOmiMR+BaslueVtS/qQ= +go.opentelemetry.io/otel/trace v1.24.0 h1:CsKnnL4dUAr/0llH9FKuc698G04IrpWV0MQA/Y1YELI= +go.opentelemetry.io/otel/trace v1.24.0/go.mod h1:HPc3Xr/cOApsBI154IU0OI0HJexz+aw5uPdbs3UCjNU= go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqeYNgFYFoEGnI= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= @@ -495,6 +526,8 @@ golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPh golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.20.0 h1:jmAMJJZXr5KiCw05dfYK9QnqaqKLYXijU23lsEdcQqg= golang.org/x/crypto v0.20.0/go.mod h1:Xwo95rrVNIoSMx9wa1JroENMToLWn3RNVrTBpLHgZPQ= +golang.org/x/crypto v0.21.0 h1:X31++rzVUdKhX5sWmSOFZxx8UW/ldWx55cbf08iNAMA= +golang.org/x/crypto v0.21.0/go.mod h1:0BP7YvVV9gBbVKyeTG0Gyn+gZm94bibOW5BjDEYAOMs= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= @@ -534,6 +567,8 @@ golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91 golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= golang.org/x/mod v0.15.0 h1:SernR4v+D55NyBH2QiEQrlBAnj1ECL6AGrA5+dPaMY8= golang.org/x/mod v0.15.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= +golang.org/x/mod v0.16.0 h1:QX4fJ0Rr5cPQCF7O9lh9Se4pmwfwskqZfq5moyldzic= +golang.org/x/mod v0.16.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -585,6 +620,8 @@ golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg= golang.org/x/net v0.21.0 h1:AQyQV4dYCvJ7vGmJyKki9+PBdyvhkSd8EIx/qb0AYv4= golang.org/x/net v0.21.0/go.mod h1:bIjVDfnllIU7BJ2DNgfnXvpSvtn8VRwhlsaeUTyUS44= +golang.org/x/net v0.22.0 h1:9sGLhx7iRIHEiX0oAJ3MRZMUCElJgy7Br1nO+AMN3Tc= +golang.org/x/net v0.22.0/go.mod h1:JKghWKKOSdJwpW2GEx0Ja7fmaKnMsbu+MWVZTokSYmg= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= @@ -612,6 +649,8 @@ golang.org/x/oauth2 v0.0.0-20221014153046-6fdb5e3db783/go.mod h1:h4gKUeWbJ4rQPri golang.org/x/oauth2 v0.1.0/go.mod h1:G9FE4dLTsbXUu90h/Pf85g4w1D+SSAgR+q46nJZ8M4A= golang.org/x/oauth2 v0.16.0 h1:aDkGMBSYxElaoP81NpoUoz2oo2R2wHdZpGToUxfyQrQ= golang.org/x/oauth2 v0.16.0/go.mod h1:hqZ+0LWXsiVoZpeld6jVt06P3adbS2Uu911W1SsJv2o= +golang.org/x/oauth2 v0.18.0 h1:09qnuIAgzdx1XplqJvW6CQqMCtGZykZWcXzPMPUusvI= +golang.org/x/oauth2 v0.18.0/go.mod h1:Wf7knwG0MPoWIMMBgFlEaSUDaKskp0dCfrlJRJXbBi8= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= @@ -696,6 +735,8 @@ golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.17.0 h1:25cE3gD+tdBA7lp7QfhuV+rJiE9YXTcS3VG1SqssI/Y= golang.org/x/sys v0.17.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.18.0 h1:DBdB3niSjOA/O0blCZBqDefyWNYveAYMNF1Wum0DYQ4= +golang.org/x/sys v0.18.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.1.0/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= @@ -703,6 +744,7 @@ golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= golang.org/x/term v0.8.0/go.mod h1:xPskH00ivmX89bAKVGSKKtLOWNx2+17Eiy94tnKShWo= golang.org/x/term v0.17.0 h1:mkTF7LCd6WGJNL3K1Ad7kwxNfYAW6a8a8QqtMblp/4U= golang.org/x/term v0.17.0/go.mod h1:lLRBjIVuehSbZlaOtGMbcMncT+aqLLLmKrsjNrUguwk= +golang.org/x/term v0.18.0 h1:FcHjZXDMxI8mM3nwhX9HlKop4C0YQvCVCdwYl2wOtE8= golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= @@ -779,6 +821,8 @@ golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU= golang.org/x/tools v0.18.0 h1:k8NLag8AGHnn+PHbl7g43CtqZAwG60vZkLqgyZgIHgQ= golang.org/x/tools v0.18.0/go.mod h1:GL7B4CwcLLeo59yx/9UWWuNOW1n3VZ4f5axWfML7Lcg= +golang.org/x/tools v0.19.0 h1:tfGCXNR1OsFG+sVdLAitlpjAvD/I6dHDKnYrpEZUHkw= +golang.org/x/tools v0.19.0/go.mod h1:qoJWxmGSIBmAeriMx19ogtrEPrGtDbPK634QFIcLAhc= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= @@ -839,6 +883,8 @@ google.golang.org/api v0.98.0/go.mod h1:w7wJQLTM+wvQpNf5JyEcBoxK0RH7EDrh/L4qfsuJ google.golang.org/api v0.100.0/go.mod h1:ZE3Z2+ZOr87Rx7dqFsdRQkRBk36kDtp/h+QpHbB7a70= google.golang.org/api v0.155.0 h1:vBmGhCYs0djJttDNynWo44zosHlPvHmA0XiN2zP2DtA= google.golang.org/api v0.155.0/go.mod h1:GI5qK5f40kCpHfPn6+YzGAByIKWv8ujFnmoWm7Igduk= +google.golang.org/api v0.169.0 h1:QwWPy71FgMWqJN/l6jVlFHUa29a7dcUy02I8o799nPY= +google.golang.org/api v0.169.0/go.mod h1:gpNOiMA2tZ4mf5R9Iwf4rK/Dcz0fbdIgWYWVoxmsyLg= google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= @@ -951,10 +997,16 @@ google.golang.org/genproto v0.0.0-20221014213838-99cd37c6964a/go.mod h1:1vXfmgAz google.golang.org/genproto v0.0.0-20221025140454-527a21cfbd71/go.mod h1:9qHF0xnpdSfF6knlcsnpzUu5y+rpwgbvsyGAZPBMg4s= google.golang.org/genproto v0.0.0-20240123012728-ef4313101c80 h1:KAeGQVN3M9nD0/bQXnr/ClcEMJ968gUXJQ9pwfSynuQ= google.golang.org/genproto v0.0.0-20240123012728-ef4313101c80/go.mod h1:cc8bqMqtv9gMOr0zHg2Vzff5ULhhL2IXP4sbcn32Dro= +google.golang.org/genproto v0.0.0-20240308144416-29370a3891b7 h1:5cmXPmmYZddhZs05mvqVzGwPsoE/uq+1YBCeRmBDyMo= +google.golang.org/genproto v0.0.0-20240308144416-29370a3891b7/go.mod h1:yA7a1bW1kwl459Ol0m0lV4hLTfrL/7Bkk4Mj2Ir1mWI= google.golang.org/genproto/googleapis/api v0.0.0-20240123012728-ef4313101c80 h1:Lj5rbfG876hIAYFjqiJnPHfhXbv+nzTWfm04Fg/XSVU= google.golang.org/genproto/googleapis/api v0.0.0-20240123012728-ef4313101c80/go.mod h1:4jWUdICTdgc3Ibxmr8nAJiiLHwQBY0UI0XZcEMaFKaA= +google.golang.org/genproto/googleapis/api v0.0.0-20240308144416-29370a3891b7 h1:bITUotW/BD35GhBwrwGexWa8/P5CKHXACICrmuFJBa8= +google.golang.org/genproto/googleapis/api v0.0.0-20240308144416-29370a3891b7/go.mod h1:O1cOfN1Cy6QEYr7VxtjOyP5AdAuR0aJ/MYZaaof623Y= google.golang.org/genproto/googleapis/rpc v0.0.0-20240228224816-df926f6c8641 h1:DKU1r6Tj5s1vlU/moGhuGz7E3xRfwjdAfDzbsaQJtEY= google.golang.org/genproto/googleapis/rpc v0.0.0-20240228224816-df926f6c8641/go.mod h1:UCOku4NytXMJuLQE5VuqA5lX3PcHCBo8pxNyvkf4xBs= +google.golang.org/genproto/googleapis/rpc v0.0.0-20240308144416-29370a3891b7 h1:em/y72n4XlYRtayY/cVj6pnVzHa//BDA1BdoO+z9mdE= +google.golang.org/genproto/googleapis/rpc v0.0.0-20240308144416-29370a3891b7/go.mod h1:UCOku4NytXMJuLQE5VuqA5lX3PcHCBo8pxNyvkf4xBs= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= @@ -992,6 +1044,8 @@ google.golang.org/grpc v1.50.0/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCD google.golang.org/grpc v1.50.1/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCDK+GI= google.golang.org/grpc v1.62.0 h1:HQKZ/fa1bXkX1oFOvSjmZEUL8wLSaZTjCcLAlmZRtdk= google.golang.org/grpc v1.62.0/go.mod h1:IWTG0VlJLCh1SkC58F7np9ka9mx/WNkjl4PGJaiq+QE= +google.golang.org/grpc v1.62.1 h1:B4n+nfKzOICUXMgyrNd19h/I9oH0L1pizfk1d4zSgTk= +google.golang.org/grpc v1.62.1/go.mod h1:IWTG0VlJLCh1SkC58F7np9ka9mx/WNkjl4PGJaiq+QE= google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.1.0/go.mod h1:6Kw0yEErY5E/yWrBtf03jp27GLLJujG4z/JK95pnjjw= google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= @@ -1010,6 +1064,8 @@ google.golang.org/protobuf v1.28.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqw google.golang.org/protobuf v1.28.1/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= google.golang.org/protobuf v1.32.0 h1:pPC6BG5ex8PDFnkbrGU3EixyhKcQ2aDuBS36lqK/C7I= google.golang.org/protobuf v1.32.0/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos= +google.golang.org/protobuf v1.33.0 h1:uNO2rsAINq/JlFpSdYEKIZ0uKD/R9cpdv0T+yoGwGmI= +google.golang.org/protobuf v1.33.0/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f h1:BLraFXnmrev5lT+xlilqcH8XK9/i0At2xKjWk4p6zsU= diff --git a/terratest/data-sources/homedir.tf b/terratest/data-sources/homedir.tf new file mode 100644 index 00000000..f6894789 --- /dev/null +++ b/terratest/data-sources/homedir.tf @@ -0,0 +1,15 @@ +data "corefunc_homedir_get" "home" {} + +data "corefunc_homedir_expand" "home" { + path = "~/.aws/" +} + +output "homedir_get_ds" { + description = "This returns the home directory of the running machine." + value = data.corefunc_homedir_get.home.value +} + +output "homedir_expand_ds" { + description = "This returns the home directory of the running machine as part of the output." + value = data.corefunc_homedir_expand.home.value +} diff --git a/terratest/data-sources/leftpad.tf b/terratest/data-sources/leftpad.tf new file mode 100644 index 00000000..6c4a3895 --- /dev/null +++ b/terratest/data-sources/leftpad.tf @@ -0,0 +1,20 @@ +data "corefunc_str_leftpad" "leftpad" { + string = "abc" + pad_width = 5 + pad_char = "." +} + +data "corefunc_int_leftpad" "leftpad" { + num = 123 + pad_width = 5 +} + +output "str_leftpad_ds" { + description = "This is a string leftpad output." + value = data.corefunc_str_leftpad.leftpad.value +} + +output "int_leftpad_ds" { + description = "This is a numeric leftpad output." + value = data.corefunc_int_leftpad.leftpad.value +} diff --git a/terratest/locals.tf b/terratest/data-sources/locals.tf similarity index 100% rename from terratest/locals.tf rename to terratest/data-sources/locals.tf diff --git a/terratest/osv-scanner.toml b/terratest/data-sources/osv-scanner.toml similarity index 100% rename from terratest/osv-scanner.toml rename to terratest/data-sources/osv-scanner.toml diff --git a/terratest/data-sources/runtime.tf b/terratest/data-sources/runtime.tf new file mode 100644 index 00000000..91057eaf --- /dev/null +++ b/terratest/data-sources/runtime.tf @@ -0,0 +1,27 @@ +data "corefunc_runtime_cpuarch" "arch" {} + +data "corefunc_runtime_goroot" "goroot" {} + +data "corefunc_runtime_numcpus" "count" {} + +data "corefunc_runtime_os" "os" {} + +output "runtime_cpuarch_ds" { + description = "This returns the CPU architecture of the provider." + value = data.corefunc_runtime_cpuarch.arch.value +} + +output "runtime_goroot_ds" { + description = "This returns the GOROOT directory, if it exists." + value = data.corefunc_runtime_goroot.goroot.value +} + +output "runtime_numcpus_ds" { + description = "This returns the number of logical CPU cores." + value = data.corefunc_runtime_numcpus.count.value +} + +output "runtime_os_ds" { + description = "This returns the operating system of the provider." + value = data.corefunc_runtime_os.os.value +} diff --git a/terratest/data-sources/str_format.tf b/terratest/data-sources/str_format.tf new file mode 100644 index 00000000..2278b763 --- /dev/null +++ b/terratest/data-sources/str_format.tf @@ -0,0 +1,44 @@ +data "corefunc_str_camel" "str" { + string = local.input_string +} + +data "corefunc_str_constant" "str" { + string = local.input_string +} + +data "corefunc_str_kebab" "str" { + string = local.input_string +} + +data "corefunc_str_pascal" "str" { + string = local.input_string +} + +data "corefunc_str_snake" "str" { + string = local.input_string +} + +output "str_camel_ds" { + description = "This is a camelCase output." + value = data.corefunc_str_camel.str.value +} + +output "str_constant_ds" { + description = "This is a CONSTANT_CASE output." + value = data.corefunc_str_constant.str.value +} + +output "str_kebab_ds" { + description = "This is a kebab-case output." + value = data.corefunc_str_kebab.str.value +} + +output "str_pascal_ds" { + description = "This is a PascalCase output." + value = data.corefunc_str_pascal.str.value +} + +output "str_snake_ds" { + description = "This is a snake_case output." + value = data.corefunc_str_snake.str.value +} diff --git a/terratest/str_replace.tf b/terratest/data-sources/str_replace.tf similarity index 74% rename from terratest/str_replace.tf rename to terratest/data-sources/str_replace.tf index 8bc4c87c..accacb29 100644 --- a/terratest/str_replace.tf +++ b/terratest/data-sources/str_replace.tf @@ -27,3 +27,8 @@ data "corefunc_str_iterative_replace" "replacements" { }, ] } + +output "str_iterative_replace_ds" { + description = "This is a replacement output." + value = data.corefunc_str_iterative_replace.replacements.value +} diff --git a/terratest/str_truncate.tf b/terratest/data-sources/str_truncate.tf similarity index 55% rename from terratest/str_truncate.tf rename to terratest/data-sources/str_truncate.tf index 2f7bd183..57387d1c 100644 --- a/terratest/str_truncate.tf +++ b/terratest/data-sources/str_truncate.tf @@ -1,6 +1,10 @@ -# https://registry.terraform.io/providers/northwood-labs/corefunc/latest/docs/data-sources/str_truncate_label data "corefunc_str_truncate_label" "label" { prefix = "NW-ZZZ-CLOUD-TEST-APP-CLOUD-PROD-CRIT" label = "K8S Pods Not Running Deployment Check" max_length = 64 } + +output "str_truncate_ds" { + description = "This is a truncation output." + value = data.corefunc_str_truncate_label.label.value +} diff --git a/terratest/terraform_test.go b/terratest/data-sources/terraform_test.go similarity index 85% rename from terratest/terraform_test.go rename to terratest/data-sources/terraform_test.go index a53bf7dd..f03fe330 100644 --- a/terratest/terraform_test.go +++ b/terratest/data-sources/terraform_test.go @@ -43,6 +43,10 @@ var ( label = "K8S Pods Not Running Deployment Check" strToReplace = "This is a string for testing replacements. New Relic. Set-up." + exampleCom = "example.com" + exampleQuery = "http://u:p@example.com/foo?q=1" + exampleQueryFrag = "http://u:p@example.com/foo?q=1#bar" + origPath = os.Getenv("TF_ACC_TERRAFORM_PATH") origNamespace = os.Getenv("TF_ACC_PROVIDER_NAMESPACE") origHostname = os.Getenv("TF_ACC_PROVIDER_HOST") @@ -95,20 +99,20 @@ func TestTerraform(t *testing.T) { terraform.InitAndApply(t, terraformOptions) // Run `terraform output` to get the value of an output variable - assert.Equal(t, terraform.Output(t, terraformOptions, "str_camel"), corefunc.StrCamel(inputStr)) - assert.Equal(t, terraform.Output(t, terraformOptions, "str_constant"), corefunc.StrConstant(inputStr)) - assert.Equal(t, terraform.Output(t, terraformOptions, "str_kebab"), corefunc.StrKebab(inputStr)) - assert.Equal(t, terraform.Output(t, terraformOptions, "str_pascal"), corefunc.StrPascal(inputStr, false)) - assert.Equal(t, terraform.Output(t, terraformOptions, "str_snake"), corefunc.StrSnake(inputStr)) - assert.Equal(t, terraform.Output(t, terraformOptions, "int_leftpad"), corefunc.IntLeftPad(123, 5)) - assert.Equal(t, terraform.Output(t, terraformOptions, "str_leftpad"), corefunc.StrLeftPad("abc", 5, '.')) - assert.Equal(t, terraform.Output(t, terraformOptions, "env_ensure"), os.Getenv("GOROOT")) + assert.Equal(t, terraform.Output(t, terraformOptions, "str_camel_ds"), corefunc.StrCamel(inputStr)) + assert.Equal(t, terraform.Output(t, terraformOptions, "str_constant_ds"), corefunc.StrConstant(inputStr)) + assert.Equal(t, terraform.Output(t, terraformOptions, "str_kebab_ds"), corefunc.StrKebab(inputStr)) + assert.Equal(t, terraform.Output(t, terraformOptions, "str_pascal_ds"), corefunc.StrPascal(inputStr, false)) + assert.Equal(t, terraform.Output(t, terraformOptions, "str_snake_ds"), corefunc.StrSnake(inputStr)) + assert.Equal(t, terraform.Output(t, terraformOptions, "int_leftpad_ds"), corefunc.IntLeftPad(123, 5)) + assert.Equal(t, terraform.Output(t, terraformOptions, "str_leftpad_ds"), corefunc.StrLeftPad("abc", 5, '.')) + assert.Equal(t, terraform.Output(t, terraformOptions, "env_ensure_ds"), os.Getenv("GOROOT")) assert.Equal(t, - terraform.Output(t, terraformOptions, "str_truncate"), + terraform.Output(t, terraformOptions, "str_truncate_ds"), corefunc.TruncateLabel(64, prefix, label), ) assert.Equal(t, - terraform.Output(t, terraformOptions, "str_iterative_replace"), + terraform.Output(t, terraformOptions, "str_iterative_replace_ds"), corefunc.StrIterativeReplace( strToReplace, []types.Replacement{ @@ -123,20 +127,20 @@ func TestTerraform(t *testing.T) { ) // runtime - assert.Equal(t, terraform.Output(t, terraformOptions, "runtime_cpuarch"), runtime.GOARCH) - assert.Equal(t, terraform.Output(t, terraformOptions, "runtime_goroot"), runtime.GOROOT()) - assert.Equal(t, terraform.Output(t, terraformOptions, "runtime_numcpus"), fmt.Sprint(runtime.NumCPU())) - assert.Equal(t, terraform.Output(t, terraformOptions, "runtime_os"), runtime.GOOS) + assert.Equal(t, terraform.Output(t, terraformOptions, "runtime_cpuarch_ds"), runtime.GOARCH) + assert.Equal(t, terraform.Output(t, terraformOptions, "runtime_goroot_ds"), runtime.GOROOT()) + assert.Equal(t, terraform.Output(t, terraformOptions, "runtime_numcpus_ds"), fmt.Sprint(runtime.NumCPU())) + assert.Equal(t, terraform.Output(t, terraformOptions, "runtime_os_ds"), runtime.GOOS) // url_parse - urlParse := terraform.OutputMap(t, terraformOptions, "url_parse") + urlParse := terraform.OutputMap(t, terraformOptions, "url_parse_ds") assert.Equal(t, urlParse["decoded_port"], fmt.Sprint(80)) assert.Equal(t, urlParse["fragment"], "bar") assert.Equal(t, urlParse["hash"], "#bar") - assert.Equal(t, urlParse["host"], "example.com") - assert.Equal(t, urlParse["hostname"], "example.com") - assert.Equal(t, urlParse["normalized"], "http://u:p@example.com/foo?q=1#bar") - assert.Equal(t, urlParse["normalized_nofrag"], "http://u:p@example.com/foo?q=1") + assert.Equal(t, urlParse["host"], exampleCom) + assert.Equal(t, urlParse["hostname"], exampleCom) + assert.Equal(t, urlParse["normalized"], exampleQueryFrag) + assert.Equal(t, urlParse["normalized_nofrag"], exampleQuery) assert.Equal(t, urlParse["password"], "p") assert.Equal(t, urlParse["path"], "/foo") assert.Equal(t, urlParse["port"], "") @@ -148,14 +152,14 @@ func TestTerraform(t *testing.T) { assert.Equal(t, urlParse["username"], "u") // url_parse_gsb - urlParseGSB := terraform.OutputMap(t, terraformOptions, "url_parse_gsb") + urlParseGSB := terraform.OutputMap(t, terraformOptions, "url_parse_gsb_ds") assert.Equal(t, urlParseGSB["decoded_port"], fmt.Sprint(80)) assert.Equal(t, urlParseGSB["fragment"], "") assert.Equal(t, urlParseGSB["hash"], "") - assert.Equal(t, urlParseGSB["host"], "example.com") - assert.Equal(t, urlParseGSB["hostname"], "example.com") - assert.Equal(t, urlParseGSB["normalized"], "http://u:p@example.com/foo?q=1") - assert.Equal(t, urlParseGSB["normalized_nofrag"], "http://u:p@example.com/foo?q=1") + assert.Equal(t, urlParseGSB["host"], exampleCom) + assert.Equal(t, urlParseGSB["hostname"], exampleCom) + assert.Equal(t, urlParseGSB["normalized"], exampleQuery) + assert.Equal(t, urlParseGSB["normalized_nofrag"], exampleQuery) assert.Equal(t, urlParseGSB["password"], "p") assert.Equal(t, urlParseGSB["path"], "/foo") assert.Equal(t, urlParseGSB["port"], "") @@ -174,14 +178,14 @@ func TestTerraform(t *testing.T) { t.Fatal(err) } - assert.Equal(t, terraform.Output(t, terraformOptions, "homedir_get"), homedir) + assert.Equal(t, terraform.Output(t, terraformOptions, "homedir_get_ds"), homedir) homedirPath, err = corefunc.HomedirExpand("~/.aws") if err != nil { t.Fatal(err) } - assert.Equal(t, terraform.Output(t, terraformOptions, "homedir_expand"), homedirPath) + assert.Equal(t, terraform.Output(t, terraformOptions, "homedir_expand_ds"), homedirPath) // At the end of the test, run `terraform destroy` to clean up any resources that were created err = restoreEnv() diff --git a/terratest/data-sources/url.tf b/terratest/data-sources/url.tf new file mode 100644 index 00000000..92e793de --- /dev/null +++ b/terratest/data-sources/url.tf @@ -0,0 +1,18 @@ +data "corefunc_url_parse" "url" { + url = "HTTP://u:p@example.com:80/foo?q=1#bar" +} + +data "corefunc_url_parse" "gsb" { + url = "HTTP://u:p@example.com:80/foo?q=1#bar" + canonicalizer = "google_safe_browsing" +} + +output "url_parse_ds" { + description = "This returns a parsed URL." + value = data.corefunc_url_parse.url +} + +output "url_parse_gsb_ds" { + description = "This returns a parsed URL canonicalized for Google Safe Browsing." + value = data.corefunc_url_parse.gsb +} diff --git a/terratest/versions.tf b/terratest/data-sources/versions.tf similarity index 100% rename from terratest/versions.tf rename to terratest/data-sources/versions.tf diff --git a/terratest/env.tf b/terratest/env.tf deleted file mode 100644 index 52a4aa23..00000000 --- a/terratest/env.tf +++ /dev/null @@ -1,3 +0,0 @@ -data "corefunc_env_ensure" "goroot" { - name = "GOROOT" -} diff --git a/terratest/functions/.gitignore b/terratest/functions/.gitignore new file mode 100644 index 00000000..3f0336e2 --- /dev/null +++ b/terratest/functions/.gitignore @@ -0,0 +1 @@ +.terraform.lock.hcl diff --git a/terratest/functions/README.md b/terratest/functions/README.md new file mode 100644 index 00000000..339bfc23 --- /dev/null +++ b/terratest/functions/README.md @@ -0,0 +1,25 @@ +# Terratest + +Validates that the Terraform provider produces the same result as the Go library. + +## Initialize + +Initialize while checking for (and installing) updates. + +### Terraform + +```bash +terraform init -upgrade && terraform apply -auto-approve +``` + +### OpenTofu + +```bash +tofu init -upgrade && tofu apply -auto-approve +``` + +## Run tests + +```bash +go test -count 1 +``` diff --git a/terratest/functions/env.tf b/terratest/functions/env.tf new file mode 100644 index 00000000..ed027e91 --- /dev/null +++ b/terratest/functions/env.tf @@ -0,0 +1,9 @@ +# output "env_ensure_fn" { +# description = "This returns the AWS_REGION environment variable." +# value = provider::corefunc::env_ensure("AWS_REGION", "^([a-z]{2})-([^-]+)-(\\d)$") +# } + +output "env_ensure_fn" { + description = "This returns the AWS_REGION environment variable." + value = provider::corefunc::env_ensure("AWS_VAULT", "(non)?prod$") +} diff --git a/terratest/functions/go.mod b/terratest/functions/go.mod new file mode 100644 index 00000000..df7c0307 --- /dev/null +++ b/terratest/functions/go.mod @@ -0,0 +1,80 @@ +module terratest + +go 1.22.1 + +require ( + github.com/gruntwork-io/terratest v0.46.11 + github.com/hairyhenderson/go-which v0.2.0 + github.com/northwood-labs/terraform-provider-corefunc v1.3.1 + github.com/pkg/errors v0.9.1 + github.com/stretchr/testify v1.9.0 +) + +require ( + cloud.google.com/go v0.112.1 // indirect + cloud.google.com/go/compute v1.25.0 // indirect + cloud.google.com/go/compute/metadata v0.2.3 // indirect + cloud.google.com/go/iam v1.1.6 // indirect + cloud.google.com/go/storage v1.39.0 // indirect + github.com/agext/levenshtein v1.2.3 // indirect + github.com/apparentlymart/go-textseg/v15 v15.0.0 // indirect + github.com/aws/aws-sdk-go v1.50.35 // indirect + github.com/bgentry/go-netrc v0.0.0-20140422174119-9fd32a8b3d3d // indirect + github.com/bits-and-blooms/bitset v1.13.0 // indirect + github.com/chanced/caps v1.0.2 // indirect + github.com/davecgh/go-spew v1.1.1 // indirect + github.com/felixge/httpsnoop v1.0.4 // indirect + github.com/go-logr/logr v1.4.1 // indirect + github.com/go-logr/stdr v1.2.2 // indirect + github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect + github.com/golang/protobuf v1.5.4 // indirect + github.com/google/s2a-go v0.1.7 // indirect + github.com/google/uuid v1.6.0 // indirect + github.com/googleapis/enterprise-certificate-proxy v0.3.2 // indirect + github.com/googleapis/gax-go/v2 v2.12.2 // indirect + github.com/hashicorp/errwrap v1.1.0 // indirect + github.com/hashicorp/go-cleanhttp v0.5.2 // indirect + github.com/hashicorp/go-getter v1.7.3 // indirect + github.com/hashicorp/go-multierror v1.1.1 // indirect + github.com/hashicorp/go-safetemp v1.0.0 // indirect + github.com/hashicorp/go-version v1.6.0 // indirect + github.com/hashicorp/hcl/v2 v2.20.0 // indirect + github.com/hashicorp/terraform-json v0.21.0 // indirect + github.com/jinzhu/copier v0.4.0 // indirect + github.com/jmespath/go-jmespath v0.4.0 // indirect + github.com/klauspost/compress v1.17.7 // indirect + github.com/mattn/go-zglob v0.0.4 // indirect + github.com/mitchellh/go-homedir v1.1.0 // indirect + github.com/mitchellh/go-testing-interface v1.14.1 // indirect + github.com/mitchellh/go-wordwrap v1.0.1 // indirect + github.com/nlnwa/whatwg-url v0.4.0 // indirect + github.com/pmezard/go-difflib v1.0.0 // indirect + github.com/spf13/afero v1.11.0 // indirect + github.com/tmccombs/hcl2json v0.6.1 // indirect + github.com/ulikunitz/xz v0.5.11 // indirect + github.com/zclconf/go-cty v1.14.3 // indirect + go.opencensus.io v0.24.0 // indirect + go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.49.0 // indirect + go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.49.0 // indirect + go.opentelemetry.io/otel v1.24.0 // indirect + go.opentelemetry.io/otel/metric v1.24.0 // indirect + go.opentelemetry.io/otel/trace v1.24.0 // indirect + golang.org/x/crypto v0.21.0 // indirect + golang.org/x/mod v0.16.0 // indirect + golang.org/x/net v0.22.0 // indirect + golang.org/x/oauth2 v0.18.0 // indirect + golang.org/x/sync v0.6.0 // indirect + golang.org/x/sys v0.18.0 // indirect + golang.org/x/text v0.14.0 // indirect + golang.org/x/time v0.5.0 // indirect + golang.org/x/tools v0.19.0 // indirect + golang.org/x/xerrors v0.0.0-20231012003039-104605ab7028 // indirect + google.golang.org/api v0.169.0 // indirect + google.golang.org/appengine v1.6.8 // indirect + google.golang.org/genproto v0.0.0-20240308144416-29370a3891b7 // indirect + google.golang.org/genproto/googleapis/api v0.0.0-20240308144416-29370a3891b7 // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20240308144416-29370a3891b7 // indirect + google.golang.org/grpc v1.62.1 // indirect + google.golang.org/protobuf v1.33.0 // indirect + gopkg.in/yaml.v3 v3.0.1 // indirect +) diff --git a/terratest/functions/go.sum b/terratest/functions/go.sum new file mode 100644 index 00000000..f4d34caa --- /dev/null +++ b/terratest/functions/go.sum @@ -0,0 +1,1095 @@ +cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= +cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= +cloud.google.com/go v0.38.0/go.mod h1:990N+gfupTy94rShfmMCWGDn0LpTmnzTp2qbd1dvSRU= +cloud.google.com/go v0.44.1/go.mod h1:iSa0KzasP4Uvy3f1mN/7PiObzGgflwredwwASm/v6AU= +cloud.google.com/go v0.44.2/go.mod h1:60680Gw3Yr4ikxnPRS/oxxkBccT6SA1yMk63TGekxKY= +cloud.google.com/go v0.45.1/go.mod h1:RpBamKRgapWJb87xiFSdk4g1CME7QZg3uwTez+TSTjc= +cloud.google.com/go v0.46.3/go.mod h1:a6bKKbmY7er1mI7TEI4lsAkts/mkhTSZK8w33B4RAg0= +cloud.google.com/go v0.50.0/go.mod h1:r9sluTvynVuxRIOHXQEHMFffphuXHOMZMycpNR5e6To= +cloud.google.com/go v0.52.0/go.mod h1:pXajvRH/6o3+F9jDHZWQ5PbGhn+o8w9qiu/CffaVdO4= +cloud.google.com/go v0.53.0/go.mod h1:fp/UouUEsRkN6ryDKNW/Upv/JBKnv6WDthjR6+vze6M= +cloud.google.com/go v0.54.0/go.mod h1:1rq2OEkV3YMf6n/9ZvGWI3GWw0VoqH/1x2nd8Is/bPc= +cloud.google.com/go v0.56.0/go.mod h1:jr7tqZxxKOVYizybht9+26Z/gUq7tiRzu+ACVAMbKVk= +cloud.google.com/go v0.57.0/go.mod h1:oXiQ6Rzq3RAkkY7N6t3TcE6jE+CIBBbA36lwQ1JyzZs= +cloud.google.com/go v0.62.0/go.mod h1:jmCYTdRCQuc1PHIIJ/maLInMho30T/Y0M4hTdTShOYc= +cloud.google.com/go v0.65.0/go.mod h1:O5N8zS7uWy9vkA9vayVHs65eM1ubvY4h553ofrNHObY= +cloud.google.com/go v0.72.0/go.mod h1:M+5Vjvlc2wnp6tjzE102Dw08nGShTscUx2nZMufOKPI= +cloud.google.com/go v0.74.0/go.mod h1:VV1xSbzvo+9QJOxLDaJfTjx5e+MePCpCWwvftOeQmWk= +cloud.google.com/go v0.78.0/go.mod h1:QjdrLG0uq+YwhjoVOLsS1t7TW8fs36kLs4XO5R5ECHg= +cloud.google.com/go v0.79.0/go.mod h1:3bzgcEeQlzbuEAYu4mrWhKqWjmpprinYgKJLgKHnbb8= +cloud.google.com/go v0.81.0/go.mod h1:mk/AM35KwGk/Nm2YSeZbxXdrNK3KZOYHmLkOqC2V6E0= +cloud.google.com/go v0.83.0/go.mod h1:Z7MJUsANfY0pYPdw0lbnivPx4/vhy/e2FEkSkF7vAVY= +cloud.google.com/go v0.84.0/go.mod h1:RazrYuxIK6Kb7YrzzhPoLmCVzl7Sup4NrbKPg8KHSUM= +cloud.google.com/go v0.87.0/go.mod h1:TpDYlFy7vuLzZMMZ+B6iRiELaY7z/gJPaqbMx6mlWcY= +cloud.google.com/go v0.90.0/go.mod h1:kRX0mNRHe0e2rC6oNakvwQqzyDmg57xJ+SZU1eT2aDQ= +cloud.google.com/go v0.93.3/go.mod h1:8utlLll2EF5XMAV15woO4lSbWQlk8rer9aLOfLh7+YI= +cloud.google.com/go v0.94.1/go.mod h1:qAlAugsXlC+JWO+Bke5vCtc9ONxjQT3drlTTnAplMW4= +cloud.google.com/go v0.97.0/go.mod h1:GF7l59pYBVlXQIBLx3a761cZ41F9bBH3JUlihCt2Udc= +cloud.google.com/go v0.99.0/go.mod h1:w0Xx2nLzqWJPuozYQX+hFfCSI8WioryfRDzkoI/Y2ZA= +cloud.google.com/go v0.100.2/go.mod h1:4Xra9TjzAeYHrl5+oeLlzbM2k3mjVhZh4UqTZ//w99A= +cloud.google.com/go v0.102.0/go.mod h1:oWcCzKlqJ5zgHQt9YsaeTY9KzIvjyy0ArmiBUgpQ+nc= +cloud.google.com/go v0.102.1/go.mod h1:XZ77E9qnTEnrgEOvr4xzfdX5TRo7fB4T2F4O6+34hIU= +cloud.google.com/go v0.104.0/go.mod h1:OO6xxXdJyvuJPcEPBLN9BJPD+jep5G1+2U5B5gkRYtA= +cloud.google.com/go v0.112.0 h1:tpFCD7hpHFlQ8yPwT3x+QeXqc2T6+n6T+hmABHfDUSM= +cloud.google.com/go v0.112.0/go.mod h1:3jEEVwZ/MHU4djK5t5RHuKOA/GbLddgTdVubX1qnPD4= +cloud.google.com/go v0.112.1 h1:uJSeirPke5UNZHIb4SxfZklVSiWWVqW4oXlETwZziwM= +cloud.google.com/go v0.112.1/go.mod h1:+Vbu+Y1UU+I1rjmzeMOb/8RfkKJK2Gyxi1X6jJCZLo4= +cloud.google.com/go/aiplatform v1.22.0/go.mod h1:ig5Nct50bZlzV6NvKaTwmplLLddFx0YReh9WfTO5jKw= +cloud.google.com/go/aiplatform v1.24.0/go.mod h1:67UUvRBKG6GTayHKV8DBv2RtR1t93YRu5B1P3x99mYY= +cloud.google.com/go/analytics v0.11.0/go.mod h1:DjEWCu41bVbYcKyvlws9Er60YE4a//bK6mnhWvQeFNI= +cloud.google.com/go/analytics v0.12.0/go.mod h1:gkfj9h6XRf9+TS4bmuhPEShsh3hH8PAZzm/41OOhQd4= +cloud.google.com/go/area120 v0.5.0/go.mod h1:DE/n4mp+iqVyvxHN41Vf1CR602GiHQjFPusMFW6bGR4= +cloud.google.com/go/area120 v0.6.0/go.mod h1:39yFJqWVgm0UZqWTOdqkLhjoC7uFfgXRC8g/ZegeAh0= +cloud.google.com/go/artifactregistry v1.6.0/go.mod h1:IYt0oBPSAGYj/kprzsBjZ/4LnG/zOcHyFHjWPCi6SAQ= +cloud.google.com/go/artifactregistry v1.7.0/go.mod h1:mqTOFOnGZx8EtSqK/ZWcsm/4U8B77rbcLP6ruDU2Ixk= +cloud.google.com/go/asset v1.5.0/go.mod h1:5mfs8UvcM5wHhqtSv8J1CtxxaQq3AdBxxQi2jGW/K4o= +cloud.google.com/go/asset v1.7.0/go.mod h1:YbENsRK4+xTiL+Ofoj5Ckf+O17kJtgp3Y3nn4uzZz5s= +cloud.google.com/go/asset v1.8.0/go.mod h1:mUNGKhiqIdbr8X7KNayoYvyc4HbbFO9URsjbytpUaW0= +cloud.google.com/go/assuredworkloads v1.5.0/go.mod h1:n8HOZ6pff6re5KYfBXcFvSViQjDwxFkAkmUFffJRbbY= +cloud.google.com/go/assuredworkloads v1.6.0/go.mod h1:yo2YOk37Yc89Rsd5QMVECvjaMKymF9OP+QXWlKXUkXw= +cloud.google.com/go/assuredworkloads v1.7.0/go.mod h1:z/736/oNmtGAyU47reJgGN+KVoYoxeLBoj4XkKYscNI= +cloud.google.com/go/automl v1.5.0/go.mod h1:34EjfoFGMZ5sgJ9EoLsRtdPSNZLcfflJR39VbVNS2M0= +cloud.google.com/go/automl v1.6.0/go.mod h1:ugf8a6Fx+zP0D59WLhqgTDsQI9w07o64uf/Is3Nh5p8= +cloud.google.com/go/bigquery v1.0.1/go.mod h1:i/xbL2UlR5RvWAURpBYZTtm/cXjCha9lbfbpx4poX+o= +cloud.google.com/go/bigquery v1.3.0/go.mod h1:PjpwJnslEMmckchkHFfq+HTD2DmtT67aNFKH1/VBDHE= +cloud.google.com/go/bigquery v1.4.0/go.mod h1:S8dzgnTigyfTmLBfrtrhyYhwRxG72rYxvftPBK2Dvzc= +cloud.google.com/go/bigquery v1.5.0/go.mod h1:snEHRnqQbz117VIFhE8bmtwIDY80NLUZUMb4Nv6dBIg= +cloud.google.com/go/bigquery v1.7.0/go.mod h1://okPTzCYNXSlb24MZs83e2Do+h+VXtc4gLoIoXIAPc= +cloud.google.com/go/bigquery v1.8.0/go.mod h1:J5hqkt3O0uAFnINi6JXValWIb1v0goeZM77hZzJN/fQ= +cloud.google.com/go/bigquery v1.42.0/go.mod h1:8dRTJxhtG+vwBKzE5OseQn/hiydoQN3EedCaOdYmxRA= +cloud.google.com/go/billing v1.4.0/go.mod h1:g9IdKBEFlItS8bTtlrZdVLWSSdSyFUZKXNS02zKMOZY= +cloud.google.com/go/billing v1.5.0/go.mod h1:mztb1tBc3QekhjSgmpf/CV4LzWXLzCArwpLmP2Gm88s= +cloud.google.com/go/binaryauthorization v1.1.0/go.mod h1:xwnoWu3Y84jbuHa0zd526MJYmtnVXn0syOjaJgy4+dM= +cloud.google.com/go/binaryauthorization v1.2.0/go.mod h1:86WKkJHtRcv5ViNABtYMhhNWRrD1Vpi//uKEy7aYEfI= +cloud.google.com/go/cloudtasks v1.5.0/go.mod h1:fD92REy1x5woxkKEkLdvavGnPJGEn8Uic9nWuLzqCpY= +cloud.google.com/go/cloudtasks v1.6.0/go.mod h1:C6Io+sxuke9/KNRkbQpihnW93SWDU3uXt92nu85HkYI= +cloud.google.com/go/compute v0.1.0/go.mod h1:GAesmwr110a34z04OlxYkATPBEfVhkymfTBXtfbBFow= +cloud.google.com/go/compute v1.3.0/go.mod h1:cCZiE1NHEtai4wiufUhW8I8S1JKkAnhnQJWM7YD99wM= +cloud.google.com/go/compute v1.5.0/go.mod h1:9SMHyhJlzhlkJqrPAc839t2BZFTSk6Jdj6mkzQJeu0M= +cloud.google.com/go/compute v1.6.0/go.mod h1:T29tfhtVbq1wvAPo0E3+7vhgmkOYeXjhFvz/FMzPu0s= +cloud.google.com/go/compute v1.6.1/go.mod h1:g85FgpzFvNULZ+S8AYq87axRKuf2Kh7deLqV/jJ3thU= +cloud.google.com/go/compute v1.7.0/go.mod h1:435lt8av5oL9P3fv1OEzSbSUe+ybHXGMPQHHZWZxy9U= +cloud.google.com/go/compute v1.10.0/go.mod h1:ER5CLbMxl90o2jtNbGSbtfOpQKR0t15FOtRsugnLrlU= +cloud.google.com/go/compute v1.23.3 h1:6sVlXXBmbd7jNX0Ipq0trII3e4n1/MsADLK6a+aiVlk= +cloud.google.com/go/compute v1.23.3/go.mod h1:VCgBUoMnIVIR0CscqQiPJLAG25E3ZRZMzcFZeQ+h8CI= +cloud.google.com/go/compute v1.25.0 h1:H1/4SqSUhjPFE7L5ddzHOfY2bCAvjwNRZPNl6Ni5oYU= +cloud.google.com/go/compute v1.25.0/go.mod h1:GR7F0ZPZH8EhChlMo9FkLd7eUTwEymjqQagxzilIxIE= +cloud.google.com/go/compute/metadata v0.2.3 h1:mg4jlk7mCAj6xXp9UJ4fjI9VUI5rubuGBW5aJ7UnBMY= +cloud.google.com/go/compute/metadata v0.2.3/go.mod h1:VAV5nSsACxMJvgaAuX6Pk2AawlZn8kiOGuCv6gTkwuA= +cloud.google.com/go/containeranalysis v0.5.1/go.mod h1:1D92jd8gRR/c0fGMlymRgxWD3Qw9C1ff6/T7mLgVL8I= +cloud.google.com/go/containeranalysis v0.6.0/go.mod h1:HEJoiEIu+lEXM+k7+qLCci0h33lX3ZqoYFdmPcoO7s4= +cloud.google.com/go/datacatalog v1.3.0/go.mod h1:g9svFY6tuR+j+hrTw3J2dNcmI0dzmSiyOzm8kpLq0a0= +cloud.google.com/go/datacatalog v1.5.0/go.mod h1:M7GPLNQeLfWqeIm3iuiruhPzkt65+Bx8dAKvScX8jvs= +cloud.google.com/go/datacatalog v1.6.0/go.mod h1:+aEyF8JKg+uXcIdAmmaMUmZ3q1b/lKLtXCmXdnc0lbc= +cloud.google.com/go/dataflow v0.6.0/go.mod h1:9QwV89cGoxjjSR9/r7eFDqqjtvbKxAK2BaYU6PVk9UM= +cloud.google.com/go/dataflow v0.7.0/go.mod h1:PX526vb4ijFMesO1o202EaUmouZKBpjHsTlCtB4parQ= +cloud.google.com/go/dataform v0.3.0/go.mod h1:cj8uNliRlHpa6L3yVhDOBrUXH+BPAO1+KFMQQNSThKo= +cloud.google.com/go/dataform v0.4.0/go.mod h1:fwV6Y4Ty2yIFL89huYlEkwUPtS7YZinZbzzj5S9FzCE= +cloud.google.com/go/datalabeling v0.5.0/go.mod h1:TGcJ0G2NzcsXSE/97yWjIZO0bXj0KbVlINXMG9ud42I= +cloud.google.com/go/datalabeling v0.6.0/go.mod h1:WqdISuk/+WIGeMkpw/1q7bK/tFEZxsrFJOJdY2bXvTQ= +cloud.google.com/go/dataqna v0.5.0/go.mod h1:90Hyk596ft3zUQ8NkFfvICSIfHFh1Bc7C4cK3vbhkeo= +cloud.google.com/go/dataqna v0.6.0/go.mod h1:1lqNpM7rqNLVgWBJyk5NF6Uen2PHym0jtVJonplVsDA= +cloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7TKLgZqpHYE= +cloud.google.com/go/datastore v1.1.0/go.mod h1:umbIZjpQpHh4hmRpGhH4tLFup+FVzqBi1b3c64qFpCk= +cloud.google.com/go/datastream v1.2.0/go.mod h1:i/uTP8/fZwgATHS/XFu0TcNUhuA0twZxxQ3EyCUQMwo= +cloud.google.com/go/datastream v1.3.0/go.mod h1:cqlOX8xlyYF/uxhiKn6Hbv6WjwPPuI9W2M9SAXwaLLQ= +cloud.google.com/go/dialogflow v1.15.0/go.mod h1:HbHDWs33WOGJgn6rfzBW1Kv807BE3O1+xGbn59zZWI4= +cloud.google.com/go/dialogflow v1.16.1/go.mod h1:po6LlzGfK+smoSmTBnbkIZY2w8ffjz/RcGSS+sh1el0= +cloud.google.com/go/dialogflow v1.17.0/go.mod h1:YNP09C/kXA1aZdBgC/VtXX74G/TKn7XVCcVumTflA+8= +cloud.google.com/go/documentai v1.7.0/go.mod h1:lJvftZB5NRiFSX4moiye1SMxHx0Bc3x1+p9e/RfXYiU= +cloud.google.com/go/documentai v1.8.0/go.mod h1:xGHNEB7CtsnySCNrCFdCyyMz44RhFEEX2Q7UD0c5IhU= +cloud.google.com/go/domains v0.6.0/go.mod h1:T9Rz3GasrpYk6mEGHh4rymIhjlnIuB4ofT1wTxDeT4Y= +cloud.google.com/go/domains v0.7.0/go.mod h1:PtZeqS1xjnXuRPKE/88Iru/LdfoRyEHYA9nFQf4UKpg= +cloud.google.com/go/edgecontainer v0.1.0/go.mod h1:WgkZ9tp10bFxqO8BLPqv2LlfmQF1X8lZqwW4r1BTajk= +cloud.google.com/go/edgecontainer v0.2.0/go.mod h1:RTmLijy+lGpQ7BXuTDa4C4ssxyXT34NIuHIgKuP4s5w= +cloud.google.com/go/functions v1.6.0/go.mod h1:3H1UA3qiIPRWD7PeZKLvHZ9SaQhR26XIJcC0A5GbvAk= +cloud.google.com/go/functions v1.7.0/go.mod h1:+d+QBcWM+RsrgZfV9xo6KfA1GlzJfxcfZcRPEhDDfzg= +cloud.google.com/go/gaming v1.5.0/go.mod h1:ol7rGcxP/qHTRQE/RO4bxkXq+Fix0j6D4LFPzYTIrDM= +cloud.google.com/go/gaming v1.6.0/go.mod h1:YMU1GEvA39Qt3zWGyAVA9bpYz/yAhTvaQ1t2sK4KPUA= +cloud.google.com/go/gkeconnect v0.5.0/go.mod h1:c5lsNAg5EwAy7fkqX/+goqFsU1Da/jQFqArp+wGNr/o= +cloud.google.com/go/gkeconnect v0.6.0/go.mod h1:Mln67KyU/sHJEBY8kFZ0xTeyPtzbq9StAVvEULYK16A= +cloud.google.com/go/gkehub v0.9.0/go.mod h1:WYHN6WG8w9bXU0hqNxt8rm5uxnk8IH+lPY9J2TV7BK0= +cloud.google.com/go/gkehub v0.10.0/go.mod h1:UIPwxI0DsrpsVoWpLB0stwKCP+WFVG9+y977wO+hBH0= +cloud.google.com/go/grafeas v0.2.0/go.mod h1:KhxgtF2hb0P191HlY5besjYm6MqTSTj3LSI+M+ByZHc= +cloud.google.com/go/iam v0.3.0/go.mod h1:XzJPvDayI+9zsASAFO68Hk07u3z+f+JrT2xXNdp4bnY= +cloud.google.com/go/iam v0.5.0/go.mod h1:wPU9Vt0P4UmCux7mqtRu6jcpPAb74cP1fh50J3QpkUc= +cloud.google.com/go/iam v1.1.5 h1:1jTsCu4bcsNsE4iiqNT5SHwrDRCfRmIaaaVFhRveTJI= +cloud.google.com/go/iam v1.1.5/go.mod h1:rB6P/Ic3mykPbFio+vo7403drjlgvoWfYpJhMXEbzv8= +cloud.google.com/go/iam v1.1.6 h1:bEa06k05IO4f4uJonbB5iAgKTPpABy1ayxaIZV/GHVc= +cloud.google.com/go/iam v1.1.6/go.mod h1:O0zxdPeGBoFdWW3HWmBxJsk0pfvNM/p/qa82rWOGTwI= +cloud.google.com/go/language v1.4.0/go.mod h1:F9dRpNFQmJbkaop6g0JhSBXCNlO90e1KWx5iDdxbWic= +cloud.google.com/go/language v1.6.0/go.mod h1:6dJ8t3B+lUYfStgls25GusK04NLh3eDLQnWM3mdEbhI= +cloud.google.com/go/lifesciences v0.5.0/go.mod h1:3oIKy8ycWGPUyZDR/8RNnTOYevhaMLqh5vLUXs9zvT8= +cloud.google.com/go/lifesciences v0.6.0/go.mod h1:ddj6tSX/7BOnhxCSd3ZcETvtNr8NZ6t/iPhY2Tyfu08= +cloud.google.com/go/mediatranslation v0.5.0/go.mod h1:jGPUhGTybqsPQn91pNXw0xVHfuJ3leR1wj37oU3y1f4= +cloud.google.com/go/mediatranslation v0.6.0/go.mod h1:hHdBCTYNigsBxshbznuIMFNe5QXEowAuNmmC7h8pu5w= +cloud.google.com/go/memcache v1.4.0/go.mod h1:rTOfiGZtJX1AaFUrOgsMHX5kAzaTQ8azHiuDoTPzNsE= +cloud.google.com/go/memcache v1.5.0/go.mod h1:dk3fCK7dVo0cUU2c36jKb4VqKPS22BTkf81Xq617aWM= +cloud.google.com/go/metastore v1.5.0/go.mod h1:2ZNrDcQwghfdtCwJ33nM0+GrBGlVuh8rakL3vdPY3XY= +cloud.google.com/go/metastore v1.6.0/go.mod h1:6cyQTls8CWXzk45G55x57DVQ9gWg7RiH65+YgPsNh9s= +cloud.google.com/go/networkconnectivity v1.4.0/go.mod h1:nOl7YL8odKyAOtzNX73/M5/mGZgqqMeryi6UPZTk/rA= +cloud.google.com/go/networkconnectivity v1.5.0/go.mod h1:3GzqJx7uhtlM3kln0+x5wyFvuVH1pIBJjhCpjzSt75o= +cloud.google.com/go/networksecurity v0.5.0/go.mod h1:xS6fOCoqpVC5zx15Z/MqkfDwH4+m/61A3ODiDV1xmiQ= +cloud.google.com/go/networksecurity v0.6.0/go.mod h1:Q5fjhTr9WMI5mbpRYEbiexTzROf7ZbDzvzCrNl14nyU= +cloud.google.com/go/notebooks v1.2.0/go.mod h1:9+wtppMfVPUeJ8fIWPOq1UnATHISkGXGqTkxeieQ6UY= +cloud.google.com/go/notebooks v1.3.0/go.mod h1:bFR5lj07DtCPC7YAAJ//vHskFBxA5JzYlH68kXVdk34= +cloud.google.com/go/osconfig v1.7.0/go.mod h1:oVHeCeZELfJP7XLxcBGTMBvRO+1nQ5tFG9VQTmYS2Fs= +cloud.google.com/go/osconfig v1.8.0/go.mod h1:EQqZLu5w5XA7eKizepumcvWx+m8mJUhEwiPqWiZeEdg= +cloud.google.com/go/oslogin v1.4.0/go.mod h1:YdgMXWRaElXz/lDk1Na6Fh5orF7gvmJ0FGLIs9LId4E= +cloud.google.com/go/oslogin v1.5.0/go.mod h1:D260Qj11W2qx/HVF29zBg+0fd6YCSjSqLUkY/qEenQU= +cloud.google.com/go/phishingprotection v0.5.0/go.mod h1:Y3HZknsK9bc9dMi+oE8Bim0lczMU6hrX0UpADuMefr0= +cloud.google.com/go/phishingprotection v0.6.0/go.mod h1:9Y3LBLgy0kDTcYET8ZH3bq/7qni15yVUoAxiFxnlSUA= +cloud.google.com/go/privatecatalog v0.5.0/go.mod h1:XgosMUvvPyxDjAVNDYxJ7wBW8//hLDDYmnsNcMGq1K0= +cloud.google.com/go/privatecatalog v0.6.0/go.mod h1:i/fbkZR0hLN29eEWiiwue8Pb+GforiEIBnV9yrRUOKI= +cloud.google.com/go/pubsub v1.0.1/go.mod h1:R0Gpsv3s54REJCy4fxDixWD93lHJMoZTyQ2kNxGRt3I= +cloud.google.com/go/pubsub v1.1.0/go.mod h1:EwwdRX2sKPjnvnqCa270oGRyludottCI76h+R3AArQw= +cloud.google.com/go/pubsub v1.2.0/go.mod h1:jhfEVHT8odbXTkndysNHCcx0awwzvfOlguIAii9o8iA= +cloud.google.com/go/pubsub v1.3.1/go.mod h1:i+ucay31+CNRpDW4Lu78I4xXG+O1r/MAHgjpRVR+TSU= +cloud.google.com/go/recaptchaenterprise v1.3.1/go.mod h1:OdD+q+y4XGeAlxRaMn1Y7/GveP6zmq76byL6tjPE7d4= +cloud.google.com/go/recaptchaenterprise/v2 v2.1.0/go.mod h1:w9yVqajwroDNTfGuhmOjPDN//rZGySaf6PtFVcSCa7o= +cloud.google.com/go/recaptchaenterprise/v2 v2.2.0/go.mod h1:/Zu5jisWGeERrd5HnlS3EUGb/D335f9k51B/FVil0jk= +cloud.google.com/go/recaptchaenterprise/v2 v2.3.0/go.mod h1:O9LwGCjrhGHBQET5CA7dd5NwwNQUErSgEDit1DLNTdo= +cloud.google.com/go/recommendationengine v0.5.0/go.mod h1:E5756pJcVFeVgaQv3WNpImkFP8a+RptV6dDLGPILjvg= +cloud.google.com/go/recommendationengine v0.6.0/go.mod h1:08mq2umu9oIqc7tDy8sx+MNJdLG0fUi3vaSVbztHgJ4= +cloud.google.com/go/recommender v1.5.0/go.mod h1:jdoeiBIVrJe9gQjwd759ecLJbxCDED4A6p+mqoqDvTg= +cloud.google.com/go/recommender v1.6.0/go.mod h1:+yETpm25mcoiECKh9DEScGzIRyDKpZ0cEhWGo+8bo+c= +cloud.google.com/go/redis v1.7.0/go.mod h1:V3x5Jq1jzUcg+UNsRvdmsfuFnit1cfe3Z/PGyq/lm4Y= +cloud.google.com/go/redis v1.8.0/go.mod h1:Fm2szCDavWzBk2cDKxrkmWBqoCiL1+Ctwq7EyqBCA/A= +cloud.google.com/go/retail v1.8.0/go.mod h1:QblKS8waDmNUhghY2TI9O3JLlFk8jybHeV4BF19FrE4= +cloud.google.com/go/retail v1.9.0/go.mod h1:g6jb6mKuCS1QKnH/dpu7isX253absFl6iE92nHwlBUY= +cloud.google.com/go/scheduler v1.4.0/go.mod h1:drcJBmxF3aqZJRhmkHQ9b3uSSpQoltBPGPxGAWROx6s= +cloud.google.com/go/scheduler v1.5.0/go.mod h1:ri073ym49NW3AfT6DZi21vLZrG07GXr5p3H1KxN5QlI= +cloud.google.com/go/secretmanager v1.6.0/go.mod h1:awVa/OXF6IiyaU1wQ34inzQNc4ISIDIrId8qE5QGgKA= +cloud.google.com/go/security v1.5.0/go.mod h1:lgxGdyOKKjHL4YG3/YwIL2zLqMFCKs0UbQwgyZmfJl4= +cloud.google.com/go/security v1.7.0/go.mod h1:mZklORHl6Bg7CNnnjLH//0UlAlaXqiG7Lb9PsPXLfD0= +cloud.google.com/go/security v1.8.0/go.mod h1:hAQOwgmaHhztFhiQ41CjDODdWP0+AE1B3sX4OFlq+GU= +cloud.google.com/go/securitycenter v1.13.0/go.mod h1:cv5qNAqjY84FCN6Y9z28WlkKXyWsgLO832YiWwkCWcU= +cloud.google.com/go/securitycenter v1.14.0/go.mod h1:gZLAhtyKv85n52XYWt6RmeBdydyxfPeTrpToDPw4Auc= +cloud.google.com/go/servicedirectory v1.4.0/go.mod h1:gH1MUaZCgtP7qQiI+F+A+OpeKF/HQWgtAddhTbhL2bs= +cloud.google.com/go/servicedirectory v1.5.0/go.mod h1:QMKFL0NUySbpZJ1UZs3oFAmdvVxhhxB6eJ/Vlp73dfg= +cloud.google.com/go/speech v1.6.0/go.mod h1:79tcr4FHCimOp56lwC01xnt/WPJZc4v3gzyT7FoBkCM= +cloud.google.com/go/speech v1.7.0/go.mod h1:KptqL+BAQIhMsj1kOP2la5DSEEerPDuOP/2mmkhHhZQ= +cloud.google.com/go/storage v1.0.0/go.mod h1:IhtSnM/ZTZV8YYJWCY8RULGVqBDmpoyjwiyrjsg+URw= +cloud.google.com/go/storage v1.5.0/go.mod h1:tpKbwo567HUNpVclU5sGELwQWBDZ8gh0ZeosJ0Rtdos= +cloud.google.com/go/storage v1.6.0/go.mod h1:N7U0C8pVQ/+NIKOBQyamJIeKQKkZ+mxpohlUTyfDhBk= +cloud.google.com/go/storage v1.8.0/go.mod h1:Wv1Oy7z6Yz3DshWRJFhqM/UCfaWIRTdp0RXyy7KQOVs= +cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9ullr3+Kg0= +cloud.google.com/go/storage v1.22.1/go.mod h1:S8N1cAStu7BOeFfE8KAQzmyyLkK8p/vmRq6kuBTW58Y= +cloud.google.com/go/storage v1.23.0/go.mod h1:vOEEDNFnciUMhBeT6hsJIn3ieU5cFRmzeLgDvXzfIXc= +cloud.google.com/go/storage v1.27.0/go.mod h1:x9DOL8TK/ygDUMieqwfhdpQryTeEkhGKMi80i/iqR2s= +cloud.google.com/go/storage v1.36.0 h1:P0mOkAcaJxhCTvAkMhxMfrTKiNcub4YmmPBtlhAyTr8= +cloud.google.com/go/storage v1.36.0/go.mod h1:M6M/3V/D3KpzMTJyPOR/HU6n2Si5QdaXYEsng2xgOs8= +cloud.google.com/go/storage v1.39.0 h1:brbjUa4hbDHhpQf48tjqMaXEV+f1OGoaTmQau9tmCsA= +cloud.google.com/go/storage v1.39.0/go.mod h1:OAEj/WZwUYjA3YHQ10/YcN9ttGuEpLwvaoyBXIPikEk= +cloud.google.com/go/talent v1.1.0/go.mod h1:Vl4pt9jiHKvOgF9KoZo6Kob9oV4lwd/ZD5Cto54zDRw= +cloud.google.com/go/talent v1.2.0/go.mod h1:MoNF9bhFQbiJ6eFD3uSsg0uBALw4n4gaCaEjBw9zo8g= +cloud.google.com/go/videointelligence v1.6.0/go.mod h1:w0DIDlVRKtwPCn/C4iwZIJdvC69yInhW0cfi+p546uU= +cloud.google.com/go/videointelligence v1.7.0/go.mod h1:k8pI/1wAhjznARtVT9U1llUaFNPh7muw8QyOUpavru4= +cloud.google.com/go/vision v1.2.0/go.mod h1:SmNwgObm5DpFBme2xpyOyasvBc1aPdjvMk2bBk0tKD0= +cloud.google.com/go/vision/v2 v2.2.0/go.mod h1:uCdV4PpN1S0jyCyq8sIM42v2Y6zOLkZs+4R9LrGYwFo= +cloud.google.com/go/vision/v2 v2.3.0/go.mod h1:UO61abBx9QRMFkNBbf1D8B1LXdS2cGiiCRx0vSpZoUo= +cloud.google.com/go/webrisk v1.4.0/go.mod h1:Hn8X6Zr+ziE2aNd8SliSDWpEnSS1u4R9+xXZmFiHmGE= +cloud.google.com/go/webrisk v1.5.0/go.mod h1:iPG6fr52Tv7sGk0H6qUFzmL3HHZev1htXuWDEEsqMTg= +cloud.google.com/go/workflows v1.6.0/go.mod h1:6t9F5h/unJz41YqfBmqSASJSXccBLtD1Vwf+KmJENM0= +cloud.google.com/go/workflows v1.7.0/go.mod h1:JhSrZuVZWuiDfKEFxU0/F1PQjmpnpcoISEXH2bcHC3M= +dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= +github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= +github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= +github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= +github.com/agext/levenshtein v1.2.3 h1:YB2fHEn0UJagG8T1rrWknE3ZQzWM06O8AMAatNn7lmo= +github.com/agext/levenshtein v1.2.3/go.mod h1:JEDfjyjHDjOF/1e4FlBE/PkbqA9OfWu2ki2W0IB5558= +github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY= +github.com/apparentlymart/go-textseg/v15 v15.0.0 h1:uYvfpb3DyLSCGWnctWKGj857c6ew1u1fNQOlOtuGxQY= +github.com/apparentlymart/go-textseg/v15 v15.0.0/go.mod h1:K8XmNZdhEBkdlyDdvbmmsvpAG721bKi0joRfFdHIWJ4= +github.com/aws/aws-sdk-go v1.44.122/go.mod h1:y4AeaBuwd2Lk+GepC1E9v0qOiTws0MIWAX4oIKwKHZo= +github.com/aws/aws-sdk-go v1.49.4 h1:qiXsqEeLLhdLgUIyfr5ot+N/dGPWALmtM1SetRmbUlY= +github.com/aws/aws-sdk-go v1.49.4/go.mod h1:LF8svs817+Nz+DmiMQKTO3ubZ/6IaTpq3TjupRn3Eqk= +github.com/aws/aws-sdk-go v1.50.35 h1:llQnNddBI/64pK7pwUFBoWYmg8+XGQUCs214eMbSDZc= +github.com/aws/aws-sdk-go v1.50.35/go.mod h1:LF8svs817+Nz+DmiMQKTO3ubZ/6IaTpq3TjupRn3Eqk= +github.com/bgentry/go-netrc v0.0.0-20140422174119-9fd32a8b3d3d h1:xDfNPAt8lFiC1UJrqV3uuy861HCTo708pDMbjHHdCas= +github.com/bgentry/go-netrc v0.0.0-20140422174119-9fd32a8b3d3d/go.mod h1:6QX/PXZ00z/TKoufEY6K/a0k6AhaJrQKdFe6OfVXsa4= +github.com/bits-and-blooms/bitset v1.5.0/go.mod h1:gIdJ4wp64HaoK2YrL1Q5/N7Y16edYb8uY+O0FJTyyDA= +github.com/bits-and-blooms/bitset v1.13.0 h1:bAQ9OPNFYbGHV6Nez0tmNI0RiEu7/hxlYJRUA0wFAVE= +github.com/bits-and-blooms/bitset v1.13.0/go.mod h1:7hO7Gc7Pp1vODcmWvKMRA9BNmbv6a/7QIWpPxHddWR8= +github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= +github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= +github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= +github.com/chanced/caps v1.0.2 h1:RELvNN4lZajqSXJGzPaU7z8B4LK2+o2Oc/upeWdgMOA= +github.com/chanced/caps v1.0.2/go.mod h1:SJhRzeYLKJ3OmzyQXhdZ7Etj7lqqWoPtQ1zcSJRtQjs= +github.com/cheggaaa/pb v1.0.27/go.mod h1:pQciLPpbU0oxA0h+VJYYLxO+XeDQb5pZijXscXHm81s= +github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI= +github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI= +github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= +github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= +github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= +github.com/cncf/udpa/go v0.0.0-20200629203442-efcf912fb354/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= +github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= +github.com/cncf/udpa/go v0.0.0-20210930031921-04548b0d99d4/go.mod h1:6pvJx4me5XPnfI9Z40ddWsdw2W/uZgQLFXToKeRcDiI= +github.com/cncf/xds/go v0.0.0-20210312221358-fbca930ec8ed/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= +github.com/cncf/xds/go v0.0.0-20210805033703-aa0b78936158/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= +github.com/cncf/xds/go v0.0.0-20210922020428-25de7278fc84/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= +github.com/cncf/xds/go v0.0.0-20211001041855-01bcc9b48dfe/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= +github.com/cncf/xds/go v0.0.0-20211011173535-cb28da3451f1/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= +github.com/cncf/xds/go v0.0.0-20231128003011-0fa0005c9caa h1:jQCWAUqqlij9Pgj2i/PB79y4KOPYVyFYdROxgaCwdTQ= +github.com/cncf/xds/go v0.0.0-20231128003011-0fa0005c9caa/go.mod h1:x/1Gn8zydmfq8dk6e9PdstVsDgu9RuyIIJqAaF//0IM= +github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= +github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= +github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= +github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= +github.com/envoyproxy/go-control-plane v0.9.7/go.mod h1:cwu0lG7PUMfa9snN8LXBig5ynNVH9qI8YYLbd1fK2po= +github.com/envoyproxy/go-control-plane v0.9.9-0.20201210154907-fd9021fe5dad/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk= +github.com/envoyproxy/go-control-plane v0.9.9-0.20210217033140-668b12f5399d/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk= +github.com/envoyproxy/go-control-plane v0.9.9-0.20210512163311-63b5d3c536b0/go.mod h1:hliV/p42l8fGbc6Y9bQ70uLwIvmJyVE5k4iMKlh8wCQ= +github.com/envoyproxy/go-control-plane v0.9.10-0.20210907150352-cf90f659a021/go.mod h1:AFq3mo9L8Lqqiid3OhADV3RfLJnjiw63cSpi+fDTRC0= +github.com/envoyproxy/go-control-plane v0.10.2-0.20220325020618-49ff273808a1/go.mod h1:KJwIaB5Mv44NWtYuAOFCVOjcI94vtpEz2JU/D2v6IjE= +github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= +github.com/envoyproxy/protoc-gen-validate v1.0.4 h1:gVPz/FMfvh57HdSJQyvBtF00j8JU4zdyUgIUNhlgg0A= +github.com/envoyproxy/protoc-gen-validate v1.0.4/go.mod h1:qys6tmnRsYrQqIhm2bvKZH4Blx/1gTIZ2UKVY1M+Yew= +github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= +github.com/fatih/color v1.16.0 h1:zmkK9Ngbjj+K0yRhTVONQh1p/HknKYSlNT+vZCzyokM= +github.com/fatih/color v1.16.0/go.mod h1:fL2Sau1YI5c0pdGEVCbKQbLXB6edEj1ZgiY4NijnWvE= +github.com/felixge/httpsnoop v1.0.4 h1:NFTV2Zj1bL4mc9sqWACXbQFVBBg2W3GPvqp8/ESS2Wg= +github.com/felixge/httpsnoop v1.0.4/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= +github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= +github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU= +github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= +github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= +github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= +github.com/go-logr/logr v1.3.0 h1:2y3SDp0ZXuc6/cjLSZ+Q3ir+QB9T/iG5yYRXqsagWSY= +github.com/go-logr/logr v1.3.0/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= +github.com/go-logr/logr v1.4.1 h1:pKouT5E8xu9zeFC39JXRDukb6JFQPXM5p5I91188VAQ= +github.com/go-logr/logr v1.4.1/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= +github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag= +github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE= +github.com/go-test/deep v1.0.7 h1:/VSMRlnY/JSyqxQUzQLKVMAskpY/NZKFA5j2P+0pP2M= +github.com/go-test/deep v1.0.7/go.mod h1:QV8Hv/iy04NyLBxAdO9njL0iVPN1S4d/A3NVv1V36o8= +github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= +github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= +github.com/golang/groupcache v0.0.0-20191227052852-215e87163ea7/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= +github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= +github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da h1:oI5xCqsCo564l8iNU+DwB5epxmsaqB+rhGL0m5jtYqE= +github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= +github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= +github.com/golang/mock v1.2.0/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= +github.com/golang/mock v1.3.1/go.mod h1:sBzyDLLjw3U8JLTeZvSv8jJB+tU5PVekmnlKIyFUx0Y= +github.com/golang/mock v1.4.0/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= +github.com/golang/mock v1.4.1/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= +github.com/golang/mock v1.4.3/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= +github.com/golang/mock v1.4.4/go.mod h1:l3mdAwkq5BuhzHwde/uurv3sEJeZMXNpwsxVWU71h+4= +github.com/golang/mock v1.5.0/go.mod h1:CWnOUgYIOo4TcNZ0wHX3YZCqsaM1I1Jvs6v3mP3KVu8= +github.com/golang/mock v1.6.0/go.mod h1:p6yTPP+5HYm5mzsMV8JkE6ZKdX+/wYM6Hr+LicevLPs= +github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= +github.com/golang/protobuf v1.3.4/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= +github.com/golang/protobuf v1.3.5/go.mod h1:6O5/vntMXwX2lRkT1hjjk0nAC1IDOTvTlVgjlRvqsdk= +github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8= +github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA= +github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs= +github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w= +github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0= +github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8= +github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= +github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= +github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= +github.com/golang/protobuf v1.5.1/go.mod h1:DopwsBzvsk0Fs44TXzsVbJyPhcCPeIwnvohx4u74HPM= +github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= +github.com/golang/protobuf v1.5.3 h1:KhyjKVUg7Usr/dYsdSqoFveMYd5ko72D+zANwlG1mmg= +github.com/golang/protobuf v1.5.3/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= +github.com/golang/protobuf v1.5.4 h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek= +github.com/golang/protobuf v1.5.4/go.mod h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6rSs7xps= +github.com/golang/snappy v0.0.3/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= +github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= +github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= +github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= +github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= +github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= +github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.4.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.3/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.6/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.7/go.mod h1:n+brtR0CgQNWTVd5ZUFpTBC8YFBDLK/h/bpaJ8/DtOE= +github.com/google/go-cmp v0.5.8/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= +github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= +github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= +github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= +github.com/google/martian v2.1.0+incompatible h1:/CP5g8u/VJHijgedC/Legn3BAbAaWPgecwXBIDzw5no= +github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs= +github.com/google/martian/v3 v3.0.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= +github.com/google/martian/v3 v3.1.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= +github.com/google/martian/v3 v3.2.1/go.mod h1:oBOf6HBosgwRXnUGWUB05QECsc6uvmMiJ3+6W4l/CUk= +github.com/google/martian/v3 v3.3.2 h1:IqNFLAmvJOgVlpdEBiQbDc2EwKW77amAycfTuWKdfvw= +github.com/google/martian/v3 v3.3.2/go.mod h1:oBOf6HBosgwRXnUGWUB05QECsc6uvmMiJ3+6W4l/CUk= +github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= +github.com/google/pprof v0.0.0-20190515194954-54271f7e092f/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= +github.com/google/pprof v0.0.0-20191218002539-d4f498aebedc/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= +github.com/google/pprof v0.0.0-20200212024743-f11f1df84d12/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= +github.com/google/pprof v0.0.0-20200229191704-1ebb73c60ed3/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= +github.com/google/pprof v0.0.0-20200430221834-fc25d7d30c6d/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= +github.com/google/pprof v0.0.0-20200708004538-1a94d8640e99/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= +github.com/google/pprof v0.0.0-20201023163331-3e6fc7fc9c4c/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= +github.com/google/pprof v0.0.0-20201203190320-1bf35d6f28c2/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= +github.com/google/pprof v0.0.0-20210122040257-d980be63207e/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= +github.com/google/pprof v0.0.0-20210226084205-cbba55b83ad5/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= +github.com/google/pprof v0.0.0-20210601050228-01bbb1931b22/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= +github.com/google/pprof v0.0.0-20210609004039-a478d1d731e9/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= +github.com/google/pprof v0.0.0-20210720184732-4bb14d4b1be1/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= +github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= +github.com/google/s2a-go v0.1.7 h1:60BLSyTrOV4/haCDW4zb1guZItoSq8foHCXrAnjBo/o= +github.com/google/s2a-go v0.1.7/go.mod h1:50CgR4k1jNlWBu4UfS4AcfhVe1r6pdZPygJ3R8F0Qdw= +github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= +github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/googleapis/enterprise-certificate-proxy v0.0.0-20220520183353-fd19c99a87aa/go.mod h1:17drOmN3MwGY7t0e+Ei9b45FFGA3fBs3x36SsCg1hq8= +github.com/googleapis/enterprise-certificate-proxy v0.1.0/go.mod h1:17drOmN3MwGY7t0e+Ei9b45FFGA3fBs3x36SsCg1hq8= +github.com/googleapis/enterprise-certificate-proxy v0.2.0/go.mod h1:8C0jb7/mgJe/9KK8Lm7X9ctZC2t60YyIpYEI16jx0Qg= +github.com/googleapis/enterprise-certificate-proxy v0.3.2 h1:Vie5ybvEvT75RniqhfFxPRy3Bf7vr3h0cechB90XaQs= +github.com/googleapis/enterprise-certificate-proxy v0.3.2/go.mod h1:VLSiSSBs/ksPL8kq3OBOQ6WRI2QnaFynd1DCjZ62+V0= +github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg= +github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk= +github.com/googleapis/gax-go/v2 v2.1.0/go.mod h1:Q3nei7sK6ybPYH7twZdmQpAd1MKb7pfu6SK+H1/DsU0= +github.com/googleapis/gax-go/v2 v2.1.1/go.mod h1:hddJymUZASv3XPyGkUpKj8pPO47Rmb0eJc8R6ouapiM= +github.com/googleapis/gax-go/v2 v2.2.0/go.mod h1:as02EH8zWkzwUoLbBaFeQ+arQaj/OthfcblKl4IGNaM= +github.com/googleapis/gax-go/v2 v2.3.0/go.mod h1:b8LNqSzNabLiUpXKkY7HAR5jr6bIT99EXz9pXxye9YM= +github.com/googleapis/gax-go/v2 v2.4.0/go.mod h1:XOTVJ59hdnfJLIP/dh8n5CGryZR2LxK9wbMD5+iXC6c= +github.com/googleapis/gax-go/v2 v2.5.1/go.mod h1:h6B0KMMFNtI2ddbGJn3T3ZbwkeT6yqEF02fYlzkUCyo= +github.com/googleapis/gax-go/v2 v2.6.0/go.mod h1:1mjbznJAPHFpesgE5ucqfYEscaz5kMdcIDwU/6+DDoY= +github.com/googleapis/gax-go/v2 v2.12.0 h1:A+gCJKdRfqXkr+BIRGtZLibNXf0m1f9E4HG56etFpas= +github.com/googleapis/gax-go/v2 v2.12.0/go.mod h1:y+aIqrI5eb1YGMVJfuV3185Ts/D7qKpsEkdD5+I6QGU= +github.com/googleapis/gax-go/v2 v2.12.2 h1:mhN09QQW1jEWeMF74zGR81R30z4VJzjZsfkUhuHF+DA= +github.com/googleapis/gax-go/v2 v2.12.2/go.mod h1:61M8vcyyXR2kqKFxKrfA22jaA8JGF7Dc8App1U3H6jc= +github.com/googleapis/go-type-adapters v1.0.0/go.mod h1:zHW75FOG2aur7gAO2B+MLby+cLsWGBF62rFAi7WjWO4= +github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw= +github.com/gruntwork-io/terratest v0.46.11 h1:1Z9G18I2FNuH87Ro0YtjW4NH9ky4GDpfzE7+ivkPeB8= +github.com/gruntwork-io/terratest v0.46.11/go.mod h1:DVZG/s7eP1u3KOQJJfE6n7FDriMWpDvnj85XIlZMEM8= +github.com/gtramontina/ooze v0.2.0 h1:QDW1zeq1TQgTLbIWuk76GCgNV3adkamYxY1aJNYp/Bc= +github.com/gtramontina/ooze v0.2.0/go.mod h1:e0dltGb+Ws7SQKfoj4XkKf9C/UaIAK2YGWbLKLPwL6k= +github.com/hairyhenderson/go-which v0.2.0 h1:vxoCKdgYc6+MTBzkJYhWegksHjjxuXPNiqo5G2oBM+4= +github.com/hairyhenderson/go-which v0.2.0/go.mod h1:U1BQQRCjxYHfOkXDyCgst7OZVknbqI7KuGKhGnmyIik= +github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= +github.com/hashicorp/errwrap v1.1.0 h1:OxrOeh75EUXMY8TBjag2fzXGZ40LB6IKw45YeGUDY2I= +github.com/hashicorp/errwrap v1.1.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= +github.com/hashicorp/go-cleanhttp v0.5.2 h1:035FKYIWjmULyFRBKPs8TBQoi0x6d9G4xc9neXJWAZQ= +github.com/hashicorp/go-cleanhttp v0.5.2/go.mod h1:kO/YDlP8L1346E6Sodw+PrpBSV4/SoxCXGY6BqNFT48= +github.com/hashicorp/go-getter v1.7.3 h1:bN2+Fw9XPFvOCjB0UOevFIMICZ7G2XSQHzfvLUyOM5E= +github.com/hashicorp/go-getter v1.7.3/go.mod h1:W7TalhMmbPmsSMdNjD0ZskARur/9GJ17cfHTRtXV744= +github.com/hashicorp/go-multierror v1.1.1 h1:H5DkEtf6CXdFp0N0Em5UCwQpXMWke8IA0+lD48awMYo= +github.com/hashicorp/go-multierror v1.1.1/go.mod h1:iw975J/qwKPdAO1clOe2L8331t/9/fmwbPZ6JB6eMoM= +github.com/hashicorp/go-safetemp v1.0.0 h1:2HR189eFNrjHQyENnQMMpCiBAsRxzbTMIgBhEyExpmo= +github.com/hashicorp/go-safetemp v1.0.0/go.mod h1:oaerMy3BhqiTbVye6QuFhFtIceqFoDHxNAB65b+Rj1I= +github.com/hashicorp/go-version v1.6.0 h1:feTTfFNnjP967rlCxM/I9g701jU+RN74YKx2mOkIeek= +github.com/hashicorp/go-version v1.6.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= +github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= +github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= +github.com/hashicorp/hcl/v2 v2.20.0 h1:l++cRs/5jQOiKVvqXZm/P1ZEfVXJmvLS9WSVxkaeTb4= +github.com/hashicorp/hcl/v2 v2.20.0/go.mod h1:WmcD/Ym72MDOOx5F62Ly+leloeu6H7m0pG7VBiU6pQk= +github.com/hashicorp/terraform-json v0.21.0 h1:9NQxbLNqPbEMze+S6+YluEdXgJmhQykRyRNd+zTI05U= +github.com/hashicorp/terraform-json v0.21.0/go.mod h1:qdeBs11ovMzo5puhrRibdD6d2Dq6TyE/28JiU4tIQxk= +github.com/hexops/gotextdiff v1.0.3 h1:gitA9+qJrrTCsiCl7+kh75nPqQt1cx4ZkudSTLoUqJM= +github.com/hexops/gotextdiff v1.0.3/go.mod h1:pSWU5MAI3yDq+fZBTazCSJysOMbxWL1BSow5/V2vxeg= +github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= +github.com/ianlancetaylor/demangle v0.0.0-20200824232613-28f6c0f3b639/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= +github.com/jinzhu/copier v0.4.0 h1:w3ciUoD19shMCRargcpm0cm91ytaBhDvuRpz1ODO/U8= +github.com/jinzhu/copier v0.4.0/go.mod h1:DfbEm0FYsaqBcKcFuvmOZb218JkPGtvSHsKg8S8hyyg= +github.com/jmespath/go-jmespath v0.4.0 h1:BEgLn5cpjn8UN1mAw4NjwDrS35OdebyEtFe+9YPoQUg= +github.com/jmespath/go-jmespath v0.4.0/go.mod h1:T8mJZnbsbmF+m6zOOFylbeCJqk5+pHWvzYPziyZiYoo= +github.com/jmespath/go-jmespath/internal/testify v1.5.1 h1:shLQSRRSCCPj3f2gpwzGwWFoC7ycTf1rcQZHOlsJ6N8= +github.com/jmespath/go-jmespath/internal/testify v1.5.1/go.mod h1:L3OGu8Wl2/fWfCI6z80xFu9LTZmf1ZRjMHUOPmWr69U= +github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU= +github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/XSXhF0NWZEnDohbsk= +github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= +github.com/klauspost/compress v1.15.11/go.mod h1:QPwzmACJjUTFsnSHH934V6woptycfrDDJnH7hvFVbGM= +github.com/klauspost/compress v1.17.4 h1:Ej5ixsIri7BrIjBkRZLTo6ghwrEtHFk7ijlczPW4fZ4= +github.com/klauspost/compress v1.17.4/go.mod h1:/dCuZOvVtNoHsyb+cuJD3itjs3NbnF6KH9zAO4BDxPM= +github.com/klauspost/compress v1.17.7 h1:ehO88t2UGzQK66LMdE8tibEd1ErmzZjNEqWkjLAKQQg= +github.com/klauspost/compress v1.17.7/go.mod h1:Di0epgTjJY877eYKx5yC51cX2A2Vl2ibi7bDH9ttBbw= +github.com/kr/fs v0.1.0/go.mod h1:FFnZGqtBN9Gxj7eW1uZ42v5BccTP0vu6NEaFoC2HwRg= +github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= +github.com/kr/pretty v0.2.1 h1:Fmg33tUaq4/8ym9TJN1x7sLJnHVwhP33CNkpYV/7rwI= +github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= +github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= +github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= +github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= +github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= +github.com/kylelemons/godebug v1.1.0 h1:RPNrshWIDI6G2gRW9EHilWtl7Z6Sb1BR0xunSBf0SNc= +github.com/kylelemons/godebug v1.1.0/go.mod h1:9/0rRGxNHcop5bhtWyNeEfOS8JIWk580+fNqagV/RAw= +github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= +github.com/mattn/go-colorable v0.1.13 h1:fFA4WZxdEF4tXPZVKMLwD8oUnCTTo08duU7wxecdEvA= +github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovkB8vQcUbaXHg= +github.com/mattn/go-isatty v0.0.4/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= +github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY= +github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= +github.com/mattn/go-runewidth v0.0.4/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= +github.com/mattn/go-zglob v0.0.4 h1:LQi2iOm0/fGgu80AioIJ/1j9w9Oh+9DZ39J4VAGzHQM= +github.com/mattn/go-zglob v0.0.4/go.mod h1:MxxjyoXXnMxfIpxTK2GAkw1w8glPsQILx3N5wrKakiY= +github.com/mitchellh/go-homedir v1.1.0 h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG+4E0Y= +github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= +github.com/mitchellh/go-testing-interface v1.14.1 h1:jrgshOhYAUVNMAJiKbEu7EqAwgJJ2JqpQmpLJOu07cU= +github.com/mitchellh/go-testing-interface v1.14.1/go.mod h1:gfgS7OtZj6MA4U1UrDRp04twqAjfvlZyCfX3sDjEym8= +github.com/mitchellh/go-wordwrap v1.0.1 h1:TLuKupo69TCn6TQSyGxwI1EblZZEsQ0vMlAFQflz0v0= +github.com/mitchellh/go-wordwrap v1.0.1/go.mod h1:R62XHJLzvMFRBbcrT7m7WgmE1eOyTSsCt+hzestvNj0= +github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e h1:fD57ERR4JtEqsWbfPhv4DMiApHyliiK5xCTNVSPiaAs= +github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno= +github.com/nlnwa/whatwg-url v0.4.0 h1:B3kFb5EL7KILeBkhrlQvFi41Ex0p4ropVA9brt5ungI= +github.com/nlnwa/whatwg-url v0.4.0/go.mod h1:pLzpJjFPtA+n7RCLvp0GBxvDHa/2ckNCBK9mfEeNOMQ= +github.com/northwood-labs/terraform-provider-corefunc v1.3.1 h1:OfzB5vUG9cgSnsOObFa5WkBXVkhUPJ0jtdSzM0l3/DU= +github.com/northwood-labs/terraform-provider-corefunc v1.3.1/go.mod h1:bzmTRj0Q4sWAvq/eS3gEjwAAEtH8c4QHFEPA/lNYWXE= +github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= +github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +github.com/pkg/sftp v1.10.1/go.mod h1:lYOWFsE0bwd1+KfKJaKeuokY15vzFx25BLbzYYoAxZI= +github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= +github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= +github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= +github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= +github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= +github.com/spf13/afero v1.3.3/go.mod h1:5KUK8ByomD5Ti5Artl0RtHeI5pTF7MIDuXL3yY520V4= +github.com/spf13/afero v1.11.0 h1:WJQKhtpdm3v2IzqG8VMqrr6Rf3UYpEF239Jy9wNepM8= +github.com/spf13/afero v1.11.0/go.mod h1:GH9Y3pIexgf1MTIWtNGyogA5MwRIDXGUr+hbWNoBjkY= +github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= +github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= +github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= +github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= +github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= +github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= +github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= +github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg= +github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= +github.com/tmccombs/hcl2json v0.6.0 h1:Qc5NL4NQbpNnw8w8HQcA3GsVHvQDJXJwVTUxf2AEhOs= +github.com/tmccombs/hcl2json v0.6.0/go.mod h1:QNirG4H64ZvlFsy9werRxXlWNTDR1GhWzXkjqPILHwo= +github.com/tmccombs/hcl2json v0.6.1 h1:KYk0h4vqLR2LzecgsgCEhuDbNfdvSu65CEZ7VGDgBl0= +github.com/tmccombs/hcl2json v0.6.1/go.mod h1:Bqe5itpqem41iD5O2vCfiP1MoDednwR4/vHTRDpjM4A= +github.com/ulikunitz/xz v0.5.10/go.mod h1:nbz6k7qbPmH4IRqmfOplQw/tblSgqTqBwxkY0oWt/14= +github.com/ulikunitz/xz v0.5.11 h1:kpFauv27b6ynzBNT/Xy+1k+fK4WswhN/6PN5WhFAGw8= +github.com/ulikunitz/xz v0.5.11/go.mod h1:nbz6k7qbPmH4IRqmfOplQw/tblSgqTqBwxkY0oWt/14= +github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= +github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= +github.com/zclconf/go-cty v1.14.3 h1:1JXy1XroaGrzZuG6X9dt7HL6s9AwbY+l4UNL8o5B6ho= +github.com/zclconf/go-cty v1.14.3/go.mod h1:VvMs5i0vgZdhYawQNq5kePSpLAoz8u1xvZgrPIxfnZE= +go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU= +go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8= +go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= +go.opencensus.io v0.22.3/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= +go.opencensus.io v0.22.4/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= +go.opencensus.io v0.22.5/go.mod h1:5pWMHQbX5EPX2/62yrJeAkowc+lfs/XD7Uxpq3pI6kk= +go.opencensus.io v0.23.0/go.mod h1:XItmlyltB5F7CS4xOC1DcqMoFqwtC6OG2xF7mCv7P7E= +go.opencensus.io v0.24.0 h1:y73uSU6J157QMP2kn2r30vwW1A2W2WFwSCGnAVxeaD0= +go.opencensus.io v0.24.0/go.mod h1:vNK8G9p7aAivkbmorf4v+7Hgx+Zs0yY+0fOtgBfjQKo= +go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.46.1 h1:SpGay3w+nEwMpfVnbqOLH5gY52/foP8RE8UzTZ1pdSE= +go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.46.1/go.mod h1:4UoMYEZOC0yN/sPGH76KPkkU7zgiEWYWL9vwmbnTJPE= +go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.49.0 h1:4Pp6oUg3+e/6M4C0A/3kJ2VYa++dsWVTtGgLVj5xtHg= +go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.49.0/go.mod h1:Mjt1i1INqiaoZOMGR1RIUJN+i3ChKoFRqzrRQhlkbs0= +go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.46.1 h1:aFJWCqJMNjENlcleuuOkGAPH82y0yULBScfXcIEdS24= +go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.46.1/go.mod h1:sEGXWArGqc3tVa+ekntsN65DmVbVeW+7lTKTjZF3/Fo= +go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.49.0 h1:jq9TW8u3so/bN+JPT166wjOI6/vQPF6Xe7nMNIltagk= +go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.49.0/go.mod h1:p8pYQP+m5XfbZm9fxtSKAbM6oIllS7s2AfxrChvc7iw= +go.opentelemetry.io/otel v1.21.0 h1:hzLeKBZEL7Okw2mGzZ0cc4k/A7Fta0uoPgaJCr8fsFc= +go.opentelemetry.io/otel v1.21.0/go.mod h1:QZzNPQPm1zLX4gZK4cMi+71eaorMSGT3A4znnUvNNEo= +go.opentelemetry.io/otel v1.24.0 h1:0LAOdjNmQeSTzGBzduGe/rU4tZhMwL5rWgtp9Ku5Jfo= +go.opentelemetry.io/otel v1.24.0/go.mod h1:W7b9Ozg4nkF5tWI5zsXkaKKDjdVjpD4oAt9Qi/MArHo= +go.opentelemetry.io/otel/metric v1.21.0 h1:tlYWfeo+Bocx5kLEloTjbcDwBuELRrIFxwdQ36PlJu4= +go.opentelemetry.io/otel/metric v1.21.0/go.mod h1:o1p3CA8nNHW8j5yuQLdc1eeqEaPfzug24uvsyIEJRWM= +go.opentelemetry.io/otel/metric v1.24.0 h1:6EhoGWWK28x1fbpA4tYTOWBkPefTDQnb8WSGXlc88kI= +go.opentelemetry.io/otel/metric v1.24.0/go.mod h1:VYhLe1rFfxuTXLgj4CBiyz+9WYBA8pNGJgDcSFRKBco= +go.opentelemetry.io/otel/sdk v1.21.0 h1:FTt8qirL1EysG6sTQRZ5TokkU8d0ugCj8htOgThZXQ8= +go.opentelemetry.io/otel/sdk v1.21.0/go.mod h1:Nna6Yv7PWTdgJHVRD9hIYywQBRx7pbox6nwBnZIxl/E= +go.opentelemetry.io/otel/sdk v1.22.0 h1:6coWHw9xw7EfClIC/+O31R8IY3/+EiRFHevmHafB2Gw= +go.opentelemetry.io/otel/trace v1.21.0 h1:WD9i5gzvoUPuXIXH24ZNBudiarZDKuekPqi/E8fpfLc= +go.opentelemetry.io/otel/trace v1.21.0/go.mod h1:LGbsEB0f9LGjN+OZaQQ26sohbOmiMR+BaslueVtS/qQ= +go.opentelemetry.io/otel/trace v1.24.0 h1:CsKnnL4dUAr/0llH9FKuc698G04IrpWV0MQA/Y1YELI= +go.opentelemetry.io/otel/trace v1.24.0/go.mod h1:HPc3Xr/cOApsBI154IU0OI0HJexz+aw5uPdbs3UCjNU= +go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqeYNgFYFoEGnI= +golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= +golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20190820162420-60c769a6c586/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= +golang.org/x/crypto v0.20.0 h1:jmAMJJZXr5KiCw05dfYK9QnqaqKLYXijU23lsEdcQqg= +golang.org/x/crypto v0.20.0/go.mod h1:Xwo95rrVNIoSMx9wa1JroENMToLWn3RNVrTBpLHgZPQ= +golang.org/x/crypto v0.21.0 h1:X31++rzVUdKhX5sWmSOFZxx8UW/ldWx55cbf08iNAMA= +golang.org/x/crypto v0.21.0/go.mod h1:0BP7YvVV9gBbVKyeTG0Gyn+gZm94bibOW5BjDEYAOMs= +golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= +golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= +golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= +golang.org/x/exp v0.0.0-20190829153037-c13cbed26979/go.mod h1:86+5VVa7VpoJ4kLfm080zCjGlMRFzhUhsZKEZO7MGek= +golang.org/x/exp v0.0.0-20191030013958-a1ab85dbe136/go.mod h1:JXzH8nQsPlswgeRAPE3MuO9GYsAcnJvJ4vnMwN/5qkY= +golang.org/x/exp v0.0.0-20191129062945-2f5052295587/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= +golang.org/x/exp v0.0.0-20191227195350-da58074b4299/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= +golang.org/x/exp v0.0.0-20200119233911-0405dc783f0a/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= +golang.org/x/exp v0.0.0-20200207192155-f17229e696bd/go.mod h1:J/WKrq2StrnmMY6+EHIKF9dgMWnmCNThgcyBT1FY9mM= +golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6/go.mod h1:3jZMyOhIsHpP37uCMkUooju7aAi5cS1Q23tOzKc+0MU= +golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= +golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= +golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= +golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= +golang.org/x/lint v0.0.0-20190301231843-5614ed5bae6f/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= +golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= +golang.org/x/lint v0.0.0-20190409202823-959b441ac422/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= +golang.org/x/lint v0.0.0-20190909230951-414d861bb4ac/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= +golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= +golang.org/x/lint v0.0.0-20191125180803-fdd1cda4f05f/go.mod h1:5qLYkcX4OjUUV8bRuDixDT3tpyyb+LUpUlRWLxfhWrs= +golang.org/x/lint v0.0.0-20200130185559-910be7a94367/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= +golang.org/x/lint v0.0.0-20200302205851-738671d3881b/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= +golang.org/x/lint v0.0.0-20201208152925-83fdc39ff7b5/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= +golang.org/x/lint v0.0.0-20210508222113-6edffad5e616/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= +golang.org/x/mobile v0.0.0-20190312151609-d3739f865fa6/go.mod h1:z+o9i4GpDbdi3rU15maQ/Ox0txvL9dWGYEHz965HBQE= +golang.org/x/mobile v0.0.0-20190719004257-d2bd2a29d028/go.mod h1:E/iHnbuqvinMTCcRqshq8CkpyQDoeVncDDYHnLhea+o= +golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc= +golang.org/x/mod v0.1.0/go.mod h1:0QHyrYULN0/3qlju5TqG8bIK38QM8yzMo5ekMj3DlcY= +golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= +golang.org/x/mod v0.1.1-0.20191107180719-034126e5016b/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= +golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/mod v0.4.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/mod v0.4.1/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= +golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= +golang.org/x/mod v0.15.0 h1:SernR4v+D55NyBH2QiEQrlBAnj1ECL6AGrA5+dPaMY8= +golang.org/x/mod v0.15.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= +golang.org/x/mod v0.16.0 h1:QX4fJ0Rr5cPQCF7O9lh9Se4pmwfwskqZfq5moyldzic= +golang.org/x/mod v0.16.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= +golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190501004415-9ce7a6920f09/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190503192946-f4e77d36d62c/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= +golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20190628185345-da137c7871d7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20190724013045-ca1201d0de80/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20191209160850-c0dbc17a3553/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200114155413-6afb5195e5aa/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200202094626-16171245cfb2/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200222125558-5a598a2470a0/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200301022130-244492dfa37a/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200501053045-e0ff5e5a1de5/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200506145744-7e3656a0809f/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200513185701-a91f0712d120/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200520182314-0ba52f642ac2/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200625001655-4c5254603344/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= +golang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= +golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= +golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= +golang.org/x/net v0.0.0-20201031054903-ff519b6c9102/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= +golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= +golang.org/x/net v0.0.0-20201209123823-ac852fbbde11/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= +golang.org/x/net v0.0.0-20210119194325-5f4716e94777/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= +golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= +golang.org/x/net v0.0.0-20210316092652-d523dce5a7f4/go.mod h1:RBQZq4jEuRlivfhVLdyRGr576XBO4/greRjx4P4O3yc= +golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= +golang.org/x/net v0.0.0-20210503060351-7fd8e65b6420/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +golang.org/x/net v0.0.0-20220127200216-cd36cc0744dd/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= +golang.org/x/net v0.0.0-20220225172249-27dd8689420f/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= +golang.org/x/net v0.0.0-20220325170049-de3da57026de/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= +golang.org/x/net v0.0.0-20220412020605-290c469a71a5/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= +golang.org/x/net v0.0.0-20220425223048-2871e0cb64e4/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= +golang.org/x/net v0.0.0-20220607020251-c690dde0001d/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= +golang.org/x/net v0.0.0-20220617184016-355a448f1bc9/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= +golang.org/x/net v0.0.0-20220624214902-1bab6f366d9e/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= +golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= +golang.org/x/net v0.0.0-20220909164309-bea034e7d591/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk= +golang.org/x/net v0.0.0-20221014081412-f15817d10f9b/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk= +golang.org/x/net v0.1.0/go.mod h1:Cx3nUiGt4eDBEyega/BKRp+/AlGL8hYe7U9odMt2Cco= +golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= +golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg= +golang.org/x/net v0.21.0 h1:AQyQV4dYCvJ7vGmJyKki9+PBdyvhkSd8EIx/qb0AYv4= +golang.org/x/net v0.21.0/go.mod h1:bIjVDfnllIU7BJ2DNgfnXvpSvtn8VRwhlsaeUTyUS44= +golang.org/x/net v0.22.0 h1:9sGLhx7iRIHEiX0oAJ3MRZMUCElJgy7Br1nO+AMN3Tc= +golang.org/x/net v0.22.0/go.mod h1:JKghWKKOSdJwpW2GEx0Ja7fmaKnMsbu+MWVZTokSYmg= +golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= +golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= +golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= +golang.org/x/oauth2 v0.0.0-20191202225959-858c2ad4c8b6/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= +golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= +golang.org/x/oauth2 v0.0.0-20200902213428-5d25da1a8d43/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20201109201403-9fd604954f58/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20201208152858-08078c50e5b5/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20210218202405-ba52d332ba99/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20210220000619-9bb904979d93/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20210313182246-cd4f82c27b84/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20210514164344-f6687ab2804c/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20210628180205-a41e5a781914/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20210805134026-6f1e6394065a/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20210819190943-2bc19b11175f/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20211104180415-d3ed0bb246c8/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20220223155221-ee480838109b/go.mod h1:DAh4E804XQdzx2j+YRIaUnCqCV2RuMz24cGBJ5QYIrc= +golang.org/x/oauth2 v0.0.0-20220309155454-6242fa91716a/go.mod h1:DAh4E804XQdzx2j+YRIaUnCqCV2RuMz24cGBJ5QYIrc= +golang.org/x/oauth2 v0.0.0-20220411215720-9780585627b5/go.mod h1:DAh4E804XQdzx2j+YRIaUnCqCV2RuMz24cGBJ5QYIrc= +golang.org/x/oauth2 v0.0.0-20220608161450-d0670ef3b1eb/go.mod h1:jaDAt6Dkxork7LmZnYtzbRWj0W47D86a3TGe0YHBvmE= +golang.org/x/oauth2 v0.0.0-20220622183110-fd043fe589d2/go.mod h1:jaDAt6Dkxork7LmZnYtzbRWj0W47D86a3TGe0YHBvmE= +golang.org/x/oauth2 v0.0.0-20220822191816-0ebed06d0094/go.mod h1:h4gKUeWbJ4rQPri7E0u6Gs4e9Ri2zaLxzw5DI5XGrYg= +golang.org/x/oauth2 v0.0.0-20220909003341-f21342109be1/go.mod h1:h4gKUeWbJ4rQPri7E0u6Gs4e9Ri2zaLxzw5DI5XGrYg= +golang.org/x/oauth2 v0.0.0-20221014153046-6fdb5e3db783/go.mod h1:h4gKUeWbJ4rQPri7E0u6Gs4e9Ri2zaLxzw5DI5XGrYg= +golang.org/x/oauth2 v0.1.0/go.mod h1:G9FE4dLTsbXUu90h/Pf85g4w1D+SSAgR+q46nJZ8M4A= +golang.org/x/oauth2 v0.16.0 h1:aDkGMBSYxElaoP81NpoUoz2oo2R2wHdZpGToUxfyQrQ= +golang.org/x/oauth2 v0.16.0/go.mod h1:hqZ+0LWXsiVoZpeld6jVt06P3adbS2Uu911W1SsJv2o= +golang.org/x/oauth2 v0.18.0 h1:09qnuIAgzdx1XplqJvW6CQqMCtGZykZWcXzPMPUusvI= +golang.org/x/oauth2 v0.18.0/go.mod h1:Wf7knwG0MPoWIMMBgFlEaSUDaKskp0dCfrlJRJXbBi8= +golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20200317015054-43a5402ce75a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20220601150217-0de741cfad7f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20220929204114-8fcdb60fdcc0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.6.0 h1:5BMeUDZ7vkXGfEr1x9B4bRcTH4lpkTkpdh0T/J+qjbQ= +golang.org/x/sync v0.6.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= +golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190502145724-3ef323f4f1fd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191001151750-bb3f8db39f24/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191228213918-04cbcbbfeed8/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200113162924-86b910548bc1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200122134326-e047566fdf82/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200202164722-d101bd2416d5/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200212091648-12a6c2dcc1e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200302150141-5c8b2ff67527/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200331124033-c3d80250170d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200501052902-10377860bb8e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200511232937-7e40ca221e25/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200515095857-1151b9dac4a9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200523222454-059865788121/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200803210538-64077c9b5642/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200905004654-be1d3432aa8f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20201201145000-ef89a241ccb3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210104204734-6f8348627aad/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210220050731-9a76102bfb43/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210305230114-8fe3ee5dd75b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210315160823-c6e025ad8005/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210320140829-1e4c9ba3b0c4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210514084401-e8d321eab015/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210603125802-9665404d3644/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210616094352-59db8d763f22/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210806184541-e5e7981a1069/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210823070655-63515b42dcdf/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210908233432-aa78b53d3365/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20211124211545-fe61309f8881/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20211210111614-af8b64212486/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220128215802-99c3d69c2c27/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220209214540-3681064d5158/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220227234510-4e6760a101f9/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220328115105-d36c6a25d886/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220412211240-33da011f77ad/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220502124256-b6088ccd6cba/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220503163025-988cb79eb6c6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220610221304-9f5ed59c137d/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220615213510-4f61da869c0c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220624220833-87e55d714810/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220728004956-3c1f35247d10/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.17.0 h1:25cE3gD+tdBA7lp7QfhuV+rJiE9YXTcS3VG1SqssI/Y= +golang.org/x/sys v0.17.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.18.0 h1:DBdB3niSjOA/O0blCZBqDefyWNYveAYMNF1Wum0DYQ4= +golang.org/x/sys v0.18.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= +golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= +golang.org/x/term v0.1.0/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= +golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= +golang.org/x/term v0.8.0/go.mod h1:xPskH00ivmX89bAKVGSKKtLOWNx2+17Eiy94tnKShWo= +golang.org/x/term v0.17.0 h1:mkTF7LCd6WGJNL3K1Ad7kwxNfYAW6a8a8QqtMblp/4U= +golang.org/x/term v0.17.0/go.mod h1:lLRBjIVuehSbZlaOtGMbcMncT+aqLLLmKrsjNrUguwk= +golang.org/x/term v0.18.0 h1:FcHjZXDMxI8mM3nwhX9HlKop4C0YQvCVCdwYl2wOtE8= +golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= +golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/text v0.3.4/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= +golang.org/x/text v0.3.8/go.mod h1:E6s5w1FMmriuDzIBO73fBruAKo1PCIq6d2Q6DHfQ8WQ= +golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= +golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= +golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= +golang.org/x/text v0.14.0 h1:ScX5w1eTa3QqT8oi6+ziP7dTV1S2+ALU0bI+0zXKWiQ= +golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= +golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.5.0 h1:o7cqy6amK/52YcAKIPlM3a+Fpj35zvRj2TP+e1xFSfk= +golang.org/x/time v0.5.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM= +golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= +golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190312151545-0bb0c0a6e846/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190312170243-e65039ee4138/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190425150028-36563e24a262/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= +golang.org/x/tools v0.0.0-20190506145303-2d16b83fe98c/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= +golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= +golang.org/x/tools v0.0.0-20190606124116-d0a3d012864b/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= +golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= +golang.org/x/tools v0.0.0-20190624222133-a101b041ded4/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= +golang.org/x/tools v0.0.0-20190628153133-6cdbf07be9d0/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= +golang.org/x/tools v0.0.0-20190816200558-6889da9d5479/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20190911174233-4f2ddba30aff/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191012152004-8de300cfc20a/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191113191852-77e3bb0ad9e7/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191115202509-3a792d9c32b2/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191125144606-a911d9008d1f/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191130070609-6e064ea0cf2d/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191216173652-a0e659d51361/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20191227053925-7b8e75db28f4/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200117161641-43d50277825c/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200122220014-bf1340f18c4a/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200130002326-2f3ba24bd6e7/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200204074204-1cc6d1ef6c74/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200207183749-b753a1ba74fa/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200212150539-ea181f53ac56/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200224181240-023911ca70b2/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200227222343-706bc42d1f0d/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200304193943-95d2e580d8eb/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw= +golang.org/x/tools v0.0.0-20200312045724-11d5b4c81c7d/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw= +golang.org/x/tools v0.0.0-20200331025713-a30bf2db82d4/go.mod h1:Sl4aGygMT6LrqrWclx+PTx3U+LnKx/seiNR+3G19Ar8= +golang.org/x/tools v0.0.0-20200501065659-ab2804fb9c9d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200512131952-2bc93b1c0c88/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200515010526-7d3b6ebf133d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200618134242-20370b0cb4b2/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200729194436-6467de6f59a7/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= +golang.org/x/tools v0.0.0-20200804011535-6c149bb5ef0d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= +golang.org/x/tools v0.0.0-20200825202427-b303f430e36d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= +golang.org/x/tools v0.0.0-20200904185747-39188db58858/go.mod h1:Cj7w3i3Rnn0Xh82ur9kSqwfTHTeVxaDqrfMjpcNT6bE= +golang.org/x/tools v0.0.0-20201110124207-079ba7bd75cd/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.0.0-20201201161351-ac6f37ff4c2a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.0.0-20201208233053-a543418bbed2/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.0.0-20210105154028-b0ab187a4818/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.1.0/go.mod h1:xkSsbof2nBLbhDlRMhhhyNLN/zl3eTqcnHD5viDpcZ0= +golang.org/x/tools v0.1.1/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= +golang.org/x/tools v0.1.2/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= +golang.org/x/tools v0.1.3/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= +golang.org/x/tools v0.1.4/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= +golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= +golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= +golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU= +golang.org/x/tools v0.18.0 h1:k8NLag8AGHnn+PHbl7g43CtqZAwG60vZkLqgyZgIHgQ= +golang.org/x/tools v0.18.0/go.mod h1:GL7B4CwcLLeo59yx/9UWWuNOW1n3VZ4f5axWfML7Lcg= +golang.org/x/tools v0.19.0 h1:tfGCXNR1OsFG+sVdLAitlpjAvD/I6dHDKnYrpEZUHkw= +golang.org/x/tools v0.19.0/go.mod h1:qoJWxmGSIBmAeriMx19ogtrEPrGtDbPK634QFIcLAhc= +golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20220411194840-2f41105eb62f/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20220517211312-f3a8303e98df/go.mod h1:K8+ghG5WaK9qNqU5K3HdILfMLy1f3aNYFI/wnl100a8= +golang.org/x/xerrors v0.0.0-20220609144429-65e65417b02f/go.mod h1:K8+ghG5WaK9qNqU5K3HdILfMLy1f3aNYFI/wnl100a8= +golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2/go.mod h1:K8+ghG5WaK9qNqU5K3HdILfMLy1f3aNYFI/wnl100a8= +golang.org/x/xerrors v0.0.0-20231012003039-104605ab7028 h1:+cNy6SZtPcJQH3LJVLOSmiC7MMxXNOb3PU/VUEz+EhU= +golang.org/x/xerrors v0.0.0-20231012003039-104605ab7028/go.mod h1:NDW/Ps6MPRej6fsCIbMTohpP40sJ/P/vI1MoTEGwX90= +google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE= +google.golang.org/api v0.7.0/go.mod h1:WtwebWUNSVBH/HAw79HIFXZNqEvBhG+Ra+ax0hx3E3M= +google.golang.org/api v0.8.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= +google.golang.org/api v0.9.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= +google.golang.org/api v0.13.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= +google.golang.org/api v0.14.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= +google.golang.org/api v0.15.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= +google.golang.org/api v0.17.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= +google.golang.org/api v0.18.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= +google.golang.org/api v0.19.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= +google.golang.org/api v0.20.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= +google.golang.org/api v0.22.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= +google.golang.org/api v0.24.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE= +google.golang.org/api v0.28.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE= +google.golang.org/api v0.29.0/go.mod h1:Lcubydp8VUV7KeIHD9z2Bys/sm/vGKnG1UHuDBSrHWM= +google.golang.org/api v0.30.0/go.mod h1:QGmEvQ87FHZNiUVJkT14jQNYJ4ZJjdRF23ZXz5138Fc= +google.golang.org/api v0.35.0/go.mod h1:/XrVsuzM0rZmrsbjJutiuftIzeuTQcEeaYcSk/mQ1dg= +google.golang.org/api v0.36.0/go.mod h1:+z5ficQTmoYpPn8LCUNVpK5I7hwkpjbcgqA7I34qYtE= +google.golang.org/api v0.40.0/go.mod h1:fYKFpnQN0DsDSKRVRcQSDQNtqWPfM9i+zNPxepjRCQ8= +google.golang.org/api v0.41.0/go.mod h1:RkxM5lITDfTzmyKFPt+wGrCJbVfniCr2ool8kTBzRTU= +google.golang.org/api v0.43.0/go.mod h1:nQsDGjRXMo4lvh5hP0TKqF244gqhGcr/YSIykhUk/94= +google.golang.org/api v0.47.0/go.mod h1:Wbvgpq1HddcWVtzsVLyfLp8lDg6AA241LmgIL59tHXo= +google.golang.org/api v0.48.0/go.mod h1:71Pr1vy+TAZRPkPs/xlCf5SsU8WjuAWv1Pfjbtukyy4= +google.golang.org/api v0.50.0/go.mod h1:4bNT5pAuq5ji4SRZm+5QIkjny9JAyVD/3gaSihNefaw= +google.golang.org/api v0.51.0/go.mod h1:t4HdrdoNgyN5cbEfm7Lum0lcLDLiise1F8qDKX00sOU= +google.golang.org/api v0.54.0/go.mod h1:7C4bFFOvVDGXjfDTAsgGwDgAxRDeQ4X8NvUedIt6z3k= +google.golang.org/api v0.55.0/go.mod h1:38yMfeP1kfjsl8isn0tliTjIb1rJXcQi4UXlbqivdVE= +google.golang.org/api v0.56.0/go.mod h1:38yMfeP1kfjsl8isn0tliTjIb1rJXcQi4UXlbqivdVE= +google.golang.org/api v0.57.0/go.mod h1:dVPlbZyBo2/OjBpmvNdpn2GRm6rPy75jyU7bmhdrMgI= +google.golang.org/api v0.61.0/go.mod h1:xQRti5UdCmoCEqFxcz93fTl338AVqDgyaDRuOZ3hg9I= +google.golang.org/api v0.63.0/go.mod h1:gs4ij2ffTRXwuzzgJl/56BdwJaA194ijkfn++9tDuPo= +google.golang.org/api v0.67.0/go.mod h1:ShHKP8E60yPsKNw/w8w+VYaj9H6buA5UqDp8dhbQZ6g= +google.golang.org/api v0.70.0/go.mod h1:Bs4ZM2HGifEvXwd50TtW70ovgJffJYw2oRCOFU/SkfA= +google.golang.org/api v0.71.0/go.mod h1:4PyU6e6JogV1f9eA4voyrTY2batOLdgZ5qZ5HOCc4j8= +google.golang.org/api v0.74.0/go.mod h1:ZpfMZOVRMywNyvJFeqL9HRWBgAuRfSjJFpe9QtRRyDs= +google.golang.org/api v0.75.0/go.mod h1:pU9QmyHLnzlpar1Mjt4IbapUCy8J+6HD6GeELN69ljA= +google.golang.org/api v0.77.0/go.mod h1:pU9QmyHLnzlpar1Mjt4IbapUCy8J+6HD6GeELN69ljA= +google.golang.org/api v0.78.0/go.mod h1:1Sg78yoMLOhlQTeF+ARBoytAcH1NNyyl390YMy6rKmw= +google.golang.org/api v0.80.0/go.mod h1:xY3nI94gbvBrE0J6NHXhxOmW97HG7Khjkku6AFB3Hyg= +google.golang.org/api v0.84.0/go.mod h1:NTsGnUFJMYROtiquksZHBWtHfeMC7iYthki7Eq3pa8o= +google.golang.org/api v0.85.0/go.mod h1:AqZf8Ep9uZ2pyTvgL+x0D3Zt0eoT9b5E8fmzfu6FO2g= +google.golang.org/api v0.90.0/go.mod h1:+Sem1dnrKlrXMR/X0bPnMWyluQe4RsNoYfmNLhOIkzw= +google.golang.org/api v0.93.0/go.mod h1:+Sem1dnrKlrXMR/X0bPnMWyluQe4RsNoYfmNLhOIkzw= +google.golang.org/api v0.95.0/go.mod h1:eADj+UBuxkh5zlrSntJghuNeg8HwQ1w5lTKkuqaETEI= +google.golang.org/api v0.96.0/go.mod h1:w7wJQLTM+wvQpNf5JyEcBoxK0RH7EDrh/L4qfsuJ13s= +google.golang.org/api v0.97.0/go.mod h1:w7wJQLTM+wvQpNf5JyEcBoxK0RH7EDrh/L4qfsuJ13s= +google.golang.org/api v0.98.0/go.mod h1:w7wJQLTM+wvQpNf5JyEcBoxK0RH7EDrh/L4qfsuJ13s= +google.golang.org/api v0.100.0/go.mod h1:ZE3Z2+ZOr87Rx7dqFsdRQkRBk36kDtp/h+QpHbB7a70= +google.golang.org/api v0.155.0 h1:vBmGhCYs0djJttDNynWo44zosHlPvHmA0XiN2zP2DtA= +google.golang.org/api v0.155.0/go.mod h1:GI5qK5f40kCpHfPn6+YzGAByIKWv8ujFnmoWm7Igduk= +google.golang.org/api v0.169.0 h1:QwWPy71FgMWqJN/l6jVlFHUa29a7dcUy02I8o799nPY= +google.golang.org/api v0.169.0/go.mod h1:gpNOiMA2tZ4mf5R9Iwf4rK/Dcz0fbdIgWYWVoxmsyLg= +google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= +google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= +google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= +google.golang.org/appengine v1.6.1/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0= +google.golang.org/appengine v1.6.5/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= +google.golang.org/appengine v1.6.6/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= +google.golang.org/appengine v1.6.7/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= +google.golang.org/appengine v1.6.8 h1:IhEN5q69dyKagZPYMSdIjS2HqprW324FRQZJcGqPAsM= +google.golang.org/appengine v1.6.8/go.mod h1:1jJ3jBArFh5pcgW8gCtRJnepW8FzD1V44FJffLiz/Ds= +google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= +google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= +google.golang.org/genproto v0.0.0-20190418145605-e7d98fc518a7/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= +google.golang.org/genproto v0.0.0-20190425155659-357c62f0e4bb/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= +google.golang.org/genproto v0.0.0-20190502173448-54afdca5d873/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= +google.golang.org/genproto v0.0.0-20190801165951-fa694d86fc64/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= +google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= +google.golang.org/genproto v0.0.0-20190911173649-1774047e7e51/go.mod h1:IbNlFCBrqXvoKpeg0TB2l7cyZUmoaFKYIwrEpbDKLA8= +google.golang.org/genproto v0.0.0-20191108220845-16a3f7862a1a/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20191115194625-c23dd37a84c9/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20191216164720-4f79533eabd1/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20191230161307-f3c370f40bfb/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20200115191322-ca5a22157cba/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20200122232147-0452cf42e150/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20200204135345-fa8e72b47b90/go.mod h1:GmwEX6Z4W5gMy59cAlVYjN9JhxgbQH6Gn+gFDQe2lzA= +google.golang.org/genproto v0.0.0-20200212174721-66ed5ce911ce/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200224152610-e50cd9704f63/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200228133532-8c2c7df3a383/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200305110556-506484158171/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200312145019-da6875a35672/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200331122359-1ee6d9798940/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200430143042-b979b6f78d84/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200511104702-f5ebc3bea380/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200513103714-09dca8ec2884/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200515170657-fc4c6c6a6587/go.mod h1:YsZOwe1myG/8QRHRsmBRE1LrgQY60beZKjly0O1fX9U= +google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo= +google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7FcilCzHH/e9qn6dsT145K34l5v+OpcnNgKAAA= +google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20200904004341-0bd0a958aa1d/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20201109203340-2640f1f9cdfb/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20201201144952-b05cb90ed32e/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20201210142538-e3217bee35cc/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20201214200347-8c77b98c765d/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20210222152913-aa3ee6e6a81c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20210303154014-9728d6b83eeb/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20210310155132-4ce2db91004e/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20210319143718-93e7006c17a6/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20210329143202-679c6ae281ee/go.mod h1:9lPAdzaEmUacj36I+k7YKbEc5CXzPIeORRgDAUOu28A= +google.golang.org/genproto v0.0.0-20210402141018-6c239bbf2bb1/go.mod h1:9lPAdzaEmUacj36I+k7YKbEc5CXzPIeORRgDAUOu28A= +google.golang.org/genproto v0.0.0-20210513213006-bf773b8c8384/go.mod h1:P3QM42oQyzQSnHPnZ/vqoCdDmzH28fzWByN9asMeM8A= +google.golang.org/genproto v0.0.0-20210602131652-f16073e35f0c/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0= +google.golang.org/genproto v0.0.0-20210604141403-392c879c8b08/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0= +google.golang.org/genproto v0.0.0-20210608205507-b6d2f5bf0d7d/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0= +google.golang.org/genproto v0.0.0-20210624195500-8bfb893ecb84/go.mod h1:SzzZ/N+nwJDaO1kznhnlzqS8ocJICar6hYhVyhi++24= +google.golang.org/genproto v0.0.0-20210713002101-d411969a0d9a/go.mod h1:AxrInvYm1dci+enl5hChSFPOmmUF1+uAa/UsgNRWd7k= +google.golang.org/genproto v0.0.0-20210716133855-ce7ef5c701ea/go.mod h1:AxrInvYm1dci+enl5hChSFPOmmUF1+uAa/UsgNRWd7k= +google.golang.org/genproto v0.0.0-20210728212813-7823e685a01f/go.mod h1:ob2IJxKrgPT52GcgX759i1sleT07tiKowYBGbczaW48= +google.golang.org/genproto v0.0.0-20210805201207-89edb61ffb67/go.mod h1:ob2IJxKrgPT52GcgX759i1sleT07tiKowYBGbczaW48= +google.golang.org/genproto v0.0.0-20210813162853-db860fec028c/go.mod h1:cFeNkxwySK631ADgubI+/XFU/xp8FD5KIVV4rj8UC5w= +google.golang.org/genproto v0.0.0-20210821163610-241b8fcbd6c8/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= +google.golang.org/genproto v0.0.0-20210828152312-66f60bf46e71/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= +google.golang.org/genproto v0.0.0-20210831024726-fe130286e0e2/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= +google.golang.org/genproto v0.0.0-20210903162649-d08c68adba83/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= +google.golang.org/genproto v0.0.0-20210909211513-a8c4777a87af/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= +google.golang.org/genproto v0.0.0-20210924002016-3dee208752a0/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= +google.golang.org/genproto v0.0.0-20211118181313-81c1377c94b1/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= +google.golang.org/genproto v0.0.0-20211206160659-862468c7d6e0/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= +google.golang.org/genproto v0.0.0-20211208223120-3a66f561d7aa/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= +google.golang.org/genproto v0.0.0-20211221195035-429b39de9b1c/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= +google.golang.org/genproto v0.0.0-20220126215142-9970aeb2e350/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= +google.golang.org/genproto v0.0.0-20220207164111-0872dc986b00/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= +google.golang.org/genproto v0.0.0-20220218161850-94dd64e39d7c/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI= +google.golang.org/genproto v0.0.0-20220222213610-43724f9ea8cf/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI= +google.golang.org/genproto v0.0.0-20220304144024-325a89244dc8/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI= +google.golang.org/genproto v0.0.0-20220310185008-1973136f34c6/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI= +google.golang.org/genproto v0.0.0-20220324131243-acbaeb5b85eb/go.mod h1:hAL49I2IFola2sVEjAn7MEwsja0xp51I0tlGAf9hz4E= +google.golang.org/genproto v0.0.0-20220407144326-9054f6ed7bac/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= +google.golang.org/genproto v0.0.0-20220413183235-5e96e2839df9/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= +google.golang.org/genproto v0.0.0-20220414192740-2d67ff6cf2b4/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= +google.golang.org/genproto v0.0.0-20220421151946-72621c1f0bd3/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= +google.golang.org/genproto v0.0.0-20220429170224-98d788798c3e/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= +google.golang.org/genproto v0.0.0-20220502173005-c8bf987b8c21/go.mod h1:RAyBrSAP7Fh3Nc84ghnVLDPuV51xc9agzmm4Ph6i0Q4= +google.golang.org/genproto v0.0.0-20220505152158-f39f71e6c8f3/go.mod h1:RAyBrSAP7Fh3Nc84ghnVLDPuV51xc9agzmm4Ph6i0Q4= +google.golang.org/genproto v0.0.0-20220518221133-4f43b3371335/go.mod h1:RAyBrSAP7Fh3Nc84ghnVLDPuV51xc9agzmm4Ph6i0Q4= +google.golang.org/genproto v0.0.0-20220523171625-347a074981d8/go.mod h1:RAyBrSAP7Fh3Nc84ghnVLDPuV51xc9agzmm4Ph6i0Q4= +google.golang.org/genproto v0.0.0-20220608133413-ed9918b62aac/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA= +google.golang.org/genproto v0.0.0-20220616135557-88e70c0c3a90/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA= +google.golang.org/genproto v0.0.0-20220617124728-180714bec0ad/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA= +google.golang.org/genproto v0.0.0-20220624142145-8cd45d7dbd1f/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA= +google.golang.org/genproto v0.0.0-20220628213854-d9e0b6570c03/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA= +google.golang.org/genproto v0.0.0-20220722212130-b98a9ff5e252/go.mod h1:GkXuJDJ6aQ7lnJcRF+SJVgFdQhypqgl3LB1C9vabdRE= +google.golang.org/genproto v0.0.0-20220801145646-83ce21fca29f/go.mod h1:iHe1svFLAZg9VWz891+QbRMwUv9O/1Ww+/mngYeThbc= +google.golang.org/genproto v0.0.0-20220815135757-37a418bb8959/go.mod h1:dbqgFATTzChvnt+ujMdZwITVAJHFtfyN1qUhDqEiIlk= +google.golang.org/genproto v0.0.0-20220817144833-d7fd3f11b9b1/go.mod h1:dbqgFATTzChvnt+ujMdZwITVAJHFtfyN1qUhDqEiIlk= +google.golang.org/genproto v0.0.0-20220822174746-9e6da59bd2fc/go.mod h1:dbqgFATTzChvnt+ujMdZwITVAJHFtfyN1qUhDqEiIlk= +google.golang.org/genproto v0.0.0-20220829144015-23454907ede3/go.mod h1:dbqgFATTzChvnt+ujMdZwITVAJHFtfyN1qUhDqEiIlk= +google.golang.org/genproto v0.0.0-20220829175752-36a9c930ecbf/go.mod h1:dbqgFATTzChvnt+ujMdZwITVAJHFtfyN1qUhDqEiIlk= +google.golang.org/genproto v0.0.0-20220913154956-18f8339a66a5/go.mod h1:0Nb8Qy+Sk5eDzHnzlStwW3itdNaWoZA5XeSG+R3JHSo= +google.golang.org/genproto v0.0.0-20220914142337-ca0e39ece12f/go.mod h1:0Nb8Qy+Sk5eDzHnzlStwW3itdNaWoZA5XeSG+R3JHSo= +google.golang.org/genproto v0.0.0-20220915135415-7fd63a7952de/go.mod h1:0Nb8Qy+Sk5eDzHnzlStwW3itdNaWoZA5XeSG+R3JHSo= +google.golang.org/genproto v0.0.0-20220916172020-2692e8806bfa/go.mod h1:0Nb8Qy+Sk5eDzHnzlStwW3itdNaWoZA5XeSG+R3JHSo= +google.golang.org/genproto v0.0.0-20220919141832-68c03719ef51/go.mod h1:0Nb8Qy+Sk5eDzHnzlStwW3itdNaWoZA5XeSG+R3JHSo= +google.golang.org/genproto v0.0.0-20220920201722-2b89144ce006/go.mod h1:ht8XFiar2npT/g4vkk7O0WYS1sHOHbdujxbEp7CJWbw= +google.golang.org/genproto v0.0.0-20220926165614-551eb538f295/go.mod h1:woMGP53BroOrRY3xTxlbr8Y3eB/nzAvvFM83q7kG2OI= +google.golang.org/genproto v0.0.0-20220926220553-6981cbe3cfce/go.mod h1:woMGP53BroOrRY3xTxlbr8Y3eB/nzAvvFM83q7kG2OI= +google.golang.org/genproto v0.0.0-20221010155953-15ba04fc1c0e/go.mod h1:3526vdqwhZAwq4wsRUaVG555sVgsNmIjRtO7t/JH29U= +google.golang.org/genproto v0.0.0-20221014173430-6e2ab493f96b/go.mod h1:1vXfmgAz9N9Jx0QA82PqRVauvCz1SGSz739p0f183jM= +google.golang.org/genproto v0.0.0-20221014213838-99cd37c6964a/go.mod h1:1vXfmgAz9N9Jx0QA82PqRVauvCz1SGSz739p0f183jM= +google.golang.org/genproto v0.0.0-20221025140454-527a21cfbd71/go.mod h1:9qHF0xnpdSfF6knlcsnpzUu5y+rpwgbvsyGAZPBMg4s= +google.golang.org/genproto v0.0.0-20240123012728-ef4313101c80 h1:KAeGQVN3M9nD0/bQXnr/ClcEMJ968gUXJQ9pwfSynuQ= +google.golang.org/genproto v0.0.0-20240123012728-ef4313101c80/go.mod h1:cc8bqMqtv9gMOr0zHg2Vzff5ULhhL2IXP4sbcn32Dro= +google.golang.org/genproto v0.0.0-20240308144416-29370a3891b7 h1:5cmXPmmYZddhZs05mvqVzGwPsoE/uq+1YBCeRmBDyMo= +google.golang.org/genproto v0.0.0-20240308144416-29370a3891b7/go.mod h1:yA7a1bW1kwl459Ol0m0lV4hLTfrL/7Bkk4Mj2Ir1mWI= +google.golang.org/genproto/googleapis/api v0.0.0-20240123012728-ef4313101c80 h1:Lj5rbfG876hIAYFjqiJnPHfhXbv+nzTWfm04Fg/XSVU= +google.golang.org/genproto/googleapis/api v0.0.0-20240123012728-ef4313101c80/go.mod h1:4jWUdICTdgc3Ibxmr8nAJiiLHwQBY0UI0XZcEMaFKaA= +google.golang.org/genproto/googleapis/api v0.0.0-20240308144416-29370a3891b7 h1:bITUotW/BD35GhBwrwGexWa8/P5CKHXACICrmuFJBa8= +google.golang.org/genproto/googleapis/api v0.0.0-20240308144416-29370a3891b7/go.mod h1:O1cOfN1Cy6QEYr7VxtjOyP5AdAuR0aJ/MYZaaof623Y= +google.golang.org/genproto/googleapis/rpc v0.0.0-20240228224816-df926f6c8641 h1:DKU1r6Tj5s1vlU/moGhuGz7E3xRfwjdAfDzbsaQJtEY= +google.golang.org/genproto/googleapis/rpc v0.0.0-20240228224816-df926f6c8641/go.mod h1:UCOku4NytXMJuLQE5VuqA5lX3PcHCBo8pxNyvkf4xBs= +google.golang.org/genproto/googleapis/rpc v0.0.0-20240308144416-29370a3891b7 h1:em/y72n4XlYRtayY/cVj6pnVzHa//BDA1BdoO+z9mdE= +google.golang.org/genproto/googleapis/rpc v0.0.0-20240308144416-29370a3891b7/go.mod h1:UCOku4NytXMJuLQE5VuqA5lX3PcHCBo8pxNyvkf4xBs= +google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= +google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= +google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= +google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= +google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY= +google.golang.org/grpc v1.26.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= +google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= +google.golang.org/grpc v1.27.1/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= +google.golang.org/grpc v1.28.0/go.mod h1:rpkK4SK4GF4Ach/+MFLZUBavHOvF2JJB5uozKKal+60= +google.golang.org/grpc v1.29.1/go.mod h1:itym6AZVZYACWQqET3MqgPpjcuV5QH3BxFS3IjizoKk= +google.golang.org/grpc v1.30.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= +google.golang.org/grpc v1.31.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= +google.golang.org/grpc v1.31.1/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= +google.golang.org/grpc v1.33.1/go.mod h1:fr5YgcSWrqhRRxogOsw7RzIpsmvOZ6IcH4kBYTpR3n0= +google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc= +google.golang.org/grpc v1.34.0/go.mod h1:WotjhfgOW/POjDeRt8vscBtXq+2VjORFy659qA51WJ8= +google.golang.org/grpc v1.35.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= +google.golang.org/grpc v1.36.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= +google.golang.org/grpc v1.36.1/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= +google.golang.org/grpc v1.37.0/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM= +google.golang.org/grpc v1.37.1/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM= +google.golang.org/grpc v1.38.0/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM= +google.golang.org/grpc v1.39.0/go.mod h1:PImNr+rS9TWYb2O4/emRugxiyHZ5JyHW5F+RPnDzfrE= +google.golang.org/grpc v1.39.1/go.mod h1:PImNr+rS9TWYb2O4/emRugxiyHZ5JyHW5F+RPnDzfrE= +google.golang.org/grpc v1.40.0/go.mod h1:ogyxbiOoUXAkP+4+xa6PZSE9DZgIHtSpzjDTB9KAK34= +google.golang.org/grpc v1.40.1/go.mod h1:ogyxbiOoUXAkP+4+xa6PZSE9DZgIHtSpzjDTB9KAK34= +google.golang.org/grpc v1.44.0/go.mod h1:k+4IHHFw41K8+bbowsex27ge2rCb65oeWqe4jJ590SU= +google.golang.org/grpc v1.45.0/go.mod h1:lN7owxKUQEqMfSyQikvvk5tf/6zMPsrK+ONuO11+0rQ= +google.golang.org/grpc v1.46.0/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACuMGWk= +google.golang.org/grpc v1.46.2/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACuMGWk= +google.golang.org/grpc v1.47.0/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACuMGWk= +google.golang.org/grpc v1.48.0/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACuMGWk= +google.golang.org/grpc v1.49.0/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCDK+GI= +google.golang.org/grpc v1.50.0/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCDK+GI= +google.golang.org/grpc v1.50.1/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCDK+GI= +google.golang.org/grpc v1.62.0 h1:HQKZ/fa1bXkX1oFOvSjmZEUL8wLSaZTjCcLAlmZRtdk= +google.golang.org/grpc v1.62.0/go.mod h1:IWTG0VlJLCh1SkC58F7np9ka9mx/WNkjl4PGJaiq+QE= +google.golang.org/grpc v1.62.1 h1:B4n+nfKzOICUXMgyrNd19h/I9oH0L1pizfk1d4zSgTk= +google.golang.org/grpc v1.62.1/go.mod h1:IWTG0VlJLCh1SkC58F7np9ka9mx/WNkjl4PGJaiq+QE= +google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.1.0/go.mod h1:6Kw0yEErY5E/yWrBtf03jp27GLLJujG4z/JK95pnjjw= +google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= +google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= +google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= +google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE= +google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo= +google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= +google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= +google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= +google.golang.org/protobuf v1.24.0/go.mod h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGjtUeSXeh4= +google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c= +google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= +google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= +google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= +google.golang.org/protobuf v1.28.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= +google.golang.org/protobuf v1.28.1/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= +google.golang.org/protobuf v1.32.0 h1:pPC6BG5ex8PDFnkbrGU3EixyhKcQ2aDuBS36lqK/C7I= +google.golang.org/protobuf v1.32.0/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos= +google.golang.org/protobuf v1.33.0 h1:uNO2rsAINq/JlFpSdYEKIZ0uKD/R9cpdv0T+yoGwGmI= +google.golang.org/protobuf v1.33.0/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos= +gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f h1:BLraFXnmrev5lT+xlilqcH8XK9/i0At2xKjWk4p6zsU= +gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/cheggaaa/pb.v1 v1.0.27/go.mod h1:V/YB90LKu/1FcN3WVnfiiE5oMCibMjukxqG/qStrOgw= +gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= +gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.2.3/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= +gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= +gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= +gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +gotest.tools/v3 v3.0.2/go.mod h1:3SzNCllyD9/Y+b5r9JIKQ474KzkZyqLqEfYqMsX94Bk= +gotest.tools/v3 v3.0.3 h1:4AuOwCGf4lLR9u3YOe2awrHygurzhO/HeQ6laiA6Sx0= +gotest.tools/v3 v3.0.3/go.mod h1:Z7Lb0S5l+klDB31fvDQX8ss/FlKDxtlFlw3Oa8Ymbl8= +honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= +honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= +honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= +rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= +rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0= +rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA= diff --git a/terratest/functions/locals.tf b/terratest/functions/locals.tf new file mode 100644 index 00000000..8efb2cc1 --- /dev/null +++ b/terratest/functions/locals.tf @@ -0,0 +1,3 @@ +locals { + input_string = "This is [an] {example}$${id32}." +} diff --git a/terratest/functions/osv-scanner.toml b/terratest/functions/osv-scanner.toml new file mode 100644 index 00000000..ef72ab7d --- /dev/null +++ b/terratest/functions/osv-scanner.toml @@ -0,0 +1,6 @@ +# https://google.github.io/osv-scanner/configuration/ + +[[IgnoredVulns]] +id = "GO-2022-0646" +reason = "Not leveraging this functionality in our codebase" +# ignoreUntil = YYYY-MM-DD diff --git a/terratest/functions/str_format.tf b/terratest/functions/str_format.tf new file mode 100644 index 00000000..3cbfdc0b --- /dev/null +++ b/terratest/functions/str_format.tf @@ -0,0 +1,4 @@ +output "str_snake_fn" { + description = "This is a snake_case output." + value = provider::corefunc::str_snake(local.input_string) +} diff --git a/terratest/functions/terraform_test.go b/terratest/functions/terraform_test.go new file mode 100644 index 00000000..df296362 --- /dev/null +++ b/terratest/functions/terraform_test.go @@ -0,0 +1,254 @@ +// Copyright 2023-2024, Northwood Labs +// Copyright 2023-2024, Ryan Parman +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package terratest + +import ( + "fmt" + "os" + "runtime" + "testing" + + "github.com/gruntwork-io/terratest/modules/terraform" + "github.com/hairyhenderson/go-which" + "github.com/northwood-labs/terraform-provider-corefunc/corefunc" + "github.com/pkg/errors" + "github.com/stretchr/testify/assert" +) + +const ( + errTerraformPath = "failed to set TF_ACC_TERRAFORM_PATH" + errProviderNamespace = "failed to set TF_ACC_PROVIDER_NAMESPACE" + errProviderHost = "failed to set TF_ACC_PROVIDER_HOST" +) + +var ( + err error + + inputStr = "This is [an] {example}$${id32}." + // prefix = "NW-ZZZ-CLOUD-TEST-APP-CLOUD-PROD-CRIT" + // label = "K8S Pods Not Running Deployment Check" + // strToReplace = "This is a string for testing replacements. New Relic. Set-up." + + // exampleCom = "example.com" + // exampleQuery = "http://u:p@example.com/foo?q=1" + // exampleQueryFrag = "http://u:p@example.com/foo?q=1#bar" + + origPath = os.Getenv("TF_ACC_TERRAFORM_PATH") + origNamespace = os.Getenv("TF_ACC_PROVIDER_NAMESPACE") + origHostname = os.Getenv("TF_ACC_PROVIDER_HOST") + + // Both must be installed first. + binaries = []string{ + "terraform", // 1.8.0+ + // "tofu", // 1.8.0+ + } +) + +func TestTerraform(t *testing.T) { + // https://golang.org/pkg/testing/#T.Parallel + t.Parallel() + + for i := range binaries { + binary := binaries[i] + + if _, err = os.Stat(which.Which(binary)); os.IsNotExist(err) { + t.Fatalf("Binary %s must be installed first", binary) + } + + err = setAndPrint(binary) + if err != nil { + t.Fatal(err) + } + + // https://pkg.go.dev/github.com/gruntwork-io/terratest/modules/terraform#Options + terraformOptions := &terraform.Options{ + // The path to Terraform. + TerraformBinary: which.Which(binary), + + // The path to where our Terraform code is located + TerraformDir: "./", + + // Disable colors in Terraform commands so its easier to parse stdout/stderr + NoColor: true, + + // terraform init -upgrade + Upgrade: true, + + // terraform init -reconfigure + Reconfigure: true, + + // Set the maximum number of parallelism; equivalent to `nproc`. + Parallelism: runtime.NumCPU(), + } + + // This will run `terraform init` and `terraform apply` and fail the test if there are any errors + terraform.InitAndApply(t, terraformOptions) + + // Run `terraform output` to get the value of an output variable + // assert.Equal(t, terraform.Output(t, terraformOptions, "str_camel_ds"), corefunc.StrCamel(inputStr)) + // assert.Equal(t, terraform.Output(t, terraformOptions, "str_constant_ds"), corefunc.StrConstant(inputStr)) + // assert.Equal(t, terraform.Output(t, terraformOptions, "str_kebab_ds"), corefunc.StrKebab(inputStr)) + // assert.Equal(t, terraform.Output(t, terraformOptions, "str_pascal_ds"), corefunc.StrPascal(inputStr, false)) + assert.Equal(t, terraform.Output(t, terraformOptions, "str_snake_fn"), corefunc.StrSnake(inputStr)) + // assert.Equal(t, terraform.Output(t, terraformOptions, "int_leftpad_ds"), corefunc.IntLeftPad(123, 5)) + // assert.Equal(t, terraform.Output(t, terraformOptions, "str_leftpad_ds"), corefunc.StrLeftPad("abc", 5, '.')) + assert.Equal(t, terraform.Output(t, terraformOptions, "env_ensure_fn"), os.Getenv("AWS_REGION")) + // assert.Equal(t, + // terraform.Output(t, terraformOptions, "str_truncate_ds"), + // corefunc.TruncateLabel(64, prefix, label), + // ) + // assert.Equal(t, + // terraform.Output(t, terraformOptions, "str_iterative_replace_ds"), + // corefunc.StrIterativeReplace( + // strToReplace, + // []types.Replacement{ + // {Old: ".", New: ""}, + // {Old: " ", New: "_"}, + // {Old: "-", New: "_"}, + // {Old: "New_Relic", New: "datadog"}, + // {Old: "This", New: "this"}, + // {Old: "Set_up", New: "setup"}, + // }, + // ), + // ) + + // runtime + // assert.Equal(t, terraform.Output(t, terraformOptions, "runtime_cpuarch_ds"), runtime.GOARCH) + // assert.Equal(t, terraform.Output(t, terraformOptions, "runtime_goroot_ds"), runtime.GOROOT()) + // assert.Equal(t, terraform.Output(t, terraformOptions, "runtime_numcpus_ds"), fmt.Sprint(runtime.NumCPU())) + // assert.Equal(t, terraform.Output(t, terraformOptions, "runtime_os_ds"), runtime.GOOS) + + // url_parse + // urlParse := terraform.OutputMap(t, terraformOptions, "url_parse_ds") + // assert.Equal(t, urlParse["decoded_port"], fmt.Sprint(80)) + // assert.Equal(t, urlParse["fragment"], "bar") + // assert.Equal(t, urlParse["hash"], "#bar") + // assert.Equal(t, urlParse["host"], exampleCom) + // assert.Equal(t, urlParse["hostname"], exampleCom) + // assert.Equal(t, urlParse["normalized"], exampleQueryFrag) + // assert.Equal(t, urlParse["normalized_nofrag"], exampleQuery) + // assert.Equal(t, urlParse["password"], "p") + // assert.Equal(t, urlParse["path"], "/foo") + // assert.Equal(t, urlParse["port"], "") + // assert.Equal(t, urlParse["protocol"], "http:") + // assert.Equal(t, urlParse["query"], "q=1") + // assert.Equal(t, urlParse["scheme"], "http") + // assert.Equal(t, urlParse["search"], "?q=1") + // assert.Equal(t, urlParse["url"], "HTTP://u:p@example.com:80/foo?q=1#bar") + // assert.Equal(t, urlParse["username"], "u") + + // url_parse_gsb + // urlParseGSB := terraform.OutputMap(t, terraformOptions, "url_parse_gsb_ds") + // assert.Equal(t, urlParseGSB["decoded_port"], fmt.Sprint(80)) + // assert.Equal(t, urlParseGSB["fragment"], "") + // assert.Equal(t, urlParseGSB["hash"], "") + // assert.Equal(t, urlParseGSB["host"], exampleCom) + // assert.Equal(t, urlParseGSB["hostname"], exampleCom) + // assert.Equal(t, urlParseGSB["normalized"], exampleQuery) + // assert.Equal(t, urlParseGSB["normalized_nofrag"], exampleQuery) + // assert.Equal(t, urlParseGSB["password"], "p") + // assert.Equal(t, urlParseGSB["path"], "/foo") + // assert.Equal(t, urlParseGSB["port"], "") + // assert.Equal(t, urlParseGSB["protocol"], "http:") + // assert.Equal(t, urlParseGSB["query"], "q=1") + // assert.Equal(t, urlParseGSB["scheme"], "http") + // assert.Equal(t, urlParseGSB["search"], "?q=1") + // assert.Equal(t, urlParseGSB["url"], "HTTP://u:p@example.com:80/foo?q=1#bar") + // assert.Equal(t, urlParseGSB["username"], "u") + + // homedir := "" + // homedirPath := "" + + // homedir, err = corefunc.Homedir() + // if err != nil { + // t.Fatal(err) + // } + + // assert.Equal(t, terraform.Output(t, terraformOptions, "homedir_get_ds"), homedir) + + // homedirPath, err = corefunc.HomedirExpand("~/.aws") + // if err != nil { + // t.Fatal(err) + // } + + // assert.Equal(t, terraform.Output(t, terraformOptions, "homedir_expand_ds"), homedirPath) + + // At the end of the test, run `terraform destroy` to clean up any resources that were created + err = restoreEnv() + if err != nil { + t.Fatal(err) + } + + terraform.Destroy(t, terraformOptions) + } +} + +func setAndPrint(binary string) error { + // Set the necessary values. + err = os.Setenv("TF_ACC_TERRAFORM_PATH", which.Which(binary)) + if err != nil { + return errors.Wrap(err, errTerraformPath) + } + + err = os.Setenv("TF_ACC_PROVIDER_NAMESPACE", "northwood-labs") + if err != nil { + return errors.Wrap(err, errProviderNamespace) + } + + switch binary { + case "terraform": + err = os.Setenv("TF_ACC_PROVIDER_HOST", "registry.terraform.io") + if err != nil { + return errors.Wrap(err, errProviderHost) + } + case "tofu": + err = os.Setenv("TF_ACC_PROVIDER_HOST", "registry.opentofu.org") + if err != nil { + return errors.Wrap(err, errProviderHost) + } + } + + fmt.Println("") + fmt.Println("================================================================================") + fmt.Printf("Binary %s is installed\n", which.Which(binary)) + fmt.Println("TF_ACC_TERRAFORM_PATH=" + os.Getenv("TF_ACC_TERRAFORM_PATH")) + fmt.Println("TF_ACC_PROVIDER_NAMESPACE=" + os.Getenv("TF_ACC_PROVIDER_NAMESPACE")) + fmt.Println("TF_ACC_PROVIDER_HOST=" + os.Getenv("TF_ACC_PROVIDER_HOST")) + fmt.Println("================================================================================") + fmt.Println("") + + return nil +} + +func restoreEnv() error { + // Restore the original values. + err = os.Setenv("TF_ACC_TERRAFORM_PATH", origPath) + if err != nil { + return errors.Wrap(err, errTerraformPath) + } + + err = os.Setenv("TF_ACC_PROVIDER_NAMESPACE", origNamespace) + if err != nil { + return errors.Wrap(err, errProviderNamespace) + } + + err = os.Setenv("TF_ACC_PROVIDER_HOST", origHostname) + if err != nil { + return errors.Wrap(err, errProviderHost) + } + + return nil +} diff --git a/terratest/functions/versions.tf b/terratest/functions/versions.tf new file mode 100644 index 00000000..1eb1c9bb --- /dev/null +++ b/terratest/functions/versions.tf @@ -0,0 +1,13 @@ +terraform { + required_version = "~> 1.0" + + required_providers { + corefunc = { + source = "northwood-labs/corefunc" + version = "~> 1.0" + } + } +} + +# There are no configuration options +provider "corefunc" {} diff --git a/terratest/homedir.tf b/terratest/homedir.tf deleted file mode 100644 index 40ab58bb..00000000 --- a/terratest/homedir.tf +++ /dev/null @@ -1,7 +0,0 @@ -# https://registry.terraform.io/providers/northwood-labs/corefunc/latest/docs/data-sources/homedir_get -data "corefunc_homedir_get" "home" {} - -# https://registry.terraform.io/providers/northwood-labs/corefunc/latest/docs/data-sources/homedir_expand -data "corefunc_homedir_expand" "home" { - path = "~/.aws/" -} diff --git a/terratest/leftpad.tf b/terratest/leftpad.tf deleted file mode 100644 index 87e770d0..00000000 --- a/terratest/leftpad.tf +++ /dev/null @@ -1,12 +0,0 @@ -# https://registry.terraform.io/providers/northwood-labs/corefunc/latest/docs/data-sources/str_leftpad -data "corefunc_str_leftpad" "leftpad" { - string = "abc" - pad_width = 5 - pad_char = "." -} - -# https://registry.terraform.io/providers/northwood-labs/corefunc/latest/docs/data-sources/int_leftpad -data "corefunc_int_leftpad" "leftpad" { - num = 123 - pad_width = 5 -} diff --git a/terratest/outputs.tf b/terratest/outputs.tf deleted file mode 100644 index 4cd08ab2..00000000 --- a/terratest/outputs.tf +++ /dev/null @@ -1,113 +0,0 @@ -# ------------------------------------------------------------------------------ -# String formatting - -output "str_camel" { - description = "This is a camelCase output." - value = data.corefunc_str_camel.str.value -} - -output "str_constant" { - description = "This is a CONSTANT_CASE output." - value = data.corefunc_str_constant.str.value -} - -output "str_kebab" { - description = "This is a kebab-case output." - value = data.corefunc_str_kebab.str.value -} - -output "str_pascal" { - description = "This is a PascalCase output." - value = data.corefunc_str_pascal.str.value -} - -output "str_snake" { - description = "This is a snake_case output." - value = data.corefunc_str_snake.str.value -} - -# ------------------------------------------------------------------------------ -# String truncation - -output "str_truncate" { - description = "This is a truncation output." - value = data.corefunc_str_truncate_label.label.value -} - -# ------------------------------------------------------------------------------ -# String replacement - -output "str_iterative_replace" { - description = "This is a replacement output." - value = data.corefunc_str_iterative_replace.replacements.value -} - -# ------------------------------------------------------------------------------ -# Leftpadding - -output "str_leftpad" { - description = "This is a string leftpad output." - value = data.corefunc_str_leftpad.leftpad.value -} - -output "int_leftpad" { - description = "This is a numeric leftpad output." - value = data.corefunc_int_leftpad.leftpad.value -} - -# ------------------------------------------------------------------------------ -# Homedir - -output "homedir_get" { - description = "This returns the home directory of the running machine." - value = data.corefunc_homedir_get.home.value -} - -output "homedir_expand" { - description = "This returns the home directory of the running machine as part of the output." - value = data.corefunc_homedir_expand.home.value -} - -# ------------------------------------------------------------------------------ -# Environment - -output "env_ensure" { - description = "This returns the GOROOT environment variable." - value = data.corefunc_env_ensure.goroot.value -} - -# ------------------------------------------------------------------------------ -# Runtime - -output "runtime_cpuarch" { - description = "This returns the CPU architecture of the provider." - value = data.corefunc_runtime_cpuarch.arch.value -} - -output "runtime_goroot" { - description = "This returns the GOROOT directory, if it exists." - value = data.corefunc_runtime_goroot.goroot.value -} - -output "runtime_numcpus" { - description = "This returns the number of logical CPU cores." - value = data.corefunc_runtime_numcpus.count.value -} - -output "runtime_os" { - description = "This returns the operating system of the provider." - value = data.corefunc_runtime_os.os.value -} - -# ------------------------------------------------------------------------------ -# URL Parsing - -output "url_parse" { - description = "This returns a parsed URL." - value = data.corefunc_url_parse.url -} - -output "url_parse_gsb" { - description = "This returns a parsed URL canonicalized for Google Safe Browsing." - value = data.corefunc_url_parse.gsb -} diff --git a/terratest/runtime.tf b/terratest/runtime.tf deleted file mode 100644 index 7a754070..00000000 --- a/terratest/runtime.tf +++ /dev/null @@ -1,11 +0,0 @@ -# https://registry.terraform.io/providers/northwood-labs/corefunc/latest/docs/data-sources/runtime_cpuarch -data "corefunc_runtime_cpuarch" "arch" {} - -# https://registry.terraform.io/providers/northwood-labs/corefunc/latest/docs/data-sources/runtime_goroot -data "corefunc_runtime_goroot" "goroot" {} - -# https://registry.terraform.io/providers/northwood-labs/corefunc/latest/docs/data-sources/runtime_numcpus -data "corefunc_runtime_numcpus" "count" {} - -# https://registry.terraform.io/providers/northwood-labs/corefunc/latest/docs/data-sources/runtime_os -data "corefunc_runtime_os" "os" {} diff --git a/terratest/str_format.tf b/terratest/str_format.tf deleted file mode 100644 index 178c7249..00000000 --- a/terratest/str_format.tf +++ /dev/null @@ -1,24 +0,0 @@ -# https://registry.terraform.io/providers/northwood-labs/corefunc/latest/docs/data-sources/str_camel -data "corefunc_str_camel" "str" { - string = local.input_string -} - -# https://registry.terraform.io/providers/northwood-labs/corefunc/latest/docs/data-sources/str_constant -data "corefunc_str_constant" "str" { - string = local.input_string -} - -# https://registry.terraform.io/providers/northwood-labs/corefunc/latest/docs/data-sources/str_kebab -data "corefunc_str_kebab" "str" { - string = local.input_string -} - -# https://registry.terraform.io/providers/northwood-labs/corefunc/latest/docs/data-sources/str_pascal -data "corefunc_str_pascal" "str" { - string = local.input_string -} - -# https://registry.terraform.io/providers/northwood-labs/corefunc/latest/docs/data-sources/str_snake -data "corefunc_str_snake" "str" { - string = local.input_string -} diff --git a/terratest/url.tf b/terratest/url.tf deleted file mode 100644 index cfed8ad0..00000000 --- a/terratest/url.tf +++ /dev/null @@ -1,10 +0,0 @@ -# https://registry.terraform.io/providers/northwood-labs/corefunc/latest/docs/data-sources/url_parse -data "corefunc_url_parse" "url" { - url = "HTTP://u:p@example.com:80/foo?q=1#bar" -} - -# https://registry.terraform.io/providers/northwood-labs/corefunc/latest/docs/data-sources/url_parse -data "corefunc_url_parse" "gsb" { - url = "HTTP://u:p@example.com:80/foo?q=1#bar" - canonicalizer = "google_safe_browsing" -} diff --git a/testfixtures/env_ensure.go b/testfixtures/env_ensure.go index cdcd9d14..305c4c02 100644 --- a/testfixtures/env_ensure.go +++ b/testfixtures/env_ensure.go @@ -24,10 +24,12 @@ import ( // Terraform acceptance tests. // var EnvEnsureTestTable = map[string]struct { - Pattern *regexp.Regexp - ExpectedErr error - EnvVarName string - SetValue string + Pattern *regexp.Regexp + ExpectedErrRE *regexp.Regexp + ExpectedErr error + EnvVarName string + SetValue string + PatternStr string }{ "AWS_DEFAULT_REGION": { EnvVarName: "AWS_DEFAULT_REGION", @@ -36,19 +38,25 @@ var EnvEnsureTestTable = map[string]struct { "AWS_REGION": { EnvVarName: "AWS_REGION", SetValue: "us-east-1", - Pattern: regexp.MustCompile(`^([a-z]{2})-([^-]+)-(\\d)$`), + // Pattern: regexp.MustCompile(`^([a-z]{2})-([^-]+)-(\\d)$`), + PatternStr: `^([a-z]{2})-([^-]+)-(\\d)$`, }, "AWS_VAULT": { EnvVarName: "AWS_VAULT", SetValue: "dev", Pattern: regexp.MustCompile(`(non)?prod$`), + PatternStr: `(non)?prod$`, ExpectedErr: errors.New( "environment variable AWS_VAULT does not match pattern (non)?prod$", ), // lint:allow_errorf + ExpectedErrRE: regexp.MustCompile( + `environment variable AWS_VAULT does not match pattern \(non\)\?prod\$`, + ), // lint:allow_errorf }, "AWS_PAGER": { - EnvVarName: "AWS_PAGER", - ExpectedErr: errors.New("environment variable AWS_PAGER is not defined"), // lint:allow_errorf + EnvVarName: "AWS_PAGER", + ExpectedErr: errors.New("environment variable AWS_PAGER is not defined"), // lint:allow_errorf + ExpectedErrRE: regexp.MustCompile(`environment variable AWS_PAGER is not defined`), }, "BREW_PREFIX": { EnvVarName: "BREW_PREFIX",