[
  {
    "path": ".github/workflows/nightly-govulncheck.yaml",
    "content": "# Adapted from https://www.jvt.me/posts/2025/09/11/govulncheck-github-actions/\n\nname: Check dependencies through `govulncheck`\non:\n  schedule:\n    - cron: \"0 0 * * *\"\n\njobs:\n  check-for-vulnerabilities:\n    name: Check for vulnerabilities using `govulncheck`\n    runs-on: ubuntu-latest\n    permissions:\n      security-events: write\n      contents: read\n    steps:\n      - uses: golang/govulncheck-action@b625fbe08f3bccbe446d94fbf87fcc875a4f50ee # v1.0.4\n        with:\n          output-format: sarif\n          output-file: govulncheck.sarif\n      - name: Upload SARIF file\n        uses: github/codeql-action/upload-sarif@192325c86100d080feab897ff886c34abd4c83a3 # v3.30.2\n        with:\n          sarif_file: govulncheck.sarif\n          category: govulncheck\n"
  },
  {
    "path": ".github/workflows/release.yml",
    "content": "name: Release\n\non:\n  push:\n    tags:\n      - v*\n\n# Request permissions to write (edit, create) new releases\npermissions:\n  contents: write\n\njobs:\n  release:\n    name: Release\n    runs-on: ubuntu-latest\n    steps:\n      - name: Checkout\n        uses: actions/checkout@v3\n\n      - name: Setup go\n        uses: actions/setup-go@v6\n        with:\n          go-version-file: 'go.mod'\n\n      - name: Build\n        run: go build -v .\n\n      - name: Import test GPG key\n        run: gpg --import test/testing-key.pgp\n\n      - name: Test\n        run: make test\n\n      - name: Crossbuild\n        run: make crossbuild\n\n      - name: Release\n        run: make release\n        env:\n          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}\n"
  },
  {
    "path": ".github/workflows/test.yml",
    "content": "name: Tests\n\non:\n  pull_request:\n  push:\n    branches:\n      - master\n\njobs:\n  build-and-test:\n    name: Build and Test\n    runs-on: ubuntu-latest\n    steps:\n      - name: Checkout\n        uses: actions/checkout@v3\n\n      - name: Setup go\n        uses: actions/setup-go@v6\n        with:\n          go-version-file: 'go.mod'\n\n      - name: Build\n        run: go build -v .\n\n      - name: Import test GPG key\n        run: gpg --import test/testing-key.pgp\n\n      - name: Test\n        run: make test\n\n      - name: Crossbuild\n        run: make crossbuild\n\n  dependency-check:\n    name: Verify dependencies\n    runs-on: ubuntu-latest\n    steps:\n      - name: govulncheck\n        uses: golang/govulncheck-action@v1\n        with:\n          go-version-input: '' # By default set to 'stable', which takes priority over go-version-file\n          go-version-file: 'go.mod'\n"
  },
  {
    "path": ".gitignore",
    "content": "bin/\nbinaries/\nreleases/\nterraform-provider-sops\n"
  },
  {
    "path": "GNUmakefile",
    "content": "export CGO_ENABLED = 0\nVERSION = $(shell git describe --tags --match='v*' --always)\nRELEASE = $(patsubst v%,%,$(VERSION))# Remove leading v to comply with Terraform Registry conventions\n\nCROSSBUILD_OS   = linux windows darwin\nCROSSBUILD_ARCH = 386 amd64 arm64\nSKIP_OSARCH     = darwin_386 windows_arm64\nOSARCH_COMBOS   = $(filter-out $(SKIP_OSARCH),$(foreach os,$(CROSSBUILD_OS),$(addprefix $(os)_,$(CROSSBUILD_ARCH))))\n\ndefault: build\n\nstyle:\n\t@echo \">> checking code style\"\n\t! gofmt -d $(shell find . -name '*.go' -print) | grep '^'\n\nvet:\n\t@echo \">> vetting code\"\n\tgo vet ./...\n\ntest:\n\t@echo \">> testing code\"\n\tgo test -v ./...\n\nbuild:\n\t@echo \">> building binaries\"\n\tgo build -o terraform-provider-sops\n\ngenerate-documentation:\n\tcd tools; go generate ./...\n\ncrossbuild: $(GOPATH)/bin/gox\n\t@echo \">> cross-building\"\n\tgox -arch=\"$(CROSSBUILD_ARCH)\" -os=\"$(CROSSBUILD_OS)\" -osarch=\"$(addprefix !,$(subst _,/,$(SKIP_OSARCH)))\" \\\n\t\t-output=\"binaries/$(VERSION)/{{.OS}}_{{.Arch}}/terraform-provider-sops_$(VERSION)\"\n\n$(GOPATH)/bin/gox:\n\t@go install github.com/mitchellh/gox@latest\n\n# This uses the `gh` tool, which is preinstalled on GitHub Actions runners.\nrelease: crossbuild\n\t@echo \">> uploading release $(VERSION)\"\n\tmkdir -p releases\n\tset -e; for OSARCH in $(OSARCH_COMBOS); do \\\n\t\tzip -j releases/terraform-provider-sops_$(RELEASE)_$$OSARCH.zip binaries/$(VERSION)/$$OSARCH/terraform-provider-sops_* > /dev/null; \\\n\t\tgh release upload $(VERSION) \"releases/terraform-provider-sops_$(RELEASE)_$$OSARCH.zip#terraform-provider-sops_$(RELEASE)_$$OSARCH.zip\"; \\\n\tdone\n\t@echo \">>> generating sha256sums:\"\n\tcd releases; sha256sum *.zip | tee terraform-provider-sops_$(RELEASE)_SHA256SUMS\n\tgh release upload $(VERSION) \"releases/terraform-provider-sops_$(RELEASE)_SHA256SUMS#terraform-provider-sops_$(RELEASE)_SHA256SUMS\"\n\n.PHONY: all style vet test build crossbuild release generate-documentation\n"
  },
  {
    "path": "LICENSE",
    "content": "Mozilla Public License Version 2.0\n==================================\n\n1. Definitions\n--------------\n\n1.1. \"Contributor\"\n    means each individual or legal entity that creates, contributes to\n    the creation of, or owns Covered Software.\n\n1.2. \"Contributor Version\"\n    means the combination of the Contributions of others (if any) used\n    by a Contributor and that particular Contributor's Contribution.\n\n1.3. \"Contribution\"\n    means Covered Software of a particular Contributor.\n\n1.4. \"Covered Software\"\n    means Source Code Form to which the initial Contributor has attached\n    the notice in Exhibit A, the Executable Form of such Source Code\n    Form, and Modifications of such Source Code Form, in each case\n    including portions thereof.\n\n1.5. \"Incompatible With Secondary Licenses\"\n    means\n\n    (a) that the initial Contributor has attached the notice described\n        in Exhibit B to the Covered Software; or\n\n    (b) that the Covered Software was made available under the terms of\n        version 1.1 or earlier of the License, but not also under the\n        terms of a Secondary License.\n\n1.6. \"Executable Form\"\n    means any form of the work other than Source Code Form.\n\n1.7. \"Larger Work\"\n    means a work that combines Covered Software with other material, in\n    a separate file or files, that is not Covered Software.\n\n1.8. \"License\"\n    means this document.\n\n1.9. \"Licensable\"\n    means having the right to grant, to the maximum extent possible,\n    whether at the time of the initial grant or subsequently, any and\n    all of the rights conveyed by this License.\n\n1.10. \"Modifications\"\n    means any of the following:\n\n    (a) any file in Source Code Form that results from an addition to,\n        deletion from, or modification of the contents of Covered\n        Software; or\n\n    (b) any new file in Source Code Form that contains any Covered\n        Software.\n\n1.11. \"Patent Claims\" of a Contributor\n    means any patent claim(s), including without limitation, method,\n    process, and apparatus claims, in any patent Licensable by such\n    Contributor that would be infringed, but for the grant of the\n    License, by the making, using, selling, offering for sale, having\n    made, import, or transfer of either its Contributions or its\n    Contributor Version.\n\n1.12. \"Secondary License\"\n    means either the GNU General Public License, Version 2.0, the GNU\n    Lesser General Public License, Version 2.1, the GNU Affero General\n    Public License, Version 3.0, or any later versions of those\n    licenses.\n\n1.13. \"Source Code Form\"\n    means the form of the work preferred for making modifications.\n\n1.14. \"You\" (or \"Your\")\n    means an individual or a legal entity exercising rights under this\n    License. For legal entities, \"You\" includes any entity that\n    controls, is controlled by, or is under common control with You. For\n    purposes of this definition, \"control\" means (a) the power, direct\n    or indirect, to cause the direction or management of such entity,\n    whether by contract or otherwise, or (b) ownership of more than\n    fifty percent (50%) of the outstanding shares or beneficial\n    ownership of such entity.\n\n2. License Grants and Conditions\n--------------------------------\n\n2.1. Grants\n\nEach Contributor hereby grants You a world-wide, royalty-free,\nnon-exclusive license:\n\n(a) under intellectual property rights (other than patent or trademark)\n    Licensable by such Contributor to use, reproduce, make available,\n    modify, display, perform, distribute, and otherwise exploit its\n    Contributions, either on an unmodified basis, with Modifications, or\n    as part of a Larger Work; and\n\n(b) under Patent Claims of such Contributor to make, use, sell, offer\n    for sale, have made, import, and otherwise transfer either its\n    Contributions or its Contributor Version.\n\n2.2. Effective Date\n\nThe licenses granted in Section 2.1 with respect to any Contribution\nbecome effective for each Contribution on the date the Contributor first\ndistributes such Contribution.\n\n2.3. Limitations on Grant Scope\n\nThe licenses granted in this Section 2 are the only rights granted under\nthis License. No additional rights or licenses will be implied from the\ndistribution or licensing of Covered Software under this License.\nNotwithstanding Section 2.1(b) above, no patent license is granted by a\nContributor:\n\n(a) for any code that a Contributor has removed from Covered Software;\n    or\n\n(b) for infringements caused by: (i) Your and any other third party's\n    modifications of Covered Software, or (ii) the combination of its\n    Contributions with other software (except as part of its Contributor\n    Version); or\n\n(c) under Patent Claims infringed by Covered Software in the absence of\n    its Contributions.\n\nThis License does not grant any rights in the trademarks, service marks,\nor logos of any Contributor (except as may be necessary to comply with\nthe notice requirements in Section 3.4).\n\n2.4. Subsequent Licenses\n\nNo Contributor makes additional grants as a result of Your choice to\ndistribute the Covered Software under a subsequent version of this\nLicense (see Section 10.2) or under the terms of a Secondary License (if\npermitted under the terms of Section 3.3).\n\n2.5. Representation\n\nEach Contributor represents that the Contributor believes its\nContributions are its original creation(s) or it has sufficient rights\nto grant the rights to its Contributions conveyed by this License.\n\n2.6. Fair Use\n\nThis License is not intended to limit any rights You have under\napplicable copyright doctrines of fair use, fair dealing, or other\nequivalents.\n\n2.7. Conditions\n\nSections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted\nin Section 2.1.\n\n3. Responsibilities\n-------------------\n\n3.1. Distribution of Source Form\n\nAll distribution of Covered Software in Source Code Form, including any\nModifications that You create or to which You contribute, must be under\nthe terms of this License. You must inform recipients that the Source\nCode Form of the Covered Software is governed by the terms of this\nLicense, and how they can obtain a copy of this License. You may not\nattempt to alter or restrict the recipients' rights in the Source Code\nForm.\n\n3.2. Distribution of Executable Form\n\nIf You distribute Covered Software in Executable Form then:\n\n(a) such Covered Software must also be made available in Source Code\n    Form, as described in Section 3.1, and You must inform recipients of\n    the Executable Form how they can obtain a copy of such Source Code\n    Form by reasonable means in a timely manner, at a charge no more\n    than the cost of distribution to the recipient; and\n\n(b) You may distribute such Executable Form under the terms of this\n    License, or sublicense it under different terms, provided that the\n    license for the Executable Form does not attempt to limit or alter\n    the recipients' rights in the Source Code Form under this License.\n\n3.3. Distribution of a Larger Work\n\nYou may create and distribute a Larger Work under terms of Your choice,\nprovided that You also comply with the requirements of this License for\nthe Covered Software. If the Larger Work is a combination of Covered\nSoftware with a work governed by one or more Secondary Licenses, and the\nCovered Software is not Incompatible With Secondary Licenses, this\nLicense permits You to additionally distribute such Covered Software\nunder the terms of such Secondary License(s), so that the recipient of\nthe Larger Work may, at their option, further distribute the Covered\nSoftware under the terms of either this License or such Secondary\nLicense(s).\n\n3.4. Notices\n\nYou may not remove or alter the substance of any license notices\n(including copyright notices, patent notices, disclaimers of warranty,\nor limitations of liability) contained within the Source Code Form of\nthe Covered Software, except that You may alter any license notices to\nthe extent required to remedy known factual inaccuracies.\n\n3.5. Application of Additional Terms\n\nYou may choose to offer, and to charge a fee for, warranty, support,\nindemnity or liability obligations to one or more recipients of Covered\nSoftware. However, You may do so only on Your own behalf, and not on\nbehalf of any Contributor. You must make it absolutely clear that any\nsuch warranty, support, indemnity, or liability obligation is offered by\nYou alone, and You hereby agree to indemnify every Contributor for any\nliability incurred by such Contributor as a result of warranty, support,\nindemnity or liability terms You offer. You may include additional\ndisclaimers of warranty and limitations of liability specific to any\njurisdiction.\n\n4. Inability to Comply Due to Statute or Regulation\n---------------------------------------------------\n\nIf it is impossible for You to comply with any of the terms of this\nLicense with respect to some or all of the Covered Software due to\nstatute, judicial order, or regulation then You must: (a) comply with\nthe terms of this License to the maximum extent possible; and (b)\ndescribe the limitations and the code they affect. Such description must\nbe placed in a text file included with all distributions of the Covered\nSoftware under this License. Except to the extent prohibited by statute\nor regulation, such description must be sufficiently detailed for a\nrecipient of ordinary skill to be able to understand it.\n\n5. Termination\n--------------\n\n5.1. The rights granted under this License will terminate automatically\nif You fail to comply with any of its terms. However, if You become\ncompliant, then the rights granted under this License from a particular\nContributor are reinstated (a) provisionally, unless and until such\nContributor explicitly and finally terminates Your grants, and (b) on an\nongoing basis, if such Contributor fails to notify You of the\nnon-compliance by some reasonable means prior to 60 days after You have\ncome back into compliance. Moreover, Your grants from a particular\nContributor are reinstated on an ongoing basis if such Contributor\nnotifies You of the non-compliance by some reasonable means, this is the\nfirst time You have received notice of non-compliance with this License\nfrom such Contributor, and You become compliant prior to 30 days after\nYour receipt of the notice.\n\n5.2. If You initiate litigation against any entity by asserting a patent\ninfringement claim (excluding declaratory judgment actions,\ncounter-claims, and cross-claims) alleging that a Contributor Version\ndirectly or indirectly infringes any patent, then the rights granted to\nYou by any and all Contributors for the Covered Software under Section\n2.1 of this License shall terminate.\n\n5.3. In the event of termination under Sections 5.1 or 5.2 above, all\nend user license agreements (excluding distributors and resellers) which\nhave been validly granted by You or Your distributors under this License\nprior to termination shall survive termination.\n\n************************************************************************\n*                                                                      *\n*  6. Disclaimer of Warranty                                           *\n*  -------------------------                                           *\n*                                                                      *\n*  Covered Software is provided under this License on an \"as is\"       *\n*  basis, without warranty of any kind, either expressed, implied, or  *\n*  statutory, including, without limitation, warranties that the       *\n*  Covered Software is free of defects, merchantable, fit for a        *\n*  particular purpose or non-infringing. The entire risk as to the     *\n*  quality and performance of the Covered Software is with You.        *\n*  Should any Covered Software prove defective in any respect, You     *\n*  (not any Contributor) assume the cost of any necessary servicing,   *\n*  repair, or correction. This disclaimer of warranty constitutes an   *\n*  essential part of this License. No use of any Covered Software is   *\n*  authorized under this License except under this disclaimer.         *\n*                                                                      *\n************************************************************************\n\n************************************************************************\n*                                                                      *\n*  7. Limitation of Liability                                          *\n*  --------------------------                                          *\n*                                                                      *\n*  Under no circumstances and under no legal theory, whether tort      *\n*  (including negligence), contract, or otherwise, shall any           *\n*  Contributor, or anyone who distributes Covered Software as          *\n*  permitted above, be liable to You for any direct, indirect,         *\n*  special, incidental, or consequential damages of any character      *\n*  including, without limitation, damages for lost profits, loss of    *\n*  goodwill, work stoppage, computer failure or malfunction, or any    *\n*  and all other commercial damages or losses, even if such party      *\n*  shall have been informed of the possibility of such damages. This   *\n*  limitation of liability shall not apply to liability for death or   *\n*  personal injury resulting from such party's negligence to the       *\n*  extent applicable law prohibits such limitation. Some               *\n*  jurisdictions do not allow the exclusion or limitation of           *\n*  incidental or consequential damages, so this exclusion and          *\n*  limitation may not apply to You.                                    *\n*                                                                      *\n************************************************************************\n\n8. Litigation\n-------------\n\nAny litigation relating to this License may be brought only in the\ncourts of a jurisdiction where the defendant maintains its principal\nplace of business and such litigation shall be governed by laws of that\njurisdiction, without reference to its conflict-of-law provisions.\nNothing in this Section shall prevent a party's ability to bring\ncross-claims or counter-claims.\n\n9. Miscellaneous\n----------------\n\nThis License represents the complete agreement concerning the subject\nmatter hereof. If any provision of this License is held to be\nunenforceable, such provision shall be reformed only to the extent\nnecessary to make it enforceable. Any law or regulation which provides\nthat the language of a contract shall be construed against the drafter\nshall not be used to construe this License against a Contributor.\n\n10. Versions of the License\n---------------------------\n\n10.1. New Versions\n\nMozilla Foundation is the license steward. Except as provided in Section\n10.3, no one other than the license steward has the right to modify or\npublish new versions of this License. Each version will be given a\ndistinguishing version number.\n\n10.2. Effect of New Versions\n\nYou may distribute the Covered Software under the terms of the version\nof the License under which You originally received the Covered Software,\nor under the terms of any subsequent version published by the license\nsteward.\n\n10.3. Modified Versions\n\nIf you create software not governed by this License, and you want to\ncreate a new license for such software, you may create and use a\nmodified version of this License if you rename the license and remove\nany references to the name of the license steward (except to note that\nsuch modified license differs from this License).\n\n10.4. Distributing Source Code Form that is Incompatible With Secondary\nLicenses\n\nIf You choose to distribute Source Code Form that is Incompatible With\nSecondary Licenses under the terms of this version of the License, the\nnotice described in Exhibit B of this License must be attached.\n\nExhibit A - Source Code Form License Notice\n-------------------------------------------\n\n  This Source Code Form is subject to the terms of the Mozilla Public\n  License, v. 2.0. If a copy of the MPL was not distributed with this\n  file, You can obtain one at http://mozilla.org/MPL/2.0/.\n\nIf it is not possible or desirable to put the notice in a particular\nfile, then You may include the notice in a location (such as a LICENSE\nfile in a relevant directory) where a recipient would be likely to look\nfor such a notice.\n\nYou may add additional accurate notices of copyright ownership.\n\nExhibit B - \"Incompatible With Secondary Licenses\" Notice\n---------------------------------------------------------\n\n  This Source Code Form is \"Incompatible With Secondary Licenses\", as\n  defined by the Mozilla Public License, v. 2.0.\n"
  },
  {
    "path": "README.md",
    "content": "# terraform-sops\n\nA Terraform plugin for using files encrypted with [SOPS](https://github.com/getsops/sops).\n\n**NOTE:** To prevent plaintext secrets from being written to disk, you *must* set up a secure remote state backend. See the [official docs](https://developer.hashicorp.com/terraform/language/state/sensitive-data) on _Sensitive Data in State_ for more information or use [ephemeral block](#example-using-ephemeral-block).\n\n## Example\n\n**NOTE:** All examples assume Terraform 0.13 or newer. For information about usage on older versions, see the [legacy usage docs](docs/legacy_usage.md).\n\nEncrypt a file using Sops: `sops demo-secret.enc.json`\n\n```json\n{\n  \"password\": \"foo\",\n  \"db\": {\"password\": \"bar\"}\n}\n```\n### sops_file\n\n```hcl\nterraform {\n  required_providers {\n    sops = {\n      source = \"carlpett/sops\"\n      version = \"~> 0.5\"\n    }\n  }\n}\n\ndata \"sops_file\" \"demo-secret\" {\n  source_file = \"demo-secret.enc.json\"\n}\n\noutput \"root-value-password\" {\n  # Access the password variable from the map\n  value = data.sops_file.demo-secret.data[\"password\"]\n}\n\noutput \"mapped-nested-value\" {\n  # Access the password variable that is under db via the terraform map of data\n  value = data.sops_file.demo-secret.data[\"db.password\"]\n}\n\noutput \"nested-json-value\" {\n  # Access the password variable that is under db via the terraform object\n  value = jsondecode(data.sops_file.demo-secret.raw).db.password\n}\n```\n\nSops also supports encrypting the entire file when in other formats. Such files can also be used by specifying `input_type = \"raw\"`:\n\n```hcl\ndata \"sops_file\" \"some-file\" {\n  source_file = \"secret-data.txt\"\n  input_type = \"raw\"\n}\n\noutput \"do-something\" {\n  value = data.sops_file.some-file.raw\n}\n```\n\n### sops_external\nFor use with reading files that might not be local. \n\n> `input_type` is required with this data source.\n\n```hcl\nterraform {\n  required_providers {\n    sops = {\n      source = \"carlpett/sops\"\n      version = \"~> 0.5\"\n    }\n  }\n}\n\n# using sops/test-fixtures/basic.yaml as an example\ndata \"local_file\" \"yaml\" {\n  filename = \"basic.yaml\"\n}\n\ndata \"sops_external\" \"demo-secret\" {\n  source     = data.local_file.yaml.content\n  input_type = \"yaml\"\n}\n\noutput \"root-value-hello\" {\n  value = data.sops_external.demo-secret.data.hello\n}\n\noutput \"nested-yaml-value\" {\n  # Access the password variable that is under db via the terraform object\n  value = yamldecode(data.sops_file.demo-secret.raw).db.password\n}\n```\n\n## Install\n\nFor Terraform 0.13 and later, specify the source and version in a `required_providers` block:\n\n```hcl\nterraform {\n  required_providers {\n    sops = {\n      source = \"carlpett/sops\"\n      version = \"~> 0.5\"\n    }\n  }\n}\n```\n\n## CI usage\n\nFor CI, the same variables or context that SOPS uses locally must be provided in the runtime. The provider does not manage the required values. \n\n## Development\nBuilding and testing is most easily performed with `make build` and `make test` respectively.\n\nThe PGP key used for encrypting the test cases is found in `test/testing-key.pgp`. You can import it with `gpg --import test/testing-key.pgp`.\n\nTo create the Terraform-registry-documentation, simply run `make generate-documentation`\n\n## Transitioning to Terraform 0.13 provider required blocks.\n\nWith Terraform 0.13, providers are available/downloaded via the [terraform registry](https://registry.terraform.io/providers/carlpett/sops/latest) via a required_providers block.\n\n```hcl\nterraform {\n  required_providers {\n    sops = {\n      source = \"carlpett/sops\"\n      version = \"~> 0.5\"\n    }\n  }\n}\n```\n\nA prerequisite when converting is that you must remove the data source block from the previous SOPS provider in your `terraform.state` file. \nThis can be done via:\n```shell\nterraform state replace-provider registry.terraform.io/-/sops registry.terraform.io/carlpett/sops\n```\n\nIf not you will be greeted with: \n```shell\n- Finding latest version of -/sops...\n\nError: Failed to query available provider packages\n\nCould not retrieve the list of available versions for provider -/sops:\nprovider registry registry.terraform.io does not have a provider named\nregistry.terraform.io/-/sops\n```\n\n## Example using ephemeral block\nWith Terraform v1.11+ and the SOPS provider v1.3.0+, you can use an ephemeral resource instead of a data source.\nThis prevents the contents of the secret file from being saved in the Terraform state.\nEphemeral resources can be referenced in `write-only` arguments.\n```hcl\nterraform {\n  required_providers {\n    sops = {\n      source = \"carlpett/sops\"\n      version = \"~> 1.3.0\"\n    }\n  }\n}\n\nephemeral \"sops_file\" \"secrets\" {\n  source_file = \"demo-secret.enc.json\"\n}\n\nresource \"aws_ssm_parameter\" \"sops_secrets\" {\n  name             = \"my-secrets\"\n  type             = \"SecureString\"\n  value_wo         = jsonencode(ephemeral.sops_file.secrets.raw)\n  value_wo_version = 1\n}\n```\nSee documentation:\n* [Ephemeral block](https://developer.hashicorp.com/terraform/language/block/ephemeral)\n* [Write-Only arguments](https://developer.hashicorp.com/terraform/language/manage-sensitive-data/write-only)\n\n\n"
  },
  {
    "path": "docker/Dockerfile",
    "content": "FROM hashicorp/terraform:0.12.0\nARG SOPS_PLUGIN_VERSION\nENV SOPS_PLUGIN_VERSION=${SOPS_PLUGIN_VERSION}\nRUN wget https://github.com/carlpett/terraform-provider-sops/releases/download/${SOPS_PLUGIN_VERSION}/terraform-provider-sops_${SOPS_PLUGIN_VERSION}_linux_amd64.zip && \\\n\tunzip terraform-provider-sops_${SOPS_PLUGIN_VERSION}_linux_amd64.zip && \\\n\tmv terraform-provider-sops_${SOPS_PLUGIN_VERSION} /bin/terraform-provider-sops_${SOPS_PLUGIN_VERSION} && \\\n\tchmod +x /bin/terraform-provider-sops_${SOPS_PLUGIN_VERSION}\n"
  },
  {
    "path": "docker/hooks/build",
    "content": "#!/usr/bin/env bash\nset -eufo pipefail\nif ! echo ${DOCKER_TAG} | grep -qE '^v[0-9\\.]+'; then\n\t# If the tag is not a version, use the version of the latest tag\n\tgit fetch --tags --unshallow >/dev/null\n\texport DOCKER_TAG=$(git describe --tags --abbrev=0 --match='v*')\n\techo \"Using plugin version ${DOCKER_TAG}\"\nfi\ndocker build --build-arg \"SOPS_PLUGIN_VERSION=${DOCKER_TAG}\" -t \"${IMAGE_NAME}\" .\n"
  },
  {
    "path": "docs/data-sources/external.md",
    "content": "---\n# generated by https://github.com/hashicorp/terraform-plugin-docs\npage_title: \"sops_external Data Source - sops\"\nsubcategory: \"\"\ndescription: |-\n  Read data from a sops-encrypted string. Useful if the data does not reside on disk locally (otherwise use sops_file).\n---\n\n# sops_external (Data Source)\n\nRead data from a sops-encrypted string. Useful if the data does not reside on disk locally (otherwise use `sops_file`).\n\n## Example Usage\n\n```terraform\ndata \"http\" \"remote_sops_data\" {\n  url = \"https://sops.example/my-data\"\n}\n\ndata \"sops_external\" \"demo_secret\" {\n  source     = data.http.remote_sops_data.body\n  input_type = \"yaml\"\n}\n\noutput \"root-value-hello\" {\n  value = data.sops_external.demo_secret.data.hello\n}\n```\n\n<!-- schema generated by tfplugindocs -->\n## Schema\n\n### Required\n\n- `source` (String) A string with sops-encrypted data\n\n### Optional\n\n- `input_type` (String) `yaml`, `json` `dotenv` (`.env`), `ini` or `raw`, depending on the structure of the un-encrypted data.\n\n### Read-Only\n\n- `data` (Map of String, Sensitive) Decrypted data\n- `id` (String) Unique identifier for this data source\n- `raw` (String, Sensitive) Raw decrypted content\n"
  },
  {
    "path": "docs/data-sources/file.md",
    "content": "---\n# generated by https://github.com/hashicorp/terraform-plugin-docs\npage_title: \"sops_file Data Source - sops\"\nsubcategory: \"\"\ndescription: |-\n  Read data from a sops-encrypted file on disk.\n---\n\n# sops_file (Data Source)\n\nRead data from a sops-encrypted file on disk.\n\n## Example Usage\n\n```terraform\nprovider \"sops\" {}\n\ndata \"sops_file\" \"demo-secret\" {\n  source_file = \"demo-secret.enc.json\"\n}\n\noutput \"root-value-password\" {\n  # Access the password variable from the map\n  value = data.sops_file.demo-secret.data[\"password\"]\n}\n\noutput \"mapped-nested-value\" {\n  # Access the password variable that is under db via the terraform map of data\n  value = data.sops_file.demo-secret.data[\"db.password\"]\n}\n\noutput \"nested-json-value\" {\n  # Access the password variable that is under db via the terraform object\n  value = jsondecode(data.sops_file.demo-secret.raw).db.password\n}\n```\n\n<!-- schema generated by tfplugindocs -->\n## Schema\n\n### Required\n\n- `source_file` (String) Path to the encrypted file.\n\n### Optional\n\n- `input_type` (String) The provider will use the file extension to determine how to unmarshal the data. If your file does not have the usual extension, set this argument to `yaml`, `json`, `dotenv` (`.env`), `ini` accordingly, or `raw` if the encrypted data is encoded differently.\n\n### Read-Only\n\n- `data` (Map of String, Sensitive) The unmarshalled data as a dictionary. Use dot-separated keys to access nested data.\n- `id` (String) Unique identifier for this data source.\n- `raw` (String, Sensitive) The entire unencrypted file as a string.\n"
  },
  {
    "path": "docs/ephemeral-resources/external.md",
    "content": "---\n# generated by https://github.com/hashicorp/terraform-plugin-docs\npage_title: \"sops_external Ephemeral Resource - sops\"\nsubcategory: \"\"\ndescription: |-\n  Read data from a sops-encrypted string. Useful if the data does not reside on disk locally (otherwise use sops_file).\n---\n\n# sops_external (Ephemeral Resource)\n\nRead data from a sops-encrypted string. Useful if the data does not reside on disk locally (otherwise use `sops_file`).\n\n## Example Usage\n\n```terraform\ndata \"http\" \"remote_sops_data\" {\n  url = \"https://sops.example/my-data\"\n}\n\nephemeral \"sops_external\" \"demo_secret\" {\n  source     = data.http.remote_sops_data.body\n  input_type = \"yaml\"\n}\n\noutput \"root_value_hello\" {\n  value = ephemeral.sops_external.demo_secret.data.hello\n}\n```\n\n<!-- schema generated by tfplugindocs -->\n## Schema\n\n### Required\n\n- `source` (String) A string with sops-encrypted data\n\n### Optional\n\n- `input_type` (String) `yaml`, `json` `dotenv` (`.env`), `ini` or `raw`, depending on the structure of the un-encrypted data.\n\n### Read-Only\n\n- `data` (Map of String, Sensitive) Decrypted data\n- `raw` (String, Sensitive) Raw decrypted content\n"
  },
  {
    "path": "docs/ephemeral-resources/file.md",
    "content": "---\n# generated by https://github.com/hashicorp/terraform-plugin-docs\npage_title: \"sops_file Ephemeral Resource - sops\"\nsubcategory: \"\"\ndescription: |-\n  Decrypt sops-encrypted files\n---\n\n# sops_file (Ephemeral Resource)\n\nDecrypt sops-encrypted files\n\n## Example Usage\n\n```terraform\nprovider \"sops\" {}\n\nephemeral \"sops_file\" \"demo_secret\" {\n  source_file = \"demo_secret.enc.json\"\n}\n\noutput \"root_value_password\" {\n  # Access the password variable from the map\n  value = data.sops_file.demo_secret.data[\"password\"]\n}\n\noutput \"mapped_nested_value\" {\n  # Access the password variable that is under db via the terraform map of data\n  value = data.sops_file.demo_secret.data[\"db.password\"]\n}\n\noutput \"nested_json_value\" {\n  # Access the password variable that is under db via the terraform object\n  value = jsondecode(data.sops_file.demo_secret.raw).db.password\n}\n```\n\n<!-- schema generated by tfplugindocs -->\n## Schema\n\n### Required\n\n- `source_file` (String) Path to the encrypted file\n\n### Optional\n\n- `input_type` (String) The provider will use the file extension to determine how to unmarshal the data. If your file does not have the usual extension, set this argument to `yaml`, `json`, `dotenv` (`.env`), `ini` accordingly, or `raw` if the encrypted data is encoded differently.\n\n### Read-Only\n\n- `data` (Map of String, Sensitive) The unmarshalled data as a dictionary. Use dot-separated keys to access nested data.\n- `raw` (String, Sensitive) Raw decrypted content\n"
  },
  {
    "path": "docs/guides/legacy_usage.md",
    "content": "---\npage_title: \"terraform-sops on older Terraform versions\"\ndescription: |-\n  Migration guide for moving from a old Terraform version\n---\n# terraform-sops on older Terraform versions\n## Migrating existing states\nTo migrate a state from Terraform 0.12 or older, there is a need to change how the provider is referenced. Terraform provides a command to do this migration:\n\n```shell\nterraform state replace-provider registry.terraform.io/-/sops registry.terraform.io/carlpett/sops\n```\n\n## Installation\n\nDownload the latest [release](https://github.com/carlpett/terraform-provider-sops/releases) for your environment and unpack it to the user plugin directory. The user plugins directory is in one of the following locations, depending on the host operating system:\n* Windows `%APPDATA%\\terraform.d\\plugins`\n* All other systems `~/.terraform.d/plugins`\n\n### Allowing code to run on macOS\n\nApple macOS Catalina (10.15.0) and later prevents unsigned code from running. When you first run `terraform plan` it will pop up a message saying\n> **“terraform-provider-sops_v0.5.0” cannot be opened because the developer cannot be verified.**\n> macOS cannot verify that this app is free from malware.\n\nTo allow the plugin to run, go to the **Security & Privacy** tab of System Preferences and you should see a message saying\n> “terraform-provider-sops_v0.5.0” was blocked from use because it is not from an identified developer.\n\nClick the `Allow Anyway` button.\n\n## Usage\nUsage is mostly identical across versions, but there are some differences in how to reference nested fields.\n\n### Terraform 0.12\n\n```hcl\nprovider \"sops\" {}\n\ndata \"sops_file\" \"demo-secret\" {\n  source_file = \"demo-secret.enc.json\"\n}\n\noutput \"root-value-password\" {\n  # Access the password variable from the map\n  value = data.sops_file.demo-secret.data[\"password\"]\n}\n\noutput \"mapped-nested-value\" {\n  # Access the password variable that is under db via the terraform map of data\n  value = data.sops_file.demo-secret.data[\"db.password\"]\n}\n\noutput \"nested-json-value\" {\n  # Access the password variable that is under db via the terraform object\n  value = jsondecode(data.sops_file.demo-secret.raw).db.password\n}\n```\n\n### Terraform 0.11 and older\n```hcl\nprovider \"sops\" {}\n\ndata \"sops_file\" \"demo-secret\" {\n  source_file = \"demo-secret.enc.json\"\n}\n\noutput \"do-something\" {\n  value = \"${data.sops_file.demo-secret.data.password}\"\n}\n\noutput \"do-something2\" {\n  value = \"${data.sops_file.demo-secret.data.db.password}\"\n}\n```\n"
  },
  {
    "path": "docs/index.md",
    "content": "---\n# generated by https://github.com/hashicorp/terraform-plugin-docs\npage_title: \"sops Provider\"\ndescription: |-\n  A Terraform plugin for using files encrypted with SOPS https://github.com/getsops/sops.\n---\n\n# SOPS Provider\n\nA Terraform plugin for using files encrypted with [SOPS](https://github.com/getsops/sops).\n\n!> To prevent plaintext secrets from being written to disk, you *must* use a secure remote state backend. See the [official docs](https://developer.hashicorp.com/terraform/language/state/sensitive-data) on _Sensitive Data in State_ for more information.\n\n## Example Usage\n\n```terraform\nprovider \"sops\" {}\n\ndata \"sops_file\" \"demo_secret\" {\n  source_file = \"demo-secret.enc.json\"\n}\n\noutput \"db_password\" {\n  # Access the password variable that is under db via the terraform map of data\n  value = data.sops_file.demo_secret.data[\"db.password\"]\n}\n```\n\n<!-- schema generated by tfplugindocs -->\n\n"
  },
  {
    "path": "examples/README.md",
    "content": "# Examples\n\nThis directory contains examples that are mostly used for documentation, but can also be run/tested manually via the Terraform CLI.\n\nThe document generation tool looks for files in the following locations by default. All other *.tf files besides the ones mentioned below are ignored by the documentation tool. This is useful for creating examples that can run and/or are testable even if some parts are not relevant for the documentation.\n\n* **provider/provider.tf** example file for the provider index page\n* **data-sources/`full data source name`/data-source.tf** example file for the named data source page\n* **resources/`full resource name`/resource.tf** example file for the named data source page"
  },
  {
    "path": "examples/data-sources/sops_external/data-source.tf",
    "content": "data \"http\" \"remote_sops_data\" {\n  url = \"https://sops.example/my-data\"\n}\n\ndata \"sops_external\" \"demo_secret\" {\n  source     = data.http.remote_sops_data.body\n  input_type = \"yaml\"\n}\n\noutput \"root-value-hello\" {\n  value = data.sops_external.demo_secret.data.hello\n}"
  },
  {
    "path": "examples/data-sources/sops_file/data-source.tf",
    "content": "provider \"sops\" {}\n\ndata \"sops_file\" \"demo-secret\" {\n  source_file = \"demo-secret.enc.json\"\n}\n\noutput \"root-value-password\" {\n  # Access the password variable from the map\n  value = data.sops_file.demo-secret.data[\"password\"]\n}\n\noutput \"mapped-nested-value\" {\n  # Access the password variable that is under db via the terraform map of data\n  value = data.sops_file.demo-secret.data[\"db.password\"]\n}\n\noutput \"nested-json-value\" {\n  # Access the password variable that is under db via the terraform object\n  value = jsondecode(data.sops_file.demo-secret.raw).db.password\n}"
  },
  {
    "path": "examples/ephemeral-resources/sops_external/ephemeral-resources.tf",
    "content": "data \"http\" \"remote_sops_data\" {\n  url = \"https://sops.example/my-data\"\n}\n\nephemeral \"sops_external\" \"demo_secret\" {\n  source     = data.http.remote_sops_data.body\n  input_type = \"yaml\"\n}\n\noutput \"root_value_hello\" {\n  value = ephemeral.sops_external.demo_secret.data.hello\n}"
  },
  {
    "path": "examples/ephemeral-resources/sops_file/ephemeral-resources.tf",
    "content": "provider \"sops\" {}\n\nephemeral \"sops_file\" \"demo_secret\" {\n  source_file = \"demo_secret.enc.json\"\n}\n\noutput \"root_value_password\" {\n  # Access the password variable from the map\n  value = data.sops_file.demo_secret.data[\"password\"]\n}\n\noutput \"mapped_nested_value\" {\n  # Access the password variable that is under db via the terraform map of data\n  value = data.sops_file.demo_secret.data[\"db.password\"]\n}\n\noutput \"nested_json_value\" {\n  # Access the password variable that is under db via the terraform object\n  value = jsondecode(data.sops_file.demo_secret.raw).db.password\n}"
  },
  {
    "path": "examples/provider/provider.tf",
    "content": "provider \"sops\" {}\n\ndata \"sops_file\" \"demo_secret\" {\n  source_file = \"demo-secret.enc.json\"\n}\n\noutput \"db_password\" {\n  # Access the password variable that is under db via the terraform map of data\n  value = data.sops_file.demo_secret.data[\"db.password\"]\n}\n"
  },
  {
    "path": "go.mod",
    "content": "module github.com/carlpett/terraform-provider-sops\n\ngo 1.25.8\n\nrequire (\n\tgithub.com/getsops/sops/v3 v3.12.2\n\tgithub.com/hashicorp/terraform-plugin-framework v1.18.0\n\tgithub.com/hashicorp/terraform-plugin-go v0.30.0\n\tgithub.com/hashicorp/terraform-plugin-testing v1.13.2\n\tgopkg.in/ini.v1 v1.67.1\n\tgopkg.in/yaml.v3 v3.0.1\n)\n\nrequire (\n\tcel.dev/expr v0.25.1 // indirect\n\tcloud.google.com/go v0.123.0 // indirect\n\tcloud.google.com/go/auth v0.18.2 // indirect\n\tcloud.google.com/go/auth/oauth2adapt v0.2.8 // indirect\n\tcloud.google.com/go/compute/metadata v0.9.0 // indirect\n\tcloud.google.com/go/iam v1.5.3 // indirect\n\tcloud.google.com/go/kms v1.26.0 // indirect\n\tcloud.google.com/go/longrunning v0.8.0 // indirect\n\tcloud.google.com/go/monitoring v1.24.3 // indirect\n\tcloud.google.com/go/storage v1.60.0 // indirect\n\tfilippo.io/age v1.3.1 // indirect\n\tfilippo.io/edwards25519 v1.2.0 // indirect\n\tfilippo.io/hpke v0.4.0 // indirect\n\tgithub.com/Azure/azure-sdk-for-go/sdk/azcore v1.21.0 // indirect\n\tgithub.com/Azure/azure-sdk-for-go/sdk/azidentity v1.13.1 // indirect\n\tgithub.com/Azure/azure-sdk-for-go/sdk/internal v1.11.2 // indirect\n\tgithub.com/Azure/azure-sdk-for-go/sdk/security/keyvault/azkeys v1.4.0 // indirect\n\tgithub.com/Azure/azure-sdk-for-go/sdk/security/keyvault/internal v1.2.0 // indirect\n\tgithub.com/AzureAD/microsoft-authentication-library-for-go v1.6.0 // indirect\n\tgithub.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp v1.31.0 // indirect\n\tgithub.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/metric v0.55.0 // indirect\n\tgithub.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/resourcemapping v0.55.0 // indirect\n\tgithub.com/ProtonMail/go-crypto v1.4.0 // indirect\n\tgithub.com/agext/levenshtein v1.2.3 // indirect\n\tgithub.com/apparentlymart/go-textseg/v15 v15.0.0 // indirect\n\tgithub.com/aws/aws-sdk-go-v2 v1.41.2 // indirect\n\tgithub.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.7.5 // indirect\n\tgithub.com/aws/aws-sdk-go-v2/config v1.32.10 // indirect\n\tgithub.com/aws/aws-sdk-go-v2/credentials v1.19.10 // indirect\n\tgithub.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.18.18 // indirect\n\tgithub.com/aws/aws-sdk-go-v2/feature/s3/manager v1.22.4 // indirect\n\tgithub.com/aws/aws-sdk-go-v2/internal/configsources v1.4.18 // indirect\n\tgithub.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.7.18 // indirect\n\tgithub.com/aws/aws-sdk-go-v2/internal/ini v1.8.4 // indirect\n\tgithub.com/aws/aws-sdk-go-v2/internal/v4a v1.4.18 // indirect\n\tgithub.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.13.5 // indirect\n\tgithub.com/aws/aws-sdk-go-v2/service/internal/checksum v1.9.10 // indirect\n\tgithub.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.13.18 // indirect\n\tgithub.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.19.18 // indirect\n\tgithub.com/aws/aws-sdk-go-v2/service/kms v1.50.1 // indirect\n\tgithub.com/aws/aws-sdk-go-v2/service/s3 v1.96.2 // indirect\n\tgithub.com/aws/aws-sdk-go-v2/service/signin v1.0.6 // indirect\n\tgithub.com/aws/aws-sdk-go-v2/service/sso v1.30.11 // indirect\n\tgithub.com/aws/aws-sdk-go-v2/service/ssooidc v1.35.15 // indirect\n\tgithub.com/aws/aws-sdk-go-v2/service/sts v1.41.7 // indirect\n\tgithub.com/aws/smithy-go v1.24.2 // indirect\n\tgithub.com/blang/semver v3.5.1+incompatible // indirect\n\tgithub.com/cenkalti/backoff/v4 v4.3.0 // indirect\n\tgithub.com/cespare/xxhash/v2 v2.3.0 // indirect\n\tgithub.com/cloudflare/circl v1.6.3 // indirect\n\tgithub.com/cncf/xds/go v0.0.0-20260202195803-dba9d589def2 // indirect\n\tgithub.com/cpuguy83/go-md2man/v2 v2.0.7 // indirect\n\tgithub.com/envoyproxy/go-control-plane/envoy v1.37.0 // indirect\n\tgithub.com/envoyproxy/protoc-gen-validate v1.3.3 // indirect\n\tgithub.com/fatih/color v1.18.0 // indirect\n\tgithub.com/felixge/httpsnoop v1.0.4 // indirect\n\tgithub.com/getsops/gopgagent v0.0.0-20241224165529-7044f28e491e // indirect\n\tgithub.com/go-jose/go-jose/v4 v4.1.3 // indirect\n\tgithub.com/go-logr/logr v1.4.3 // indirect\n\tgithub.com/go-logr/stdr v1.2.2 // indirect\n\tgithub.com/goccy/go-yaml v1.19.2 // indirect\n\tgithub.com/golang-jwt/jwt/v5 v5.3.1 // indirect\n\tgithub.com/golang/protobuf v1.5.4 // indirect\n\tgithub.com/google/go-cmp v0.7.0 // indirect\n\tgithub.com/google/s2a-go v0.1.9 // indirect\n\tgithub.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510 // indirect\n\tgithub.com/google/uuid v1.6.0 // indirect\n\tgithub.com/googleapis/enterprise-certificate-proxy v0.3.12 // indirect\n\tgithub.com/googleapis/gax-go/v2 v2.17.0 // indirect\n\tgithub.com/goware/prefixer v0.0.0-20160118172347-395022866408 // indirect\n\tgithub.com/hashicorp/errwrap v1.1.0 // indirect\n\tgithub.com/hashicorp/go-checkpoint v0.5.0 // indirect\n\tgithub.com/hashicorp/go-cleanhttp v0.5.2 // indirect\n\tgithub.com/hashicorp/go-cty v1.5.0 // indirect\n\tgithub.com/hashicorp/go-hclog v1.6.3 // indirect\n\tgithub.com/hashicorp/go-multierror v1.1.1 // indirect\n\tgithub.com/hashicorp/go-plugin v1.7.0 // indirect\n\tgithub.com/hashicorp/go-retryablehttp v0.7.8 // indirect\n\tgithub.com/hashicorp/go-rootcerts v1.0.2 // indirect\n\tgithub.com/hashicorp/go-secure-stdlib/parseutil v0.2.0 // indirect\n\tgithub.com/hashicorp/go-secure-stdlib/strutil v0.1.2 // indirect\n\tgithub.com/hashicorp/go-sockaddr v1.0.7 // indirect\n\tgithub.com/hashicorp/go-uuid v1.0.3 // indirect\n\tgithub.com/hashicorp/go-version v1.7.0 // indirect\n\tgithub.com/hashicorp/hc-install v0.9.2 // indirect\n\tgithub.com/hashicorp/hcl v1.0.1-vault-7 // indirect\n\tgithub.com/hashicorp/hcl/v2 v2.23.0 // indirect\n\tgithub.com/hashicorp/logutils v1.0.0 // indirect\n\tgithub.com/hashicorp/terraform-exec v0.23.0 // indirect\n\tgithub.com/hashicorp/terraform-json v0.25.0 // indirect\n\tgithub.com/hashicorp/terraform-plugin-log v0.10.0 // indirect\n\tgithub.com/hashicorp/terraform-plugin-sdk/v2 v2.37.0 // indirect\n\tgithub.com/hashicorp/terraform-registry-address v0.4.0 // indirect\n\tgithub.com/hashicorp/terraform-svchost v0.2.0 // indirect\n\tgithub.com/hashicorp/vault/api v1.22.0 // indirect\n\tgithub.com/hashicorp/yamux v0.1.2 // indirect\n\tgithub.com/huaweicloud/huaweicloud-sdk-go-v3 v0.1.187 // indirect\n\tgithub.com/json-iterator/go v1.1.13-0.20220915233716-71ac16282d12 // indirect\n\tgithub.com/kylelemons/godebug v1.1.0 // indirect\n\tgithub.com/lib/pq v1.11.2 // indirect\n\tgithub.com/mattn/go-colorable v0.1.14 // indirect\n\tgithub.com/mattn/go-isatty v0.0.20 // indirect\n\tgithub.com/mitchellh/copystructure v1.2.0 // indirect\n\tgithub.com/mitchellh/go-homedir v1.1.0 // indirect\n\tgithub.com/mitchellh/go-testing-interface v1.14.1 // indirect\n\tgithub.com/mitchellh/go-wordwrap v1.0.1 // indirect\n\tgithub.com/mitchellh/mapstructure v1.5.0 // indirect\n\tgithub.com/mitchellh/reflectwalk v1.0.2 // indirect\n\tgithub.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect\n\tgithub.com/modern-go/reflect2 v1.0.2 // indirect\n\tgithub.com/oklog/run v1.2.0 // indirect\n\tgithub.com/pkg/browser v0.0.0-20240102092130-5ac0b6a4141c // indirect\n\tgithub.com/pkg/errors v0.9.1 // indirect\n\tgithub.com/planetscale/vtprotobuf v0.6.1-0.20240319094008-0393e58bdf10 // indirect\n\tgithub.com/russross/blackfriday/v2 v2.1.0 // indirect\n\tgithub.com/ryanuber/go-glob v1.0.0 // indirect\n\tgithub.com/sirupsen/logrus v1.9.4 // indirect\n\tgithub.com/spiffe/go-spiffe/v2 v2.6.0 // indirect\n\tgithub.com/tjfoc/gmsm v1.4.1 // indirect\n\tgithub.com/urfave/cli v1.22.17 // indirect\n\tgithub.com/vmihailenco/msgpack v4.0.4+incompatible // indirect\n\tgithub.com/vmihailenco/msgpack/v5 v5.4.1 // indirect\n\tgithub.com/vmihailenco/tagparser/v2 v2.0.0 // indirect\n\tgithub.com/zclconf/go-cty v1.16.4 // indirect\n\tgo.mongodb.org/mongo-driver v1.17.9 // indirect\n\tgo.opentelemetry.io/auto/sdk v1.2.1 // indirect\n\tgo.opentelemetry.io/contrib/detectors/gcp v1.40.0 // indirect\n\tgo.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.65.0 // indirect\n\tgo.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.65.0 // indirect\n\tgo.opentelemetry.io/otel v1.40.0 // indirect\n\tgo.opentelemetry.io/otel/metric v1.40.0 // indirect\n\tgo.opentelemetry.io/otel/sdk v1.40.0 // indirect\n\tgo.opentelemetry.io/otel/sdk/metric v1.40.0 // indirect\n\tgo.opentelemetry.io/otel/trace v1.40.0 // indirect\n\tgo.yaml.in/yaml/v3 v3.0.4 // indirect\n\tgolang.org/x/crypto v0.48.0 // indirect\n\tgolang.org/x/mod v0.32.0 // indirect\n\tgolang.org/x/net v0.51.0 // indirect\n\tgolang.org/x/oauth2 v0.35.0 // indirect\n\tgolang.org/x/sync v0.19.0 // indirect\n\tgolang.org/x/sys v0.41.0 // indirect\n\tgolang.org/x/term v0.40.0 // indirect\n\tgolang.org/x/text v0.34.0 // indirect\n\tgolang.org/x/time v0.14.0 // indirect\n\tgolang.org/x/tools v0.41.0 // indirect\n\tgoogle.golang.org/api v0.269.0 // indirect\n\tgoogle.golang.org/appengine v1.6.8 // indirect\n\tgoogle.golang.org/genproto v0.0.0-20260226221140-a57be14db171 // indirect\n\tgoogle.golang.org/genproto/googleapis/api v0.0.0-20260226221140-a57be14db171 // indirect\n\tgoogle.golang.org/genproto/googleapis/rpc v0.0.0-20260226221140-a57be14db171 // indirect\n\tgoogle.golang.org/grpc v1.79.1 // indirect\n\tgoogle.golang.org/protobuf v1.36.11 // indirect\n)\n"
  },
  {
    "path": "go.sum",
    "content": "c2sp.org/CCTV/age v0.0.0-20251208015420-e9274a7bdbfd h1:ZLsPO6WdZ5zatV4UfVpr7oAwLGRZ+sebTUruuM4Ra3M=\nc2sp.org/CCTV/age v0.0.0-20251208015420-e9274a7bdbfd/go.mod h1:SrHC2C7r5GkDk8R+NFVzYy/sdj0Ypg9htaPXQq5Cqeo=\ncel.dev/expr v0.25.1 h1:1KrZg61W6TWSxuNZ37Xy49ps13NUovb66QLprthtwi4=\ncel.dev/expr v0.25.1/go.mod h1:hrXvqGP6G6gyx8UAHSHJ5RGk//1Oj5nXQ2NI02Nrsg4=\ncloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=\ncloud.google.com/go v0.123.0 h1:2NAUJwPR47q+E35uaJeYoNhuNEM9kM8SjgRgdeOJUSE=\ncloud.google.com/go v0.123.0/go.mod h1:xBoMV08QcqUGuPW65Qfm1o9Y4zKZBpGS+7bImXLTAZU=\ncloud.google.com/go/auth v0.18.2 h1:+Nbt5Ev0xEqxlNjd6c+yYUeosQ5TtEUaNcN/3FozlaM=\ncloud.google.com/go/auth v0.18.2/go.mod h1:xD+oY7gcahcu7G2SG2DsBerfFxgPAJz17zz2joOFF3M=\ncloud.google.com/go/auth/oauth2adapt v0.2.8 h1:keo8NaayQZ6wimpNSmW5OPc283g65QNIiLpZnkHRbnc=\ncloud.google.com/go/auth/oauth2adapt v0.2.8/go.mod h1:XQ9y31RkqZCcwJWNSx2Xvric3RrU88hAYYbjDWYDL+c=\ncloud.google.com/go/compute/metadata v0.9.0 h1:pDUj4QMoPejqq20dK0Pg2N4yG9zIkYGdBtwLoEkH9Zs=\ncloud.google.com/go/compute/metadata v0.9.0/go.mod h1:E0bWwX5wTnLPedCKqk3pJmVgCBSM6qQI1yTBdEb3C10=\ncloud.google.com/go/iam v1.5.3 h1:+vMINPiDF2ognBJ97ABAYYwRgsaqxPbQDlMnbHMjolc=\ncloud.google.com/go/iam v1.5.3/go.mod h1:MR3v9oLkZCTlaqljW6Eb2d3HGDGK5/bDv93jhfISFvU=\ncloud.google.com/go/kms v1.26.0 h1:cK9mN2cf+9V63D3H1f6koxTatWy39aTI/hCjz1I+adU=\ncloud.google.com/go/kms v1.26.0/go.mod h1:pHKOdFJm63hxBsiPkYtowZPltu9dW0MWvBa6IA4HM58=\ncloud.google.com/go/logging v1.13.2 h1:qqlHCBvieJT9Cdq4QqYx1KPadCQ2noD4FK02eNqHAjA=\ncloud.google.com/go/logging v1.13.2/go.mod h1:zaybliM3yun1J8mU2dVQ1/qDzjbOqEijZCn6hSBtKak=\ncloud.google.com/go/longrunning v0.8.0 h1:LiKK77J3bx5gDLi4SMViHixjD2ohlkwBi+mKA7EhfW8=\ncloud.google.com/go/longrunning v0.8.0/go.mod h1:UmErU2Onzi+fKDg2gR7dusz11Pe26aknR4kHmJJqIfk=\ncloud.google.com/go/monitoring v1.24.3 h1:dde+gMNc0UhPZD1Azu6at2e79bfdztVDS5lvhOdsgaE=\ncloud.google.com/go/monitoring v1.24.3/go.mod h1:nYP6W0tm3N9H/bOw8am7t62YTzZY+zUeQ+Bi6+2eonI=\ncloud.google.com/go/storage v1.60.0 h1:oBfZrSOCimggVNz9Y/bXY35uUcts7OViubeddTTVzQ8=\ncloud.google.com/go/storage v1.60.0/go.mod h1:q+5196hXfejkctrnx+VYU8RKQr/L3c0cBIlrjmiAKE0=\ncloud.google.com/go/trace v1.11.7 h1:kDNDX8JkaAG3R2nq1lIdkb7FCSi1rCmsEtKVsty7p+U=\ncloud.google.com/go/trace v1.11.7/go.mod h1:TNn9d5V3fQVf6s4SCveVMIBS2LJUqo73GACmq/Tky0s=\ndario.cat/mergo v1.0.1 h1:Ra4+bf83h2ztPIQYNP99R6m+Y7KfnARDfID+a+vLl4s=\ndario.cat/mergo v1.0.1/go.mod h1:uNxQE+84aUszobStD9th8a29P2fMDhsBdgRYvZOxGmk=\nfilippo.io/age v1.3.1 h1:hbzdQOJkuaMEpRCLSN1/C5DX74RPcNCk6oqhKMXmZi0=\nfilippo.io/age v1.3.1/go.mod h1:EZorDTYUxt836i3zdori5IJX/v2Lj6kWFU0cfh6C0D4=\nfilippo.io/edwards25519 v1.2.0 h1:crnVqOiS4jqYleHd9vaKZ+HKtHfllngJIiOpNpoJsjo=\nfilippo.io/edwards25519 v1.2.0/go.mod h1:xzAOLCNug/yB62zG1bQ8uziwrIqIuxhctzJT18Q77mc=\nfilippo.io/hpke v0.4.0 h1:p575VVQ6ted4pL+it6M00V/f2qTZITO0zgmdKCkd5+A=\nfilippo.io/hpke v0.4.0/go.mod h1:EmAN849/P3qdeK+PCMkDpDm83vRHM5cDipBJ8xbQLVY=\ngithub.com/Azure/azure-sdk-for-go/sdk/azcore v1.21.0 h1:fou+2+WFTib47nS+nz/ozhEBnvU96bKHy6LjRsY4E28=\ngithub.com/Azure/azure-sdk-for-go/sdk/azcore v1.21.0/go.mod h1:t76Ruy8AHvUAC8GfMWJMa0ElSbuIcO03NLpynfbgsPA=\ngithub.com/Azure/azure-sdk-for-go/sdk/azidentity v1.13.1 h1:Hk5QBxZQC1jb2Fwj6mpzme37xbCDdNTxU7O9eb5+LB4=\ngithub.com/Azure/azure-sdk-for-go/sdk/azidentity v1.13.1/go.mod h1:IYus9qsFobWIc2YVwe/WPjcnyCkPKtnHAqUYeebc8z0=\ngithub.com/Azure/azure-sdk-for-go/sdk/azidentity/cache v0.3.2 h1:yz1bePFlP5Vws5+8ez6T3HWXPmwOK7Yvq8QxDBD3SKY=\ngithub.com/Azure/azure-sdk-for-go/sdk/azidentity/cache v0.3.2/go.mod h1:Pa9ZNPuoNu/GztvBSKk9J1cDJW6vk/n0zLtV4mgd8N8=\ngithub.com/Azure/azure-sdk-for-go/sdk/internal v1.11.2 h1:9iefClla7iYpfYWdzPCRDozdmndjTm8DXdpCzPajMgA=\ngithub.com/Azure/azure-sdk-for-go/sdk/internal v1.11.2/go.mod h1:XtLgD3ZD34DAaVIIAyG3objl5DynM3CQ/vMcbBNJZGI=\ngithub.com/Azure/azure-sdk-for-go/sdk/security/keyvault/azkeys v1.4.0 h1:E4MgwLBGeVB5f2MdcIVD3ELVAWpr+WD6MUe1i+tM/PA=\ngithub.com/Azure/azure-sdk-for-go/sdk/security/keyvault/azkeys v1.4.0/go.mod h1:Y2b/1clN4zsAoUd/pgNAQHjLDnTis/6ROkUfyob6psM=\ngithub.com/Azure/azure-sdk-for-go/sdk/security/keyvault/internal v1.2.0 h1:nCYfgcSyHZXJI8J0IWE5MsCGlb2xp9fJiXyxWgmOFg4=\ngithub.com/Azure/azure-sdk-for-go/sdk/security/keyvault/internal v1.2.0/go.mod h1:ucUjca2JtSZboY8IoUqyQyuuXvwbMBVwFOm0vdQPNhA=\ngithub.com/Azure/go-ansiterm v0.0.0-20250102033503-faa5f7b0171c h1:udKWzYgxTojEKWjV8V+WSxDXJ4NFATAsZjh8iIbsQIg=\ngithub.com/Azure/go-ansiterm v0.0.0-20250102033503-faa5f7b0171c/go.mod h1:xomTg63KZ2rFqZQzSB4Vz2SUXa1BpHTVz9L5PTmPC4E=\ngithub.com/AzureAD/microsoft-authentication-extensions-for-go/cache v0.1.1 h1:WJTmL004Abzc5wDB5VtZG2PJk5ndYDgVacGqfirKxjM=\ngithub.com/AzureAD/microsoft-authentication-extensions-for-go/cache v0.1.1/go.mod h1:tCcJZ0uHAmvjsVYzEFivsRTN00oz5BEsRgQHu5JZ9WE=\ngithub.com/AzureAD/microsoft-authentication-library-for-go v1.6.0 h1:XRzhVemXdgvJqCH0sFfrBUTnUJSBrBf7++ypk+twtRs=\ngithub.com/AzureAD/microsoft-authentication-library-for-go v1.6.0/go.mod h1:HKpQxkWaGLJ+D/5H8QRpyQXA1eKjxkFlOMwck5+33Jk=\ngithub.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=\ngithub.com/BurntSushi/toml v1.5.0/go.mod h1:ukJfTF/6rtPPRCnwkur4qwRxa8vTRFBF0uk2lLoLwho=\ngithub.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp v1.31.0 h1:DHa2U07rk8syqvCge0QIGMCE1WxGj9njT44GH7zNJLQ=\ngithub.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp v1.31.0/go.mod h1:P4WPRUkOhJC13W//jWpyfJNDAIpvRbAUIYLX/4jtlE0=\ngithub.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/metric v0.55.0 h1:UnDZ/zFfG1JhH/DqxIZYU/1CUAlTUScoXD/LcM2Ykk8=\ngithub.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/metric v0.55.0/go.mod h1:IA1C1U7jO/ENqm/vhi7V9YYpBsp+IMyqNrEN94N7tVc=\ngithub.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/cloudmock v0.55.0 h1:7t/qx5Ost0s0wbA/VDrByOooURhp+ikYwv20i9Y07TQ=\ngithub.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/cloudmock v0.55.0/go.mod h1:vB2GH9GAYYJTO3mEn8oYwzEdhlayZIdQz6zdzgUIRvA=\ngithub.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/resourcemapping v0.55.0 h1:0s6TxfCu2KHkkZPnBfsQ2y5qia0jl3MMrmBhu3nCOYk=\ngithub.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/resourcemapping v0.55.0/go.mod h1:Mf6O40IAyB9zR/1J8nGDDPirZQQPbYJni8Yisy7NTMc=\ngithub.com/Microsoft/go-winio v0.6.2 h1:F2VQgta7ecxGYO8k3ZZz3RS8fVIXVxONVUPlNERoyfY=\ngithub.com/Microsoft/go-winio v0.6.2/go.mod h1:yd8OoFMLzJbo9gZq8j5qaps8bJ9aShtEA8Ipt1oGCvU=\ngithub.com/Nvveen/Gotty v0.0.0-20120604004816-cd527374f1e5 h1:TngWCqHvy9oXAN6lEVMRuU21PR1EtLVZJmdB18Gu3Rw=\ngithub.com/Nvveen/Gotty v0.0.0-20120604004816-cd527374f1e5/go.mod h1:lmUJ/7eu/Q8D7ML55dXQrVaamCz2vxCfdQBasLZfHKk=\ngithub.com/ProtonMail/go-crypto v1.4.0 h1:Zq/pbM3F5DFgJiMouxEdSVY44MVoQNEKp5d5QxIQceQ=\ngithub.com/ProtonMail/go-crypto v1.4.0/go.mod h1:e1OaTyu5SYVrO9gKOEhTc+5UcXtTUa+P3uLudwcgPqo=\ngithub.com/agext/levenshtein v1.2.3 h1:YB2fHEn0UJagG8T1rrWknE3ZQzWM06O8AMAatNn7lmo=\ngithub.com/agext/levenshtein v1.2.3/go.mod h1:JEDfjyjHDjOF/1e4FlBE/PkbqA9OfWu2ki2W0IB5558=\ngithub.com/apparentlymart/go-textseg/v12 v12.0.0/go.mod h1:S/4uRK2UtaQttw1GenVJEynmyUenKwP++x/+DdGV/Ec=\ngithub.com/apparentlymart/go-textseg/v15 v15.0.0 h1:uYvfpb3DyLSCGWnctWKGj857c6ew1u1fNQOlOtuGxQY=\ngithub.com/apparentlymart/go-textseg/v15 v15.0.0/go.mod h1:K8XmNZdhEBkdlyDdvbmmsvpAG721bKi0joRfFdHIWJ4=\ngithub.com/aws/aws-sdk-go-v2 v1.41.2 h1:LuT2rzqNQsauaGkPK/7813XxcZ3o3yePY0Iy891T2ls=\ngithub.com/aws/aws-sdk-go-v2 v1.41.2/go.mod h1:IvvlAZQXvTXznUPfRVfryiG1fbzE2NGK6m9u39YQ+S4=\ngithub.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.7.5 h1:zWFmPmgw4sveAYi1mRqG+E/g0461cJ5M4bJ8/nc6d3Q=\ngithub.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.7.5/go.mod h1:nVUlMLVV8ycXSb7mSkcNu9e3v/1TJq2RTlrPwhYWr5c=\ngithub.com/aws/aws-sdk-go-v2/config v1.32.10 h1:9DMthfO6XWZYLfzZglAgW5Fyou2nRI5CuV44sTedKBI=\ngithub.com/aws/aws-sdk-go-v2/config v1.32.10/go.mod h1:2rUIOnA2JaiqYmSKYmRJlcMWy6qTj1vuRFscppSBMcw=\ngithub.com/aws/aws-sdk-go-v2/credentials v1.19.10 h1:EEhmEUFCE1Yhl7vDhNOI5OCL/iKMdkkYFTRpZXNw7m8=\ngithub.com/aws/aws-sdk-go-v2/credentials v1.19.10/go.mod h1:RnnlFCAlxQCkN2Q379B67USkBMu1PipEEiibzYN5UTE=\ngithub.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.18.18 h1:Ii4s+Sq3yDfaMLpjrJsqD6SmG/Wq/P5L/hw2qa78UAY=\ngithub.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.18.18/go.mod h1:6x81qnY++ovptLE6nWQeWrpXxbnlIex+4H4eYYGcqfc=\ngithub.com/aws/aws-sdk-go-v2/feature/s3/manager v1.22.4 h1:s8fbFscel8NLpnz+ggR7ncW+lqhXIkmyHbgbPeT8yyM=\ngithub.com/aws/aws-sdk-go-v2/feature/s3/manager v1.22.4/go.mod h1:BazuWe/q/mMJ/NrSJBTbNBJiLq6u8reodbEZ4giRms4=\ngithub.com/aws/aws-sdk-go-v2/internal/configsources v1.4.18 h1:F43zk1vemYIqPAwhjTjYIz0irU2EY7sOb/F5eJ3HuyM=\ngithub.com/aws/aws-sdk-go-v2/internal/configsources v1.4.18/go.mod h1:w1jdlZXrGKaJcNoL+Nnrj+k5wlpGXqnNrKoP22HvAug=\ngithub.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.7.18 h1:xCeWVjj0ki0l3nruoyP2slHsGArMxeiiaoPN5QZH6YQ=\ngithub.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.7.18/go.mod h1:r/eLGuGCBw6l36ZRWiw6PaZwPXb6YOj+i/7MizNl5/k=\ngithub.com/aws/aws-sdk-go-v2/internal/ini v1.8.4 h1:WKuaxf++XKWlHWu9ECbMlha8WOEGm0OUEZqm4K/Gcfk=\ngithub.com/aws/aws-sdk-go-v2/internal/ini v1.8.4/go.mod h1:ZWy7j6v1vWGmPReu0iSGvRiise4YI5SkR3OHKTZ6Wuc=\ngithub.com/aws/aws-sdk-go-v2/internal/v4a v1.4.18 h1:eZioDaZGJ0tMM4gzmkNIO2aAoQd+je7Ug7TkvAzlmkU=\ngithub.com/aws/aws-sdk-go-v2/internal/v4a v1.4.18/go.mod h1:CCXwUKAJdoWr6/NcxZ+zsiPr6oH/Q5aTooRGYieAyj4=\ngithub.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.13.5 h1:CeY9LUdur+Dxoeldqoun6y4WtJ3RQtzk0JMP2gfUay0=\ngithub.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.13.5/go.mod h1:AZLZf2fMaahW5s/wMRciu1sYbdsikT/UHwbUjOdEVTc=\ngithub.com/aws/aws-sdk-go-v2/service/internal/checksum v1.9.10 h1:fJvQ5mIBVfKtiyx0AHY6HeWcRX5LGANLpq8SVR+Uazs=\ngithub.com/aws/aws-sdk-go-v2/service/internal/checksum v1.9.10/go.mod h1:Kzm5e6OmNH8VMkgK9t+ry5jEih4Y8whqs+1hrkxim1I=\ngithub.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.13.18 h1:LTRCYFlnnKFlKsyIQxKhJuDuA3ZkrDQMRYm6rXiHlLY=\ngithub.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.13.18/go.mod h1:XhwkgGG6bHSd00nO/mexWTcTjgd6PjuvWQMqSn2UaEk=\ngithub.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.19.18 h1:/A/xDuZAVD2BpsS2fftFRo/NoEKQJ8YTnJDEHBy2Gtg=\ngithub.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.19.18/go.mod h1:hWe9b4f+djUQGmyiGEeOnZv69dtMSgpDRIvNMvuvzvY=\ngithub.com/aws/aws-sdk-go-v2/service/kms v1.50.1 h1:wb/PYYm3wlcqGzw7Ls4GD3X5+seDDoNdVYIB6I/V87E=\ngithub.com/aws/aws-sdk-go-v2/service/kms v1.50.1/go.mod h1:xvHowJ6J9CuaFE04S8fitWQXytf4sHz3DTPGhw9FtmU=\ngithub.com/aws/aws-sdk-go-v2/service/s3 v1.96.2 h1:M1A9AjcFwlxTLuf0Faj88L8Iqw0n/AJHjpZTQzMMsSc=\ngithub.com/aws/aws-sdk-go-v2/service/s3 v1.96.2/go.mod h1:KsdTV6Q9WKUZm2mNJnUFmIoXfZux91M3sr/a4REX8e0=\ngithub.com/aws/aws-sdk-go-v2/service/signin v1.0.6 h1:MzORe+J94I+hYu2a6XmV5yC9huoTv8NRcCrUNedDypQ=\ngithub.com/aws/aws-sdk-go-v2/service/signin v1.0.6/go.mod h1:hXzcHLARD7GeWnifd8j9RWqtfIgxj4/cAtIVIK7hg8g=\ngithub.com/aws/aws-sdk-go-v2/service/sso v1.30.11 h1:7oGD8KPfBOJGXiCoRKrrrQkbvCp8N++u36hrLMPey6o=\ngithub.com/aws/aws-sdk-go-v2/service/sso v1.30.11/go.mod h1:0DO9B5EUJQlIDif+XJRWCljZRKsAFKh3gpFz7UnDtOo=\ngithub.com/aws/aws-sdk-go-v2/service/ssooidc v1.35.15 h1:edCcNp9eGIUDUCrzoCu1jWAXLGFIizeqkdkKgRlJwWc=\ngithub.com/aws/aws-sdk-go-v2/service/ssooidc v1.35.15/go.mod h1:lyRQKED9xWfgkYC/wmmYfv7iVIM68Z5OQ88ZdcV1QbU=\ngithub.com/aws/aws-sdk-go-v2/service/sts v1.41.7 h1:NITQpgo9A5NrDZ57uOWj+abvXSb83BbyggcUBVksN7c=\ngithub.com/aws/aws-sdk-go-v2/service/sts v1.41.7/go.mod h1:sks5UWBhEuWYDPdwlnRFn1w7xWdH29Jcpe+/PJQefEs=\ngithub.com/aws/smithy-go v1.24.2 h1:FzA3bu/nt/vDvmnkg+R8Xl46gmzEDam6mZ1hzmwXFng=\ngithub.com/aws/smithy-go v1.24.2/go.mod h1:YE2RhdIuDbA5E5bTdciG9KrW3+TiEONeUWCqxX9i1Fc=\ngithub.com/blang/semver v3.5.1+incompatible h1:cQNTCjp13qL8KC3Nbxr/y2Bqb63oX6wdnnjpJbkM4JQ=\ngithub.com/blang/semver v3.5.1+incompatible/go.mod h1:kRBLl5iJ+tD4TcOOxsy/0fnwebNt5EWlYSAyrTnjyyk=\ngithub.com/bufbuild/protocompile v0.14.1 h1:iA73zAf/fyljNjQKwYzUHD6AD4R8KMasmwa/FBatYVw=\ngithub.com/bufbuild/protocompile v0.14.1/go.mod h1:ppVdAIhbr2H8asPk6k4pY7t9zB1OU5DoEw9xY/FUi1c=\ngithub.com/cenkalti/backoff/v4 v4.3.0 h1:MyRJ/UdXutAwSAT+s3wNd7MfTIcy71VQueUuFK343L8=\ngithub.com/cenkalti/backoff/v4 v4.3.0/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE=\ngithub.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=\ngithub.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs=\ngithub.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=\ngithub.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw=\ngithub.com/cloudflare/circl v1.6.3 h1:9GPOhQGF9MCYUeXyMYlqTR6a5gTrgR/fBLXvUgtVcg8=\ngithub.com/cloudflare/circl v1.6.3/go.mod h1:2eXP6Qfat4O/Yhh8BznvKnJ+uzEoTQ6jVKJRn81BiS4=\ngithub.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc=\ngithub.com/cncf/xds/go v0.0.0-20260202195803-dba9d589def2 h1:aBangftG7EVZoUb69Os8IaYg++6uMOdKK83QtkkvJik=\ngithub.com/cncf/xds/go v0.0.0-20260202195803-dba9d589def2/go.mod h1:qwXFYgsP6T7XnJtbKlf1HP8AjxZZyzxMmc+Lq5GjlU4=\ngithub.com/containerd/continuity v0.4.5 h1:ZRoN1sXq9u7V6QoHMcVWGhOwDFqZ4B9i5H6un1Wh0x4=\ngithub.com/containerd/continuity v0.4.5/go.mod h1:/lNJvtJKUQStBzpVQ1+rasXO1LAWtUQssk28EZvJ3nE=\ngithub.com/cpuguy83/go-md2man/v2 v2.0.7 h1:zbFlGlXEAKlwXpmvle3d8Oe3YnkKIK4xSRTd3sHPnBo=\ngithub.com/cpuguy83/go-md2man/v2 v2.0.7/go.mod h1:oOW0eioCTA6cOiMLiUPZOpcVxMig6NIQQ7OS05n1F4g=\ngithub.com/cyphar/filepath-securejoin v0.4.1 h1:JyxxyPEaktOD+GAnqIqTf9A8tHyAG22rowi7HkoSU1s=\ngithub.com/cyphar/filepath-securejoin v0.4.1/go.mod h1:Sdj7gXlvMcPZsbhwhQ33GguGLDGQL7h7bg04C/+u9jI=\ngithub.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=\ngithub.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=\ngithub.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM=\ngithub.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=\ngithub.com/docker/cli v28.0.4+incompatible h1:pBJSJeNd9QeIWPjRcV91RVJihd/TXB77q1ef64XEu4A=\ngithub.com/docker/cli v28.0.4+incompatible/go.mod h1:JLrzqnKDaYBop7H2jaqPtU4hHvMKP+vjCwu2uszcLI8=\ngithub.com/docker/cli v29.2.0+incompatible h1:9oBd9+YM7rxjZLfyMGxjraKBKE4/nVyvVfN4qNl9XRM=\ngithub.com/docker/docker v28.0.4+incompatible h1:JNNkBctYKurkw6FrHfKqY0nKIDf5nrbxjVBtS+cdcok=\ngithub.com/docker/docker v28.0.4+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk=\ngithub.com/docker/go-connections v0.5.0 h1:USnMq7hx7gwdVZq1L49hLXaFtUdTADjXGp+uj1Br63c=\ngithub.com/docker/go-connections v0.5.0/go.mod h1:ov60Kzw0kKElRwhNs9UlUHAE/F9Fe6GLaXnqyDdmEXc=\ngithub.com/docker/go-connections v0.6.0 h1:LlMG9azAe1TqfR7sO+NJttz1gy6KO7VJBh+pMmjSD94=\ngithub.com/docker/go-units v0.5.0 h1:69rxXcBk27SvSaaxTtLh/8llcHD8vYHT7WSdRZ/jvr4=\ngithub.com/docker/go-units v0.5.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk=\ngithub.com/emirpasic/gods v1.18.1 h1:FXtiHYKDGKCW2KzwZKx0iC0PQmdlorYgdFG9jPXJ1Bc=\ngithub.com/emirpasic/gods v1.18.1/go.mod h1:8tpGGwCnJ5H4r6BWwaV6OrWmMoPhUl5jm/FMNAnJvWQ=\ngithub.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=\ngithub.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98=\ngithub.com/envoyproxy/go-control-plane v0.14.0 h1:hbG2kr4RuFj222B6+7T83thSPqLjwBIfQawTkC++2HA=\ngithub.com/envoyproxy/go-control-plane v0.14.0/go.mod h1:NcS5X47pLl/hfqxU70yPwL9ZMkUlwlKxtAohpi2wBEU=\ngithub.com/envoyproxy/go-control-plane/envoy v1.37.0 h1:u3riX6BoYRfF4Dr7dwSOroNfdSbEPe9Yyl09/B6wBrQ=\ngithub.com/envoyproxy/go-control-plane/envoy v1.37.0/go.mod h1:DReE9MMrmecPy+YvQOAOHNYMALuowAnbjjEMkkWOi6A=\ngithub.com/envoyproxy/go-control-plane/ratelimit v0.1.0 h1:/G9QYbddjL25KvtKTv3an9lx6VBE2cnb8wp1vEGNYGI=\ngithub.com/envoyproxy/go-control-plane/ratelimit v0.1.0/go.mod h1:Wk+tMFAFbCXaJPzVVHnPgRKdUdwW/KdbRt94AzgRee4=\ngithub.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c=\ngithub.com/envoyproxy/protoc-gen-validate v1.3.3 h1:MVQghNeW+LZcmXe7SY1V36Z+WFMDjpqGAGacLe2T0ds=\ngithub.com/envoyproxy/protoc-gen-validate v1.3.3/go.mod h1:TsndJ/ngyIdQRhMcVVGDDHINPLWB7C82oDArY51KfB0=\ngithub.com/fatih/color v1.10.0/go.mod h1:ELkj/draVOlAH/xkhN6mQ50Qd0MPOk5AAr3maGEBuJM=\ngithub.com/fatih/color v1.13.0/go.mod h1:kLAiJbzzSOZDVNGyDpeOxJ47H46qBXwg5ILebYFFOfk=\ngithub.com/fatih/color v1.18.0 h1:S8gINlzdQ840/4pfAwic/ZE0djQEH3wM94VfqLTZcOM=\ngithub.com/fatih/color v1.18.0/go.mod h1:4FelSpRwEGDpQ12mAdzqdOukCy4u8WUtOY6lkT/6HfU=\ngithub.com/felixge/httpsnoop v1.0.4 h1:NFTV2Zj1bL4mc9sqWACXbQFVBBg2W3GPvqp8/ESS2Wg=\ngithub.com/felixge/httpsnoop v1.0.4/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U=\ngithub.com/getsops/gopgagent v0.0.0-20241224165529-7044f28e491e h1:y/1nzrdF+RPds4lfoEpNhjfmzlgZtPqyO3jMzrqDQws=\ngithub.com/getsops/gopgagent v0.0.0-20241224165529-7044f28e491e/go.mod h1:awFzISqLJoZLm+i9QQ4SgMNHDqljH6jWV0B36V5MrUM=\ngithub.com/getsops/sops/v3 v3.12.1 h1:DZzLNJx6EH4SZvMjI1Y814WIcOQNUtOP3WgDsHNqQTU=\ngithub.com/getsops/sops/v3 v3.12.1/go.mod h1:Bs/geuL5shRiXi194TQaGFiLvzVpA6U8tTYRd84qdvM=\ngithub.com/getsops/sops/v3 v3.12.2 h1:4ctEFDNpAAubW8EMICytX8+BFDBSFJkrKvQ9ahSs0a4=\ngithub.com/getsops/sops/v3 v3.12.2/go.mod h1:BACmHQl0J8nPNXBDSJKRT5oUdZx36CkbohGDj9+bD9M=\ngithub.com/go-git/gcfg v1.5.1-0.20230307220236-3a3c6141e376 h1:+zs/tPmkDkHx3U66DAb0lQFJrpS6731Oaa12ikc+DiI=\ngithub.com/go-git/gcfg v1.5.1-0.20230307220236-3a3c6141e376/go.mod h1:an3vInlBmSxCcxctByoQdvwPiA7DTK7jaaFDBTtu0ic=\ngithub.com/go-git/go-billy/v5 v5.6.2 h1:6Q86EsPXMa7c3YZ3aLAQsMA0VlWmy43r6FHqa/UNbRM=\ngithub.com/go-git/go-billy/v5 v5.6.2/go.mod h1:rcFC2rAsp/erv7CMz9GczHcuD0D32fWzH+MJAU+jaUU=\ngithub.com/go-git/go-git/v5 v5.14.0 h1:/MD3lCrGjCen5WfEAzKg00MJJffKhC8gzS80ycmCi60=\ngithub.com/go-git/go-git/v5 v5.14.0/go.mod h1:Z5Xhoia5PcWA3NF8vRLURn9E5FRhSl7dGj9ItW3Wk5k=\ngithub.com/go-jose/go-jose/v4 v4.1.3 h1:CVLmWDhDVRa6Mi/IgCgaopNosCaHz7zrMeF9MlZRkrs=\ngithub.com/go-jose/go-jose/v4 v4.1.3/go.mod h1:x4oUasVrzR7071A4TnHLGSPpNOm2a21K9Kf04k1rs08=\ngithub.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A=\ngithub.com/go-logr/logr v1.4.3 h1:CjnDlHq8ikf6E492q6eKboGOC0T8CDaOvkHCIg8idEI=\ngithub.com/go-logr/logr v1.4.3/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY=\ngithub.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag=\ngithub.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE=\ngithub.com/go-playground/assert/v2 v2.0.1/go.mod h1:VDjEfimB/XKnb+ZQfWdccd7VUvScMdVu0Titje2rxJ4=\ngithub.com/go-playground/locales v0.13.0/go.mod h1:taPMhCMXrRLJO55olJkUXHZBHCxTMfnGwq/HNwmWNS8=\ngithub.com/go-playground/universal-translator v0.17.0/go.mod h1:UkSxE5sNxxRwHyU+Scu5vgOQjsIJAF8j9muTVoKLVtA=\ngithub.com/go-playground/validator/v10 v10.4.1/go.mod h1:nlOn6nFhuKACm19sB/8EGNn9GlaMV7XkbRSipzJ0Ii4=\ngithub.com/go-test/deep v1.1.1 h1:0r/53hagsehfO4bzD2Pgr/+RgHqhmf+k1Bpse2cTu1U=\ngithub.com/go-test/deep v1.1.1/go.mod h1:5C2ZWiW0ErCdrYzpqxLbTX7MG14M9iiw8DgHncVwcsE=\ngithub.com/go-viper/mapstructure/v2 v2.4.0 h1:EBsztssimR/CONLSZZ04E8qAkxNYq4Qp9LvH92wZUgs=\ngithub.com/go-viper/mapstructure/v2 v2.4.0/go.mod h1:oJDH3BJKyqBA2TXFhDsKDGDTlndYOZ6rGS0BRZIxGhM=\ngithub.com/goccy/go-yaml v1.9.8/go.mod h1:JubOolP3gh0HpiBc4BLRD4YmjEjHAmIIB2aaXKkTfoE=\ngithub.com/goccy/go-yaml v1.19.2 h1:PmFC1S6h8ljIz6gMRBopkjP1TVT7xuwrButHID66PoM=\ngithub.com/goccy/go-yaml v1.19.2/go.mod h1:XBurs7gK8ATbW4ZPGKgcbrY1Br56PdM69F7LkFRi1kA=\ngithub.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q=\ngithub.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q=\ngithub.com/golang-jwt/jwt/v5 v5.3.1 h1:kYf81DTWFe7t+1VvL7eS+jKFVWaUnK9cB1qbwn63YCY=\ngithub.com/golang-jwt/jwt/v5 v5.3.1/go.mod h1:fxCRLWMO43lRc8nhHWY6LGqRcf+1gQWArsqaEUEa5bE=\ngithub.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q=\ngithub.com/golang/groupcache v0.0.0-20241129210726-2c02b8208cf8 h1:f+oWsMOmNPc8JmEHVZIycC7hBoQxHH9pNKQORJNozsQ=\ngithub.com/golang/groupcache v0.0.0-20241129210726-2c02b8208cf8/go.mod h1:wcDNUvekVysuuOpQKo3191zZyTpiI6se1N1ULghS0sw=\ngithub.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A=\ngithub.com/golang/protobuf v1.1.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=\ngithub.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=\ngithub.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=\ngithub.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw=\ngithub.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8=\ngithub.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA=\ngithub.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs=\ngithub.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w=\ngithub.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0=\ngithub.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI=\ngithub.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk=\ngithub.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY=\ngithub.com/golang/protobuf v1.5.4 h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek=\ngithub.com/golang/protobuf v1.5.4/go.mod h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6rSs7xps=\ngithub.com/golang/snappy v0.0.1/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=\ngithub.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M=\ngithub.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=\ngithub.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=\ngithub.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=\ngithub.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=\ngithub.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=\ngithub.com/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8=\ngithub.com/google/go-cmp v0.7.0/go.mod h1:pXiqmnSA92OHEEa9HXL2W4E7lf9JzCmGVUdgjX3N/iU=\ngithub.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=\ngithub.com/google/martian/v3 v3.3.3 h1:DIhPTQrbPkgs2yJYdXU/eNACCG5DVQjySNRNlflZ9Fc=\ngithub.com/google/martian/v3 v3.3.3/go.mod h1:iEPrYcgCF7jA9OtScMFQyAlZZ4YXTKEtJ1E6RWzmBA0=\ngithub.com/google/s2a-go v0.1.9 h1:LGD7gtMgezd8a/Xak7mEWL0PjoTQFvpRudN895yqKW0=\ngithub.com/google/s2a-go v0.1.9/go.mod h1:YA0Ei2ZQL3acow2O62kdp9UlnvMmU7kA6Eutn0dXayM=\ngithub.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510 h1:El6M4kTTCOh6aBiKaUGG7oYTSPP8MxqL4YI3kZKwcP4=\ngithub.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510/go.mod h1:pupxD2MaaD3pAXIBCelhxNneeOaAeabZDe5s4K6zSpQ=\ngithub.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0=\ngithub.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=\ngithub.com/googleapis/enterprise-certificate-proxy v0.3.12 h1:Fg+zsqzYEs1ZnvmcztTYxhgCBsx3eEhEwQ1W/lHq/sQ=\ngithub.com/googleapis/enterprise-certificate-proxy v0.3.12/go.mod h1:vqVt9yG9480NtzREnTlmGSBmFrA+bzb0yl0TxoBQXOg=\ngithub.com/googleapis/gax-go/v2 v2.17.0 h1:RksgfBpxqff0EZkDWYuz9q/uWsTVz+kf43LsZ1J6SMc=\ngithub.com/googleapis/gax-go/v2 v2.17.0/go.mod h1:mzaqghpQp4JDh3HvADwrat+6M3MOIDp5YKHhb9PAgDY=\ngithub.com/goware/prefixer v0.0.0-20160118172347-395022866408 h1:Y9iQJfEqnN3/Nce9cOegemcy/9Ai5k3huT6E80F3zaw=\ngithub.com/goware/prefixer v0.0.0-20160118172347-395022866408/go.mod h1:PE1ycukgRPJ7bJ9a1fdfQ9j8i/cEcRAoLZzbxYpNB/s=\ngithub.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4=\ngithub.com/hashicorp/errwrap v1.1.0 h1:OxrOeh75EUXMY8TBjag2fzXGZ40LB6IKw45YeGUDY2I=\ngithub.com/hashicorp/errwrap v1.1.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4=\ngithub.com/hashicorp/go-checkpoint v0.5.0 h1:MFYpPZCnQqQTE18jFwSII6eUQrD/oxMFp3mlgcqk5mU=\ngithub.com/hashicorp/go-checkpoint v0.5.0/go.mod h1:7nfLNL10NsxqO4iWuW6tWW0HjZuDrwkBuEQsVcpCOgg=\ngithub.com/hashicorp/go-cleanhttp v0.5.0/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80=\ngithub.com/hashicorp/go-cleanhttp v0.5.2 h1:035FKYIWjmULyFRBKPs8TBQoi0x6d9G4xc9neXJWAZQ=\ngithub.com/hashicorp/go-cleanhttp v0.5.2/go.mod h1:kO/YDlP8L1346E6Sodw+PrpBSV4/SoxCXGY6BqNFT48=\ngithub.com/hashicorp/go-cty v1.5.0 h1:EkQ/v+dDNUqnuVpmS5fPqyY71NXVgT5gf32+57xY8g0=\ngithub.com/hashicorp/go-cty v1.5.0/go.mod h1:lFUCG5kd8exDobgSfyj4ONE/dc822kiYMguVKdHGMLM=\ngithub.com/hashicorp/go-hclog v1.6.3 h1:Qr2kF+eVWjTiYmU7Y31tYlP1h0q/X3Nl3tPGdaB11/k=\ngithub.com/hashicorp/go-hclog v1.6.3/go.mod h1:W4Qnvbt70Wk/zYJryRzDRU/4r0kIg0PVHBcfoyhpF5M=\ngithub.com/hashicorp/go-multierror v1.1.1 h1:H5DkEtf6CXdFp0N0Em5UCwQpXMWke8IA0+lD48awMYo=\ngithub.com/hashicorp/go-multierror v1.1.1/go.mod h1:iw975J/qwKPdAO1clOe2L8331t/9/fmwbPZ6JB6eMoM=\ngithub.com/hashicorp/go-plugin v1.7.0 h1:YghfQH/0QmPNc/AZMTFE3ac8fipZyZECHdDPshfk+mA=\ngithub.com/hashicorp/go-plugin v1.7.0/go.mod h1:BExt6KEaIYx804z8k4gRzRLEvxKVb+kn0NMcihqOqb8=\ngithub.com/hashicorp/go-retryablehttp v0.7.8 h1:ylXZWnqa7Lhqpk0L1P1LzDtGcCR0rPVUrx/c8Unxc48=\ngithub.com/hashicorp/go-retryablehttp v0.7.8/go.mod h1:rjiScheydd+CxvumBsIrFKlx3iS0jrZ7LvzFGFmuKbw=\ngithub.com/hashicorp/go-rootcerts v1.0.2 h1:jzhAVGtqPKbwpyCPELlgNWhE1znq+qwJtW5Oi2viEzc=\ngithub.com/hashicorp/go-rootcerts v1.0.2/go.mod h1:pqUvnprVnM5bf7AOirdbb01K4ccR319Vf4pU3K5EGc8=\ngithub.com/hashicorp/go-secure-stdlib/parseutil v0.2.0 h1:U+kC2dOhMFQctRfhK0gRctKAPTloZdMU5ZJxaesJ/VM=\ngithub.com/hashicorp/go-secure-stdlib/parseutil v0.2.0/go.mod h1:Ll013mhdmsVDuoIXVfBtvgGJsXDYkTw1kooNcoCXuE0=\ngithub.com/hashicorp/go-secure-stdlib/strutil v0.1.2 h1:kes8mmyCpxJsI7FTwtzRqEy9CdjCtrXrXGuOpxEA7Ts=\ngithub.com/hashicorp/go-secure-stdlib/strutil v0.1.2/go.mod h1:Gou2R9+il93BqX25LAKCLuM+y9U2T4hlwvT1yprcna4=\ngithub.com/hashicorp/go-sockaddr v1.0.7 h1:G+pTkSO01HpR5qCxg7lxfsFEZaG+C0VssTy/9dbT+Fw=\ngithub.com/hashicorp/go-sockaddr v1.0.7/go.mod h1:FZQbEYa1pxkQ7WLpyXJ6cbjpT8q0YgQaK/JakXqGyWw=\ngithub.com/hashicorp/go-uuid v1.0.0/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro=\ngithub.com/hashicorp/go-uuid v1.0.3 h1:2gKiV6YVmrJ1i2CKKa9obLvRieoRGviZFL26PcT/Co8=\ngithub.com/hashicorp/go-uuid v1.0.3/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro=\ngithub.com/hashicorp/go-version v1.7.0 h1:5tqGy27NaOTB8yJKUZELlFAS/LTKJkrmONwQKeRZfjY=\ngithub.com/hashicorp/go-version v1.7.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA=\ngithub.com/hashicorp/hc-install v0.9.2 h1:v80EtNX4fCVHqzL9Lg/2xkp62bbvQMnvPQ0G+OmtO24=\ngithub.com/hashicorp/hc-install v0.9.2/go.mod h1:XUqBQNnuT4RsxoxiM9ZaUk0NX8hi2h+Lb6/c0OZnC/I=\ngithub.com/hashicorp/hcl v1.0.1-vault-7 h1:ag5OxFVy3QYTFTJODRzTKVZ6xvdfLLCA1cy/Y6xGI0I=\ngithub.com/hashicorp/hcl v1.0.1-vault-7/go.mod h1:XYhtn6ijBSAj6n4YqAaf7RBPS4I06AItNorpy+MoQNM=\ngithub.com/hashicorp/hcl/v2 v2.23.0 h1:Fphj1/gCylPxHutVSEOf2fBOh1VE4AuLV7+kbJf3qos=\ngithub.com/hashicorp/hcl/v2 v2.23.0/go.mod h1:62ZYHrXgPoX8xBnzl8QzbWq4dyDsDtfCRgIq1rbJEvA=\ngithub.com/hashicorp/logutils v1.0.0 h1:dLEQVugN8vlakKOUE3ihGLTZJRB4j+M2cdTm/ORI65Y=\ngithub.com/hashicorp/logutils v1.0.0/go.mod h1:QIAnNjmIWmVIIkWDTG1z5v++HQmx9WQRO+LraFDTW64=\ngithub.com/hashicorp/terraform-exec v0.23.0 h1:MUiBM1s0CNlRFsCLJuM5wXZrzA3MnPYEsiXmzATMW/I=\ngithub.com/hashicorp/terraform-exec v0.23.0/go.mod h1:mA+qnx1R8eePycfwKkCRk3Wy65mwInvlpAeOwmA7vlY=\ngithub.com/hashicorp/terraform-json v0.25.0 h1:rmNqc/CIfcWawGiwXmRuiXJKEiJu1ntGoxseG1hLhoQ=\ngithub.com/hashicorp/terraform-json v0.25.0/go.mod h1:sMKS8fiRDX4rVlR6EJUMudg1WcanxCMoWwTLkgZP/vc=\ngithub.com/hashicorp/terraform-plugin-framework v1.18.0 h1:Xy6OfqSTZfAAKXSlJ810lYvuQvYkOpSUoNMQ9l2L1RA=\ngithub.com/hashicorp/terraform-plugin-framework v1.18.0/go.mod h1:eeFIf68PME+kenJeqSrIcpHhYQK0TOyv7ocKdN4Z35E=\ngithub.com/hashicorp/terraform-plugin-go v0.30.0 h1:VmEiD0n/ewxbvV5VI/bYwNtlSEAXtHaZlSnyUUuQK6k=\ngithub.com/hashicorp/terraform-plugin-go v0.30.0/go.mod h1:8d523ORAW8OHgA9e8JKg0ezL3XUO84H0A25o4NY/jRo=\ngithub.com/hashicorp/terraform-plugin-log v0.10.0 h1:eu2kW6/QBVdN4P3Ju2WiB2W3ObjkAsyfBsL3Wh1fj3g=\ngithub.com/hashicorp/terraform-plugin-log v0.10.0/go.mod h1:/9RR5Cv2aAbrqcTSdNmY1NRHP4E3ekrXRGjqORpXyB0=\ngithub.com/hashicorp/terraform-plugin-sdk/v2 v2.37.0 h1:NFPMacTrY/IdcIcnUB+7hsore1ZaRWU9cnB6jFoBnIM=\ngithub.com/hashicorp/terraform-plugin-sdk/v2 v2.37.0/go.mod h1:QYmYnLfsosrxjCnGY1p9c7Zj6n9thnEE+7RObeYs3fA=\ngithub.com/hashicorp/terraform-plugin-testing v1.13.2 h1:mSotG4Odl020vRjIenA3rggwo6Kg6XCKIwtRhYgp+/M=\ngithub.com/hashicorp/terraform-plugin-testing v1.13.2/go.mod h1:WHQ9FDdiLoneey2/QHpGM/6SAYf4A7AZazVg7230pLE=\ngithub.com/hashicorp/terraform-registry-address v0.4.0 h1:S1yCGomj30Sao4l5BMPjTGZmCNzuv7/GDTDX99E9gTk=\ngithub.com/hashicorp/terraform-registry-address v0.4.0/go.mod h1:LRS1Ay0+mAiRkUyltGT+UHWkIqTFvigGn/LbMshfflE=\ngithub.com/hashicorp/terraform-svchost v0.2.0 h1:wVc2vMiodOHvNZcQw/3y9af1XSomgjGSv+rv3BMCk7I=\ngithub.com/hashicorp/terraform-svchost v0.2.0/go.mod h1:/98rrS2yZsbppi4VGVCjwYmh8dqsKzISqK7Hli+0rcQ=\ngithub.com/hashicorp/vault/api v1.22.0 h1:+HYFquE35/B74fHoIeXlZIP2YADVboaPjaSicHEZiH0=\ngithub.com/hashicorp/vault/api v1.22.0/go.mod h1:IUZA2cDvr4Ok3+NtK2Oq/r+lJeXkeCrHRmqdyWfpmGM=\ngithub.com/hashicorp/yamux v0.1.2 h1:XtB8kyFOyHXYVFnwT5C3+Bdo8gArse7j2AQ0DA0Uey8=\ngithub.com/hashicorp/yamux v0.1.2/go.mod h1:C+zze2n6e/7wshOZep2A70/aQU6QBRWJO/G6FT1wIns=\ngithub.com/huaweicloud/huaweicloud-sdk-go-v3 v0.1.187 h1:J+U6+eUjIsBhefolFdZW5hQNJbkMj+7msxZrv56Cg2g=\ngithub.com/huaweicloud/huaweicloud-sdk-go-v3 v0.1.187/go.mod h1:M+yna96Fx9o5GbIUnF3OvVvQGjgfVSyeJbV9Yb1z/wI=\ngithub.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99 h1:BQSFePA1RWJOlocH6Fxy8MmwDt+yVQYULKfN0RoTN8A=\ngithub.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99/go.mod h1:1lJo3i6rXxKeerYnT8Nvf0QmHCRC1n8sfWVwXF2Frvo=\ngithub.com/jhump/protoreflect v1.17.0 h1:qOEr613fac2lOuTgWN4tPAtLL7fUSbuJL5X5XumQh94=\ngithub.com/jhump/protoreflect v1.17.0/go.mod h1:h9+vUUL38jiBzck8ck+6G/aeMX8Z4QUY/NiJPwPNi+8=\ngithub.com/json-iterator/go v1.1.13-0.20220915233716-71ac16282d12 h1:9Nu54bhS/H/Kgo2/7xNSUuC5G28VR8ljfrLKU2G4IjU=\ngithub.com/json-iterator/go v1.1.13-0.20220915233716-71ac16282d12/go.mod h1:TBzl5BIHNXfS9+C35ZyJaklL7mLDbgUkcgXzSLa8Tk0=\ngithub.com/kevinburke/ssh_config v1.2.0 h1:x584FjTGwHzMwvHx18PXxbBVzfnxogHaAReU4gf13a4=\ngithub.com/kevinburke/ssh_config v1.2.0/go.mod h1:CT57kijsi8u/K/BOFA39wgDQJ9CxiF4nAY/ojJ6r6mM=\ngithub.com/keybase/go-keychain v0.0.1 h1:way+bWYa6lDppZoZcgMbYsvC7GxljxrskdNInRtuthU=\ngithub.com/keybase/go-keychain v0.0.1/go.mod h1:PdEILRW3i9D8JcdM+FmY6RwkHGnhHxXwkPPMeUgOK1k=\ngithub.com/klauspost/compress v1.13.6/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk=\ngithub.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=\ngithub.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE=\ngithub.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk=\ngithub.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=\ngithub.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=\ngithub.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=\ngithub.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=\ngithub.com/kylelemons/godebug v1.1.0 h1:RPNrshWIDI6G2gRW9EHilWtl7Z6Sb1BR0xunSBf0SNc=\ngithub.com/kylelemons/godebug v1.1.0/go.mod h1:9/0rRGxNHcop5bhtWyNeEfOS8JIWk580+fNqagV/RAw=\ngithub.com/leodido/go-urn v1.2.0/go.mod h1:+8+nEpDfqqsY+g338gtMEUOtuK+4dEMhiQEgxpxOKII=\ngithub.com/lib/pq v1.11.2 h1:x6gxUeu39V0BHZiugWe8LXZYZ+Utk7hSJGThs8sdzfs=\ngithub.com/lib/pq v1.11.2/go.mod h1:/p+8NSbOcwzAEI7wiMXFlgydTwcgTr3OSKMsD2BitpA=\ngithub.com/mattn/go-colorable v0.1.8/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc=\ngithub.com/mattn/go-colorable v0.1.9/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc=\ngithub.com/mattn/go-colorable v0.1.12/go.mod h1:u5H1YNBxpqRaxsYJYSkiCWKzEfiAb1Gb520KVy5xxl4=\ngithub.com/mattn/go-colorable v0.1.14 h1:9A9LHSqF/7dyVVX6g0U9cwm9pG3kP9gSzcuIPHPsaIE=\ngithub.com/mattn/go-colorable v0.1.14/go.mod h1:6LmQG8QLFO4G5z1gPvYEzlUgJ2wF+stgPZH1UqBm1s8=\ngithub.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU=\ngithub.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27kJ6hsGG94=\ngithub.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY=\ngithub.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y=\ngithub.com/mitchellh/copystructure v1.2.0 h1:vpKXTN4ewci03Vljg/q9QvCGUDttBOGBIa15WveJJGw=\ngithub.com/mitchellh/copystructure v1.2.0/go.mod h1:qLl+cE2AmVv+CoeAwDPye/v+N2HKCj9FbZEVFJRxO9s=\ngithub.com/mitchellh/go-homedir v1.1.0 h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG+4E0Y=\ngithub.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0=\ngithub.com/mitchellh/go-testing-interface v1.14.1 h1:jrgshOhYAUVNMAJiKbEu7EqAwgJJ2JqpQmpLJOu07cU=\ngithub.com/mitchellh/go-testing-interface v1.14.1/go.mod h1:gfgS7OtZj6MA4U1UrDRp04twqAjfvlZyCfX3sDjEym8=\ngithub.com/mitchellh/go-wordwrap v1.0.1 h1:TLuKupo69TCn6TQSyGxwI1EblZZEsQ0vMlAFQflz0v0=\ngithub.com/mitchellh/go-wordwrap v1.0.1/go.mod h1:R62XHJLzvMFRBbcrT7m7WgmE1eOyTSsCt+hzestvNj0=\ngithub.com/mitchellh/mapstructure v1.5.0 h1:jeMsZIYE/09sWLaz43PL7Gy6RuMjD2eJVyuac5Z2hdY=\ngithub.com/mitchellh/mapstructure v1.5.0/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo=\ngithub.com/mitchellh/reflectwalk v1.0.2 h1:G2LzWKi524PWgd3mLHV8Y5k7s6XUvT0Gef6zxSIeXaQ=\ngithub.com/mitchellh/reflectwalk v1.0.2/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw=\ngithub.com/moby/docker-image-spec v1.3.1 h1:jMKff3w6PgbfSa69GfNg+zN/XLhfXJGnEx3Nl2EsFP0=\ngithub.com/moby/docker-image-spec v1.3.1/go.mod h1:eKmb5VW8vQEh/BAr2yvVNvuiJuY6UIocYsFu/DxxRpo=\ngithub.com/moby/sys/user v0.3.0 h1:9ni5DlcW5an3SvRSx4MouotOygvzaXbaSrc/wGDFWPo=\ngithub.com/moby/sys/user v0.3.0/go.mod h1:bG+tYYYJgaMtRKgEmuueC0hJEAZWwtIbZTB+85uoHjs=\ngithub.com/moby/term v0.5.2 h1:6qk3FJAFDs6i/q3W/pQ97SX192qKfZgGjCQqfCJkgzQ=\ngithub.com/moby/term v0.5.2/go.mod h1:d3djjFCrjnB+fl8NJux+EJzu0msscUP+f8it8hPkFLc=\ngithub.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=\ngithub.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg=\ngithub.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=\ngithub.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M=\ngithub.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk=\ngithub.com/montanaflynn/stats v0.0.0-20171201202039-1bf9dbcd8cbe/go.mod h1:wL8QJuTMNUDYhXwkmfOly8iTdp5TEcJFWZD2D7SIkUc=\ngithub.com/oklog/run v1.2.0 h1:O8x3yXwah4A73hJdlrwo/2X6J62gE5qTMusH0dvz60E=\ngithub.com/oklog/run v1.2.0/go.mod h1:mgDbKRSwPhJfesJ4PntqFUbKQRZ50NgmZTSPlFA0YFk=\ngithub.com/opencontainers/go-digest v1.0.0 h1:apOUWs51W5PlhuyGyz9FCeeBIOUDA/6nW8Oi/yOhh5U=\ngithub.com/opencontainers/go-digest v1.0.0/go.mod h1:0JzlMkj0TRzQZfJkVvzbP0HBR3IKzErnv2BNG4W4MAM=\ngithub.com/opencontainers/image-spec v1.1.1 h1:y0fUlFfIZhPF1W537XOLg0/fcx6zcHCJwooC2xJA040=\ngithub.com/opencontainers/image-spec v1.1.1/go.mod h1:qpqAh3Dmcf36wStyyWU+kCeDgrGnAve2nCC8+7h8Q0M=\ngithub.com/opencontainers/runc v1.2.8 h1:RnEICeDReapbZ5lZEgHvj7E9Q3Eex9toYmaGBsbvU5Q=\ngithub.com/opencontainers/runc v1.2.8/go.mod h1:cC0YkmZcuvr+rtBZ6T7NBoVbMGNAdLa/21vIElJDOzI=\ngithub.com/ory/dockertest/v3 v3.12.0 h1:3oV9d0sDzlSQfHtIaB5k6ghUCVMVLpAY8hwrqoCyRCw=\ngithub.com/ory/dockertest/v3 v3.12.0/go.mod h1:aKNDTva3cp8dwOWwb9cWuX84aH5akkxXRvO7KCwWVjE=\ngithub.com/pjbgf/sha1cd v0.3.2 h1:a9wb0bp1oC2TGwStyn0Umc/IGKQnEgF0vVaZ8QF8eo4=\ngithub.com/pjbgf/sha1cd v0.3.2/go.mod h1:zQWigSxVmsHEZow5qaLtPYxpcKMMQpa09ixqBxuCS6A=\ngithub.com/pkg/browser v0.0.0-20240102092130-5ac0b6a4141c h1:+mdjkGKdHQG3305AYmdv1U2eRNDiU2ErMBj1gwrq8eQ=\ngithub.com/pkg/browser v0.0.0-20240102092130-5ac0b6a4141c/go.mod h1:7rwL4CYBLnjLxUqIJNnCWiEdr3bn6IUYi15bNlnbCCU=\ngithub.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=\ngithub.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=\ngithub.com/planetscale/vtprotobuf v0.6.1-0.20240319094008-0393e58bdf10 h1:GFCKgmp0tecUJ0sJuv4pzYCqS9+RGSn52M3FUwPs+uo=\ngithub.com/planetscale/vtprotobuf v0.6.1-0.20240319094008-0393e58bdf10/go.mod h1:t/avpk3KcrXxUnYOhZhMXJlSEyie6gQbtLq5NM3loB8=\ngithub.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=\ngithub.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U=\ngithub.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=\ngithub.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=\ngithub.com/rogpeppe/go-internal v1.14.1 h1:UQB4HGPB6osV0SQTLymcB4TgvyWu6ZyliaW0tI/otEQ=\ngithub.com/rogpeppe/go-internal v1.14.1/go.mod h1:MaRKkUm5W0goXpeCfT7UZI6fk/L7L7so1lCWt35ZSgc=\ngithub.com/russross/blackfriday/v2 v2.1.0 h1:JIOH55/0cWyOuilr9/qlrm0BSXldqnqwMsf35Ld67mk=\ngithub.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=\ngithub.com/ryanuber/go-glob v1.0.0 h1:iQh3xXAumdQ+4Ufa5b25cRpC5TYKlno6hsv6Cb3pkBk=\ngithub.com/ryanuber/go-glob v1.0.0/go.mod h1:807d1WSdnB0XRJzKNil9Om6lcp/3a0v4qIHxIXzX/Yc=\ngithub.com/sergi/go-diff v1.3.2-0.20230802210424-5b0b94c5c0d3 h1:n661drycOFuPLCN3Uc8sB6B/s6Z4t2xvBgU1htSHuq8=\ngithub.com/sergi/go-diff v1.3.2-0.20230802210424-5b0b94c5c0d3/go.mod h1:A0bzQcvG0E7Rwjx0REVgAGH58e96+X0MeOfepqsbeW4=\ngithub.com/shopspring/decimal v1.4.0/go.mod h1:gawqmDU56v4yIKSwfBSFip1HdCCXN8/+DMd9qYNcwME=\ngithub.com/sirupsen/logrus v1.9.4 h1:TsZE7l11zFCLZnZ+teH4Umoq5BhEIfIzfRDZ1Uzql2w=\ngithub.com/sirupsen/logrus v1.9.4/go.mod h1:ftWc9WdOfJ0a92nsE2jF5u5ZwH8Bv2zdeOC42RjbV2g=\ngithub.com/skeema/knownhosts v1.3.1 h1:X2osQ+RAjK76shCbvhHHHVl3ZlgDm8apHEHFqRjnBY8=\ngithub.com/skeema/knownhosts v1.3.1/go.mod h1:r7KTdC8l4uxWRyK2TpQZ/1o5HaSzh06ePQNxPwTcfiY=\ngithub.com/spiffe/go-spiffe/v2 v2.6.0 h1:l+DolpxNWYgruGQVV0xsfeya3CsC7m8iBzDnMpsbLuo=\ngithub.com/spiffe/go-spiffe/v2 v2.6.0/go.mod h1:gm2SeUoMZEtpnzPNs2Csc0D/gX33k1xIx7lEzqblHEs=\ngithub.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=\ngithub.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw=\ngithub.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo=\ngithub.com/stretchr/objx v0.5.2/go.mod h1:FRsXN1f5AsAjCGJKqEizvkpNtU+EGNCLh3NxZ/8L+MA=\ngithub.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=\ngithub.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=\ngithub.com/stretchr/testify v1.7.2/go.mod h1:R6va5+xMeoiuVRoj+gSkQ7d3FALtqAAGI1FQKckRals=\ngithub.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU=\ngithub.com/stretchr/testify v1.8.2/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4=\ngithub.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo=\ngithub.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=\ngithub.com/stretchr/testify v1.11.1 h1:7s2iGBzp5EwR7/aIZr8ao5+dra3wiQyKjjFuvgVKu7U=\ngithub.com/stretchr/testify v1.11.1/go.mod h1:wZwfW3scLgRK+23gO65QZefKpKQRnfz6sD981Nm4B6U=\ngithub.com/tjfoc/gmsm v1.4.1 h1:aMe1GlZb+0bLjn+cKTPEvvn9oUEBlJitaZiiBwsbgho=\ngithub.com/tjfoc/gmsm v1.4.1/go.mod h1:j4INPkHWMrhJb38G+J6W4Tw0AbuN8Thu3PbdVYhVcTE=\ngithub.com/urfave/cli v1.22.17 h1:SYzXoiPfQjHBbkYxbew5prZHS1TOLT3ierW8SYLqtVQ=\ngithub.com/urfave/cli v1.22.17/go.mod h1:b0ht0aqgH/6pBYzzxURyrM4xXNgsoT/n2ZzwQiEhNVo=\ngithub.com/vmihailenco/msgpack v3.3.3+incompatible/go.mod h1:fy3FlTQTDXWkZ7Bh6AcGMlsjHatGryHQYUTf1ShIgkk=\ngithub.com/vmihailenco/msgpack v4.0.4+incompatible h1:dSLoQfGFAo3F6OoNhwUmLwVgaUXK79GlxNBwueZn0xI=\ngithub.com/vmihailenco/msgpack v4.0.4+incompatible/go.mod h1:fy3FlTQTDXWkZ7Bh6AcGMlsjHatGryHQYUTf1ShIgkk=\ngithub.com/vmihailenco/msgpack/v5 v5.4.1 h1:cQriyiUvjTwOHg8QZaPihLWeRAAVoCpE00IUPn0Bjt8=\ngithub.com/vmihailenco/msgpack/v5 v5.4.1/go.mod h1:GaZTsDaehaPpQVyxrf5mtQlH+pc21PIudVV/E3rRQok=\ngithub.com/vmihailenco/tagparser/v2 v2.0.0 h1:y09buUbR+b5aycVFQs/g70pqKVZNBmxwAhO7/IwNM9g=\ngithub.com/vmihailenco/tagparser/v2 v2.0.0/go.mod h1:Wri+At7QHww0WTrCBeu4J6bNtoV6mEfg5OIWRZA9qds=\ngithub.com/xanzy/ssh-agent v0.3.3 h1:+/15pJfg/RsTxqYcX6fHqOXZwwMP+2VyYWJeWM2qQFM=\ngithub.com/xanzy/ssh-agent v0.3.3/go.mod h1:6dzNDKs0J9rVPHPhaGCukekBHKqfl+L3KghI1Bc68Uw=\ngithub.com/xdg-go/pbkdf2 v1.0.0/go.mod h1:jrpuAogTd400dnrH08LKmI/xc1MbPOebTwRqcT5RDeI=\ngithub.com/xdg-go/scram v1.1.2/go.mod h1:RT/sEzTbU5y00aCK8UOx6R7YryM0iF1N2MOmC3kKLN4=\ngithub.com/xdg-go/stringprep v1.0.4/go.mod h1:mPGuuIYwz7CmR2bT9j4GbQqutWS1zV24gijq1dTyGkM=\ngithub.com/xeipuuv/gojsonpointer v0.0.0-20190905194746-02993c407bfb h1:zGWFAtiMcyryUHoUjUJX0/lt1H2+i2Ka2n+D3DImSNo=\ngithub.com/xeipuuv/gojsonpointer v0.0.0-20190905194746-02993c407bfb/go.mod h1:N2zxlSyiKSe5eX1tZViRH5QA0qijqEDrYZiPEAiq3wU=\ngithub.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415 h1:EzJWgHovont7NscjpAxXsDA8S8BMYve8Y5+7cuRE7R0=\ngithub.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415/go.mod h1:GwrjFmJcFw6At/Gs6z4yjiIwzuJ1/+UwLxMQDVQXShQ=\ngithub.com/xeipuuv/gojsonschema v1.2.0 h1:LhYJRs+L4fBtjZUfuSZIKGeVu0QRy8e5Xi7D17UxZ74=\ngithub.com/xeipuuv/gojsonschema v1.2.0/go.mod h1:anYRn/JVcOK2ZgGU+IjEV4nwlhoK5sQluxsYJ78Id3Y=\ngithub.com/youmark/pkcs8 v0.0.0-20181117223130-1be2e3e5546d/go.mod h1:rHwXgn7JulP+udvsHwJoVG1YGAP6VLg4y9I5dyZdqmA=\ngithub.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY=\ngithub.com/zclconf/go-cty v1.16.4 h1:QGXaag7/7dCzb+odlGrgr+YmYZFaOCMW6DEpS+UD1eE=\ngithub.com/zclconf/go-cty v1.16.4/go.mod h1:VvMs5i0vgZdhYawQNq5kePSpLAoz8u1xvZgrPIxfnZE=\ngithub.com/zclconf/go-cty-debug v0.0.0-20240509010212-0d6042c53940 h1:4r45xpDWB6ZMSMNJFMOjqrGHynW3DIBuR2H9j0ug+Mo=\ngithub.com/zclconf/go-cty-debug v0.0.0-20240509010212-0d6042c53940/go.mod h1:CmBdvvj3nqzfzJ6nTCIwDTPZ56aVGvDrmztiO5g3qrM=\ngo.mongodb.org/mongo-driver v1.13.1/go.mod h1:wcDf1JBCXy2mOW0bWHwO/IOYqdca1MPCwDtFu/Z9+eo=\ngo.mongodb.org/mongo-driver v1.17.9 h1:IexDdCuuNJ3BHrELgBlyaH9p60JXAvdzWR128q+U5tU=\ngo.mongodb.org/mongo-driver v1.17.9/go.mod h1:LlOhpH5NUEfhxcAwG0UEkMqwYcc4JU18gtCdGudk/tQ=\ngo.opentelemetry.io/auto/sdk v1.2.1 h1:jXsnJ4Lmnqd11kwkBV2LgLoFMZKizbCi5fNZ/ipaZ64=\ngo.opentelemetry.io/auto/sdk v1.2.1/go.mod h1:KRTj+aOaElaLi+wW1kO/DZRXwkF4C5xPbEe3ZiIhN7Y=\ngo.opentelemetry.io/contrib/detectors/gcp v1.40.0 h1:Awaf8gmW99tZTOWqkLCOl6aw1/rxAWVlHsHIZ3fT2sA=\ngo.opentelemetry.io/contrib/detectors/gcp v1.40.0/go.mod h1:99OY9ZCqyLkzJLTh5XhECpLRSxcZl+ZDKBEO+jMBFR4=\ngo.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.65.0 h1:XmiuHzgJt067+a6kwyAzkhXooYVv3/TOw9cM2VfJgUM=\ngo.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.65.0/go.mod h1:KDgtbWKTQs4bM+VPUr6WlL9m/WXcmkCcBlIzqxPGzmI=\ngo.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.65.0 h1:7iP2uCb7sGddAr30RRS6xjKy7AZ2JtTOPA3oolgVSw8=\ngo.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.65.0/go.mod h1:c7hN3ddxs/z6q9xwvfLPk+UHlWRQyaeR1LdgfL/66l0=\ngo.opentelemetry.io/otel v1.40.0 h1:oA5YeOcpRTXq6NN7frwmwFR0Cn3RhTVZvXsP4duvCms=\ngo.opentelemetry.io/otel v1.40.0/go.mod h1:IMb+uXZUKkMXdPddhwAHm6UfOwJyh4ct1ybIlV14J0g=\ngo.opentelemetry.io/otel/exporters/stdout/stdoutmetric v1.39.0 h1:5gn2urDL/FBnK8OkCfD1j3/ER79rUuTYmCvlXBKeYL8=\ngo.opentelemetry.io/otel/exporters/stdout/stdoutmetric v1.39.0/go.mod h1:0fBG6ZJxhqByfFZDwSwpZGzJU671HkwpWaNe2t4VUPI=\ngo.opentelemetry.io/otel/metric v1.40.0 h1:rcZe317KPftE2rstWIBitCdVp89A2HqjkxR3c11+p9g=\ngo.opentelemetry.io/otel/metric v1.40.0/go.mod h1:ib/crwQH7N3r5kfiBZQbwrTge743UDc7DTFVZrrXnqc=\ngo.opentelemetry.io/otel/sdk v1.40.0 h1:KHW/jUzgo6wsPh9At46+h4upjtccTmuZCFAc9OJ71f8=\ngo.opentelemetry.io/otel/sdk v1.40.0/go.mod h1:Ph7EFdYvxq72Y8Li9q8KebuYUr2KoeyHx0DRMKrYBUE=\ngo.opentelemetry.io/otel/sdk/metric v1.40.0 h1:mtmdVqgQkeRxHgRv4qhyJduP3fYJRMX4AtAlbuWdCYw=\ngo.opentelemetry.io/otel/sdk/metric v1.40.0/go.mod h1:4Z2bGMf0KSK3uRjlczMOeMhKU2rhUqdWNoKcYrtcBPg=\ngo.opentelemetry.io/otel/trace v1.40.0 h1:WA4etStDttCSYuhwvEa8OP8I5EWu24lkOzp+ZYblVjw=\ngo.opentelemetry.io/otel/trace v1.40.0/go.mod h1:zeAhriXecNGP/s2SEG3+Y8X9ujcJOTqQ5RgdEJcawiA=\ngo.yaml.in/yaml/v3 v3.0.4 h1:tfq32ie2Jv2UxXFdLJdh3jXuOzWiL1fo0bu/FbuKpbc=\ngo.yaml.in/yaml/v3 v3.0.4/go.mod h1:DhzuOOF2ATzADvBadXxruRBLzYTpT36CKvDb3+aBEFg=\ngolang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=\ngolang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=\ngolang.org/x/crypto v0.0.0-20201012173705-84dcc777aaee/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=\ngolang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=\ngolang.org/x/crypto v0.0.0-20220622213112-05595931fe9d/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=\ngolang.org/x/crypto v0.48.0 h1:/VRzVqiRSggnhY7gNRxPauEQ5Drw9haKdM0jqfcCFts=\ngolang.org/x/crypto v0.48.0/go.mod h1:r0kV5h3qnFPlQnBSrULhlsRfryS2pmewsg+XfMgkVos=\ngolang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=\ngolang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=\ngolang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU=\ngolang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=\ngolang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4=\ngolang.org/x/mod v0.32.0 h1:9F4d3PHLljb6x//jOyokMv3eX+YDeepZSEo3mFJy93c=\ngolang.org/x/mod v0.32.0/go.mod h1:SgipZ/3h2Ci89DlEtEXWUk/HteuRin+HHhN+WbNhguU=\ngolang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=\ngolang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=\ngolang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=\ngolang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=\ngolang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=\ngolang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=\ngolang.org/x/net v0.0.0-20201010224723-4f7140c49acb/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=\ngolang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=\ngolang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=\ngolang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c=\ngolang.org/x/net v0.51.0 h1:94R/GTO7mt3/4wIKpcR5gkGmRLOuE/2hNGeWq/GBIFo=\ngolang.org/x/net v0.51.0/go.mod h1:aamm+2QF5ogm02fjy5Bb7CQ0WMt1/WVM7FtyaTLlA9Y=\ngolang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=\ngolang.org/x/oauth2 v0.35.0 h1:Mv2mzuHuZuY2+bkyWXIHMfhNdJAdwW3FuWeCPYN5GVQ=\ngolang.org/x/oauth2 v0.35.0/go.mod h1:lzm5WQJQwKZ3nwavOZ3IS5Aulzxi68dUSgRHujetwEA=\ngolang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=\ngolang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=\ngolang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=\ngolang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=\ngolang.org/x/sync v0.19.0 h1:vV+1eWNmZ5geRlYjzm2adRgW2/mcpevXNg50YZtPCE4=\ngolang.org/x/sync v0.19.0/go.mod h1:9KTHXmSnoGruLpwFjVSX0lNNA75CykiMECbovNTZqGI=\ngolang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=\ngolang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=\ngolang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=\ngolang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=\ngolang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=\ngolang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=\ngolang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=\ngolang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=\ngolang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=\ngolang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=\ngolang.org/x/sys v0.0.0-20210927094055-39ccf1dd6fa6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=\ngolang.org/x/sys v0.0.0-20220406163625-3f8b81556e12/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=\ngolang.org/x/sys v0.0.0-20220503163025-988cb79eb6c6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=\ngolang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=\ngolang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=\ngolang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=\ngolang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=\ngolang.org/x/sys v0.41.0 h1:Ivj+2Cp/ylzLiEU89QhWblYnOE9zerudt9Ftecq2C6k=\ngolang.org/x/sys v0.41.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks=\ngolang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=\ngolang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=\ngolang.org/x/term v0.40.0 h1:36e4zGLqU4yhjlmxEaagx2KuYbJq3EwY8K943ZsHcvg=\ngolang.org/x/term v0.40.0/go.mod h1:w2P8uVp06p2iyKKuvXIm7N/y0UCRt3UfJTfZ7oOpglM=\ngolang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=\ngolang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk=\ngolang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=\ngolang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=\ngolang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=\ngolang.org/x/text v0.3.8/go.mod h1:E6s5w1FMmriuDzIBO73fBruAKo1PCIq6d2Q6DHfQ8WQ=\ngolang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8=\ngolang.org/x/text v0.34.0 h1:oL/Qq0Kdaqxa1KbNeMKwQq0reLCCaFtqu2eNuSeNHbk=\ngolang.org/x/text v0.34.0/go.mod h1:homfLqTYRFyVYemLBFl5GgL/DWEiH5wcsQ5gSh1yziA=\ngolang.org/x/time v0.14.0 h1:MRx4UaLrDotUKUdCIqzPC48t1Y9hANFKIRpNx+Te8PI=\ngolang.org/x/time v0.14.0/go.mod h1:eL/Oa2bBBK0TkX57Fyni+NgnyQQN4LitPmob2Hjnqw4=\ngolang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=\ngolang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=\ngolang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY=\ngolang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=\ngolang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=\ngolang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=\ngolang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc=\ngolang.org/x/tools v0.41.0 h1:a9b8iMweWG+S0OBnlU36rzLp20z1Rp10w+IY2czHTQc=\ngolang.org/x/tools v0.41.0/go.mod h1:XSY6eDqxVNiYgezAVqqCeihT4j1U2CCsqvH3WhQpnlg=\ngolang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=\ngolang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=\ngolang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=\ngonum.org/v1/gonum v0.16.0 h1:5+ul4Swaf3ESvrOnidPp4GZbzf0mxVQpDCYUQE7OJfk=\ngonum.org/v1/gonum v0.16.0/go.mod h1:fef3am4MQ93R2HHpKnLk4/Tbh/s0+wqD5nfa6Pnwy4E=\ngoogle.golang.org/api v0.269.0 h1:qDrTOxKUQ/P0MveH6a7vZ+DNHxJQjtGm/uvdbdGXCQg=\ngoogle.golang.org/api v0.269.0/go.mod h1:N8Wpcu23Tlccl0zSHEkcAZQKDLdquxK+l9r2LkwAauE=\ngoogle.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=\ngoogle.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=\ngoogle.golang.org/appengine v1.6.8 h1:IhEN5q69dyKagZPYMSdIjS2HqprW324FRQZJcGqPAsM=\ngoogle.golang.org/appengine v1.6.8/go.mod h1:1jJ3jBArFh5pcgW8gCtRJnepW8FzD1V44FJffLiz/Ds=\ngoogle.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc=\ngoogle.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc=\ngoogle.golang.org/genproto v0.0.0-20260226221140-a57be14db171 h1:RxhCsti413yL0IjU9dVvuTbCISo8gs3RW1jPMStck+4=\ngoogle.golang.org/genproto v0.0.0-20260226221140-a57be14db171/go.mod h1:uhvzakVEqAuXU3TC2JCsxIRe5f77l+JySE3EqPoMyqM=\ngoogle.golang.org/genproto/googleapis/api v0.0.0-20260226221140-a57be14db171 h1:tu/dtnW1o3wfaxCOjSLn5IRX4YDcJrtlpzYkhHhGaC4=\ngoogle.golang.org/genproto/googleapis/api v0.0.0-20260226221140-a57be14db171/go.mod h1:M5krXqk4GhBKvB596udGL3UyjL4I1+cTbK0orROM9ng=\ngoogle.golang.org/genproto/googleapis/rpc v0.0.0-20260226221140-a57be14db171 h1:ggcbiqK8WWh6l1dnltU4BgWGIGo+EVYxCaAPih/zQXQ=\ngoogle.golang.org/genproto/googleapis/rpc v0.0.0-20260226221140-a57be14db171/go.mod h1:4Hqkh8ycfw05ld/3BWL7rJOSfebL2Q+DVDeRgYgxUU8=\ngoogle.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c=\ngoogle.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg=\ngoogle.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY=\ngoogle.golang.org/grpc v1.31.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak=\ngoogle.golang.org/grpc v1.79.1 h1:zGhSi45ODB9/p3VAawt9a+O/MULLl9dpizzNNpq7flY=\ngoogle.golang.org/grpc v1.79.1/go.mod h1:KmT0Kjez+0dde/v2j9vzwoAScgEPx/Bw1CYChhHLrHQ=\ngoogle.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8=\ngoogle.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0=\ngoogle.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM=\ngoogle.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE=\ngoogle.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo=\ngoogle.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=\ngoogle.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw=\ngoogle.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=\ngoogle.golang.org/protobuf v1.36.11 h1:fV6ZwhNocDyBLK0dj+fg8ektcVegBBuEolpbTQyBNVE=\ngoogle.golang.org/protobuf v1.36.11/go.mod h1:HTf+CrKn2C3g5S8VImy6tdcUvCska2kB7j23XfzDpco=\ngopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=\ngopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=\ngopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk=\ngopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q=\ngopkg.in/ini.v1 v1.67.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k=\ngopkg.in/ini.v1 v1.67.1 h1:tVBILHy0R6e4wkYOn3XmiITt/hEVH4TFMYvAX2Ytz6k=\ngopkg.in/ini.v1 v1.67.1/go.mod h1:x/cyOwCgZqOkJoDIJ3c1KNHMo10+nLGAhh+kn3Zizss=\ngopkg.in/warnings.v0 v0.1.2 h1:wFXVbFY8DY5/xOe1ECiWdKCzZlxgshcYVNkBHstARME=\ngopkg.in/warnings.v0 v0.1.2/go.mod h1:jksf8JmL6Qr/oQM2OXTHunEvvTAsrWBLb6OOjuVWRNI=\ngopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=\ngopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ=\ngopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=\ngopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=\ngopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=\nhonnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=\nhonnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=\n"
  },
  {
    "path": "main.go",
    "content": "package main\n\nimport (\n\t\"context\"\n\t\"flag\"\n\t\"log\"\n\n\t\"github.com/hashicorp/terraform-plugin-framework/providerserver\"\n\n\t\"github.com/carlpett/terraform-provider-sops/sops\"\n)\n\nfunc main() {\n\tvar debug bool\n\n\tflag.BoolVar(&debug, \"debug\", false, \"set to true to run the provider with support for debuggers like delve\")\n\tflag.Parse()\n\n\topts := providerserver.ServeOpts{\n\t\tAddress: \"registry.terraform.io/carlpett/sops\",\n\t\tDebug:   debug,\n\t}\n\n\terr := providerserver.Serve(context.Background(), sops.New, opts)\n\tif err != nil {\n\t\tlog.Fatal(err.Error())\n\t}\n}\n"
  },
  {
    "path": "sops/data.go",
    "content": "package sops\n\nimport (\n\t\"fmt\"\n\t\"io\"\n\t\"os\"\n\t\"path\"\n\t\"strings\"\n\n\t\"github.com/hashicorp/terraform-plugin-framework/types\"\n)\n\ntype summaryError struct {\n\tSummary string\n\tErr     error\n}\n\nfunc (e summaryError) Error() string {\n\treturn fmt.Sprintf(\"%s: %s\", e.Summary, e.Err.Error())\n}\n\nfunc newSummaryError(summary string, err error) summaryError {\n\treturn summaryError{\n\t\tSummary: summary,\n\t\tErr:     err,\n\t}\n}\n\nfunc getFileData(sourceFile types.String, inputType types.String) (data map[string]string, raw string, err error) {\n\tsourceFileValue := sourceFile.ValueString()\n\tcontent, err := os.ReadFile(sourceFileValue)\n\tif err != nil {\n\t\treturn nil, \"\", newSummaryError(\"Error reading file\", err)\n\t}\n\n\tvar format string\n\tif !inputType.IsNull() {\n\t\tformat = inputType.ValueString()\n\t} else {\n\t\tswitch ext := path.Ext(sourceFileValue); ext {\n\t\tcase \".json\":\n\t\t\tformat = \"json\"\n\t\tcase \".yaml\", \".yml\":\n\t\t\tformat = \"yaml\"\n\t\tcase \".env\":\n\t\t\tformat = \"dotenv\"\n\t\tcase \".ini\":\n\t\t\tformat = \"ini\"\n\t\tdefault:\n\t\t\treturn nil, \"\", newSummaryError(\"Unknown file type\", fmt.Errorf(\"Don't know how to decode file with extension %s, set input_type as appropriate\", ext))\n\t\t}\n\t}\n\n\tif err := validateInputType(format); err != nil {\n\t\treturn nil, \"\", newSummaryError(\"Invalid input type\", err)\n\t}\n\n\tdata, raw, err = readData(content, format)\n\tif err != nil {\n\t\treturn nil, \"\", newSummaryError(\"Error reading data\", err)\n\t}\n\treturn data, raw, nil\n}\n\nfunc getExternalData(source types.String, inputType types.String) (data map[string]string, raw string, err error) {\n\tcontent, err := io.ReadAll(strings.NewReader(source.ValueString()))\n\tif err != nil {\n\t\treturn nil, \"\", newSummaryError(\"Error reading source\", err)\n\t}\n\n\tformat := inputType.ValueString()\n\tif err := validateInputType(format); err != nil {\n\t\treturn nil, \"\", newSummaryError(\"Invalid input type\", err)\n\t}\n\n\tdata, raw, err = readData(content, format)\n\tif err != nil {\n\t\treturn nil, \"\", newSummaryError(\"Error reading data\", err)\n\t}\n\n\treturn data, raw, nil\n}\n"
  },
  {
    "path": "sops/data_sops_external.go",
    "content": "package sops\n\nimport (\n\t\"context\"\n\n\t\"github.com/hashicorp/terraform-plugin-framework/datasource\"\n\t\"github.com/hashicorp/terraform-plugin-framework/datasource/schema\"\n\t\"github.com/hashicorp/terraform-plugin-framework/types\"\n)\n\nvar _ datasource.DataSource = &externalDataSource{}\n\nfunc newExternalDataSource() datasource.DataSource {\n\treturn &externalDataSource{}\n}\n\ntype externalDataSource struct{}\n\ntype externalDataSourceModel struct {\n\tInputType types.String `tfsdk:\"input_type\"`\n\tSource    types.String `tfsdk:\"source\"`\n\tData      types.Map    `tfsdk:\"data\"`\n\tRaw       types.String `tfsdk:\"raw\"`\n\tId        types.String `tfsdk:\"id\"`\n}\n\nfunc (d *externalDataSource) Metadata(_ context.Context, _ datasource.MetadataRequest, resp *datasource.MetadataResponse) {\n\tresp.TypeName = \"sops_external\"\n}\n\nfunc (d *externalDataSource) Schema(_ context.Context, _ datasource.SchemaRequest, resp *datasource.SchemaResponse) {\n\tresp.Schema = schema.Schema{\n\t\tDescription: \"Read data from a sops-encrypted string. Useful if the data does not reside on disk locally (otherwise use `sops_file`).\",\n\t\tAttributes: map[string]schema.Attribute{\n\t\t\t\"input_type\": schema.StringAttribute{\n\t\t\t\tDescription: \"`yaml`, `json` `dotenv` (`.env`), `ini` or `raw`, depending on the structure of the un-encrypted data.\",\n\t\t\t\tOptional:    true,\n\t\t\t},\n\t\t\t\"source\": schema.StringAttribute{\n\t\t\t\tDescription: \"A string with sops-encrypted data\",\n\t\t\t\tRequired:    true,\n\t\t\t},\n\n\t\t\t\"data\": schema.MapAttribute{\n\t\t\t\tDescription: \"Decrypted data\",\n\t\t\t\tComputed:    true,\n\t\t\t\tSensitive:   true,\n\t\t\t\tElementType: types.StringType,\n\t\t\t},\n\t\t\t\"raw\": schema.StringAttribute{\n\t\t\t\tDescription: \"Raw decrypted content\",\n\t\t\t\tComputed:    true,\n\t\t\t\tSensitive:   true,\n\t\t\t},\n\t\t\t\"id\": schema.StringAttribute{\n\t\t\t\tDescription: \"Unique identifier for this data source\",\n\t\t\t\tComputed:    true,\n\t\t\t},\n\t\t},\n\t}\n}\n\nfunc (d *externalDataSource) Read(ctx context.Context, req datasource.ReadRequest, resp *datasource.ReadResponse) {\n\tvar config externalDataSourceModel\n\tdiags := req.Config.Get(ctx, &config)\n\tresp.Diagnostics.Append(diags...)\n\tif resp.Diagnostics.HasError() {\n\t\treturn\n\t}\n\n\tdata, raw, err := getExternalData(config.Source, config.InputType)\n\tif err != nil {\n\t\tif detailedErr, ok := err.(summaryError); ok {\n\t\t\tresp.Diagnostics.AddError(detailedErr.Summary, detailedErr.Err.Error())\n\t\t} else {\n\t\t\tresp.Diagnostics.AddError(\"Failed to decrypt file\", err.Error())\n\t\t}\n\t\treturn\n\t}\n\n\tm, mapDiags := types.MapValueFrom(ctx, types.StringType, data)\n\tresp.Diagnostics.Append(mapDiags...)\n\tif resp.Diagnostics.HasError() {\n\t\treturn\n\t}\n\n\tconfig.Data = m\n\tconfig.Raw = types.StringValue(raw)\n\tconfig.Id = types.StringValue(\"-\")\n\n\tdiags = resp.State.Set(ctx, config)\n\tresp.Diagnostics.Append(diags...)\n}\n"
  },
  {
    "path": "sops/data_sops_external_test.go",
    "content": "package sops\n\nimport (\n\t\"fmt\"\n\t\"os\"\n\t\"testing\"\n\n\t\"github.com/hashicorp/terraform-plugin-testing/helper/resource\"\n)\n\nconst configTestDataSourceSopsExternal_basic = `\ndata \"sops_external\" \"test_basic\" {\n  source     = file(\"%s/test-fixtures/basic.yaml\")\n  input_type = \"yaml\"\n}`\n\nfunc TestDataSourceSopsExternal(t *testing.T) {\n\twd, err := os.Getwd()\n\tif err != nil {\n\t\tt.Fatal(err)\n\t}\n\tconfig := fmt.Sprintf(configTestDataSourceSopsExternal_basic, wd)\n\tresource.UnitTest(t, resource.TestCase{\n\t\tProtoV6ProviderFactories: testAccProtoV6ProviderFactories,\n\t\tSteps: []resource.TestStep{\n\t\t\t{\n\t\t\t\tConfig: config,\n\t\t\t\tCheck: resource.ComposeTestCheckFunc(\n\t\t\t\t\tresource.TestCheckResourceAttr(\"data.sops_external.test_basic\", \"data.hello\", \"world\"),\n\t\t\t\t\tresource.TestCheckResourceAttr(\"data.sops_external.test_basic\", \"data.integer\", \"0\"),\n\t\t\t\t\tresource.TestCheckResourceAttr(\"data.sops_external.test_basic\", \"data.float\", \"0.2\"),\n\t\t\t\t\tresource.TestCheckResourceAttr(\"data.sops_external.test_basic\", \"data.bool\", \"true\"),\n\t\t\t\t\tresource.TestCheckResourceAttr(\"data.sops_external.test_basic\", \"data.null_value\", \"null\"),\n\t\t\t\t),\n\t\t\t},\n\t\t},\n\t})\n}\n\nconst configTestDataSourceSopsExternal_nested = `\ndata \"sops_external\" \"test_nested\" {\n  source     = file(\"%s/test-fixtures/nested.yaml\")\n  input_type = \"yaml\"\n}`\n\nfunc TestDataSourceSopsExternal_nested(t *testing.T) {\n\twd, err := os.Getwd()\n\tif err != nil {\n\t\tt.Fatal(err)\n\t}\n\tconfig := fmt.Sprintf(configTestDataSourceSopsExternal_nested, wd)\n\tresource.UnitTest(t, resource.TestCase{\n\t\tProtoV6ProviderFactories: testAccProtoV6ProviderFactories,\n\t\tSteps: []resource.TestStep{\n\t\t\t{\n\t\t\t\tConfig: config,\n\t\t\t\tCheck: resource.ComposeTestCheckFunc(\n\t\t\t\t\tresource.TestCheckResourceAttr(\"data.sops_external.test_nested\", \"data.db.user\", \"foo\"),\n\t\t\t\t\tresource.TestCheckResourceAttr(\"data.sops_external.test_nested\", \"data.db.password\", \"bar\"),\n\t\t\t\t),\n\t\t\t},\n\t\t},\n\t})\n}\n\nconst configTestDataSourceSopsExternal_raw = `\ndata \"sops_external\" \"test_raw\" {\n  source     = file(\"%s/test-fixtures/raw.txt\")\n  input_type = \"raw\"\n}`\n\nfunc TestDataSourceSopsExternal_raw(t *testing.T) {\n\twd, err := os.Getwd()\n\tif err != nil {\n\t\tt.Fatal(err)\n\t}\n\tconfig := fmt.Sprintf(configTestDataSourceSopsExternal_raw, wd)\n\tresource.UnitTest(t, resource.TestCase{\n\t\tProtoV6ProviderFactories: testAccProtoV6ProviderFactories,\n\t\tSteps: []resource.TestStep{\n\t\t\t{\n\t\t\t\tConfig: config,\n\t\t\t\tCheck: resource.ComposeTestCheckFunc(\n\t\t\t\t\tresource.TestCheckResourceAttr(\"data.sops_external.test_raw\", \"raw\", \"Hello raw world!\"),\n\t\t\t\t),\n\t\t\t},\n\t\t},\n\t})\n}\n\nconst configTestDataSourceSopsExternal_simplelist = `\ndata \"sops_external\" \"test_list\" {\n  source     = file(\"%s/test-fixtures/simple-list.yaml\")\n  input_type = \"yaml\"\n}`\n\nfunc TestDataSourceSopsExternal_simplelist(t *testing.T) {\n\twd, err := os.Getwd()\n\tif err != nil {\n\t\tt.Fatal(err)\n\t}\n\tconfig := fmt.Sprintf(configTestDataSourceSopsExternal_simplelist, wd)\n\tresource.UnitTest(t, resource.TestCase{\n\t\tProtoV6ProviderFactories: testAccProtoV6ProviderFactories,\n\t\tSteps: []resource.TestStep{\n\t\t\t{\n\t\t\t\tConfig: config,\n\t\t\t\tCheck: resource.ComposeTestCheckFunc(\n\t\t\t\t\tresource.TestCheckResourceAttr(\"data.sops_external.test_list\", \"data.a_list.0\", \"val1\"),\n\t\t\t\t\tresource.TestCheckResourceAttr(\"data.sops_external.test_list\", \"data.a_list.1\", \"val2\"),\n\t\t\t\t\tresource.TestCheckResourceAttr(\"data.sops_external.test_list\", \"data.a_list.2\", \"null\"),\n\t\t\t\t),\n\t\t\t},\n\t\t},\n\t})\n}\n\nconst configTestDataSourceSopsExternal_complexlist = `\ndata \"sops_external\" \"test_list\" {\n  source     = file(\"%s/test-fixtures/complex-list.yaml\")\n  input_type = \"yaml\"\n}`\n\nfunc TestDataSourceSopsExternal_complexlist(t *testing.T) {\n\twd, err := os.Getwd()\n\tif err != nil {\n\t\tt.Fatal(err)\n\t}\n\tconfig := fmt.Sprintf(configTestDataSourceSopsExternal_complexlist, wd)\n\tresource.UnitTest(t, resource.TestCase{\n\t\tProtoV6ProviderFactories: testAccProtoV6ProviderFactories,\n\t\tSteps: []resource.TestStep{\n\t\t\t{\n\t\t\t\tConfig: config,\n\t\t\t\tCheck: resource.ComposeTestCheckFunc(\n\t\t\t\t\tresource.TestCheckResourceAttr(\"data.sops_external.test_list\", \"data.a_list.0.name\", \"foo\"),\n\t\t\t\t\tresource.TestCheckResourceAttr(\"data.sops_external.test_list\", \"data.a_list.0.index\", \"0\"),\n\t\t\t\t\tresource.TestCheckResourceAttr(\"data.sops_external.test_list\", \"data.a_list.0.value\", \"null\"),\n\t\t\t\t\tresource.TestCheckResourceAttr(\"data.sops_external.test_list\", \"data.a_list.1.name\", \"bar\"),\n\t\t\t\t\tresource.TestCheckResourceAttr(\"data.sops_external.test_list\", \"data.a_list.1.index\", \"1\"),\n\t\t\t\t),\n\t\t\t},\n\t\t},\n\t})\n}\n\nconst configTestDataSourceSopsExternal_json = `\ndata \"sops_external\" \"test_json\" {\n  source     = file(\"%s/test-fixtures/basic.json\")\n  input_type = \"json\"\n}`\n\nfunc TestDataSourceSopsExternal_json(t *testing.T) {\n\twd, err := os.Getwd()\n\tif err != nil {\n\t\tt.Fatal(err)\n\t}\n\tconfig := fmt.Sprintf(configTestDataSourceSopsExternal_json, wd)\n\tresource.UnitTest(t, resource.TestCase{\n\t\tProtoV6ProviderFactories: testAccProtoV6ProviderFactories,\n\t\tSteps: []resource.TestStep{\n\t\t\t{\n\t\t\t\tConfig: config,\n\t\t\t\tCheck: resource.ComposeTestCheckFunc(\n\t\t\t\t\tresource.TestCheckResourceAttr(\"data.sops_external.test_json\", \"data.hello\", \"world\"),\n\t\t\t\t\tresource.TestCheckResourceAttr(\"data.sops_external.test_json\", \"data.integer\", \"0\"),\n\t\t\t\t\tresource.TestCheckResourceAttr(\"data.sops_external.test_json\", \"data.float\", \"0.2\"),\n\t\t\t\t\tresource.TestCheckResourceAttr(\"data.sops_external.test_json\", \"data.bool\", \"true\"),\n\t\t\t\t\tresource.TestCheckResourceAttr(\"data.sops_external.test_json\", \"data.null\", \"null\"),\n\t\t\t\t),\n\t\t\t},\n\t\t},\n\t})\n}\n"
  },
  {
    "path": "sops/data_sops_file.go",
    "content": "package sops\n\nimport (\n\t\"context\"\n\n\t\"github.com/hashicorp/terraform-plugin-framework/datasource\"\n\t\"github.com/hashicorp/terraform-plugin-framework/datasource/schema\"\n\t\"github.com/hashicorp/terraform-plugin-framework/types\"\n)\n\nvar _ datasource.DataSource = &fileDataSource{}\n\nfunc newFileDataSource() datasource.DataSource {\n\treturn &fileDataSource{}\n}\n\ntype fileDataSource struct{}\n\ntype fileDataSourceModel struct {\n\tInputType  types.String `tfsdk:\"input_type\"`\n\tSourceFile types.String `tfsdk:\"source_file\"`\n\tData       types.Map    `tfsdk:\"data\"`\n\tRaw        types.String `tfsdk:\"raw\"`\n\tId         types.String `tfsdk:\"id\"`\n}\n\nfunc (d *fileDataSource) Metadata(_ context.Context, _ datasource.MetadataRequest, resp *datasource.MetadataResponse) {\n\tresp.TypeName = \"sops_file\"\n}\n\nfunc (d *fileDataSource) Schema(_ context.Context, _ datasource.SchemaRequest, resp *datasource.SchemaResponse) {\n\tresp.Schema = schema.Schema{\n\t\tDescription: \"Read data from a sops-encrypted file on disk.\",\n\t\tAttributes: map[string]schema.Attribute{\n\t\t\t\"input_type\": schema.StringAttribute{\n\t\t\t\tDescription: \"The provider will use the file extension to determine how to unmarshal the data. If your file \" +\n\t\t\t\t\t\"does not have the usual extension, set this argument to `yaml`, `json`, `dotenv` (`.env`), `ini` accordingly, \" +\n\t\t\t\t\t\"or `raw` if the encrypted data is encoded differently.\",\n\t\t\t\tOptional: true,\n\t\t\t},\n\t\t\t\"source_file\": schema.StringAttribute{\n\t\t\t\tDescription: \"Path to the encrypted file.\",\n\t\t\t\tRequired:    true,\n\t\t\t},\n\n\t\t\t\"data\": schema.MapAttribute{\n\t\t\t\tDescription: \"The unmarshalled data as a dictionary. Use dot-separated keys to access nested data.\",\n\t\t\t\tComputed:    true,\n\t\t\t\tSensitive:   true,\n\t\t\t\tElementType: types.StringType,\n\t\t\t},\n\t\t\t\"raw\": schema.StringAttribute{\n\t\t\t\tDescription: \"The entire unencrypted file as a string.\",\n\t\t\t\tComputed:    true,\n\t\t\t\tSensitive:   true,\n\t\t\t},\n\t\t\t\"id\": schema.StringAttribute{\n\t\t\t\tDescription: \"Unique identifier for this data source.\",\n\t\t\t\tComputed:    true,\n\t\t\t},\n\t\t},\n\t}\n}\n\nfunc (d *fileDataSource) Read(ctx context.Context, req datasource.ReadRequest, resp *datasource.ReadResponse) {\n\tvar config fileDataSourceModel\n\tdiags := req.Config.Get(ctx, &config)\n\tresp.Diagnostics.Append(diags...)\n\tif resp.Diagnostics.HasError() {\n\t\treturn\n\t}\n\n\tdata, raw, err := getFileData(config.SourceFile, config.InputType)\n\tif err != nil {\n\t\tif detailedErr, ok := err.(summaryError); ok {\n\t\t\tresp.Diagnostics.AddError(detailedErr.Summary, detailedErr.Err.Error())\n\t\t} else {\n\t\t\tresp.Diagnostics.AddError(\"Failed to decrypt file\", err.Error())\n\t\t}\n\t\treturn\n\t}\n\n\tm, mapDiags := types.MapValueFrom(ctx, types.StringType, data)\n\tresp.Diagnostics.Append(mapDiags...)\n\n\tif resp.Diagnostics.HasError() {\n\t\treturn\n\t}\n\n\tconfig.Data = m\n\tconfig.Raw = types.StringValue(raw)\n\tconfig.Id = types.StringValue(\"-\")\n\n\tdiags = resp.State.Set(ctx, config)\n\tresp.Diagnostics.Append(diags...)\n}\n"
  },
  {
    "path": "sops/data_sops_file_test.go",
    "content": "package sops\n\nimport (\n\t\"fmt\"\n\t\"os\"\n\t\"testing\"\n\n\t\"github.com/hashicorp/terraform-plugin-testing/helper/resource\"\n)\n\nconst configTestDataSourceSopsFile_basic = `\ndata \"sops_file\" \"test_basic\" {\n  source_file = \"%s/test-fixtures/basic.yaml\"\n}`\n\nfunc TestDataSourceSopsFile_basic(t *testing.T) {\n\twd, err := os.Getwd()\n\tif err != nil {\n\t\tt.Fatal(err)\n\t}\n\tconfig := fmt.Sprintf(configTestDataSourceSopsFile_basic, wd)\n\tresource.UnitTest(t, resource.TestCase{\n\t\tProtoV6ProviderFactories: testAccProtoV6ProviderFactories,\n\t\tSteps: []resource.TestStep{\n\t\t\t{\n\t\t\t\tConfig: config,\n\t\t\t\tCheck: resource.ComposeTestCheckFunc(\n\t\t\t\t\tresource.TestCheckResourceAttr(\"data.sops_file.test_basic\", \"data.hello\", \"world\"),\n\t\t\t\t\tresource.TestCheckResourceAttr(\"data.sops_file.test_basic\", \"data.integer\", \"0\"),\n\t\t\t\t\tresource.TestCheckResourceAttr(\"data.sops_file.test_basic\", \"data.float\", \"0.2\"),\n\t\t\t\t\tresource.TestCheckResourceAttr(\"data.sops_file.test_basic\", \"data.bool\", \"true\"),\n\t\t\t\t\tresource.TestCheckResourceAttr(\"data.sops_file.test_basic\", \"data.null_value\", \"null\"),\n\t\t\t\t),\n\t\t\t},\n\t\t},\n\t})\n}\n\nconst configTestDataSourceSopsFile_nested = `\ndata \"sops_file\" \"test_nested\" {\n  source_file = \"%s/test-fixtures/nested.yaml\"\n}`\n\nfunc TestDataSourceSopsFile_nested(t *testing.T) {\n\twd, err := os.Getwd()\n\tif err != nil {\n\t\tt.Fatal(err)\n\t}\n\tconfig := fmt.Sprintf(configTestDataSourceSopsFile_nested, wd)\n\tresource.UnitTest(t, resource.TestCase{\n\t\tProtoV6ProviderFactories: testAccProtoV6ProviderFactories,\n\t\tSteps: []resource.TestStep{\n\t\t\t{\n\t\t\t\tConfig: config,\n\t\t\t\tCheck: resource.ComposeTestCheckFunc(\n\t\t\t\t\tresource.TestCheckResourceAttr(\"data.sops_file.test_nested\", \"data.db.user\", \"foo\"),\n\t\t\t\t\tresource.TestCheckResourceAttr(\"data.sops_file.test_nested\", \"data.db.password\", \"bar\"),\n\t\t\t\t),\n\t\t\t},\n\t\t},\n\t})\n}\n\nconst configTestDataSourceSopsFile_raw = `\ndata \"sops_file\" \"test_raw\" {\n  source_file = \"%s/test-fixtures/raw.txt\"\n  input_type = \"raw\"\n}`\n\nfunc TestDataSourceSopsFile_raw(t *testing.T) {\n\twd, err := os.Getwd()\n\tif err != nil {\n\t\tt.Fatal(err)\n\t}\n\tconfig := fmt.Sprintf(configTestDataSourceSopsFile_raw, wd)\n\tresource.UnitTest(t, resource.TestCase{\n\t\tProtoV6ProviderFactories: testAccProtoV6ProviderFactories,\n\t\tSteps: []resource.TestStep{\n\t\t\t{\n\t\t\t\tConfig: config,\n\t\t\t\tCheck: resource.ComposeTestCheckFunc(\n\t\t\t\t\tresource.TestCheckResourceAttr(\"data.sops_file.test_raw\", \"raw\", \"Hello raw world!\"),\n\t\t\t\t),\n\t\t\t},\n\t\t},\n\t})\n}\n\nconst configTestDataSourceSopsFile_simplelist = `\ndata \"sops_file\" \"test_list\" {\n  source_file = \"%s/test-fixtures/simple-list.yaml\"\n}`\n\nfunc TestDataSourceSopsFile_simplelist(t *testing.T) {\n\twd, err := os.Getwd()\n\tif err != nil {\n\t\tt.Fatal(err)\n\t}\n\tconfig := fmt.Sprintf(configTestDataSourceSopsFile_simplelist, wd)\n\tresource.UnitTest(t, resource.TestCase{\n\t\tProtoV6ProviderFactories: testAccProtoV6ProviderFactories,\n\t\tSteps: []resource.TestStep{\n\t\t\t{\n\t\t\t\tConfig: config,\n\t\t\t\tCheck: resource.ComposeTestCheckFunc(\n\t\t\t\t\tresource.TestCheckResourceAttr(\"data.sops_file.test_list\", \"data.a_list.0\", \"val1\"),\n\t\t\t\t\tresource.TestCheckResourceAttr(\"data.sops_file.test_list\", \"data.a_list.1\", \"val2\"),\n\t\t\t\t\tresource.TestCheckResourceAttr(\"data.sops_file.test_list\", \"data.a_list.2\", \"null\"),\n\t\t\t\t),\n\t\t\t},\n\t\t},\n\t})\n}\n\nconst configTestDataSourceSopsFile_complexlist = `\ndata \"sops_file\" \"test_list\" {\n  source_file = \"%s/test-fixtures/complex-list.yaml\"\n}`\n\nfunc TestDataSourceSopsFile_complexlist(t *testing.T) {\n\twd, err := os.Getwd()\n\tif err != nil {\n\t\tt.Fatal(err)\n\t}\n\tconfig := fmt.Sprintf(configTestDataSourceSopsFile_complexlist, wd)\n\tresource.UnitTest(t, resource.TestCase{\n\t\tProtoV6ProviderFactories: testAccProtoV6ProviderFactories,\n\t\tSteps: []resource.TestStep{\n\t\t\t{\n\t\t\t\tConfig: config,\n\t\t\t\tCheck: resource.ComposeTestCheckFunc(\n\t\t\t\t\tresource.TestCheckResourceAttr(\"data.sops_file.test_list\", \"data.a_list.0.name\", \"foo\"),\n\t\t\t\t\tresource.TestCheckResourceAttr(\"data.sops_file.test_list\", \"data.a_list.0.index\", \"0\"),\n\t\t\t\t\tresource.TestCheckResourceAttr(\"data.sops_file.test_list\", \"data.a_list.0.value\", \"null\"),\n\t\t\t\t\tresource.TestCheckResourceAttr(\"data.sops_file.test_list\", \"data.a_list.1.name\", \"bar\"),\n\t\t\t\t\tresource.TestCheckResourceAttr(\"data.sops_file.test_list\", \"data.a_list.1.index\", \"1\"),\n\t\t\t\t),\n\t\t\t},\n\t\t},\n\t})\n}\n\nconst configTestDataSourceSopsFile_json = `\ndata \"sops_file\" \"test_json\" {\n  source_file = \"%s/test-fixtures/basic.json\"\n}`\n\nfunc TestDataSourceSopsFile_json(t *testing.T) {\n\twd, err := os.Getwd()\n\tif err != nil {\n\t\tt.Fatal(err)\n\t}\n\tconfig := fmt.Sprintf(configTestDataSourceSopsFile_json, wd)\n\tresource.UnitTest(t, resource.TestCase{\n\t\tProtoV6ProviderFactories: testAccProtoV6ProviderFactories,\n\t\tSteps: []resource.TestStep{\n\t\t\t{\n\t\t\t\tConfig: config,\n\t\t\t\tCheck: resource.ComposeTestCheckFunc(\n\t\t\t\t\tresource.TestCheckResourceAttr(\"data.sops_file.test_json\", \"data.hello\", \"world\"),\n\t\t\t\t\tresource.TestCheckResourceAttr(\"data.sops_file.test_json\", \"data.integer\", \"0\"),\n\t\t\t\t\tresource.TestCheckResourceAttr(\"data.sops_file.test_json\", \"data.float\", \"0.2\"),\n\t\t\t\t\tresource.TestCheckResourceAttr(\"data.sops_file.test_json\", \"data.bool\", \"true\"),\n\t\t\t\t\tresource.TestCheckResourceAttr(\"data.sops_file.test_json\", \"data.null\", \"null\"),\n\t\t\t\t),\n\t\t\t},\n\t\t},\n\t})\n}\n"
  },
  {
    "path": "sops/ephemeral_sops_external.go",
    "content": "package sops\n\nimport (\n\t\"context\"\n\n\t\"github.com/hashicorp/terraform-plugin-framework/ephemeral\"\n\t\"github.com/hashicorp/terraform-plugin-framework/ephemeral/schema\"\n\t\"github.com/hashicorp/terraform-plugin-framework/types\"\n)\n\nvar _ ephemeral.EphemeralResource = &externalEphemeralResource{}\n\nfunc newExternalEphemeral() ephemeral.EphemeralResource {\n\treturn &externalEphemeralResource{}\n}\n\ntype externalEphemeralResource struct{}\n\ntype externalEphemeralModel struct {\n\tInputType types.String `tfsdk:\"input_type\"`\n\tSource    types.String `tfsdk:\"source\"`\n\tData      types.Map    `tfsdk:\"data\"`\n\tRaw       types.String `tfsdk:\"raw\"`\n}\n\nfunc (d *externalEphemeralResource) Metadata(_ context.Context, _ ephemeral.MetadataRequest, resp *ephemeral.MetadataResponse) {\n\tresp.TypeName = \"sops_external\"\n}\n\nfunc (d *externalEphemeralResource) Schema(_ context.Context, _ ephemeral.SchemaRequest, resp *ephemeral.SchemaResponse) {\n\tresp.Schema = schema.Schema{\n\t\tDescription: \"Read data from a sops-encrypted string. Useful if the data does not reside on disk locally (otherwise use `sops_file`).\",\n\t\tAttributes: map[string]schema.Attribute{\n\t\t\t\"input_type\": schema.StringAttribute{\n\t\t\t\tDescription: \"`yaml`, `json` `dotenv` (`.env`), `ini` or `raw`, depending on the structure of the un-encrypted data.\",\n\t\t\t\tOptional:    true,\n\t\t\t},\n\t\t\t\"source\": schema.StringAttribute{\n\t\t\t\tDescription: \"A string with sops-encrypted data\",\n\t\t\t\tRequired:    true,\n\t\t\t},\n\n\t\t\t\"data\": schema.MapAttribute{\n\t\t\t\tDescription: \"Decrypted data\",\n\t\t\t\tComputed:    true,\n\t\t\t\tSensitive:   true,\n\t\t\t\tElementType: types.StringType,\n\t\t\t},\n\t\t\t\"raw\": schema.StringAttribute{\n\t\t\t\tDescription: \"Raw decrypted content\",\n\t\t\t\tComputed:    true,\n\t\t\t\tSensitive:   true,\n\t\t\t},\n\t\t},\n\t}\n}\n\nfunc (d *externalEphemeralResource) Open(ctx context.Context, req ephemeral.OpenRequest, resp *ephemeral.OpenResponse) {\n\tvar config externalEphemeralModel\n\tdiags := req.Config.Get(ctx, &config)\n\tresp.Diagnostics.Append(diags...)\n\tif resp.Diagnostics.HasError() {\n\t\treturn\n\t}\n\n\tdata, raw, err := getExternalData(config.Source, config.InputType)\n\tif err != nil {\n\t\tif detailedErr, ok := err.(summaryError); ok {\n\t\t\tresp.Diagnostics.AddError(detailedErr.Summary, detailedErr.Err.Error())\n\t\t} else {\n\t\t\tresp.Diagnostics.AddError(\"Failed to decrypt file\", err.Error())\n\t\t}\n\t\treturn\n\t}\n\n\tm, mapDiags := types.MapValueFrom(ctx, types.StringType, data)\n\tresp.Diagnostics.Append(mapDiags...)\n\tif resp.Diagnostics.HasError() {\n\t\treturn\n\t}\n\n\tconfig.Data = m\n\tconfig.Raw = types.StringValue(raw)\n\n\tdiags = resp.Result.Set(ctx, config)\n\tresp.Diagnostics.Append(diags...)\n}\n"
  },
  {
    "path": "sops/ephemeral_sops_external_test.go",
    "content": "package sops\n\nimport (\n\t\"fmt\"\n\t\"os\"\n\t\"testing\"\n\n\t\"github.com/hashicorp/terraform-plugin-testing/helper/resource\"\n)\n\nconst configTestEphemeralSopsExternal_basic = `\nephemeral \"sops_external\" \"test_basic\" {\n  source     = file(\"%s/test-fixtures/basic.yaml\")\n  input_type = \"yaml\"\n}\n\nprovider \"echo\" {\n  data = ephemeral.sops_external.test_basic.data\n}\n\nresource \"echo\" \"test_basic\" {}\n`\n\nfunc TestEphemeralSopsExternal(t *testing.T) {\n\twd, err := os.Getwd()\n\tif err != nil {\n\t\tt.Fatal(err)\n\t}\n\tconfig := fmt.Sprintf(configTestEphemeralSopsExternal_basic, wd)\n\tresource.UnitTest(t, resource.TestCase{\n\t\tProtoV6ProviderFactories: testAccProtoV6ProviderFactories,\n\t\tSteps: []resource.TestStep{\n\t\t\t{\n\t\t\t\tConfig: config,\n\t\t\t\tCheck: resource.ComposeTestCheckFunc(\n\t\t\t\t\tresource.TestCheckResourceAttr(\"echo.test_basic\", \"data.hello\", \"world\"),\n\t\t\t\t\tresource.TestCheckResourceAttr(\"echo.test_basic\", \"data.integer\", \"0\"),\n\t\t\t\t\tresource.TestCheckResourceAttr(\"echo.test_basic\", \"data.float\", \"0.2\"),\n\t\t\t\t\tresource.TestCheckResourceAttr(\"echo.test_basic\", \"data.bool\", \"true\"),\n\t\t\t\t\tresource.TestCheckResourceAttr(\"echo.test_basic\", \"data.null_value\", \"null\"),\n\t\t\t\t),\n\t\t\t},\n\t\t},\n\t})\n}\n\nconst configTestEphemeralSopsExternal_nested = `\nephemeral \"sops_external\" \"test_nested\" {\n  source     = file(\"%s/test-fixtures/nested.yaml\")\n  input_type = \"yaml\"\n}\n\nprovider \"echo\" {\n  data = ephemeral.sops_external.test_nested.data\n}\n\nresource \"echo\" \"test_nested\" {}\n`\n\nfunc TestEphemeralSopsExternal_nested(t *testing.T) {\n\twd, err := os.Getwd()\n\tif err != nil {\n\t\tt.Fatal(err)\n\t}\n\tconfig := fmt.Sprintf(configTestEphemeralSopsExternal_nested, wd)\n\tresource.UnitTest(t, resource.TestCase{\n\t\tProtoV6ProviderFactories: testAccProtoV6ProviderFactories,\n\t\tSteps: []resource.TestStep{\n\t\t\t{\n\t\t\t\tConfig: config,\n\t\t\t\tCheck: resource.ComposeTestCheckFunc(\n\t\t\t\t\tresource.TestCheckResourceAttr(\"echo.test_nested\", \"data.db.user\", \"foo\"),\n\t\t\t\t\tresource.TestCheckResourceAttr(\"echo.test_nested\", \"data.db.password\", \"bar\"),\n\t\t\t\t),\n\t\t\t},\n\t\t},\n\t})\n}\n\nconst configTestEphemeralSopsExternal_raw = `\nephemeral \"sops_external\" \"test_raw\" {\n  source     = file(\"%s/test-fixtures/raw.txt\")\n  input_type = \"raw\"\n}\n\nprovider \"echo\" {\n  data = ephemeral.sops_external.test_raw.raw\n}\n\nresource \"echo\" \"test_raw\" {}\n`\n\nfunc TestEphemeralSopsExternal_raw(t *testing.T) {\n\twd, err := os.Getwd()\n\tif err != nil {\n\t\tt.Fatal(err)\n\t}\n\tconfig := fmt.Sprintf(configTestEphemeralSopsExternal_raw, wd)\n\tresource.UnitTest(t, resource.TestCase{\n\t\tProtoV6ProviderFactories: testAccProtoV6ProviderFactories,\n\t\tSteps: []resource.TestStep{\n\t\t\t{\n\t\t\t\tConfig: config,\n\t\t\t\tCheck: resource.ComposeTestCheckFunc(\n\t\t\t\t\tresource.TestCheckResourceAttr(\"echo.test_raw\", \"data\", \"Hello raw world!\"),\n\t\t\t\t),\n\t\t\t},\n\t\t},\n\t})\n}\n\nconst configTestEphemeralSopsExternal_simplelist = `\nephemeral \"sops_external\" \"test_list\" {\n  source     = file(\"%s/test-fixtures/simple-list.yaml\")\n  input_type = \"yaml\"\n}\n\nprovider \"echo\" {\n  data = ephemeral.sops_external.test_list.data\n}\n\nresource \"echo\" \"test_list\" {}\n`\n\nfunc TestEphemeralSopsExternal_simplelist(t *testing.T) {\n\twd, err := os.Getwd()\n\tif err != nil {\n\t\tt.Fatal(err)\n\t}\n\tconfig := fmt.Sprintf(configTestEphemeralSopsExternal_simplelist, wd)\n\tresource.UnitTest(t, resource.TestCase{\n\t\tProtoV6ProviderFactories: testAccProtoV6ProviderFactories,\n\t\tSteps: []resource.TestStep{\n\t\t\t{\n\t\t\t\tConfig: config,\n\t\t\t\tCheck: resource.ComposeTestCheckFunc(\n\t\t\t\t\tresource.TestCheckResourceAttr(\"echo.test_list\", \"data.a_list.0\", \"val1\"),\n\t\t\t\t\tresource.TestCheckResourceAttr(\"echo.test_list\", \"data.a_list.1\", \"val2\"),\n\t\t\t\t\tresource.TestCheckResourceAttr(\"echo.test_list\", \"data.a_list.2\", \"null\"),\n\t\t\t\t),\n\t\t\t},\n\t\t},\n\t})\n}\n\nconst configTestEphemeralSopsExternal_complexlist = `\nephemeral \"sops_external\" \"test_list\" {\n  source     = file(\"%s/test-fixtures/complex-list.yaml\")\n  input_type = \"yaml\"\n}\n\nprovider \"echo\" {\n  data = ephemeral.sops_external.test_list.data\n}\n\nresource \"echo\" \"test_list\" {}\n`\n\nfunc TestEphemeralSopsExternal_complexlist(t *testing.T) {\n\twd, err := os.Getwd()\n\tif err != nil {\n\t\tt.Fatal(err)\n\t}\n\tconfig := fmt.Sprintf(configTestEphemeralSopsExternal_complexlist, wd)\n\tresource.UnitTest(t, resource.TestCase{\n\t\tProtoV6ProviderFactories: testAccProtoV6ProviderFactories,\n\t\tSteps: []resource.TestStep{\n\t\t\t{\n\t\t\t\tConfig: config,\n\t\t\t\tCheck: resource.ComposeTestCheckFunc(\n\t\t\t\t\tresource.TestCheckResourceAttr(\"echo.test_list\", \"data.a_list.0.name\", \"foo\"),\n\t\t\t\t\tresource.TestCheckResourceAttr(\"echo.test_list\", \"data.a_list.0.index\", \"0\"),\n\t\t\t\t\tresource.TestCheckResourceAttr(\"echo.test_list\", \"data.a_list.0.value\", \"null\"),\n\t\t\t\t\tresource.TestCheckResourceAttr(\"echo.test_list\", \"data.a_list.1.name\", \"bar\"),\n\t\t\t\t\tresource.TestCheckResourceAttr(\"echo.test_list\", \"data.a_list.1.index\", \"1\"),\n\t\t\t\t),\n\t\t\t},\n\t\t},\n\t})\n}\n\nconst configTestEphemeralSopsExternal_json = `\nephemeral \"sops_external\" \"test_json\" {\n  source     = file(\"%s/test-fixtures/basic.json\")\n  input_type = \"json\"\n}\n\nprovider \"echo\" {\n  data = ephemeral.sops_external.test_json.data\n}\n\nresource \"echo\" \"test_json\" {}\n`\n\nfunc TestEphemeralSopsExternal_json(t *testing.T) {\n\twd, err := os.Getwd()\n\tif err != nil {\n\t\tt.Fatal(err)\n\t}\n\tconfig := fmt.Sprintf(configTestEphemeralSopsExternal_json, wd)\n\tresource.UnitTest(t, resource.TestCase{\n\t\tProtoV6ProviderFactories: testAccProtoV6ProviderFactories,\n\t\tSteps: []resource.TestStep{\n\t\t\t{\n\t\t\t\tConfig: config,\n\t\t\t\tCheck: resource.ComposeTestCheckFunc(\n\t\t\t\t\tresource.TestCheckResourceAttr(\"echo.test_json\", \"data.hello\", \"world\"),\n\t\t\t\t\tresource.TestCheckResourceAttr(\"echo.test_json\", \"data.integer\", \"0\"),\n\t\t\t\t\tresource.TestCheckResourceAttr(\"echo.test_json\", \"data.float\", \"0.2\"),\n\t\t\t\t\tresource.TestCheckResourceAttr(\"echo.test_json\", \"data.bool\", \"true\"),\n\t\t\t\t\tresource.TestCheckResourceAttr(\"echo.test_json\", \"data.null\", \"null\"),\n\t\t\t\t),\n\t\t\t},\n\t\t},\n\t})\n}\n"
  },
  {
    "path": "sops/ephemeral_sops_file.go",
    "content": "package sops\n\nimport (\n\t\"context\"\n\n\t\"github.com/hashicorp/terraform-plugin-framework/ephemeral\"\n\t\"github.com/hashicorp/terraform-plugin-framework/ephemeral/schema\"\n\t\"github.com/hashicorp/terraform-plugin-framework/types\"\n)\n\nvar _ ephemeral.EphemeralResource = &fileEphemeralResource{}\n\nfunc newFileEphemeralResource() ephemeral.EphemeralResource {\n\treturn &fileEphemeralResource{}\n}\n\ntype fileEphemeralResource struct{}\n\ntype fileEphemeralResourceModel struct {\n\tInputType  types.String `tfsdk:\"input_type\"`\n\tSourceFile types.String `tfsdk:\"source_file\"`\n\tData       types.Map    `tfsdk:\"data\"`\n\tRaw        types.String `tfsdk:\"raw\"`\n}\n\nfunc (d *fileEphemeralResource) Metadata(_ context.Context, _ ephemeral.MetadataRequest, resp *ephemeral.MetadataResponse) {\n\tresp.TypeName = \"sops_file\"\n}\n\nfunc (d *fileEphemeralResource) Schema(_ context.Context, _ ephemeral.SchemaRequest, resp *ephemeral.SchemaResponse) {\n\tresp.Schema = schema.Schema{\n\t\tDescription: \"Decrypt sops-encrypted files\",\n\t\tAttributes: map[string]schema.Attribute{\n\t\t\t\"input_type\": schema.StringAttribute{\n\t\t\t\tDescription: \"The provider will use the file extension to determine how to unmarshal the data. If your file \" +\n\t\t\t\t\t\"does not have the usual extension, set this argument to `yaml`, `json`, `dotenv` (`.env`), `ini` accordingly, \" +\n\t\t\t\t\t\"or `raw` if the encrypted data is encoded differently.\",\n\t\t\t\tOptional: true,\n\t\t\t},\n\t\t\t\"source_file\": schema.StringAttribute{\n\t\t\t\tDescription: \"Path to the encrypted file\",\n\t\t\t\tRequired:    true,\n\t\t\t},\n\n\t\t\t\"data\": schema.MapAttribute{\n\t\t\t\tDescription: \"The unmarshalled data as a dictionary. Use dot-separated keys to access nested data.\",\n\t\t\t\tComputed:    true,\n\t\t\t\tSensitive:   true,\n\t\t\t\tElementType: types.StringType,\n\t\t\t},\n\t\t\t\"raw\": schema.StringAttribute{\n\t\t\t\tDescription: \"Raw decrypted content\",\n\t\t\t\tComputed:    true,\n\t\t\t\tSensitive:   true,\n\t\t\t},\n\t\t},\n\t}\n}\n\nfunc (d *fileEphemeralResource) Open(ctx context.Context, req ephemeral.OpenRequest, resp *ephemeral.OpenResponse) {\n\tvar config fileEphemeralResourceModel\n\tdiags := req.Config.Get(ctx, &config)\n\tresp.Diagnostics.Append(diags...)\n\tif resp.Diagnostics.HasError() {\n\t\treturn\n\t}\n\n\tdata, raw, err := getFileData(config.SourceFile, config.InputType)\n\tif err != nil {\n\t\tif detailedErr, ok := err.(summaryError); ok {\n\t\t\tresp.Diagnostics.AddError(detailedErr.Summary, detailedErr.Err.Error())\n\t\t} else {\n\t\t\tresp.Diagnostics.AddError(\"Failed to decrypt file\", err.Error())\n\t\t}\n\t\treturn\n\t}\n\n\tm, mapDiags := types.MapValueFrom(ctx, types.StringType, data)\n\tresp.Diagnostics.Append(mapDiags...)\n\n\tif resp.Diagnostics.HasError() {\n\t\treturn\n\t}\n\n\tconfig.Data = m\n\tconfig.Raw = types.StringValue(raw)\n\n\tdiags = resp.Result.Set(ctx, config)\n\tresp.Diagnostics.Append(diags...)\n}\n"
  },
  {
    "path": "sops/ephemeral_sops_file_test.go",
    "content": "package sops\n\nimport (\n\t\"fmt\"\n\t\"os\"\n\t\"testing\"\n\n\t\"github.com/hashicorp/terraform-plugin-testing/helper/resource\"\n)\n\nconst configTestEphemeralSopsFile_basic = `\nephemeral \"sops_file\" \"test_basic\" {\n  source_file = \"%s/test-fixtures/basic.yaml\"\n}\n\nprovider \"echo\" {\n  data = ephemeral.sops_file.test_basic.data\n}\n\nresource \"echo\" \"test_basic\" {}\n`\n\nfunc TestEphemeralSopsFile_basic(t *testing.T) {\n\twd, err := os.Getwd()\n\tif err != nil {\n\t\tt.Fatal(err)\n\t}\n\tconfig := fmt.Sprintf(configTestEphemeralSopsFile_basic, wd)\n\tresource.UnitTest(t, resource.TestCase{\n\t\tProtoV6ProviderFactories: testAccProtoV6ProviderFactories,\n\t\tSteps: []resource.TestStep{\n\t\t\t{\n\t\t\t\tConfig: config,\n\t\t\t\tCheck: resource.ComposeTestCheckFunc(\n\t\t\t\t\tresource.TestCheckResourceAttr(\"echo.test_basic\", \"data.hello\", \"world\"),\n\t\t\t\t\tresource.TestCheckResourceAttr(\"echo.test_basic\", \"data.integer\", \"0\"),\n\t\t\t\t\tresource.TestCheckResourceAttr(\"echo.test_basic\", \"data.float\", \"0.2\"),\n\t\t\t\t\tresource.TestCheckResourceAttr(\"echo.test_basic\", \"data.bool\", \"true\"),\n\t\t\t\t\tresource.TestCheckResourceAttr(\"echo.test_basic\", \"data.null_value\", \"null\"),\n\t\t\t\t),\n\t\t\t},\n\t\t},\n\t})\n}\n\nconst configTestEphemeralSopsFile_nested = `\nephemeral \"sops_file\" \"test_nested\" {\n  source_file = \"%s/test-fixtures/nested.yaml\"\n}\n\nprovider \"echo\" {\n  data = ephemeral.sops_file.test_nested.data\n}\n\nresource \"echo\" \"test_nested\" {}\n`\n\nfunc TestEphemeralSopsFile_nested(t *testing.T) {\n\twd, err := os.Getwd()\n\tif err != nil {\n\t\tt.Fatal(err)\n\t}\n\tconfig := fmt.Sprintf(configTestEphemeralSopsFile_nested, wd)\n\tresource.UnitTest(t, resource.TestCase{\n\t\tProtoV6ProviderFactories: testAccProtoV6ProviderFactories,\n\t\tSteps: []resource.TestStep{\n\t\t\t{\n\t\t\t\tConfig: config,\n\t\t\t\tCheck: resource.ComposeTestCheckFunc(\n\t\t\t\t\tresource.TestCheckResourceAttr(\"echo.test_nested\", \"data.db.user\", \"foo\"),\n\t\t\t\t\tresource.TestCheckResourceAttr(\"echo.test_nested\", \"data.db.password\", \"bar\"),\n\t\t\t\t),\n\t\t\t},\n\t\t},\n\t})\n}\n\nconst configTestEphemeralSopsFile_raw = `\nephemeral \"sops_file\" \"test_raw\" {\n  source_file = \"%s/test-fixtures/raw.txt\"\n  input_type = \"raw\"\n}\n\nprovider \"echo\" {\n  data = ephemeral.sops_file.test_raw.raw\n}\n\nresource \"echo\" \"test_raw\" {}\n`\n\nfunc TestEphemeralSopsFile_raw(t *testing.T) {\n\twd, err := os.Getwd()\n\tif err != nil {\n\t\tt.Fatal(err)\n\t}\n\tconfig := fmt.Sprintf(configTestEphemeralSopsFile_raw, wd)\n\tresource.UnitTest(t, resource.TestCase{\n\t\tProtoV6ProviderFactories: testAccProtoV6ProviderFactories,\n\t\tSteps: []resource.TestStep{\n\t\t\t{\n\t\t\t\tConfig: config,\n\t\t\t\tCheck: resource.ComposeTestCheckFunc(\n\t\t\t\t\tresource.TestCheckResourceAttr(\"echo.test_raw\", \"data\", \"Hello raw world!\"),\n\t\t\t\t),\n\t\t\t},\n\t\t},\n\t})\n}\n\nconst configTestEphemeralSopsFile_simplelist = `\nephemeral \"sops_file\" \"test_list\" {\n  source_file = \"%s/test-fixtures/simple-list.yaml\"\n}\n\nprovider \"echo\" {\n  data = ephemeral.sops_file.test_list.data\n}\n\nresource \"echo\" \"test_list\" {}\n`\n\nfunc TestEphemeralSopsFile_simplelist(t *testing.T) {\n\twd, err := os.Getwd()\n\tif err != nil {\n\t\tt.Fatal(err)\n\t}\n\tconfig := fmt.Sprintf(configTestEphemeralSopsFile_simplelist, wd)\n\tresource.UnitTest(t, resource.TestCase{\n\t\tProtoV6ProviderFactories: testAccProtoV6ProviderFactories,\n\t\tSteps: []resource.TestStep{\n\t\t\t{\n\t\t\t\tConfig: config,\n\t\t\t\tCheck: resource.ComposeTestCheckFunc(\n\t\t\t\t\tresource.TestCheckResourceAttr(\"echo.test_list\", \"data.a_list.0\", \"val1\"),\n\t\t\t\t\tresource.TestCheckResourceAttr(\"echo.test_list\", \"data.a_list.1\", \"val2\"),\n\t\t\t\t\tresource.TestCheckResourceAttr(\"echo.test_list\", \"data.a_list.2\", \"null\"),\n\t\t\t\t),\n\t\t\t},\n\t\t},\n\t})\n}\n\nconst configTestEphemeralSopsFile_complexlist = `\nephemeral \"sops_file\" \"test_list\" {\n  source_file = \"%s/test-fixtures/complex-list.yaml\"\n}\n\nprovider \"echo\" {\n  data = ephemeral.sops_file.test_list.data\n}\n\nresource \"echo\" \"test_list\" {}\n`\n\nfunc TestEphemeralSopsFile_complexlist(t *testing.T) {\n\twd, err := os.Getwd()\n\tif err != nil {\n\t\tt.Fatal(err)\n\t}\n\tconfig := fmt.Sprintf(configTestEphemeralSopsFile_complexlist, wd)\n\tresource.UnitTest(t, resource.TestCase{\n\t\tProtoV6ProviderFactories: testAccProtoV6ProviderFactories,\n\t\tSteps: []resource.TestStep{\n\t\t\t{\n\t\t\t\tConfig: config,\n\t\t\t\tCheck: resource.ComposeTestCheckFunc(\n\t\t\t\t\tresource.TestCheckResourceAttr(\"echo.test_list\", \"data.a_list.0.name\", \"foo\"),\n\t\t\t\t\tresource.TestCheckResourceAttr(\"echo.test_list\", \"data.a_list.0.index\", \"0\"),\n\t\t\t\t\tresource.TestCheckResourceAttr(\"echo.test_list\", \"data.a_list.0.value\", \"null\"),\n\t\t\t\t\tresource.TestCheckResourceAttr(\"echo.test_list\", \"data.a_list.1.name\", \"bar\"),\n\t\t\t\t\tresource.TestCheckResourceAttr(\"echo.test_list\", \"data.a_list.1.index\", \"1\"),\n\t\t\t\t),\n\t\t\t},\n\t\t},\n\t})\n}\n\nconst configTestEphemeralSopsFile_json = `\nephemeral \"sops_file\" \"test_json\" {\n  source_file = \"%s/test-fixtures/basic.json\"\n}\n\nprovider \"echo\" {\n  data = ephemeral.sops_file.test_json.data\n}\n\nresource \"echo\" \"test_json\" {}\n`\n\nfunc TestEphemeralSopsFile_json(t *testing.T) {\n\twd, err := os.Getwd()\n\tif err != nil {\n\t\tt.Fatal(err)\n\t}\n\tconfig := fmt.Sprintf(configTestEphemeralSopsFile_json, wd)\n\tresource.UnitTest(t, resource.TestCase{\n\t\tProtoV6ProviderFactories: testAccProtoV6ProviderFactories,\n\t\tSteps: []resource.TestStep{\n\t\t\t{\n\t\t\t\tConfig: config,\n\t\t\t\tCheck: resource.ComposeTestCheckFunc(\n\t\t\t\t\tresource.TestCheckResourceAttr(\"echo.test_json\", \"data.hello\", \"world\"),\n\t\t\t\t\tresource.TestCheckResourceAttr(\"echo.test_json\", \"data.integer\", \"0\"),\n\t\t\t\t\tresource.TestCheckResourceAttr(\"echo.test_json\", \"data.float\", \"0.2\"),\n\t\t\t\t\tresource.TestCheckResourceAttr(\"echo.test_json\", \"data.bool\", \"true\"),\n\t\t\t\t\tresource.TestCheckResourceAttr(\"echo.test_json\", \"data.null\", \"null\"),\n\t\t\t\t),\n\t\t\t},\n\t\t},\n\t})\n}\n"
  },
  {
    "path": "sops/flatten.go",
    "content": "package sops\n\nimport \"fmt\"\n\n// flatten flattens the nested struct.\n//\n// All keys will be joined by dot\n// e.g. {\"a\": {\"b\":\"c\"}} => {\"a.b\":\"c\"}\n// or {\"a\": {\"b\":[1,2]}} => {\"a.b.0\":1, \"a.b.1\": 2}\nfunc flatten(data map[string]interface{}) map[string]string {\n\tret := make(map[string]string)\n\tfor k, v := range data {\n\t\tswitch typed := v.(type) {\n\t\tcase map[interface{}]interface{}:\n\t\t\tfor fk, fv := range flatten(convertMap(typed)) {\n\t\t\t\tret[fmt.Sprintf(\"%s.%s\", k, fk)] = fv\n\t\t\t}\n\t\tcase map[string]interface{}:\n\t\t\tfor fk, fv := range flatten(typed) {\n\t\t\t\tret[fmt.Sprintf(\"%s.%s\", k, fk)] = fv\n\t\t\t}\n\t\tcase []interface{}:\n\t\t\tfor fk, fv := range flattenSlice(typed) {\n\t\t\t\tret[fmt.Sprintf(\"%s.%s\", k, fk)] = fv\n\t\t\t}\n\t\tcase nil:\n\t\t\tret[k] = \"null\"\n\t\tdefault:\n\t\t\tret[k] = fmt.Sprint(typed)\n\t\t}\n\t}\n\treturn ret\n}\n\nfunc flattenSlice(data []interface{}) map[string]string {\n\tret := make(map[string]string)\n\tfor idx, v := range data {\n\t\tswitch typed := v.(type) {\n\t\tcase map[interface{}]interface{}:\n\t\t\tfor fk, fv := range flatten(convertMap(typed)) {\n\t\t\t\tret[fmt.Sprintf(\"%d.%s\", idx, fk)] = fv\n\t\t\t}\n\t\tcase map[string]interface{}:\n\t\t\tfor fk, fv := range flatten(typed) {\n\t\t\t\tret[fmt.Sprintf(\"%d.%s\", idx, fk)] = fv\n\t\t\t}\n\t\tcase []interface{}:\n\t\t\tfor fk, fv := range flattenSlice(typed) {\n\t\t\t\tret[fmt.Sprintf(\"%d.%s\", idx, fk)] = fv\n\t\t\t}\n\t\tcase nil:\n\t\t\tret[fmt.Sprint(idx)] = \"null\"\n\t\tdefault:\n\t\t\tret[fmt.Sprint(idx)] = fmt.Sprint(typed)\n\t\t}\n\t}\n\treturn ret\n}\n\nfunc convertMap(originalMap map[interface{}]interface{}) map[string]interface{} {\n\tconvertedMap := map[string]interface{}{}\n\tfor key, value := range originalMap {\n\t\tconvertedMap[key.(string)] = value\n\t}\n\treturn convertedMap\n}\n"
  },
  {
    "path": "sops/flatten_test.go",
    "content": "package sops\n\nimport (\n\t\"reflect\"\n\t\"testing\"\n)\n\nfunc TestFlattening(t *testing.T) {\n\ttc := []struct {\n\t\tname     string\n\t\tinput    map[string]interface{}\n\t\texpected map[string]string\n\t}{\n\t\t{\n\t\t\tname: \"all data types become strings\",\n\t\t\tinput: map[string]interface{}{\n\t\t\t\t\"a_string\":   \"foo\",\n\t\t\t\t\"an_integer\": 12,\n\t\t\t\t\"a_bool\":     true,\n\t\t\t\t\"a_float\":    1.1,\n\t\t\t\t\"a_null\":     nil,\n\t\t\t},\n\t\t\texpected: map[string]string{\n\t\t\t\t\"a_string\":   \"foo\",\n\t\t\t\t\"an_integer\": \"12\",\n\t\t\t\t\"a_bool\":     \"true\",\n\t\t\t\t\"a_float\":    \"1.1\",\n\t\t\t\t\"a_null\":     \"null\",\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tname: \"dicts are unnested\",\n\t\t\tinput: map[string]interface{}{\n\t\t\t\t\"a_dict\": map[string]interface{}{\"foo\": \"bar\"},\n\t\t\t},\n\t\t\texpected: map[string]string{\n\t\t\t\t\"a_dict.foo\": \"bar\",\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tname: \"lists are unpacked with index keys\",\n\t\t\tinput: map[string]interface{}{\n\t\t\t\t\"a_list\": []interface{}{1, 2, nil},\n\t\t\t},\n\t\t\texpected: map[string]string{\n\t\t\t\t\"a_list.0\": \"1\",\n\t\t\t\t\"a_list.1\": \"2\",\n\t\t\t\t\"a_list.2\": \"null\",\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tname: \"deep nesting\",\n\t\t\t/*\n\t\t\t\tThis test corresponds to this yaml structure:\n\t\t\t\tfoo:\n\t\t\t\t- a: 1\n\t\t\t\t  b:\n\t\t\t\t    c:\n\t\t\t\t    - d: 2\n\t\t\t\t\t- e: null\n\t\t\t*/\n\t\t\tinput: map[string]interface{}{\n\t\t\t\t\"foo\": []interface{}{\n\t\t\t\t\tmap[string]interface{}{\n\t\t\t\t\t\t\"a\": 1,\n\t\t\t\t\t\t\"b\": map[string]interface{}{\n\t\t\t\t\t\t\t\"c\": []interface{}{\n\t\t\t\t\t\t\t\tmap[string]interface{}{\"d\": 2, \"e\": nil},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\texpected: map[string]string{\n\t\t\t\t\"foo.0.a\":       \"1\",\n\t\t\t\t\"foo.0.b.c.0.d\": \"2\",\n\t\t\t\t\"foo.0.b.c.0.e\": \"null\",\n\t\t\t},\n\t\t},\n\t}\n\tfor _, c := range tc {\n\t\tt.Run(c.name, func(t *testing.T) {\n\t\t\toutput := flatten(c.input)\n\t\t\tif !reflect.DeepEqual(c.expected, output) {\n\t\t\t\tt.Errorf(\"Unexpected flattening output, expected %v, got %v\", c.expected, output)\n\t\t\t}\n\t\t})\n\t}\n}\n"
  },
  {
    "path": "sops/internal/dotenv/dotenv.go",
    "content": "package dotenv\n\nimport (\n\t\"bytes\"\n\t\"fmt\"\n\t\"strings\"\n)\n\nfunc Unmarshal(in []byte, out *map[string]interface{}) error {\n\tif *out == nil {\n\t\t*out = make(map[string]interface{})\n\t}\n\tfor _, line := range bytes.Split(in, []byte(\"\\n\")) {\n\t\tif len(line) == 0 {\n\t\t\tcontinue\n\t\t}\n\t\tif line[0] == '#' {\n\t\t\tcontinue\n\t\t} else {\n\t\t\tpos := bytes.Index(line, []byte(\"=\"))\n\t\t\tif pos == -1 {\n\t\t\t\treturn fmt.Errorf(\"invalid dotenv input line: %s\", line)\n\t\t\t}\n\t\t\t(*out)[string(line[:pos])] = strings.Replace(string(line[pos+1:]), \"\\\\n\", \"\\n\", -1)\n\t\t}\n\t}\n\n\treturn nil\n}\n"
  },
  {
    "path": "sops/internal/dotenv/dotenv_test.go",
    "content": "package dotenv\n\nimport (\n\t\"reflect\"\n\t\"testing\"\n)\n\nfunc TestUnmarshal(t *testing.T) {\n\tinput := []byte(`# Comment!\npassword=P@ssw0rd`)\n\texpectedOutput := map[string]interface{}{\n\t\t\"password\": \"P@ssw0rd\",\n\t}\n\tvar data map[string]interface{}\n\terr := Unmarshal(input, &data)\n\tif err != nil {\n\t\tt.Fatal(err)\n\t}\n\tif !reflect.DeepEqual(expectedOutput, data) {\n\t\tt.Errorf(\"Unexpected output, expected %v, got %v\", expectedOutput, data)\n\t}\n}\n"
  },
  {
    "path": "sops/internal/ini/ini.go",
    "content": "package ini\n\nimport (\n\t\"gopkg.in/ini.v1\"\n)\n\nfunc Unmarshal(in []byte, out *map[string]interface{}) error {\n\tf, err := ini.Load(in)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tif *out == nil {\n\t\t*out = make(map[string]interface{})\n\t}\n\n\tfor _, s := range f.Sections() {\n\t\tvar m map[string]interface{}\n\t\t// The root section key-value pairs should go directly on the root of the\n\t\t// map, not under a default subkey\n\t\tif s.Name() == ini.DefaultSection {\n\t\t\tm = *out\n\t\t} else {\n\t\t\tm = make(map[string]interface{})\n\t\t\t(*out)[s.Name()] = m\n\t\t}\n\n\t\tfor _, k := range s.Keys() {\n\t\t\tm[k.Name()] = k.Value()\n\t\t}\n\t}\n\n\treturn nil\n}\n"
  },
  {
    "path": "sops/internal/ini/ini_test.go",
    "content": "package ini\n\nimport (\n\t\"reflect\"\n\t\"testing\"\n)\n\nfunc TestUnmarshal(t *testing.T) {\n\tinput := []byte(`; Comment!\nrootKey = foo\n[Some section]\nexample_key = example_value`)\n\texpectedOutput := map[string]interface{}{\n\t\t\"rootKey\": \"foo\",\n\t\t\"Some section\": map[string]interface{}{\n\t\t\t\"example_key\": \"example_value\",\n\t\t},\n\t}\n\tvar data map[string]interface{}\n\terr := Unmarshal(input, &data)\n\tif err != nil {\n\t\tt.Fatal(err)\n\t}\n\tif !reflect.DeepEqual(expectedOutput, data) {\n\t\tt.Errorf(\"Unexpected output, expected %v, got %v\", expectedOutput, data)\n\t}\n}\n"
  },
  {
    "path": "sops/provider.go",
    "content": "package sops\n\nimport (\n\t\"context\"\n\n\t\"github.com/hashicorp/terraform-plugin-framework/datasource\"\n\t\"github.com/hashicorp/terraform-plugin-framework/ephemeral\"\n\t\"github.com/hashicorp/terraform-plugin-framework/provider\"\n\t\"github.com/hashicorp/terraform-plugin-framework/provider/schema\"\n\t\"github.com/hashicorp/terraform-plugin-framework/resource\"\n)\n\nvar _ provider.Provider = &SopsProvider{}\n\ntype SopsProvider struct{}\n\nfunc New() provider.Provider {\n\treturn &SopsProvider{}\n}\n\nfunc (p *SopsProvider) Metadata(_ context.Context, _ provider.MetadataRequest, resp *provider.MetadataResponse) {\n\tresp.TypeName = \"sops\"\n}\n\nfunc (p *SopsProvider) Schema(_ context.Context, _ provider.SchemaRequest, resp *provider.SchemaResponse) {\n\tresp.Schema = schema.Schema{\n\t\tDescription: \"A Terraform plugin for using files encrypted with [SOPS](https://github.com/getsops/sops).\",\n\t}\n}\n\nfunc (p *SopsProvider) Configure(_ context.Context, _ provider.ConfigureRequest, _ *provider.ConfigureResponse) {\n}\n\nfunc (p *SopsProvider) DataSources(_ context.Context) []func() datasource.DataSource {\n\treturn []func() datasource.DataSource{\n\t\tnewFileDataSource,\n\t\tnewExternalDataSource,\n\t}\n}\n\nfunc (p *SopsProvider) Resources(_ context.Context) []func() resource.Resource {\n\treturn nil\n}\n\nfunc (p *SopsProvider) EphemeralResources(_ context.Context) []func() ephemeral.EphemeralResource {\n\treturn []func() ephemeral.EphemeralResource{\n\t\tnewFileEphemeralResource,\n\t\tnewExternalEphemeral,\n\t}\n}\n"
  },
  {
    "path": "sops/provider_test.go",
    "content": "package sops\n\nimport (\n\t\"testing\"\n\n\t\"github.com/hashicorp/terraform-plugin-framework/provider\"\n\t\"github.com/hashicorp/terraform-plugin-framework/providerserver\"\n\t\"github.com/hashicorp/terraform-plugin-go/tfprotov6\"\n\t\"github.com/hashicorp/terraform-plugin-testing/echoprovider\"\n)\n\nvar testAccProtoV6ProviderFactories = map[string]func() (tfprotov6.ProviderServer, error){\n\t\"sops\": providerserver.NewProtocol6WithError(New()),\n\t\"echo\": echoprovider.NewProviderServer(),\n}\n\nfunc TestProvider_impl(t *testing.T) {\n\tvar _ provider.Provider = New()\n}\n"
  },
  {
    "path": "sops/read_data.go",
    "content": "package sops\n\nimport (\n\t\"encoding/json\"\n\t\"fmt\"\n\n\t\"github.com/getsops/sops/v3\"\n\t\"github.com/getsops/sops/v3/decrypt\"\n\t\"gopkg.in/yaml.v3\"\n\n\t\"github.com/carlpett/terraform-provider-sops/sops/internal/dotenv\"\n\t\"github.com/carlpett/terraform-provider-sops/sops/internal/ini\"\n)\n\nfunc readData(content []byte, format string) (map[string]string, string, error) {\n\tcleartext, err := decrypt.Data(content, format)\n\tif userErr, ok := err.(sops.UserError); ok {\n\t\terr = userErr\n\t}\n\tif err != nil {\n\t\treturn nil, \"\", fmt.Errorf(\"Error decrypting sops file: %w\", err)\n\t}\n\n\tvar data map[string]interface{}\n\tswitch format {\n\tcase \"json\":\n\t\terr = json.Unmarshal(cleartext, &data)\n\tcase \"yaml\":\n\t\terr = yaml.Unmarshal(cleartext, &data)\n\tcase \"dotenv\":\n\t\terr = dotenv.Unmarshal(cleartext, &data)\n\tcase \"ini\":\n\t\terr = ini.Unmarshal(cleartext, &data)\n\t}\n\tif err != nil {\n\t\treturn nil, \"\", fmt.Errorf(\"Error parsing decrypted data: %w\", err)\n\t}\n\n\treturn flatten(data), string(cleartext), nil\n}\n"
  },
  {
    "path": "sops/test-fixtures/basic.json",
    "content": "{\n\t\"hello\": \"ENC[AES256_GCM,data:vye/uc0=,iv:CasWaUwDHpLDkGTPrIE5Z4bI2KEBCtdw94ROfL4qlbE=,tag:I7OBTDV8JsrjLg4SfRNf8w==,type:str]\",\n\t\"integer\": \"ENC[AES256_GCM,data:1Q==,iv:xF2EsP5hxUpkUcS8OjsFWgSQ2D1dXxf63pnajpkFIuE=,tag:LJRnzsVNl7Ymh8yrdwdpnA==,type:float]\",\n\t\"float\": \"ENC[AES256_GCM,data:TK3k,iv:O64HQZG4XDATN4c3k8VTaATuSR59ynhWEQsQRUSwSog=,tag:X1j4tMpV/vlQ5xCjzuXymw==,type:float]\",\n\t\"bool\": \"ENC[AES256_GCM,data:QXxEsw==,iv:GVg4UD+/1VhA4QqSF6RP3YPJsdxT/1xJcg5NLzJkTzA=,tag:CLMVT+T3x8gkDsaOyUmbVw==,type:bool]\",\n    \"null\": null,\n\t\"sops\": {\n\t\t\"kms\": null,\n\t\t\"gcp_kms\": null,\n\t\t\"azure_kv\": null,\n\t\t\"lastmodified\": \"2019-08-07T23:18:36Z\",\n\t\t\"mac\": \"ENC[AES256_GCM,data:rFj23lyLaFONFQod8wlxTCCGysuCzNTQglRxqKXa5CZ9Q89jC8fnIdDUttf2oFHrfJHdvveeDbJYOoO2yEYfWr6Ty1MWzrJPyacUAGRF05PFpr0u+4xkjZNGLi5Cdg6VHb7uUu4+9EKd9d2A1bB6dWt1bEE0w3J4Il0uxn0JOMw=,iv:ERK3tzfvJzIWMcn97zg/vZ7EkWlByUUA8KczMJFPgZ0=,tag:mS+ICHZmoStgCnyIFgvbWQ==,type:str]\",\n\t\t\"pgp\": [\n\t\t\t{\n\t\t\t\t\"created_at\": \"2019-08-07T23:18:36Z\",\n\t\t\t\t\"enc\": \"-----BEGIN PGP MESSAGE-----\\n\\nhQEMA/FdPFBXWyBuAQf/eGZpJCY8TJ720XSH5rscUv19MC+C7v+xugWXdaBpNkt1\\nsdZ4iJUpWFRv+ofYMm607AbhCfHRYTZtP7EiVGVl4yKwd+ztWgHSwXwQ/4WKx6QT\\nWckxQlzRjxMhiJJuWsRmnz92PcZsb8yY7AsupPi9RaCykTVe4Fnx6xAdtA4l92n+\\n6DQbVzFmfH/LOXJZK1YeFTeZoKiK+SJ+gMqcwoefy17F+fyfu6PWxWuUknDamReh\\nNkPV6cbOtNl/J9+khWVlZObZ/DUCilOGkcF5H3qjOOdPgHyjRVRe3JUwb1uL6gBW\\nsJRS54kQoHk3C68ZgxMc9GrXCsFv1jdZKlMkvb+Xo9JeAZVGiHNs4TnkGAuMAt49\\nYnLx9tvpwTrMmZCbZRYV3jwl4TZDqklQ1kY5Qd96fun0KYiz1l2MeRxs3EhS2gLF\\nABv8YNlQ7a7uwpWcqZtx1/Cwmdrc/EjK5fmydww9aA==\\n=ShdQ\\n-----END PGP MESSAGE-----\\n\",\n\t\t\t\t\"fp\": \"3CE5CC7219D6597CE6488BF1BF36CD3D0749A11A\"\n\t\t\t}\n\t\t],\n\t\t\"unencrypted_suffix\": \"_unencrypted\",\n\t\t\"version\": \"3.3.1\"\n\t}\n}\n"
  },
  {
    "path": "sops/test-fixtures/basic.yaml",
    "content": "hello: ENC[AES256_GCM,data:gzR9Gz4=,iv:cbMZU1nUyo5mFCW+Vel2UYbnbMA/0wKxsQzy/WVAYw8=,tag:tETDJMCJYo+4K4LwsSw4Dw==,type:str]\ninteger: ENC[AES256_GCM,data:9w==,iv:8gMmdZTOgdGdHlXvipvz4qchxFWMwKg95Zzvh/I84G4=,tag:jxzxI0m7stEK+zr+yc0Wsg==,type:int]\nfloat: ENC[AES256_GCM,data:UtBf,iv:Z7hdgplz8QP9JyC/DX5WWiazdYjBvZTVolvyf9VNvyw=,tag:v8VujtMTcuM4GuZKGreVbA==,type:float]\nbool: ENC[AES256_GCM,data:xW/sRw==,iv:0vXeg5/SBUDo8dmHHpDTdxMwpoCdx+ERE7dq4UgqVsc=,tag:RweVRArPBVskGtnPBiQ0Yg==,type:bool]\nnull_value: null\nsops:\n    kms: []\n    gcp_kms: []\n    azure_kv: []\n    lastmodified: '2019-04-26T18:43:59Z'\n    mac: ENC[AES256_GCM,data:UdHBCIrxfP+FjXwi0++Y1MUdAZ3hAa34OfG/w911zimF2YR+Mqv7PD15Osqa9GotQ5idzJEAzvz6pRVm7J388s0g2E53zBjCfLO/dcrkmVRdjTw2WYM17ewGM61HlNB9EKPe38B/eTH6PP1pTs5vjplEM/3FDblglKw8koUDdp0=,iv:LmRycuJjAoyGaY8qazR6G5CEuyD8JYCe3OO9UTek6kE=,tag:pfpB4HNE1qVmhO1QdZvVkQ==,type:str]\n    pgp:\n    -   created_at: '2019-01-23T10:01:20Z'\n        enc: |-\n            -----BEGIN PGP MESSAGE-----\n\n            wcBMA/FdPFBXWyBuAQgAhJwnHuIY66QdnnWx2Nh6nzhBMogJtKLT4qA7ostnfMXX\n            Qo1oTd5OAKT16dDZCUl8TMZqnQUzdDaVQ7H/rUOJ38EfkZBTr120JOoJuCbrUBTt\n            uLEPrpgrUF8KSnRBuwnRECfU7jEi8QEwbKL4zQJREHf5I5O1iS4ZNg4h/5O7JHC/\n            Hfg/pqmwN1LtEZvJZDen9CMipsO0fHqR2N4UDYuDimwIlMi0ziaq6pO0T+PlNQdn\n            a9nzZwKk0pQOl80YRZQHZbSPpegOXwyFSMXKn/xfGo4YVjmpGJ5aO9ZJMLWylMgb\n            VI8EzHu2ftskyGuykoOboSYAoIRb/LgGCMS4amfvmdLgAeSj/tqpz3VZdubUot9i\n            fysa4epZ4FzgN+H+6OAp4lMnxKXgKOWPh3uUgyOo6wdgrJEYsZ2AQHNDjojedNzZ\n            HGwPrD0VM+BW5B8PY9y7GVaNNhM+V+ZouzTio5TZpOHfLQA=\n            =qDZi\n            -----END PGP MESSAGE-----\n        fp: 3CE5CC7219D6597CE6488BF1BF36CD3D0749A11A\n    unencrypted_suffix: _unencrypted\n    version: 3.2.0\n"
  },
  {
    "path": "sops/test-fixtures/complex-list.yaml",
    "content": "a_list:\n-   name: ENC[AES256_GCM,data:nX7D,iv:HdTElsGgx0Z2LcNmUGSbMCTyVhRD0UQMi8ztAEYQqJQ=,tag:D/sIqf+TXpUhyTbugEPpww==,type:str]\n    index: ENC[AES256_GCM,data:uw==,iv:1Tz2jR86XjGVRKwaY3XO8gAH102xEKDFr/MNQbxO8GU=,tag:avkgp+Q9CraUC+hjuhYyXQ==,type:int]\n    value: null\n-   name: ENC[AES256_GCM,data:uNO3,iv:y9ip72kPma2nTrJsqCn/+DDKLc6GeOeuEHEO2Tf2h9A=,tag:eTux2TxifhzMtWFYmlMnKA==,type:str]\n    index: ENC[AES256_GCM,data:fA==,iv:6Vmcm5FRa3vLwtt5P4IjiOtJi76TfKIg+D8Bx10jaTA=,tag:EN7hJoYOXmyEynvCy7GZ6w==,type:int]\nsops:\n    kms: []\n    gcp_kms: []\n    azure_kv: []\n    lastmodified: '2019-04-26T18:39:26Z'\n    mac: ENC[AES256_GCM,data:Fw/zyoOVaQtGxVSdg2Wz5IHeRSuubjVb4ll8VPd6Prt4382gevlkzuv0TSAj9wAgGSiuXjeGU397kUkmDksdtsMgieh7XQxPuIoBHMaXuyvOtwBWtli8yAIkgU/lRr4Ablp3F8ZycHXPrNEm2oLonJLeSJDQKjJm4NsSP6brBs4=,iv:0JOTx4zHLoLmQFgMnh20RU1Sk0ONGR/gSoVMMHVGvFU=,tag:/BX9c/6HMM+0l38zWEwP4w==,type:str]\n    pgp:\n    -   created_at: '2019-04-26T18:38:53Z'\n        enc: |-\n            -----BEGIN PGP MESSAGE-----\n\n            wcBMA/FdPFBXWyBuAQgAhUoPCTPjOpBexkgh5dMr2LTCb4ZsajkTXTa9a/wIJiBn\n            TT1FRsQE2W+S9Yb/ClCz+ULearuUVYH0pUp7k+MDbpMt/SOMlIEA9JO0H631LqOS\n            YLssnVOP/dsMH8uyhNCVuyLOHvVB3WMMxED+ic1m8oSbokqtIyCz5hmwR5MChebC\n            nB42lqM8ZzRDS8DEBCykv78ityQFuLatog787sNxL9ExSeQ9iuLuu84UT4dWI4XF\n            WUwwzyT3AUMbBkqftkucIi0iut+AORlgzyNAFlxxn4jXU10yl6iZvHj/Y76rJppm\n            i2C4E15bS8fLrFtX7PsfnMLJOOSS+sulwr4THCFt39LgAeQtfxdz1iufUxQ+ePj4\n            0w8x4ct/4EvgUuGE0OAD4oFkaCDgy+VbRWJQZn25OFLGUDMF+AUwnLnUu89hd/Ls\n            ymrlCHWwIODS5M6xr6Rwx4agrWiURZUc95HiCknA7+FI3QA=\n            =OUk7\n            -----END PGP MESSAGE-----\n        fp: 3CE5CC7219D6597CE6488BF1BF36CD3D0749A11A\n    unencrypted_suffix: _unencrypted\n    version: 3.2.0\n"
  },
  {
    "path": "sops/test-fixtures/nested.yaml",
    "content": "db:\n    user: ENC[AES256_GCM,data:FPeD,iv:J72gLGxfRX+8PZZrD7f5/7zPQPbMgBxL7OUxyvvFH1A=,tag:qJvyhtA4MXRjUkuYMctPlg==,type:str]\n    password: ENC[AES256_GCM,data:XrL/,iv:Z/PsuhQGQVEg2ri6odjnf3aWr3U01JAz8R7MJX67Gz8=,tag:iX48abNIzKJMsxIZ3N7DKw==,type:str]\nsops:\n    kms: []\n    gcp_kms: []\n    azure_kv: []\n    lastmodified: '2019-01-23T12:37:02Z'\n    mac: ENC[AES256_GCM,data:SHWOM+zYaRt9e3jEiQK6bUgjEejoRm25CvWH1z1iYhvLzavmBbaCT+L0W7kw9pLZlTSXlGJfJW94sd5LFUgZ/cDvzy/IwNeU292wN9zeq0It2aTQtBWoKY+djjB3A1OoEiNoi/EBld4JfX81Jf5CCUT/LZevTawkig3URhmaIH8=,iv:WOG0Ssd0RoVpPwY8PFN7iKvSRNkmqsBIgA5xqtGs+xE=,tag:ZfV7UjxjmgXAWeWqn2u/FA==,type:str]\n    pgp:\n    -   created_at: '2019-01-23T10:01:20Z'\n        enc: |-\n            -----BEGIN PGP MESSAGE-----\n\n            wcBMA/FdPFBXWyBuAQgAhJwnHuIY66QdnnWx2Nh6nzhBMogJtKLT4qA7ostnfMXX\n            Qo1oTd5OAKT16dDZCUl8TMZqnQUzdDaVQ7H/rUOJ38EfkZBTr120JOoJuCbrUBTt\n            uLEPrpgrUF8KSnRBuwnRECfU7jEi8QEwbKL4zQJREHf5I5O1iS4ZNg4h/5O7JHC/\n            Hfg/pqmwN1LtEZvJZDen9CMipsO0fHqR2N4UDYuDimwIlMi0ziaq6pO0T+PlNQdn\n            a9nzZwKk0pQOl80YRZQHZbSPpegOXwyFSMXKn/xfGo4YVjmpGJ5aO9ZJMLWylMgb\n            VI8EzHu2ftskyGuykoOboSYAoIRb/LgGCMS4amfvmdLgAeSj/tqpz3VZdubUot9i\n            fysa4epZ4FzgN+H+6OAp4lMnxKXgKOWPh3uUgyOo6wdgrJEYsZ2AQHNDjojedNzZ\n            HGwPrD0VM+BW5B8PY9y7GVaNNhM+V+ZouzTio5TZpOHfLQA=\n            =qDZi\n            -----END PGP MESSAGE-----\n        fp: 3CE5CC7219D6597CE6488BF1BF36CD3D0749A11A\n    unencrypted_suffix: _unencrypted\n    version: 3.2.0\n"
  },
  {
    "path": "sops/test-fixtures/raw.txt",
    "content": "{\n\t\"data\": \"ENC[AES256_GCM,data:LOXVpbH9B6ZV+V16esP9HQ==,iv:BTeG8dZCpG1sNpnajwPdP1v/fBk/647CQ+y9ns3nn78=,tag:bPir7Bd96JgEIZ9sLnUAMQ==,type:str]\",\n\t\"sops\": {\n\t\t\"kms\": null,\n\t\t\"gcp_kms\": null,\n\t\t\"azure_kv\": null,\n\t\t\"lastmodified\": \"2019-01-23T13:39:15Z\",\n\t\t\"mac\": \"ENC[AES256_GCM,data:BigJKrFMd1rpPF7MmFhjmzLlTqalyMIzGtR1xvfD5ypWVWCTd/ssTQPavoZlqhZm69REQ+wf7q3ARcAgrsrIqyk49Xwnxu6VsZh32WQC8jfF5ILOFqukEb9JHXtxKvMcXpupmjnVQFSKMt2FxhtZsHmPNjzCtfqaV0sW2IGSGX8=,iv:/ubUR4GtloSsmClvbua4CIAqw6H66BGJb419A4Rbago=,tag:QnEhiKfdQNZwQpggLYUMOg==,type:str]\",\n\t\t\"pgp\": [\n\t\t\t{\n\t\t\t\t\"created_at\": \"2019-01-23T13:39:01Z\",\n\t\t\t\t\"enc\": \"-----BEGIN PGP MESSAGE-----\\n\\nwcBMA/FdPFBXWyBuAQgAhuNDTdTrGpzDEWxXniji6ocSLThtOI6k8ZthiuHvy9NO\\ntkLE+IoxdW59XYqCoy8ejERx0jUTNwmvwO3+41c5ZXz9HOO/UCl6RuTTXSVfdcY5\\nccbAWjaX0L1wyiqtRLSCzwdi8j9GDhWkiQSZ5eyjNfEHcV0IBQ/+D/YfxcWD58zw\\nIjET/F+B/PsD4OjuX7m/V6jVT1/97nxfCZD8q28jzI9igloFaeBWHwslNHPIkCza\\nchuot+dRfuixp/u0ndRDSZ1d731wKbi3EcnUVzsw5nQ6PJQaFgWTu0dHyrmH83TS\\naVnm/nMBDPRyaRWIsCDUAsQXUf6QIok4+tTrbaZDedLgAeTzwxhtp6c8Y5A1yzNp\\nG2Pd4aRN4Mng3+HPeeBU4igReMHgKuXt+awJiuxFvshpb/UoC3EL/qKMc1LfdOyc\\nppFU8qp2tuBk5F39M5VKkiQXZdzak46X5LvioohDEOFTwQA=\\n=IXZX\\n-----END PGP MESSAGE-----\",\n\t\t\t\t\"fp\": \"3CE5CC7219D6597CE6488BF1BF36CD3D0749A11A\"\n\t\t\t}\n\t\t],\n\t\t\"unencrypted_suffix\": \"_unencrypted\",\n\t\t\"version\": \"3.2.0\"\n\t}\n}"
  },
  {
    "path": "sops/test-fixtures/simple-list.yaml",
    "content": "a_list:\n- ENC[AES256_GCM,data:sxhIdQ==,iv:y2HITUKrZ/JgJT+9+UI5BDj1SMaGO0pTSvjJhsSW6r4=,tag:ZuCjI7N9WKjAshTaPYpspQ==,type:str]\n- ENC[AES256_GCM,data:6yi4mg==,iv:KS4tBgQAXDfpPeWD6Ew6w1jolp4L9VY7NswmqVjivPE=,tag:9P8obopM4+BN4F9Jk2vGig==,type:str]\n- null\nsops:\n    kms: []\n    gcp_kms: []\n    azure_kv: []\n    lastmodified: '2019-04-26T17:16:27Z'\n    mac: ENC[AES256_GCM,data:6JzbXJfM7e4xP6qhGCSWQLal9YlXg2LmI9LSoX753Lu0uh6HuG7m02yA06Ls66jnNDzvHnxvCUobeuakuZeUNCp0+omu1pVgbs28Cx9cEya8SVwgrfBW9pQQMC8LEXSvesymDH4d78cWSUZrhLG6glOxTSZjV8Odl2/DSufuR2o=,iv:nh13+n7+ESX0eI0XmPOG9VgE9TZGz5YHjWKsNAdw3DI=,tag:Ucj6NSfEuRJIFGfaxc23Ww==,type:str]\n    pgp:\n    -   created_at: '2019-04-26T17:16:11Z'\n        enc: |-\n            -----BEGIN PGP MESSAGE-----\n\n            wcBMA/FdPFBXWyBuAQgAmkN+YgyBOF+823IZdmGecxMWkuIB06wdRr339y1tGehi\n            h1FxLlrwJU59ITCgjdzBJ0z0UCOqBP5qnwpzINu51LjtLEDMk9UOOmMfJdKLZ+5W\n            3O2YuTXgKl2MfPqt6Oy17pGZaiSTNyrvI29TkkPyhi3fuTr0stg9LxL4s9qQvWjM\n            kadq4ww3wwDL7VgxFxUfgF/CJALtRrdAbO3Fa63JXvOpeoa7huU75dnFleGDhFos\n            WYNY2oK3U9q/wk9XtlTuArotALrveQI+UQgwQG9+19UMTTJyTcc26zXHIS7ROHND\n            5qws6zlMhzKRXbvrH9CYbp1CSSvgOyG+UY2nphKURdLgAeQBS9lUL7wFklvXmgvB\n            Dig84cjD4AngTuE7QeAk4h4xTlLgD+WTZFtU4gpa9061GRRGM8FGVw3DaRpXWHy0\n            SUH3c/XifuCs5MExqB7LXKtX1SP81ynrTcLi0MH1r+Gt3gA=\n            =O+MY\n            -----END PGP MESSAGE-----\n        fp: 3CE5CC7219D6597CE6488BF1BF36CD3D0749A11A\n    unencrypted_suffix: _unencrypted\n    version: 3.2.0\n"
  },
  {
    "path": "sops/validate.go",
    "content": "package sops\n\nimport \"fmt\"\n\nvar validTypes = map[string]bool{\n\t\"json\":   true,\n\t\"yaml\": true,\n\t\"dotenv\": true,\n\t\"ini\": true,\n\t\"raw\": true,\n}\n\n// validateInputType ensures that we can decode the input\nfunc validateInputType(inputType string) error {\n\tif _, ok := validTypes[inputType]; ok {\n\t\treturn nil\n\t}\n\treturn fmt.Errorf(\"Don't know how to decode file with input type %s, set input_type as appropriate\", inputType)\n}\n"
  },
  {
    "path": "sops/validate_test.go",
    "content": "package sops\n\nimport \"testing\"\n\nfunc testValidateInputType(inputType string, t *testing.T) {\n\terr := validateInputType(inputType)\n\tif err != nil {\n\t\tt.Errorf(\"Failed to validate input type %s\", inputType)\n\t}\n}\n\nfunc TestValidateInputType_yaml(t *testing.T) {\n\tinputType := \"yaml\"\n\ttestValidateInputType(inputType, t)\n}\n\nfunc TestValidateInputType_json(t *testing.T) {\n\tinputType := \"json\"\n\ttestValidateInputType(inputType, t)\n}\n\nfunc TestValidateInputType_raw(t *testing.T) {\n\tinputType := \"raw\"\n\ttestValidateInputType(inputType, t)\n}\n\nfunc TestValidateInputType_bad(t *testing.T) {\n\tinputType := \"tf\"\n\terr := validateInputType(inputType)\n\tif err == nil {\n\t\tt.Errorf(\"Failed to validate input type %s, expected to be invalid but was valid\", inputType)\n\t}\n}\n"
  },
  {
    "path": "templates/guides/legacy_usage.md.tmpl",
    "content": "---\npage_title: \"terraform-sops on older Terraform versions\"\ndescription: |-\n  Migration guide for moving from a old Terraform version\n---\n# terraform-sops on older Terraform versions\n## Migrating existing states\nTo migrate a state from Terraform 0.12 or older, there is a need to change how the provider is referenced. Terraform provides a command to do this migration:\n\n```shell\nterraform state replace-provider registry.terraform.io/-/sops registry.terraform.io/carlpett/sops\n```\n\n## Installation\n\nDownload the latest [release](https://github.com/carlpett/terraform-provider-sops/releases) for your environment and unpack it to the user plugin directory. The user plugins directory is in one of the following locations, depending on the host operating system:\n* Windows `%APPDATA%\\terraform.d\\plugins`\n* All other systems `~/.terraform.d/plugins`\n\n### Allowing code to run on macOS\n\nApple macOS Catalina (10.15.0) and later prevents unsigned code from running. When you first run `terraform plan` it will pop up a message saying\n> **“terraform-provider-sops_v0.5.0” cannot be opened because the developer cannot be verified.**\n> macOS cannot verify that this app is free from malware.\n\nTo allow the plugin to run, go to the **Security & Privacy** tab of System Preferences and you should see a message saying\n> “terraform-provider-sops_v0.5.0” was blocked from use because it is not from an identified developer.\n\nClick the `Allow Anyway` button.\n\n## Usage\nUsage is mostly identical across versions, but there are some differences in how to reference nested fields.\n\n### Terraform 0.12\n\n```hcl\nprovider \"sops\" {}\n\ndata \"sops_file\" \"demo-secret\" {\n  source_file = \"demo-secret.enc.json\"\n}\n\noutput \"root-value-password\" {\n  # Access the password variable from the map\n  value = data.sops_file.demo-secret.data[\"password\"]\n}\n\noutput \"mapped-nested-value\" {\n  # Access the password variable that is under db via the terraform map of data\n  value = data.sops_file.demo-secret.data[\"db.password\"]\n}\n\noutput \"nested-json-value\" {\n  # Access the password variable that is under db via the terraform object\n  value = jsondecode(data.sops_file.demo-secret.raw).db.password\n}\n```\n\n### Terraform 0.11 and older\n```hcl\nprovider \"sops\" {}\n\ndata \"sops_file\" \"demo-secret\" {\n  source_file = \"demo-secret.enc.json\"\n}\n\noutput \"do-something\" {\n  value = \"${data.sops_file.demo-secret.data.password}\"\n}\n\noutput \"do-something2\" {\n  value = \"${data.sops_file.demo-secret.data.db.password}\"\n}\n```\n"
  },
  {
    "path": "templates/index.md.tmpl",
    "content": "---\n# generated by https://github.com/hashicorp/terraform-plugin-docs\npage_title: \"sops Provider\"\ndescription: |-\n  A Terraform plugin for using files encrypted with SOPS https://github.com/getsops/sops.\n---\n\n# {{ .ProviderShortName | upper }} Provider\n\n{{ .Description | trimspace }}\n\n!> To prevent plaintext secrets from being written to disk, you *must* use a secure remote state backend. See the [official docs](https://developer.hashicorp.com/terraform/language/state/sensitive-data) on _Sensitive Data in State_ for more information.\n\n## Example Usage\n\n{{ tffile \"examples/provider/provider.tf\" }}\n\n<!-- schema generated by tfplugindocs -->\n\n"
  },
  {
    "path": "test/testing-key.pgp",
    "content": "-----BEGIN PGP PRIVATE KEY BLOCK-----\n\nlQOXBFxIOOYBCADXBowkLNMC+iBS0LIl03VDLqF2KRVcbs7gbWNCZEYTWag7vR5m\nugxjpMUXjqWeR8tG1SCi3D5Xh/f4EVQT2GWC0KI0ohgN0TUbBYtdMsvQ04ktiLQT\nDAJA1WQIByI7svEY85WySsoDVsOU+H8Enp2mTeJir//WgSzKZeT84YzoLvEQu2MC\nllNp/LZdmwypSW3CCpfEoNLqX9untKN6xs2+y3/q711WC1KuJEViYkdZmsZQvk0Z\ncTfpNR3T+nFmk2aHYTa1kmywq8NgVhy3XTv7BsQpXnnMPRRnZ+pM/oICU0gM4NYj\nVoMggb1B1oljJGHFAqqJ/BvcDYkKjXit9QaNABEBAAEAB/ji2fAqj3UPRFOrC1eS\nEJqQsOF8h7DBk9CDdY8CvEeHTU+aYYDGtVcyHjjRDELZJLqQ6slDs0MSQEtGq6wd\nmRop/h0i6jVLs9Zoa7EG4lBPlYdj7UAN2DLds5jqifF+ijVSMv9Q2mvF71joEZfv\n3RJKzGB1PWPsKjEsVyj+ofbGptBG+YyxqIE0Cb+Uf70kgbHDNjxb+UGNQTXPrgsC\nRlZNwSLDY15OJyIJ+QONxy33u4+wAWnQi4bR0pg4l3kwvN0wARXvw84uYnmrlquH\nvPNApd3xVRoiH+2/uE5QMarj5dgQOAW2HsjvwaEbj3WGaRrluxlG1TyH83i4rPow\nbDEEAORs20YXupHJ+OuKwcca32/kJIL8emmnC1+f9zfvLX94Yf03bBz3T6b5YoUq\nUyumcYObyyxP7uVkuaFYYQXHKmFuo60pcMPwVrte1xQh9ymvxmiR6H3llUT3KbN1\noZphKZiQ1cx0vEFz5DBGzcu4XDB/8Me3bLmU8vaDHWQjlNJxBADw+5g9dV1EKlx2\nbnUg7f5oFmKRW4BE54koejf9Vg9NQLebpQkC5FxP0bloM4RXk6YxKw1qGbiola/H\nUm2ORJxjt1CrfUPyk8LBVqnq2bs9MXy/0gn3CUYzjpdrLcab4RTExOOzGS4gISmc\n6DaR06nRFiYIGQDMVFqhDq8A17iL3QP/V5iEXWifkxqorMkbItEHw1tp0Wan0tMV\nLavZ6gpIMBIvxCvTjcLmEWIicBb34S5UPRuMa4IpUfWjayAohP7BnGxS+FZ2qGXf\nPojczt+YBTOKGLMu2XIZqefJu4dn0MCp+qztj6B1P9qyUvMhoZwEBk4QaPsaHCSi\nB9FNypHOo09C4LQ4VGVycmFmb3JtIFNvcHMgUHJvdmlkZXIgKFRlc3RpbmcpIDx0\nZXJyYWZvcm0tc29wc0Bsb2NhbD6JATgEEwECACIFAlxIOOYCGwMGCwkIBwMCBhUI\nAgkKCwQWAgMBAh4BAheAAAoJEL82zT0HSaEavnUH+QEiOxqcPUbPBbjuRr6fAxIN\n+wpkME+ZpAfr9QwU70GyXxILh3RSqgjZNcdegHl0AgLNGtYo3VOZFHttqW44M7ei\nx1XePxTjbcQLXsqgOwCcG+jNfHTu74k544nmITh93Jye+Ic4CYP4Q9GPm3JRAdDJ\ndPSKkCAne6Y3pvWMXq8CxrjMxpVZjQCzFXOtxQokiQetMOHOCxIng25s06DFzv+L\nUibDuf34SyrV5IFpEjXxZfRoNHzwOA0RlT00F7X2R2T7As9mFp2PyYDhabGs18rt\nSt8NCA+CbstzQQdzbSI9ld5ScRjPwDDvzwIxGP8Xp12HwgZbOt4BRfJweyauHCed\nA5gEXEg45gEIAMXtRQSr+RdkxPjuhxPz64ThLgMT1UobnsuRfDUayV9iKTgEeuOe\n4igAOhwn9YB/AmsBLijUdV8Tu8ljOKy2ObTZo7T2TZM35KdwqTR2t+GN/DCQQOIe\nBoF/XjNyj+eadQusj/KQ8RnYsdhGHX6BClg6H1A+W1Nc3/wcU7KPAFzcSfDy7aBQ\n1oZGF4y8xFRW7nFJPLuo/DFeuYJCYzt7ws7ENNXhlnLLEb2OeCwXpX4hLFgcQMkC\nn8eCTAihSbaCKw8XTiOrR8VYHTQ59JDvQevZ0n5JSzUNK0Ws0EdHd8+pbBW4f6bL\nR82mby3BwWVOWtWD0WgbwTBx1LIe1sPAs3UAEQEAAQAH/jDcoWRE3EqFKwdVQ22O\nkv8L5CMIW2hfJzWUJfiqMzpj7k8Q9BGLYMOFQtM+niHpuPwXn4Ce6pbdNUfDQfOJ\nTPeznvGGuKH2c3FOo8b64+w/9Bk9E3d++BYyDlxfFN2VSP3nzOWSGKNL1qPQs2lO\ni/I57w8NRdhvnjAMAjGbkfhaTcMtboqzII+CBRY/y5WPaXQGx1hNGI2FogAwuV1h\nbZg8kiAVHa5QuKB36yZ6VM1zaK7KuEBys3Y5oYxV6FdMHrhBmKlRpHYny86WpH6Q\nHVmhGjvMIGK1tiuhg2h1TQUQ1HqPb/RdCRJnRC1KiX2uiDtrcoN/KetIIsQ8fzvs\nqoEEAMdGupYWXUBpQlRspxFnCRLmzwLbLL2Eqk3q/BvFh/OXnwmUgGaZkwWuldKS\nCH18Ih61T7LGa/Ta2DAFWraNkmdx8I6YgbeX1y6s8x3N6rZR+ccopn7Ii53Hjdji\niCdXBp6KhkLHsASc/m2g7/ERuTolecQR1HUV90TnRnoxeclhBAD+RDTNUrPxNkZa\nCmi9lgZOTE4nOGgavybDwmWBQqxiiFyniNklCNsGU9schWMDfecYXFlIm50DnQqy\nTMxAo8tzOihlJfQqAw/0zdcQZtLMmx43Bfozp9MrZoy60tklTONF3w8ykutDtI0h\nI8Z864vLIjD6SXuZ+iK+TliFMrk+lQP+KI7lwVHuDZQR+avsU6c+9RL1EwtYxA83\nI++hF+1lMg8wvG77aXbLihEEH2Rh2dNHiyfZTGNhHQYVLx4OEKS5kGKeLXWBOllc\nOclR02C1w19B52WgzEpM+xLvd/xbOj/RElUzWfp9jSmFAbIZwHG5ANKz0TeDV1gD\npH7/C+JJWFgyHYkBHwQYAQIACQUCXEg45gIbDAAKCRC/Ns09B0mhGkxhB/9+qssb\nx9LRW2yWFeGryDtVBIcoLa+hoqh3zef6PXLBb1COcqZ5ZILvtjrpa/+KA+36auIN\njdv4wjZcRnzVcg5o44VPEMly2EvwoPrTbIrsWsKWUGlMwKiLZChXgmEx8vlY9uaT\nTm8gnbtq61B6td1z4IerRe+2urGu7dC3kGrvMHRMKA52aAwcaEuXwFlz7P6yxdaT\n7BbiQyUMph9Vq7HJZSkTezUhYXDVDq6lkglFKO86w4oY1woD6Ij1/WK8MUiqoxCx\n70iusXjGwAXO8T0IuLDX5qs15YHAiiKFk3L8moejjN2fmAk3loDjlVDEe77YAcSi\n9qbCiS2c7eG1IjPW\n=S27/\n-----END PGP PRIVATE KEY BLOCK-----\n-----BEGIN PGP PUBLIC KEY BLOCK-----\n\nmQENBFxIOOYBCADXBowkLNMC+iBS0LIl03VDLqF2KRVcbs7gbWNCZEYTWag7vR5m\nugxjpMUXjqWeR8tG1SCi3D5Xh/f4EVQT2GWC0KI0ohgN0TUbBYtdMsvQ04ktiLQT\nDAJA1WQIByI7svEY85WySsoDVsOU+H8Enp2mTeJir//WgSzKZeT84YzoLvEQu2MC\nllNp/LZdmwypSW3CCpfEoNLqX9untKN6xs2+y3/q711WC1KuJEViYkdZmsZQvk0Z\ncTfpNR3T+nFmk2aHYTa1kmywq8NgVhy3XTv7BsQpXnnMPRRnZ+pM/oICU0gM4NYj\nVoMggb1B1oljJGHFAqqJ/BvcDYkKjXit9QaNABEBAAG0OFRlcnJhZm9ybSBTb3Bz\nIFByb3ZpZGVyIChUZXN0aW5nKSA8dGVycmFmb3JtLXNvcHNAbG9jYWw+iQE4BBMB\nAgAiBQJcSDjmAhsDBgsJCAcDAgYVCAIJCgsEFgIDAQIeAQIXgAAKCRC/Ns09B0mh\nGr51B/kBIjsanD1GzwW47ka+nwMSDfsKZDBPmaQH6/UMFO9Bsl8SC4d0UqoI2TXH\nXoB5dAICzRrWKN1TmRR7baluODO3osdV3j8U423EC17KoDsAnBvozXx07u+JOeOJ\n5iE4fdycnviHOAmD+EPRj5tyUQHQyXT0ipAgJ3umN6b1jF6vAsa4zMaVWY0AsxVz\nrcUKJIkHrTDhzgsSJ4NubNOgxc7/i1Imw7n9+Esq1eSBaRI18WX0aDR88DgNEZU9\nNBe19kdk+wLPZhadj8mA4WmxrNfK7UrfDQgPgm7Lc0EHc20iPZXeUnEYz8Aw788C\nMRj/F6ddh8IGWzreAUXycHsmrhwnuQENBFxIOOYBCADF7UUEq/kXZMT47ocT8+uE\n4S4DE9VKG57LkXw1GslfYik4BHrjnuIoADocJ/WAfwJrAS4o1HVfE7vJYzistjm0\n2aO09k2TN+SncKk0drfhjfwwkEDiHgaBf14zco/nmnULrI/ykPEZ2LHYRh1+gQpY\nOh9QPltTXN/8HFOyjwBc3Enw8u2gUNaGRheMvMRUVu5xSTy7qPwxXrmCQmM7e8LO\nxDTV4ZZyyxG9jngsF6V+ISxYHEDJAp/HgkwIoUm2gisPF04jq0fFWB00OfSQ70Hr\n2dJ+SUs1DStFrNBHR3fPqWwVuH+my0fNpm8twcFlTlrVg9FoG8EwcdSyHtbDwLN1\nABEBAAGJAR8EGAECAAkFAlxIOOYCGwwACgkQvzbNPQdJoRpMYQf/fqrLG8fS0Vts\nlhXhq8g7VQSHKC2voaKod83n+j1ywW9QjnKmeWSC77Y66Wv/igPt+mriDY3b+MI2\nXEZ81XIOaOOFTxDJcthL8KD602yK7FrCllBpTMCoi2QoV4JhMfL5WPbmk05vIJ27\nautQerXdc+CHq0Xvtrqxru3Qt5Bq7zB0TCgOdmgMHGhLl8BZc+z+ssXWk+wW4kMl\nDKYfVauxyWUpE3s1IWFw1Q6upZIJRSjvOsOKGNcKA+iI9f1ivDFIqqMQse9IrrF4\nxsAFzvE9CLiw1+arNeWBwIoihZNy/JqHo4zdn5gJN5aA45VQxHu+2AHEovamwokt\nnO3htSIz1g==\n=3KWT\n-----END PGP PUBLIC KEY BLOCK-----\n"
  },
  {
    "path": "tools/go.mod",
    "content": "module tools\n\ngo 1.25.3\n\nrequire github.com/hashicorp/terraform-plugin-docs v0.24.0\n\nrequire (\n\tgithub.com/BurntSushi/toml v1.2.1 // indirect\n\tgithub.com/Kunde21/markdownfmt/v3 v3.1.0 // indirect\n\tgithub.com/Masterminds/goutils v1.1.1 // indirect\n\tgithub.com/Masterminds/semver/v3 v3.2.0 // indirect\n\tgithub.com/Masterminds/sprig/v3 v3.2.3 // indirect\n\tgithub.com/ProtonMail/go-crypto v1.1.6 // indirect\n\tgithub.com/apparentlymart/go-textseg/v15 v15.0.0 // indirect\n\tgithub.com/armon/go-radix v1.0.0 // indirect\n\tgithub.com/bgentry/speakeasy v0.1.0 // indirect\n\tgithub.com/bmatcuk/doublestar/v4 v4.9.1 // indirect\n\tgithub.com/cloudflare/circl v1.6.1 // indirect\n\tgithub.com/fatih/color v1.16.0 // indirect\n\tgithub.com/google/uuid v1.3.0 // indirect\n\tgithub.com/hashicorp/cli v1.1.7 // indirect\n\tgithub.com/hashicorp/errwrap v1.1.0 // indirect\n\tgithub.com/hashicorp/go-checkpoint v0.5.0 // indirect\n\tgithub.com/hashicorp/go-cleanhttp v0.5.2 // indirect\n\tgithub.com/hashicorp/go-multierror v1.1.1 // indirect\n\tgithub.com/hashicorp/go-retryablehttp v0.7.7 // indirect\n\tgithub.com/hashicorp/go-uuid v1.0.3 // indirect\n\tgithub.com/hashicorp/go-version v1.7.0 // indirect\n\tgithub.com/hashicorp/hc-install v0.9.2 // indirect\n\tgithub.com/hashicorp/terraform-exec v0.24.0 // indirect\n\tgithub.com/hashicorp/terraform-json v0.27.2 // indirect\n\tgithub.com/huandu/xstrings v1.3.3 // indirect\n\tgithub.com/imdario/mergo v0.3.15 // indirect\n\tgithub.com/mattn/go-colorable v0.1.14 // indirect\n\tgithub.com/mattn/go-isatty v0.0.20 // indirect\n\tgithub.com/mattn/go-runewidth v0.0.9 // indirect\n\tgithub.com/mitchellh/copystructure v1.2.0 // indirect\n\tgithub.com/mitchellh/reflectwalk v1.0.2 // indirect\n\tgithub.com/posener/complete v1.2.3 // indirect\n\tgithub.com/shopspring/decimal v1.3.1 // indirect\n\tgithub.com/spf13/cast v1.5.0 // indirect\n\tgithub.com/yuin/goldmark v1.7.7 // indirect\n\tgithub.com/yuin/goldmark-meta v1.1.0 // indirect\n\tgithub.com/zclconf/go-cty v1.17.0 // indirect\n\tgo.abhg.dev/goldmark/frontmatter v0.2.0 // indirect\n\tgolang.org/x/crypto v0.38.0 // indirect\n\tgolang.org/x/exp v0.0.0-20230626212559-97b1e661b5df // indirect\n\tgolang.org/x/mod v0.28.0 // indirect\n\tgolang.org/x/sys v0.36.0 // indirect\n\tgolang.org/x/text v0.30.0 // indirect\n\tgopkg.in/yaml.v2 v2.3.0 // indirect\n\tgopkg.in/yaml.v3 v3.0.1 // indirect\n)\n"
  },
  {
    "path": "tools/go.sum",
    "content": "dario.cat/mergo v1.0.0 h1:AGCNq9Evsj31mOgNPcLyXc+4PNABt905YmuqPYYpBWk=\ndario.cat/mergo v1.0.0/go.mod h1:uNxQE+84aUszobStD9th8a29P2fMDhsBdgRYvZOxGmk=\ngithub.com/BurntSushi/toml v1.2.1 h1:9F2/+DoOYIOksmaJFPw1tGFy1eDnIJXg+UHjuD8lTak=\ngithub.com/BurntSushi/toml v1.2.1/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ=\ngithub.com/Kunde21/markdownfmt/v3 v3.1.0 h1:KiZu9LKs+wFFBQKhrZJrFZwtLnCCWJahL+S+E/3VnM0=\ngithub.com/Kunde21/markdownfmt/v3 v3.1.0/go.mod h1:tPXN1RTyOzJwhfHoon9wUr4HGYmWgVxSQN6VBJDkrVc=\ngithub.com/Masterminds/goutils v1.1.1 h1:5nUrii3FMTL5diU80unEVvNevw1nH4+ZV4DSLVJLSYI=\ngithub.com/Masterminds/goutils v1.1.1/go.mod h1:8cTjp+g8YejhMuvIA5y2vz3BpJxksy863GQaJW2MFNU=\ngithub.com/Masterminds/semver/v3 v3.2.0 h1:3MEsd0SM6jqZojhjLWWeBY+Kcjy9i6MQAeY7YgDP83g=\ngithub.com/Masterminds/semver/v3 v3.2.0/go.mod h1:qvl/7zhW3nngYb5+80sSMF+FG2BjYrf8m9wsX0PNOMQ=\ngithub.com/Masterminds/sprig/v3 v3.2.3 h1:eL2fZNezLomi0uOLqjQoN6BfsDD+fyLtgbJMAj9n6YA=\ngithub.com/Masterminds/sprig/v3 v3.2.3/go.mod h1:rXcFaZ2zZbLRJv/xSysmlgIM1u11eBaRMhvYXJNkGuM=\ngithub.com/Microsoft/go-winio v0.6.2 h1:F2VQgta7ecxGYO8k3ZZz3RS8fVIXVxONVUPlNERoyfY=\ngithub.com/Microsoft/go-winio v0.6.2/go.mod h1:yd8OoFMLzJbo9gZq8j5qaps8bJ9aShtEA8Ipt1oGCvU=\ngithub.com/ProtonMail/go-crypto v1.1.6 h1:ZcV+Ropw6Qn0AX9brlQLAUXfqLBc7Bl+f/DmNxpLfdw=\ngithub.com/ProtonMail/go-crypto v1.1.6/go.mod h1:rA3QumHc/FZ8pAHreoekgiAbzpNsfQAosU5td4SnOrE=\ngithub.com/apparentlymart/go-textseg/v15 v15.0.0 h1:uYvfpb3DyLSCGWnctWKGj857c6ew1u1fNQOlOtuGxQY=\ngithub.com/apparentlymart/go-textseg/v15 v15.0.0/go.mod h1:K8XmNZdhEBkdlyDdvbmmsvpAG721bKi0joRfFdHIWJ4=\ngithub.com/armon/go-radix v1.0.0 h1:F4z6KzEeeQIMeLFa97iZU6vupzoecKdU5TX24SNppXI=\ngithub.com/armon/go-radix v1.0.0/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8=\ngithub.com/bgentry/speakeasy v0.1.0 h1:ByYyxL9InA1OWqxJqqp2A5pYHUrCiAL6K3J+LKSsQkY=\ngithub.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs=\ngithub.com/bmatcuk/doublestar/v4 v4.9.1 h1:X8jg9rRZmJd4yRy7ZeNDRnM+T3ZfHv15JiBJ/avrEXE=\ngithub.com/bmatcuk/doublestar/v4 v4.9.1/go.mod h1:xBQ8jztBU6kakFMg+8WGxn0c6z1fTSPVIjEY1Wr7jzc=\ngithub.com/cloudflare/circl v1.6.1 h1:zqIqSPIndyBh1bjLVVDHMPpVKqp8Su/V+6MeDzzQBQ0=\ngithub.com/cloudflare/circl v1.6.1/go.mod h1:uddAzsPgqdMAYatqJ0lsjX1oECcQLIlRpzZh3pJrofs=\ngithub.com/cyphar/filepath-securejoin v0.4.1 h1:JyxxyPEaktOD+GAnqIqTf9A8tHyAG22rowi7HkoSU1s=\ngithub.com/cyphar/filepath-securejoin v0.4.1/go.mod h1:Sdj7gXlvMcPZsbhwhQ33GguGLDGQL7h7bg04C/+u9jI=\ngithub.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=\ngithub.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=\ngithub.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=\ngithub.com/emirpasic/gods v1.18.1 h1:FXtiHYKDGKCW2KzwZKx0iC0PQmdlorYgdFG9jPXJ1Bc=\ngithub.com/emirpasic/gods v1.18.1/go.mod h1:8tpGGwCnJ5H4r6BWwaV6OrWmMoPhUl5jm/FMNAnJvWQ=\ngithub.com/fatih/color v1.16.0 h1:zmkK9Ngbjj+K0yRhTVONQh1p/HknKYSlNT+vZCzyokM=\ngithub.com/fatih/color v1.16.0/go.mod h1:fL2Sau1YI5c0pdGEVCbKQbLXB6edEj1ZgiY4NijnWvE=\ngithub.com/frankban/quicktest v1.14.3 h1:FJKSZTDHjyhriyC81FLQ0LY93eSai0ZyR/ZIkd3ZUKE=\ngithub.com/frankban/quicktest v1.14.3/go.mod h1:mgiwOwqx65TmIk1wJ6Q7wvnVMocbUorkibMOrVTHZps=\ngithub.com/go-git/gcfg v1.5.1-0.20230307220236-3a3c6141e376 h1:+zs/tPmkDkHx3U66DAb0lQFJrpS6731Oaa12ikc+DiI=\ngithub.com/go-git/gcfg v1.5.1-0.20230307220236-3a3c6141e376/go.mod h1:an3vInlBmSxCcxctByoQdvwPiA7DTK7jaaFDBTtu0ic=\ngithub.com/go-git/go-billy/v5 v5.6.2 h1:6Q86EsPXMa7c3YZ3aLAQsMA0VlWmy43r6FHqa/UNbRM=\ngithub.com/go-git/go-billy/v5 v5.6.2/go.mod h1:rcFC2rAsp/erv7CMz9GczHcuD0D32fWzH+MJAU+jaUU=\ngithub.com/go-git/go-git/v5 v5.14.0 h1:/MD3lCrGjCen5WfEAzKg00MJJffKhC8gzS80ycmCi60=\ngithub.com/go-git/go-git/v5 v5.14.0/go.mod h1:Z5Xhoia5PcWA3NF8vRLURn9E5FRhSl7dGj9ItW3Wk5k=\ngithub.com/golang/groupcache v0.0.0-20241129210726-2c02b8208cf8 h1:f+oWsMOmNPc8JmEHVZIycC7hBoQxHH9pNKQORJNozsQ=\ngithub.com/golang/groupcache v0.0.0-20241129210726-2c02b8208cf8/go.mod h1:wcDNUvekVysuuOpQKo3191zZyTpiI6se1N1ULghS0sw=\ngithub.com/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8=\ngithub.com/google/go-cmp v0.7.0/go.mod h1:pXiqmnSA92OHEEa9HXL2W4E7lf9JzCmGVUdgjX3N/iU=\ngithub.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=\ngithub.com/google/uuid v1.3.0 h1:t6JiXgmwXMjEs8VusXIJk2BXHsn+wx8BZdTaoZ5fu7I=\ngithub.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=\ngithub.com/hashicorp/cli v1.1.7 h1:/fZJ+hNdwfTSfsxMBa9WWMlfjUZbX8/LnUxgAd7lCVU=\ngithub.com/hashicorp/cli v1.1.7/go.mod h1:e6Mfpga9OCT1vqzFuoGZiiF/KaG9CbUfO5s3ghU3YgU=\ngithub.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4=\ngithub.com/hashicorp/errwrap v1.1.0 h1:OxrOeh75EUXMY8TBjag2fzXGZ40LB6IKw45YeGUDY2I=\ngithub.com/hashicorp/errwrap v1.1.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4=\ngithub.com/hashicorp/go-checkpoint v0.5.0 h1:MFYpPZCnQqQTE18jFwSII6eUQrD/oxMFp3mlgcqk5mU=\ngithub.com/hashicorp/go-checkpoint v0.5.0/go.mod h1:7nfLNL10NsxqO4iWuW6tWW0HjZuDrwkBuEQsVcpCOgg=\ngithub.com/hashicorp/go-cleanhttp v0.5.0/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80=\ngithub.com/hashicorp/go-cleanhttp v0.5.2 h1:035FKYIWjmULyFRBKPs8TBQoi0x6d9G4xc9neXJWAZQ=\ngithub.com/hashicorp/go-cleanhttp v0.5.2/go.mod h1:kO/YDlP8L1346E6Sodw+PrpBSV4/SoxCXGY6BqNFT48=\ngithub.com/hashicorp/go-hclog v1.6.3 h1:Qr2kF+eVWjTiYmU7Y31tYlP1h0q/X3Nl3tPGdaB11/k=\ngithub.com/hashicorp/go-hclog v1.6.3/go.mod h1:W4Qnvbt70Wk/zYJryRzDRU/4r0kIg0PVHBcfoyhpF5M=\ngithub.com/hashicorp/go-multierror v1.0.0/go.mod h1:dHtQlpGsu+cZNNAkkCN/P3hoUDHhCYQXV3UM06sGGrk=\ngithub.com/hashicorp/go-multierror v1.1.1 h1:H5DkEtf6CXdFp0N0Em5UCwQpXMWke8IA0+lD48awMYo=\ngithub.com/hashicorp/go-multierror v1.1.1/go.mod h1:iw975J/qwKPdAO1clOe2L8331t/9/fmwbPZ6JB6eMoM=\ngithub.com/hashicorp/go-retryablehttp v0.7.7 h1:C8hUCYzor8PIfXHa4UrZkU4VvK8o9ISHxT2Q8+VepXU=\ngithub.com/hashicorp/go-retryablehttp v0.7.7/go.mod h1:pkQpWZeYWskR+D1tR2O5OcBFOxfA7DoAO6xtkuQnHTk=\ngithub.com/hashicorp/go-uuid v1.0.0/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro=\ngithub.com/hashicorp/go-uuid v1.0.3 h1:2gKiV6YVmrJ1i2CKKa9obLvRieoRGviZFL26PcT/Co8=\ngithub.com/hashicorp/go-uuid v1.0.3/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro=\ngithub.com/hashicorp/go-version v1.7.0 h1:5tqGy27NaOTB8yJKUZELlFAS/LTKJkrmONwQKeRZfjY=\ngithub.com/hashicorp/go-version v1.7.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA=\ngithub.com/hashicorp/hc-install v0.9.2 h1:v80EtNX4fCVHqzL9Lg/2xkp62bbvQMnvPQ0G+OmtO24=\ngithub.com/hashicorp/hc-install v0.9.2/go.mod h1:XUqBQNnuT4RsxoxiM9ZaUk0NX8hi2h+Lb6/c0OZnC/I=\ngithub.com/hashicorp/terraform-exec v0.24.0 h1:mL0xlk9H5g2bn0pPF6JQZk5YlByqSqrO5VoaNtAf8OE=\ngithub.com/hashicorp/terraform-exec v0.24.0/go.mod h1:lluc/rDYfAhYdslLJQg3J0oDqo88oGQAdHR+wDqFvo4=\ngithub.com/hashicorp/terraform-json v0.27.2 h1:BwGuzM6iUPqf9JYM/Z4AF1OJ5VVJEEzoKST/tRDBJKU=\ngithub.com/hashicorp/terraform-json v0.27.2/go.mod h1:GzPLJ1PLdUG5xL6xn1OXWIjteQRT2CNT9o/6A9mi9hE=\ngithub.com/hashicorp/terraform-plugin-docs v0.24.0 h1:YNZYd+8cpYclQyXbl1EEngbld8w7/LPOm99GD5nikIU=\ngithub.com/hashicorp/terraform-plugin-docs v0.24.0/go.mod h1:YLg+7LEwVmRuJc0EuCw0SPLxuQXw5mW8iJ5ml/kvi+o=\ngithub.com/huandu/xstrings v1.3.3 h1:/Gcsuc1x8JVbJ9/rlye4xZnVAbEkGauT8lbebqcQws4=\ngithub.com/huandu/xstrings v1.3.3/go.mod h1:y5/lhBue+AyNmUVz9RLU9xbLR0o4KIIExikq4ovT0aE=\ngithub.com/imdario/mergo v0.3.11/go.mod h1:jmQim1M+e3UYxmgPu/WyfjB3N3VflVyUjjjwH0dnCYA=\ngithub.com/imdario/mergo v0.3.15 h1:M8XP7IuFNsqUx6VPK2P9OSmsYsI/YFaGil0uD21V3dM=\ngithub.com/imdario/mergo v0.3.15/go.mod h1:WBLT9ZmE3lPoWsEzCh9LPo3TiwVN+ZKEjmz+hD27ysY=\ngithub.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99 h1:BQSFePA1RWJOlocH6Fxy8MmwDt+yVQYULKfN0RoTN8A=\ngithub.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99/go.mod h1:1lJo3i6rXxKeerYnT8Nvf0QmHCRC1n8sfWVwXF2Frvo=\ngithub.com/kevinburke/ssh_config v1.2.0 h1:x584FjTGwHzMwvHx18PXxbBVzfnxogHaAReU4gf13a4=\ngithub.com/kevinburke/ssh_config v1.2.0/go.mod h1:CT57kijsi8u/K/BOFA39wgDQJ9CxiF4nAY/ojJ6r6mM=\ngithub.com/kr/pretty v0.3.0 h1:WgNl7dwNpEZ6jJ9k1snq4pZsg7DOEN8hP9Xw0Tsjwk0=\ngithub.com/kr/pretty v0.3.0/go.mod h1:640gp4NfQd8pI5XOwp5fnNeVWj67G7CFk/SaSQn7NBk=\ngithub.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=\ngithub.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=\ngithub.com/mattn/go-colorable v0.1.14 h1:9A9LHSqF/7dyVVX6g0U9cwm9pG3kP9gSzcuIPHPsaIE=\ngithub.com/mattn/go-colorable v0.1.14/go.mod h1:6LmQG8QLFO4G5z1gPvYEzlUgJ2wF+stgPZH1UqBm1s8=\ngithub.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY=\ngithub.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y=\ngithub.com/mattn/go-runewidth v0.0.9 h1:Lm995f3rfxdpd6TSmuVCHVb/QhupuXlYr8sCI/QdE+0=\ngithub.com/mattn/go-runewidth v0.0.9/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI=\ngithub.com/mitchellh/copystructure v1.0.0/go.mod h1:SNtv71yrdKgLRyLFxmLdkAbkKEFWgYaq1OVrnRcwhnw=\ngithub.com/mitchellh/copystructure v1.2.0 h1:vpKXTN4ewci03Vljg/q9QvCGUDttBOGBIa15WveJJGw=\ngithub.com/mitchellh/copystructure v1.2.0/go.mod h1:qLl+cE2AmVv+CoeAwDPye/v+N2HKCj9FbZEVFJRxO9s=\ngithub.com/mitchellh/reflectwalk v1.0.0/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw=\ngithub.com/mitchellh/reflectwalk v1.0.2 h1:G2LzWKi524PWgd3mLHV8Y5k7s6XUvT0Gef6zxSIeXaQ=\ngithub.com/mitchellh/reflectwalk v1.0.2/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw=\ngithub.com/pjbgf/sha1cd v0.3.2 h1:a9wb0bp1oC2TGwStyn0Umc/IGKQnEgF0vVaZ8QF8eo4=\ngithub.com/pjbgf/sha1cd v0.3.2/go.mod h1:zQWigSxVmsHEZow5qaLtPYxpcKMMQpa09ixqBxuCS6A=\ngithub.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=\ngithub.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=\ngithub.com/posener/complete v1.2.3 h1:NP0eAhjcjImqslEwo/1hq7gpajME0fTLTezBKDqfXqo=\ngithub.com/posener/complete v1.2.3/go.mod h1:WZIdtGGp+qx0sLrYKtIRAruyNpv6hFCicSgv7Sy7s/s=\ngithub.com/rogpeppe/go-internal v1.14.1 h1:UQB4HGPB6osV0SQTLymcB4TgvyWu6ZyliaW0tI/otEQ=\ngithub.com/rogpeppe/go-internal v1.14.1/go.mod h1:MaRKkUm5W0goXpeCfT7UZI6fk/L7L7so1lCWt35ZSgc=\ngithub.com/sergi/go-diff v1.3.2-0.20230802210424-5b0b94c5c0d3 h1:n661drycOFuPLCN3Uc8sB6B/s6Z4t2xvBgU1htSHuq8=\ngithub.com/sergi/go-diff v1.3.2-0.20230802210424-5b0b94c5c0d3/go.mod h1:A0bzQcvG0E7Rwjx0REVgAGH58e96+X0MeOfepqsbeW4=\ngithub.com/shopspring/decimal v1.2.0/go.mod h1:DKyhrW/HYNuLGql+MJL6WCR6knT2jwCFRcu2hWCYk4o=\ngithub.com/shopspring/decimal v1.3.1 h1:2Usl1nmF/WZucqkFZhnfFYxxxu8LG21F6nPQBE5gKV8=\ngithub.com/shopspring/decimal v1.3.1/go.mod h1:DKyhrW/HYNuLGql+MJL6WCR6knT2jwCFRcu2hWCYk4o=\ngithub.com/skeema/knownhosts v1.3.1 h1:X2osQ+RAjK76shCbvhHHHVl3ZlgDm8apHEHFqRjnBY8=\ngithub.com/skeema/knownhosts v1.3.1/go.mod h1:r7KTdC8l4uxWRyK2TpQZ/1o5HaSzh06ePQNxPwTcfiY=\ngithub.com/spf13/cast v1.3.1/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE=\ngithub.com/spf13/cast v1.5.0 h1:rj3WzYc11XZaIZMPKmwP96zkFEnnAmV8s6XbB2aY32w=\ngithub.com/spf13/cast v1.5.0/go.mod h1:SpXXQ5YoyJw6s3/6cMTQuxvgRl3PCJiyaX9p6b155UU=\ngithub.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=\ngithub.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=\ngithub.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=\ngithub.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA=\ngithub.com/stretchr/testify v1.8.2 h1:+h33VjcLVPDHtOdpUCuF+7gSuG3yGIftsP1YvFihtJ8=\ngithub.com/stretchr/testify v1.8.2/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4=\ngithub.com/xanzy/ssh-agent v0.3.3 h1:+/15pJfg/RsTxqYcX6fHqOXZwwMP+2VyYWJeWM2qQFM=\ngithub.com/xanzy/ssh-agent v0.3.3/go.mod h1:6dzNDKs0J9rVPHPhaGCukekBHKqfl+L3KghI1Bc68Uw=\ngithub.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY=\ngithub.com/yuin/goldmark v1.7.7 h1:5m9rrB1sW3JUMToKFQfb+FGt1U7r57IHu5GrYrG2nqU=\ngithub.com/yuin/goldmark v1.7.7/go.mod h1:uzxRWxtg69N339t3louHJ7+O03ezfj6PlliRlaOzY1E=\ngithub.com/yuin/goldmark-meta v1.1.0 h1:pWw+JLHGZe8Rk0EGsMVssiNb/AaPMHfSRszZeUeiOUc=\ngithub.com/yuin/goldmark-meta v1.1.0/go.mod h1:U4spWENafuA7Zyg+Lj5RqK/MF+ovMYtBvXi1lBb2VP0=\ngithub.com/zclconf/go-cty v1.17.0 h1:seZvECve6XX4tmnvRzWtJNHdscMtYEx5R7bnnVyd/d0=\ngithub.com/zclconf/go-cty v1.17.0/go.mod h1:wqFzcImaLTI6A5HfsRwB0nj5n0MRZFwmey8YoFPPs3U=\ngo.abhg.dev/goldmark/frontmatter v0.2.0 h1:P8kPG0YkL12+aYk2yU3xHv4tcXzeVnN+gU0tJ5JnxRw=\ngo.abhg.dev/goldmark/frontmatter v0.2.0/go.mod h1:XqrEkZuM57djk7zrlRUB02x8I5J0px76YjkOzhB4YlU=\ngolang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=\ngolang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=\ngolang.org/x/crypto v0.3.0/go.mod h1:hebNnKkNXi2UzZN1eVRvBB7co0a+JxK6XbPiWVs/3J4=\ngolang.org/x/crypto v0.38.0 h1:jt+WWG8IZlBnVbomuhg2Mdq0+BBQaHbtqHEFEigjUV8=\ngolang.org/x/crypto v0.38.0/go.mod h1:MvrbAqul58NNYPKnOra203SB9vpuZW0e+RRZV+Ggqjw=\ngolang.org/x/exp v0.0.0-20230626212559-97b1e661b5df h1:UA2aFVmmsIlefxMk29Dp2juaUSth8Pyn3Tq5Y5mJGME=\ngolang.org/x/exp v0.0.0-20230626212559-97b1e661b5df/go.mod h1:FXUEEKJgO7OQYeo8N01OfiKP8RXMtf6e8aTskBGqWdc=\ngolang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4=\ngolang.org/x/mod v0.28.0 h1:gQBtGhjxykdjY9YhZpSlZIsbnaE2+PgjfLWUQTnoZ1U=\ngolang.org/x/mod v0.28.0/go.mod h1:yfB/L0NOf/kmEbXjzCPOx1iK1fRutOydrCMsqRhEBxI=\ngolang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=\ngolang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=\ngolang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c=\ngolang.org/x/net v0.2.0/go.mod h1:KqCZLdyyvdV855qA2rE3GC2aiw5xGR5TEjj8smXukLY=\ngolang.org/x/net v0.38.0 h1:vRMAPTMaeGqVhG5QyLJHqNDwecKTomGeqbnfZyKlBI8=\ngolang.org/x/net v0.38.0/go.mod h1:ivrbrMbzFq5J41QOQh0siUuly180yBYtLp+CKbEaFx8=\ngolang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=\ngolang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=\ngolang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=\ngolang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=\ngolang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=\ngolang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=\ngolang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=\ngolang.org/x/sys v0.2.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=\ngolang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=\ngolang.org/x/sys v0.36.0 h1:KVRy2GtZBrk1cBYA7MKu5bEZFxQk4NIDV6RLVcC8o0k=\ngolang.org/x/sys v0.36.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks=\ngolang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=\ngolang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=\ngolang.org/x/term v0.2.0/go.mod h1:TVmDHMZPmdnySmBfhjOoOdhjzdE1h4u1VwSiw2l1Nuc=\ngolang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=\ngolang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=\ngolang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=\ngolang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8=\ngolang.org/x/text v0.30.0 h1:yznKA/E9zq54KzlzBEAWn1NXSQ8DIp/NYMy88xJjl4k=\ngolang.org/x/text v0.30.0/go.mod h1:yDdHFIX9t+tORqspjENWgzaCVXgk0yYnYuSZ8UzzBVM=\ngolang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=\ngolang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=\ngolang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc=\ngolang.org/x/tools v0.37.0 h1:DVSRzp7FwePZW356yEAChSdNcQo6Nsp+fex1SUW09lE=\ngolang.org/x/tools v0.37.0/go.mod h1:MBN5QPQtLMHVdvsbtarmTNukZDdgwdwlO5qGacAzF0w=\ngolang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=\ngopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM=\ngopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=\ngopkg.in/warnings.v0 v0.1.2 h1:wFXVbFY8DY5/xOe1ECiWdKCzZlxgshcYVNkBHstARME=\ngopkg.in/warnings.v0 v0.1.2/go.mod h1:jksf8JmL6Qr/oQM2OXTHunEvvTAsrWBLb6OOjuVWRNI=\ngopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=\ngopkg.in/yaml.v2 v2.3.0 h1:clyUAQHOM3G0M3f5vQj7LuJrETvjVot3Z5el9nffUtU=\ngopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=\ngopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=\ngopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=\n"
  },
  {
    "path": "tools/tools.go",
    "content": "// Copyright (c) HashiCorp, Inc.\n// SPDX-License-Identifier: MPL-2.0\n\n//go:build generate\n\npackage tools\n\nimport (\n\t_ \"github.com/hashicorp/terraform-plugin-docs/cmd/tfplugindocs\"\n)\n\n// Format Terraform code for use in documentation.\n// If you do not have Terraform installed, you can remove the formatting command, but it is suggested\n// to ensure the documentation is formatted properly.\n//go:generate terraform fmt -recursive ../examples/\n\n// Generate documentation.\n//go:generate go run github.com/hashicorp/terraform-plugin-docs/cmd/tfplugindocs generate --provider-dir .. -provider-name sops -rendered-website-dir=docs\n"
  }
]