diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md index 5265d390063..234a347f24a 100644 --- a/.github/PULL_REQUEST_TEMPLATE.md +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -1,5 +1,5 @@ -**Issue number:** +**Issue number:** closes # ## Summary @@ -11,29 +11,17 @@ > Please share what the user experience looks like before and after this change -## Checklist + -* [ ] [Meet tenets criteria](https://docs.powertools.aws.dev/lambda/python/#tenets) -* [ ] I have performed a self-review of this change -* [ ] Changes have been tested -* [ ] Changes are documented -* [ ] PR title follows [conventional commit semantics](https://github.com/aws-powertools/powertools-lambda-python/blob/develop/.github/semantic.yml) - -
-Is this a breaking change? - -**RFC issue number**: - -Checklist: - -* [ ] Migration process documented -* [ ] Implement warnings (if it can live side by side) - -
- -## Acknowledgment +--- By submitting this pull request, I confirm that you can use, modify, copy, and redistribute this contribution, under the terms of your choice. diff --git a/.github/workflows/bootstrap_region.yml b/.github/workflows/bootstrap_region.yml index fa8de739aa4..25a904495a2 100644 --- a/.github/workflows/bootstrap_region.yml +++ b/.github/workflows/bootstrap_region.yml @@ -48,14 +48,14 @@ jobs: with: ref: ${{ github.sha }} - name: Setup Node.js - uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0 + uses: actions/setup-node@a0853c24544627f65ddf259abe73b1d18a591444 # v5.0.0 with: node-version: "22" - name: Setup dependencies - uses: aws-powertools/actions/.github/actions/cached-node-modules@743fa57a003787b157991ea5c6e3cf0d40468676 + uses: aws-powertools/actions/.github/actions/cached-node-modules@3b5b8e2e58b7af07994be982e83584a94e8c76c5 - id: credentials name: AWS Credentials - uses: aws-actions/configure-aws-credentials@aa1f74b81b53cb3adb28afcdb21d7b9f3fceea98 + uses: aws-actions/configure-aws-credentials@a03048d87541d1d9fcf2ecf528a4a65ba9bd7838 with: aws-region: ${{ inputs.region }} role-to-assume: ${{ secrets.REGION_IAM_ROLE }} @@ -94,14 +94,14 @@ jobs: steps: - id: credentials name: AWS Credentials - uses: aws-actions/configure-aws-credentials@aa1f74b81b53cb3adb28afcdb21d7b9f3fceea98 # v4.3.0 + uses: aws-actions/configure-aws-credentials@a03048d87541d1d9fcf2ecf528a4a65ba9bd7838 # v4.3.0 with: aws-region: us-east-1 role-to-assume: ${{ secrets.REGION_IAM_ROLE }} mask-aws-account-id: true - id: go-setup name: Setup Go - uses: actions/setup-go@d35c59abb061a4a6fb18e82ac0862c26744d6ab5 # v5.5.0 + uses: actions/setup-go@44694675825211faa026b3c33043df3e48a5fa00 # v6.0.0 with: go-version: '>=1.23.0' - id: go-env diff --git a/.github/workflows/dependency-review.yml b/.github/workflows/dependency-review.yml index f015c10e593..248828f4775 100644 --- a/.github/workflows/dependency-review.yml +++ b/.github/workflows/dependency-review.yml @@ -22,4 +22,4 @@ jobs: - name: 'Checkout Repository' uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 - name: 'Dependency Review' - uses: actions/dependency-review-action@da24556b548a50705dd671f47852072ea4c105d9 # v4.7.1 + uses: actions/dependency-review-action@595b5aeba73380359d98a5e087f648dbb0edce1b # v4.7.3 diff --git a/.github/workflows/dispatch_analytics.yml b/.github/workflows/dispatch_analytics.yml index 8efad1b5220..1c65197b8a3 100644 --- a/.github/workflows/dispatch_analytics.yml +++ b/.github/workflows/dispatch_analytics.yml @@ -43,7 +43,7 @@ jobs: statuses: read steps: - name: Configure AWS credentials - uses: aws-actions/configure-aws-credentials@aa1f74b81b53cb3adb28afcdb21d7b9f3fceea98 # v4.3.0 + uses: aws-actions/configure-aws-credentials@a03048d87541d1d9fcf2ecf528a4a65ba9bd7838 # v4.3.0 with: aws-region: eu-central-1 role-to-assume: ${{ secrets.AWS_LAYERS_ROLE_ARN }} diff --git a/.github/workflows/label_pr_on_title.yml b/.github/workflows/label_pr_on_title.yml index 6e08551181d..0ed8a786b0d 100644 --- a/.github/workflows/label_pr_on_title.yml +++ b/.github/workflows/label_pr_on_title.yml @@ -52,7 +52,7 @@ jobs: - name: Checkout repository uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 - name: "Label PR based on title" - uses: actions/github-script@60a0d83039c74a4aee543508d2ffcb1c3799cdea # v7.0.1 + uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8.0.0 env: PR_NUMBER: ${{ needs.get_pr_details.outputs.prNumber }} PR_TITLE: ${{ needs.get_pr_details.outputs.prTitle }} diff --git a/.github/workflows/layer_govcloud.yml b/.github/workflows/layer_govcloud.yml index 30d310ae7d7..fceea7e6838 100644 --- a/.github/workflows/layer_govcloud.yml +++ b/.github/workflows/layer_govcloud.yml @@ -59,7 +59,7 @@ jobs: environment: Prod (Readonly) steps: - name: Configure AWS Credentials - uses: aws-actions/configure-aws-credentials@aa1f74b81b53cb3adb28afcdb21d7b9f3fceea98 # v4.3.0 + uses: aws-actions/configure-aws-credentials@a03048d87541d1d9fcf2ecf528a4a65ba9bd7838 # v4.3.0 with: role-to-assume: ${{ secrets.AWS_IAM_ROLE }} aws-region: us-east-1 @@ -116,7 +116,7 @@ jobs: SHA=$(jq -r '.Content.CodeSha256' '${{ matrix.layer }}_${{ matrix.arch }}.json') test "$(openssl dgst -sha256 -binary ${{ matrix.layer }}_${{ matrix.arch }}.zip | openssl enc -base64)" == "$SHA" && echo "SHA OK: ${SHA}" || exit 1 - name: Configure AWS Credentials - uses: aws-actions/configure-aws-credentials@aa1f74b81b53cb3adb28afcdb21d7b9f3fceea98 # v4.3.0 + uses: aws-actions/configure-aws-credentials@a03048d87541d1d9fcf2ecf528a4a65ba9bd7838 # v4.3.0 with: role-to-assume: ${{ secrets.AWS_IAM_ROLE }} aws-region: us-gov-east-1 @@ -185,7 +185,7 @@ jobs: SHA=$(jq -r '.Content.CodeSha256' '${{ matrix.layer }}_${{ matrix.arch }}.json') test "$(openssl dgst -sha256 -binary ${{ matrix.layer }}_${{ matrix.arch }}.zip | openssl enc -base64)" == "$SHA" && echo "SHA OK: ${SHA}" || exit 1 - name: Configure AWS Credentials - uses: aws-actions/configure-aws-credentials@aa1f74b81b53cb3adb28afcdb21d7b9f3fceea98 # v4.3.0 + uses: aws-actions/configure-aws-credentials@a03048d87541d1d9fcf2ecf528a4a65ba9bd7838 # v4.3.0 with: role-to-assume: ${{ secrets.AWS_IAM_ROLE }} aws-region: us-gov-west-1 diff --git a/.github/workflows/layer_govcloud_python313.yml b/.github/workflows/layer_govcloud_python313.yml index 2c7c0a54c64..edb0f172e8c 100644 --- a/.github/workflows/layer_govcloud_python313.yml +++ b/.github/workflows/layer_govcloud_python313.yml @@ -55,7 +55,7 @@ jobs: environment: Prod (Readonly) steps: - name: Configure AWS Credentials - uses: aws-actions/configure-aws-credentials@aa1f74b81b53cb3adb28afcdb21d7b9f3fceea98 # v4.3.0 + uses: aws-actions/configure-aws-credentials@a03048d87541d1d9fcf2ecf528a4a65ba9bd7838 # v4.3.0 with: role-to-assume: ${{ secrets.AWS_IAM_ROLE }} aws-region: us-east-1 @@ -108,7 +108,7 @@ jobs: SHA=$(jq -r '.Content.CodeSha256' '${{ matrix.layer }}_${{ matrix.arch }}.json') test "$(openssl dgst -sha256 -binary ${{ matrix.layer }}_${{ matrix.arch }}.zip | openssl enc -base64)" == "$SHA" && echo "SHA OK: ${SHA}" || exit 1 - name: Configure AWS Credentials - uses: aws-actions/configure-aws-credentials@aa1f74b81b53cb3adb28afcdb21d7b9f3fceea98 # v4.3.0 + uses: aws-actions/configure-aws-credentials@a03048d87541d1d9fcf2ecf528a4a65ba9bd7838 # v4.3.0 with: role-to-assume: ${{ secrets.AWS_IAM_ROLE }} aws-region: us-gov-east-1 @@ -173,7 +173,7 @@ jobs: SHA=$(jq -r '.Content.CodeSha256' '${{ matrix.layer }}_${{ matrix.arch }}.json') test "$(openssl dgst -sha256 -binary ${{ matrix.layer }}_${{ matrix.arch }}.zip | openssl enc -base64)" == "$SHA" && echo "SHA OK: ${SHA}" || exit 1 - name: Configure AWS Credentials - uses: aws-actions/configure-aws-credentials@aa1f74b81b53cb3adb28afcdb21d7b9f3fceea98 # v4.3.0 + uses: aws-actions/configure-aws-credentials@a03048d87541d1d9fcf2ecf528a4a65ba9bd7838 # v4.3.0 with: role-to-assume: ${{ secrets.AWS_IAM_ROLE }} aws-region: us-gov-west-1 diff --git a/.github/workflows/layer_govcloud_verify.yml b/.github/workflows/layer_govcloud_verify.yml index c684e926277..c60b750b47e 100644 --- a/.github/workflows/layer_govcloud_verify.yml +++ b/.github/workflows/layer_govcloud_verify.yml @@ -39,7 +39,7 @@ jobs: environment: Prod (Readonly) steps: - name: Configure AWS Credentials - uses: aws-actions/configure-aws-credentials@aa1f74b81b53cb3adb28afcdb21d7b9f3fceea98 # v4.3.0 + uses: aws-actions/configure-aws-credentials@a03048d87541d1d9fcf2ecf528a4a65ba9bd7838 # v4.3.0 with: role-to-assume: ${{ secrets.AWS_IAM_ROLE }} aws-region: us-east-1 @@ -69,7 +69,7 @@ jobs: environment: GovCloud Prod (East) steps: - name: Configure AWS Credentials - uses: aws-actions/configure-aws-credentials@aa1f74b81b53cb3adb28afcdb21d7b9f3fceea98 # v4.3.0 + uses: aws-actions/configure-aws-credentials@a03048d87541d1d9fcf2ecf528a4a65ba9bd7838 # v4.3.0 with: role-to-assume: ${{ secrets.AWS_IAM_ROLE }} aws-region: us-gov-east-1 @@ -100,7 +100,7 @@ jobs: environment: GovCloud Prod (West) steps: - name: Configure AWS Credentials - uses: aws-actions/configure-aws-credentials@aa1f74b81b53cb3adb28afcdb21d7b9f3fceea98 # v4.3.0 + uses: aws-actions/configure-aws-credentials@a03048d87541d1d9fcf2ecf528a4a65ba9bd7838 # v4.3.0 with: role-to-assume: ${{ secrets.AWS_IAM_ROLE }} aws-region: us-gov-east-1 diff --git a/.github/workflows/layers_partition_verify.yml b/.github/workflows/layers_partition_verify.yml index 53a21cd1693..8fc0965d891 100644 --- a/.github/workflows/layers_partition_verify.yml +++ b/.github/workflows/layers_partition_verify.yml @@ -87,7 +87,7 @@ jobs: - x86_64 steps: - name: Configure AWS Credentials - uses: aws-actions/configure-aws-credentials@aa1f74b81b53cb3adb28afcdb21d7b9f3fceea98 # v4.3.0 + uses: aws-actions/configure-aws-credentials@a03048d87541d1d9fcf2ecf528a4a65ba9bd7838 # v4.3.0 with: role-to-assume: ${{ secrets.AWS_IAM_ROLE }} aws-region: us-east-1 @@ -136,7 +136,7 @@ jobs: run: | echo 'CONVERTED_REGION=${{ matrix.region }}' | tr 'a-z\-' 'A-Z_' >> "$GITHUB_OUTPUT" - name: Configure AWS Credentials - uses: aws-actions/configure-aws-credentials@aa1f74b81b53cb3adb28afcdb21d7b9f3fceea98 # v4.3.0 + uses: aws-actions/configure-aws-credentials@a03048d87541d1d9fcf2ecf528a4a65ba9bd7838 # v4.3.0 with: role-to-assume: ${{ secrets[format('IAM_ROLE_{0}', steps.transform.outputs.CONVERTED_REGION)] }} aws-region: ${{ matrix.region}} diff --git a/.github/workflows/layers_partitions.yml b/.github/workflows/layers_partitions.yml index f1de2cf37b8..f92049b70d8 100644 --- a/.github/workflows/layers_partitions.yml +++ b/.github/workflows/layers_partitions.yml @@ -84,7 +84,7 @@ jobs: - x86_64 steps: - name: Configure AWS Credentials - uses: aws-actions/configure-aws-credentials@aa1f74b81b53cb3adb28afcdb21d7b9f3fceea98 # v4.3.0 + uses: aws-actions/configure-aws-credentials@a03048d87541d1d9fcf2ecf528a4a65ba9bd7838 # v4.3.0 with: role-to-assume: ${{ secrets.AWS_IAM_ROLE }} aws-region: us-east-1 @@ -148,7 +148,7 @@ jobs: run: | echo 'CONVERTED_REGION=${{ matrix.region }}' | tr 'a-z\-' 'A-Z_' >> "$GITHUB_OUTPUT" - name: Configure AWS Credentials - uses: aws-actions/configure-aws-credentials@aa1f74b81b53cb3adb28afcdb21d7b9f3fceea98 # v4.3.0 + uses: aws-actions/configure-aws-credentials@a03048d87541d1d9fcf2ecf528a4a65ba9bd7838 # v4.3.0 with: role-to-assume: ${{ secrets[format('IAM_ROLE_{0}', steps.transform.outputs.CONVERTED_REGION)] }} aws-region: ${{ matrix.region}} diff --git a/.github/workflows/on_label_added.yml b/.github/workflows/on_label_added.yml index 54ce67ac0e8..37912a37883 100644 --- a/.github/workflows/on_label_added.yml +++ b/.github/workflows/on_label_added.yml @@ -50,7 +50,7 @@ jobs: - uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 # Maintenance: Persist state per PR as an artifact to avoid spam on label add - name: "Suggest split large Pull Request" - uses: actions/github-script@60a0d83039c74a4aee543508d2ffcb1c3799cdea # v7.0.1 + uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8.0.0 env: PR_NUMBER: ${{ needs.get_pr_details.outputs.prNumber }} PR_ACTION: ${{ needs.get_pr_details.outputs.prAction }} diff --git a/.github/workflows/on_merged_pr.yml b/.github/workflows/on_merged_pr.yml index f395b2d9c1b..0e9cab2196c 100644 --- a/.github/workflows/on_merged_pr.yml +++ b/.github/workflows/on_merged_pr.yml @@ -51,7 +51,7 @@ jobs: steps: - uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 - name: "Label PR related issue for release" - uses: actions/github-script@60a0d83039c74a4aee543508d2ffcb1c3799cdea # v7.0.1 + uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8.0.0 env: PR_NUMBER: ${{ needs.get_pr_details.outputs.prNumber }} PR_BODY: ${{ needs.get_pr_details.outputs.prBody }} diff --git a/.github/workflows/pre-release.yml b/.github/workflows/pre-release.yml index 89f8024c6ff..27f78dfe44c 100644 --- a/.github/workflows/pre-release.yml +++ b/.github/workflows/pre-release.yml @@ -126,7 +126,7 @@ jobs: - name: Install poetry run: pipx install git+https://github.com/python-poetry/poetry@bd500dd3bdfaec3de6894144c9cedb3a9358be84 # v2.0.1 - name: Set up Python - uses: actions/setup-python@a26af69be951a213d495a4c3e4e4022e16d87065 # v5.6.0 + uses: actions/setup-python@e797f83bcb11b83ae66e0230d6156d7c80228e7c # v6.0.0 with: python-version: "3.12" cache: "poetry" @@ -164,7 +164,7 @@ jobs: - name: Install poetry run: pipx install git+https://github.com/python-poetry/poetry@bd500dd3bdfaec3de6894144c9cedb3a9358be84 # v2.0.1 - name: Set up Python - uses: actions/setup-python@a26af69be951a213d495a4c3e4e4022e16d87065 # v5.6.0 + uses: actions/setup-python@e797f83bcb11b83ae66e0230d6156d7c80228e7c # v6.0.0 with: python-version: "3.12" cache: "poetry" @@ -232,7 +232,7 @@ jobs: - name: Upload to PyPi prod if: ${{ !inputs.skip_pypi }} - uses: pypa/gh-action-pypi-publish@76f52bc884231f62b9a034ebfe128415bbaabdfc # v1.12.4 + uses: pypa/gh-action-pypi-publish@ed0c53931b1dc9bd32cbe73a98c7f6766f8a527e # v1.13.0 # Creates a PR with the latest version we've just released # since our trunk is protected against any direct pushes from automation diff --git a/.github/workflows/publish_v3_layer.yml b/.github/workflows/publish_v3_layer.yml index 338609c9292..439b8004e5d 100644 --- a/.github/workflows/publish_v3_layer.yml +++ b/.github/workflows/publish_v3_layer.yml @@ -123,11 +123,11 @@ jobs: pipx install git+https://github.com/python-poetry/poetry@bd500dd3bdfaec3de6894144c9cedb3a9358be84 # v2.0.1 pipx inject poetry git+https://github.com/python-poetry/poetry-plugin-export@8c83d26603ca94f2e203bfded7b6d7f530960e06 # v1.8.0 - name: Setup Node.js - uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0 + uses: actions/setup-node@a0853c24544627f65ddf259abe73b1d18a591444 # v5.0.0 with: node-version: "18.20.4" - name: Setup python - uses: actions/setup-python@a26af69be951a213d495a4c3e4e4022e16d87065 # v5.6.0 + uses: actions/setup-python@e797f83bcb11b83ae66e0230d6156d7c80228e7c # v6.0.0 with: python-version: ${{ matrix.python-version }} cache: "pip" diff --git a/.github/workflows/quality_check.yml b/.github/workflows/quality_check.yml index fe93065aced..6a0465ebd47 100644 --- a/.github/workflows/quality_check.yml +++ b/.github/workflows/quality_check.yml @@ -56,7 +56,7 @@ jobs: - name: Install poetry run: pipx install poetry - name: Set up Python ${{ matrix.python-version }} - uses: actions/setup-python@a26af69be951a213d495a4c3e4e4022e16d87065 # v5.6.0 + uses: actions/setup-python@e797f83bcb11b83ae66e0230d6156d7c80228e7c # v6.0.0 with: python-version: ${{ matrix.python-version }} - name: Install dependencies @@ -76,7 +76,7 @@ jobs: - name: Complexity baseline run: make complexity-baseline - name: Upload coverage to Codecov - uses: codecov/codecov-action@18283e04ce6e62d37312384ff67231eb8fd56d24 # 5.4.3 + uses: codecov/codecov-action@5a1091511ad55cbe89839c7260b706298ca349f7 # 5.5.1 with: token: ${{ secrets.CODECOV_TOKEN }} files: ./coverage.xml diff --git a/.github/workflows/quality_check_docs.yml b/.github/workflows/quality_check_docs.yml index 345df79bc59..15bb6fa1349 100644 --- a/.github/workflows/quality_check_docs.yml +++ b/.github/workflows/quality_check_docs.yml @@ -37,7 +37,7 @@ jobs: steps: - uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 - name: Set up Python - uses: actions/setup-python@a26af69be951a213d495a4c3e4e4022e16d87065 # v5.6.0 + uses: actions/setup-python@e797f83bcb11b83ae66e0230d6156d7c80228e7c # v6.0.0 with: python-version: 3.13 - name: Install doc generation dependencies diff --git a/.github/workflows/quality_code_cdk_constructor.yml b/.github/workflows/quality_code_cdk_constructor.yml index f005f47214d..7f1c8ef99de 100644 --- a/.github/workflows/quality_code_cdk_constructor.yml +++ b/.github/workflows/quality_code_cdk_constructor.yml @@ -46,7 +46,7 @@ jobs: - name: Install poetry run: pipx install poetry - name: Set up Python ${{ matrix.python-version }} - uses: actions/setup-python@a26af69be951a213d495a4c3e4e4022e16d87065 # v5.6.0 + uses: actions/setup-python@e797f83bcb11b83ae66e0230d6156d7c80228e7c # v6.0.0 with: python-version: ${{ matrix.python-version }} cache: "poetry" diff --git a/.github/workflows/record_pr.yml b/.github/workflows/record_pr.yml index 8e0673188c5..18434f9eee0 100644 --- a/.github/workflows/record_pr.yml +++ b/.github/workflows/record_pr.yml @@ -48,7 +48,7 @@ jobs: steps: - uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 - name: "Extract PR details" - uses: actions/github-script@60a0d83039c74a4aee543508d2ffcb1c3799cdea # v7.0.1 + uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8.0.0 with: script: | const script = require('.github/scripts/save_pr_details.js') diff --git a/.github/workflows/release-v3.yml b/.github/workflows/release-v3.yml index 1980541b46d..2622d121d84 100644 --- a/.github/workflows/release-v3.yml +++ b/.github/workflows/release-v3.yml @@ -140,7 +140,7 @@ jobs: - name: Install poetry run: pipx install git+https://github.com/python-poetry/poetry@bd500dd3bdfaec3de6894144c9cedb3a9358be84 # v2.0.1 - name: Set up Python - uses: actions/setup-python@a26af69be951a213d495a4c3e4e4022e16d87065 # v5.6.0 + uses: actions/setup-python@e797f83bcb11b83ae66e0230d6156d7c80228e7c # v6.0.0 with: python-version: "3.12" cache: "poetry" @@ -178,7 +178,7 @@ jobs: - name: Install poetry run: pipx install git+https://github.com/python-poetry/poetry@bd500dd3bdfaec3de6894144c9cedb3a9358be84 # v2.0.1 - name: Set up Python - uses: actions/setup-python@a26af69be951a213d495a4c3e4e4022e16d87065 # v5.6.0 + uses: actions/setup-python@e797f83bcb11b83ae66e0230d6156d7c80228e7c # v6.0.0 with: python-version: "3.12" cache: "poetry" @@ -246,12 +246,12 @@ jobs: - name: Upload to PyPi prod if: ${{ !inputs.skip_pypi }} - uses: pypa/gh-action-pypi-publish@76f52bc884231f62b9a034ebfe128415bbaabdfc # v1.12.4 + uses: pypa/gh-action-pypi-publish@ed0c53931b1dc9bd32cbe73a98c7f6766f8a527e # v1.13.0 # PyPi test maintenance affected us numerous times, leaving for history purposes # - name: Upload to PyPi test # if: ${{ !inputs.skip_pypi }} - # uses: pypa/gh-action-pypi-publish@76f52bc884231f62b9a034ebfe128415bbaabdfc # v1.12.4 + # uses: pypa/gh-action-pypi-publish@ed0c53931b1dc9bd32cbe73a98c7f6766f8a527e # v1.13.0 # with: # repository-url: https://test.pypi.org/legacy/ @@ -377,7 +377,7 @@ jobs: integrity_hash: ${{ needs.seal.outputs.integrity_hash }} artifact_name: ${{ needs.seal.outputs.artifact_name }} - name: Close issues related to this release - uses: actions/github-script@60a0d83039c74a4aee543508d2ffcb1c3799cdea # v7.0.1 + uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8.0.0 with: github-token: ${{ secrets.GITHUB_TOKEN }} script: | diff --git a/.github/workflows/reusable_deploy_v3_layer_stack.yml b/.github/workflows/reusable_deploy_v3_layer_stack.yml index 31c717bd4bf..47820a0b1d1 100644 --- a/.github/workflows/reusable_deploy_v3_layer_stack.yml +++ b/.github/workflows/reusable_deploy_v3_layer_stack.yml @@ -161,17 +161,17 @@ jobs: pipx install git+https://github.com/python-poetry/poetry@bd500dd3bdfaec3de6894144c9cedb3a9358be84 # v2.0.1 pipx inject poetry git+https://github.com/python-poetry/poetry-plugin-export@8c83d26603ca94f2e203bfded7b6d7f530960e06 # v1.8.0 - name: Configure AWS credentials - uses: aws-actions/configure-aws-credentials@aa1f74b81b53cb3adb28afcdb21d7b9f3fceea98 # v4.3.0 + uses: aws-actions/configure-aws-credentials@a03048d87541d1d9fcf2ecf528a4a65ba9bd7838 # v4.3.0 with: aws-region: ${{ matrix.region }} role-to-assume: ${{ secrets.AWS_LAYERS_ROLE_ARN }} mask-aws-account-id: true - name: Setup Node.js - uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0 + uses: actions/setup-node@a0853c24544627f65ddf259abe73b1d18a591444 # v5.0.0 with: node-version: "18.20.4" - name: Setup python - uses: actions/setup-python@a26af69be951a213d495a4c3e4e4022e16d87065 # v5.6.0 + uses: actions/setup-python@e797f83bcb11b83ae66e0230d6156d7c80228e7c # v6.0.0 with: python-version: ${{ matrix.python-version }} cache: "pip" diff --git a/.github/workflows/reusable_deploy_v3_sar.yml b/.github/workflows/reusable_deploy_v3_sar.yml index 1edaecac3f3..87c12459d30 100644 --- a/.github/workflows/reusable_deploy_v3_sar.yml +++ b/.github/workflows/reusable_deploy_v3_sar.yml @@ -87,7 +87,7 @@ jobs: - name: Configure AWS credentials - uses: aws-actions/configure-aws-credentials@aa1f74b81b53cb3adb28afcdb21d7b9f3fceea98 # v4.3.0 + uses: aws-actions/configure-aws-credentials@a03048d87541d1d9fcf2ecf528a4a65ba9bd7838 # v4.3.0 with: aws-region: ${{ env.AWS_REGION }} role-to-assume: ${{ secrets.AWS_LAYERS_ROLE_ARN }} @@ -98,7 +98,7 @@ jobs: # we then jump to our specific SAR Account with the correctly scoped IAM Role # this allows us to have a single trail when a release occurs for a given layer (beta+prod+SAR beta+SAR prod) - name: AWS credentials SAR role - uses: aws-actions/configure-aws-credentials@aa1f74b81b53cb3adb28afcdb21d7b9f3fceea98 # v4.3.0 + uses: aws-actions/configure-aws-credentials@a03048d87541d1d9fcf2ecf528a4a65ba9bd7838 # v4.3.0 id: aws-credentials-sar-role with: aws-access-key-id: ${{ env.AWS_ACCESS_KEY_ID }} @@ -109,7 +109,7 @@ jobs: role-to-assume: ${{ secrets.AWS_SAR_V3_ROLE_ARN }} mask-aws-account-id: true - name: Setup Node.js - uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0 + uses: actions/setup-node@a0853c24544627f65ddf259abe73b1d18a591444 # v5.0.0 with: node-version: ${{ env.NODE_VERSION }} - name: Download artifact diff --git a/.github/workflows/reusable_export_pr_details.yml b/.github/workflows/reusable_export_pr_details.yml index ba768d6d46e..e6e59d25ce5 100644 --- a/.github/workflows/reusable_export_pr_details.yml +++ b/.github/workflows/reusable_export_pr_details.yml @@ -78,7 +78,7 @@ jobs: - name: Checkout repository # in case caller workflow doesn't checkout thus failing with file not found uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 - name: "Download previously saved PR" - uses: actions/github-script@60a0d83039c74a4aee543508d2ffcb1c3799cdea # v7.0.1 + uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8.0.0 env: WORKFLOW_ID: ${{ inputs.record_pr_workflow_id }} # For security, we only download artifacts tied to the successful PR recording workflow diff --git a/.github/workflows/reusable_publish_docs.yml b/.github/workflows/reusable_publish_docs.yml index 8278e3f16cc..c8520572e9b 100644 --- a/.github/workflows/reusable_publish_docs.yml +++ b/.github/workflows/reusable_publish_docs.yml @@ -47,7 +47,7 @@ jobs: fetch-depth: 0 ref: ${{ inputs.git_ref }} - name: Set up Python - uses: actions/setup-python@a26af69be951a213d495a4c3e4e4022e16d87065 # v5.6.0 + uses: actions/setup-python@e797f83bcb11b83ae66e0230d6156d7c80228e7c # v6.0.0 with: python-version: "3.12" - name: Install doc generation dependencies @@ -68,7 +68,7 @@ jobs: env: BRANCH: ${{ inputs.git_ref }} - name: Configure AWS credentials - uses: aws-actions/configure-aws-credentials@aa1f74b81b53cb3adb28afcdb21d7b9f3fceea98 # v4.3.0 + uses: aws-actions/configure-aws-credentials@a03048d87541d1d9fcf2ecf528a4a65ba9bd7838 # v4.3.0 with: aws-region: us-east-1 role-to-assume: ${{ secrets.AWS_DOCS_ROLE_ARN }} diff --git a/.github/workflows/run-e2e-tests.yml b/.github/workflows/run-e2e-tests.yml index fe0572559cd..7cd4f4c3b48 100644 --- a/.github/workflows/run-e2e-tests.yml +++ b/.github/workflows/run-e2e-tests.yml @@ -56,13 +56,13 @@ jobs: - name: Install poetry run: pipx install poetry - name: "Use Python" - uses: actions/setup-python@a26af69be951a213d495a4c3e4e4022e16d87065 # v5.6.0 + uses: actions/setup-python@e797f83bcb11b83ae66e0230d6156d7c80228e7c # v6.0.0 with: python-version: ${{ matrix.version }} architecture: "x64" cache: "poetry" - name: Setup Node.js - uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0 + uses: actions/setup-node@a0853c24544627f65ddf259abe73b1d18a591444 # v5.0.0 with: node-version: "20.10.0" - name: Install CDK CLI @@ -72,7 +72,7 @@ jobs: - name: Install dependencies run: make dev-quality-code - name: Configure AWS credentials - uses: aws-actions/configure-aws-credentials@aa1f74b81b53cb3adb28afcdb21d7b9f3fceea98 # v4.3.0 + uses: aws-actions/configure-aws-credentials@a03048d87541d1d9fcf2ecf528a4a65ba9bd7838 # v4.3.0 with: role-to-assume: ${{ secrets.AWS_TEST_ROLE_ARN }} aws-region: ${{ env.AWS_DEFAULT_REGION }} diff --git a/.github/workflows/update_ssm.yml b/.github/workflows/update_ssm.yml index 291a904ee8c..ee0ba119ded 100644 --- a/.github/workflows/update_ssm.yml +++ b/.github/workflows/update_ssm.yml @@ -89,7 +89,7 @@ jobs: run: | echo 'CONVERTED_REGION=${{ matrix.region }}' | tr 'a-z\-' 'A-Z_' >> "$GITHUB_OUTPUT" - id: creds - uses: aws-actions/configure-aws-credentials@aa1f74b81b53cb3adb28afcdb21d7b9f3fceea98 # v4.3.0 + uses: aws-actions/configure-aws-credentials@a03048d87541d1d9fcf2ecf528a4a65ba9bd7838 # v4.3.0 with: aws-region: ${{ matrix.region }} role-to-assume: ${{ secrets[format('{0}', steps.transform.outputs.CONVERTED_REGION)] }} diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index de0c36b21e0..f0ea1cbf495 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -34,7 +34,7 @@ repos: entry: poetry run cfn-lint language: system types: [yaml] - exclude: examples/homepage/install/.*?/serverless\.yml$ + exclude: examples/build_recipes/* files: examples/.* - repo: https://github.com/rhysd/actionlint rev: "fd7ba3c382e13dcc0248e425b4cbc3f1185fa3ee" # v1.6.24 diff --git a/CHANGELOG.md b/CHANGELOG.md index 3d264f1515c..1cfa3603a09 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,17 @@ # Unreleased + + +## [v3.20.0] - 2025-09-09 +## Maintenance + +* version bump +* **deps:** bump codecov/codecov-action from 5.5.0 to 5.5.1 ([#7345](https://github.com/aws-powertools/powertools-lambda-python/issues/7345)) + + + +## [v3.19.0] - 2025-08-12 ## Bug Fixes * **event_handler:** split OpenAPI validation to respect middleware returns ([#7050](https://github.com/aws-powertools/powertools-lambda-python/issues/7050)) @@ -27,49 +38,56 @@ ## Maintenance -* **ci:** new pre-release 3.18.1a8 ([#7147](https://github.com/aws-powertools/powertools-lambda-python/issues/7147)) -* **ci:** new pre-release 3.18.1a4 ([#7105](https://github.com/aws-powertools/powertools-lambda-python/issues/7105)) -* **ci:** new pre-release 3.18.1a7 ([#7141](https://github.com/aws-powertools/powertools-lambda-python/issues/7141)) -* **ci:** new pre-release 3.18.1a2 ([#7085](https://github.com/aws-powertools/powertools-lambda-python/issues/7085)) -* **ci:** new pre-release 3.18.1a5 ([#7114](https://github.com/aws-powertools/powertools-lambda-python/issues/7114)) +* version bump * **ci:** new pre-release 3.18.1a6 ([#7134](https://github.com/aws-powertools/powertools-lambda-python/issues/7134)) +* **ci:** new pre-release 3.18.1a5 ([#7114](https://github.com/aws-powertools/powertools-lambda-python/issues/7114)) * **ci:** new pre-release 3.18.1a1 ([#7077](https://github.com/aws-powertools/powertools-lambda-python/issues/7077)) * **ci:** new pre-release 3.18.1a0 ([#7068](https://github.com/aws-powertools/powertools-lambda-python/issues/7068)) +* **ci:** new pre-release 3.18.1a9 ([#7155](https://github.com/aws-powertools/powertools-lambda-python/issues/7155)) +* **ci:** new pre-release 3.18.1a8 ([#7147](https://github.com/aws-powertools/powertools-lambda-python/issues/7147)) * **ci:** new pre-release 3.18.1a3 ([#7097](https://github.com/aws-powertools/powertools-lambda-python/issues/7097)) -* **deps:** bump aws-powertools/actions from 1.3.0 to 1.4.0 ([#7104](https://github.com/aws-powertools/powertools-lambda-python/issues/7104)) -* **deps:** bump mkdocs-llmstxt from 0.3.0 to 0.3.1 ([#7130](https://github.com/aws-powertools/powertools-lambda-python/issues/7130)) -* **deps:** bump squidfunk/mkdocs-material from `0bfdba4` to `bb7b015` in /docs ([#7059](https://github.com/aws-powertools/powertools-lambda-python/issues/7059)) -* **deps:** bump mkdocs-material from 9.6.15 to 9.6.16 in /docs ([#7060](https://github.com/aws-powertools/powertools-lambda-python/issues/7060)) -* **deps:** bump redis from 6.2.0 to 6.3.0 ([#7108](https://github.com/aws-powertools/powertools-lambda-python/issues/7108)) +* **ci:** new pre-release 3.18.1a7 ([#7141](https://github.com/aws-powertools/powertools-lambda-python/issues/7141)) +* **ci:** new pre-release 3.18.1a2 ([#7085](https://github.com/aws-powertools/powertools-lambda-python/issues/7085)) +* **ci:** new pre-release 3.18.1a4 ([#7105](https://github.com/aws-powertools/powertools-lambda-python/issues/7105)) * **deps:** bump mkdocs-llmstxt from 0.3.0 to 0.3.1 ([#7112](https://github.com/aws-powertools/powertools-lambda-python/issues/7112)) +* **deps:** bump squidfunk/mkdocs-material from `0bfdba4` to `bb7b015` in /docs ([#7059](https://github.com/aws-powertools/powertools-lambda-python/issues/7059)) +* **deps:** bump redis from 6.3.0 to 6.4.0 ([#7140](https://github.com/aws-powertools/powertools-lambda-python/issues/7140)) +* **deps:** bump actions/checkout from 4.2.2 to 5.0.0 ([#7154](https://github.com/aws-powertools/powertools-lambda-python/issues/7154)) +* **deps:** bump aws-powertools/actions from 1.3.0 to 1.4.0 ([#7104](https://github.com/aws-powertools/powertools-lambda-python/issues/7104)) * **deps:** bump actions/download-artifact from 4.3.0 to 5.0.0 ([#7126](https://github.com/aws-powertools/powertools-lambda-python/issues/7126)) * **deps:** bump aws-powertools/actions from 1.1.0 to 1.3.0 ([#7061](https://github.com/aws-powertools/powertools-lambda-python/issues/7061)) * **deps:** bump aws-actions/configure-aws-credentials from 4.2.1 to 4.3.0 ([#7103](https://github.com/aws-powertools/powertools-lambda-python/issues/7103)) * **deps:** bump aws-actions/configure-aws-credentials from 59b441846ad109fa4a1549b73ef4e149c4bfb53b to aa1f74b81b53cb3adb28afcdb21d7b9f3fceea98 ([#7113](https://github.com/aws-powertools/powertools-lambda-python/issues/7113)) -* **deps:** bump redis from 6.3.0 to 6.4.0 ([#7140](https://github.com/aws-powertools/powertools-lambda-python/issues/7140)) +* **deps:** bump redis from 6.2.0 to 6.3.0 ([#7108](https://github.com/aws-powertools/powertools-lambda-python/issues/7108)) +* **deps:** bump mkdocs-material from 9.6.15 to 9.6.16 in /docs ([#7060](https://github.com/aws-powertools/powertools-lambda-python/issues/7060)) +* **deps:** bump mkdocs-llmstxt from 0.3.0 to 0.3.1 ([#7130](https://github.com/aws-powertools/powertools-lambda-python/issues/7130)) * **deps:** bump mkdocs-material from 9.6.15 to 9.6.16 ([#7065](https://github.com/aws-powertools/powertools-lambda-python/issues/7065)) -* **deps-dev:** bump ruff from 0.12.7 to 0.12.8 ([#7138](https://github.com/aws-powertools/powertools-lambda-python/issues/7138)) -* **deps-dev:** bump boto3-stubs from 1.40.0 to 1.40.1 ([#7093](https://github.com/aws-powertools/powertools-lambda-python/issues/7093)) +* **deps-dev:** bump boto3-stubs from 1.40.2 to 1.40.3 ([#7111](https://github.com/aws-powertools/powertools-lambda-python/issues/7111)) +* **deps-dev:** bump cfn-lint from 1.38.1 to 1.38.2 ([#7109](https://github.com/aws-powertools/powertools-lambda-python/issues/7109)) * **deps-dev:** bump boto3-stubs from 1.40.1 to 1.40.2 ([#7102](https://github.com/aws-powertools/powertools-lambda-python/issues/7102)) -* **deps-dev:** bump coverage from 7.10.1 to 7.10.2 ([#7107](https://github.com/aws-powertools/powertools-lambda-python/issues/7107)) +* **deps-dev:** bump aws-cdk-aws-lambda-python-alpha from 2.208.0a0 to 2.210.0a0 ([#7127](https://github.com/aws-powertools/powertools-lambda-python/issues/7127)) +* **deps-dev:** bump boto3-stubs from 1.40.0 to 1.40.1 ([#7093](https://github.com/aws-powertools/powertools-lambda-python/issues/7093)) +* **deps-dev:** bump aws-cdk from 2.1023.0 to 2.1024.0 ([#7125](https://github.com/aws-powertools/powertools-lambda-python/issues/7125)) +* **deps-dev:** bump boto3-stubs from 1.40.3 to 1.40.4 ([#7128](https://github.com/aws-powertools/powertools-lambda-python/issues/7128)) +* **deps-dev:** bump boto3-stubs from 1.40.6 to 1.40.7 ([#7153](https://github.com/aws-powertools/powertools-lambda-python/issues/7153)) * **deps-dev:** bump mypy from 1.17.0 to 1.17.1 ([#7081](https://github.com/aws-powertools/powertools-lambda-python/issues/7081)) * **deps-dev:** bump cfn-lint from 1.38.0 to 1.38.1 ([#7080](https://github.com/aws-powertools/powertools-lambda-python/issues/7080)) * **deps-dev:** bump mypy-boto3-appconfigdata from 1.39.0 to 1.40.0 in the boto-typing group ([#7079](https://github.com/aws-powertools/powertools-lambda-python/issues/7079)) -* **deps-dev:** bump boto3-stubs from 1.40.2 to 1.40.3 ([#7111](https://github.com/aws-powertools/powertools-lambda-python/issues/7111)) -* **deps-dev:** bump cfn-lint from 1.38.1 to 1.38.2 ([#7109](https://github.com/aws-powertools/powertools-lambda-python/issues/7109)) +* **deps-dev:** bump ruff from 0.12.7 to 0.12.8 ([#7138](https://github.com/aws-powertools/powertools-lambda-python/issues/7138)) +* **deps-dev:** bump boto3-stubs from 1.40.4 to 1.40.5 ([#7139](https://github.com/aws-powertools/powertools-lambda-python/issues/7139)) * **deps-dev:** bump sentry-sdk from 2.34.0 to 2.34.1 ([#7075](https://github.com/aws-powertools/powertools-lambda-python/issues/7075)) * **deps-dev:** bump ruff from 0.12.5 to 0.12.7 ([#7073](https://github.com/aws-powertools/powertools-lambda-python/issues/7073)) * **deps-dev:** bump boto3-stubs from 1.39.16 to 1.39.17 ([#7072](https://github.com/aws-powertools/powertools-lambda-python/issues/7072)) -* **deps-dev:** bump aws-cdk-aws-lambda-python-alpha from 2.208.0a0 to 2.210.0a0 ([#7127](https://github.com/aws-powertools/powertools-lambda-python/issues/7127)) -* **deps-dev:** bump aws-cdk from 2.1023.0 to 2.1024.0 ([#7125](https://github.com/aws-powertools/powertools-lambda-python/issues/7125)) -* **deps-dev:** bump aws-cdk from 2.1022.0 to 2.1023.0 ([#7067](https://github.com/aws-powertools/powertools-lambda-python/issues/7067)) * **deps-dev:** bump boto3-stubs from 1.40.5 to 1.40.6 ([#7143](https://github.com/aws-powertools/powertools-lambda-python/issues/7143)) -* **deps-dev:** bump boto3-stubs from 1.40.3 to 1.40.4 ([#7128](https://github.com/aws-powertools/powertools-lambda-python/issues/7128)) +* **deps-dev:** bump types-protobuf from 6.30.2.20250703 to 6.30.2.20250809 ([#7150](https://github.com/aws-powertools/powertools-lambda-python/issues/7150)) +* **deps-dev:** bump aws-cdk from 2.1022.0 to 2.1023.0 ([#7067](https://github.com/aws-powertools/powertools-lambda-python/issues/7067)) +* **deps-dev:** bump coverage from 7.10.2 to 7.10.3 ([#7152](https://github.com/aws-powertools/powertools-lambda-python/issues/7152)) +* **deps-dev:** bump sentry-sdk from 2.33.2 to 2.34.0 ([#7064](https://github.com/aws-powertools/powertools-lambda-python/issues/7064)) * **deps-dev:** bump boto3-stubs from 1.39.14 to 1.39.16 ([#7066](https://github.com/aws-powertools/powertools-lambda-python/issues/7066)) * **deps-dev:** bump coverage from 7.10.0 to 7.10.1 ([#7063](https://github.com/aws-powertools/powertools-lambda-python/issues/7063)) -* **deps-dev:** bump boto3-stubs from 1.40.4 to 1.40.5 ([#7139](https://github.com/aws-powertools/powertools-lambda-python/issues/7139)) +* **deps-dev:** bump types-python-dateutil from 2.9.0.20250708 to 2.9.0.20250809 ([#7151](https://github.com/aws-powertools/powertools-lambda-python/issues/7151)) * **deps-dev:** bump aws-cdk-aws-lambda-python-alpha from 2.207.0a0 to 2.208.0a0 ([#7062](https://github.com/aws-powertools/powertools-lambda-python/issues/7062)) -* **deps-dev:** bump sentry-sdk from 2.33.2 to 2.34.0 ([#7064](https://github.com/aws-powertools/powertools-lambda-python/issues/7064)) +* **deps-dev:** bump coverage from 7.10.1 to 7.10.2 ([#7107](https://github.com/aws-powertools/powertools-lambda-python/issues/7107)) * **git:** add LLM tools to .gitignore file ([#7137](https://github.com/aws-powertools/powertools-lambda-python/issues/7137)) @@ -6929,7 +6947,9 @@ * Merge pull request [#5](https://github.com/aws-powertools/powertools-lambda-python/issues/5) from jfuss/feat/python38 -[Unreleased]: https://github.com/aws-powertools/powertools-lambda-python/compare/v3.17.1...HEAD +[Unreleased]: https://github.com/aws-powertools/powertools-lambda-python/compare/v3.20.0...HEAD +[v3.20.0]: https://github.com/aws-powertools/powertools-lambda-python/compare/v3.19.0...v3.20.0 +[v3.19.0]: https://github.com/aws-powertools/powertools-lambda-python/compare/v3.17.1...v3.19.0 [v3.17.1]: https://github.com/aws-powertools/powertools-lambda-python/compare/v3.18.0...v3.17.1 [v3.18.0]: https://github.com/aws-powertools/powertools-lambda-python/compare/v3.17.0...v3.18.0 [v3.17.0]: https://github.com/aws-powertools/powertools-lambda-python/compare/v3.16.0...v3.17.0 diff --git a/README.md b/README.md index 0fb106fbc97..178b4c055ed 100644 --- a/README.md +++ b/README.md @@ -72,6 +72,7 @@ The following companies, among others, use Powertools: * [LocalStack](https://www.localstack.cloud/) * [Propellor.ai](https://www.propellor.ai/) * [Pushpay](https://pushpay.com/) +* [QuasiScience Limited](https://quasiscience.com/) * [Recast](https://getrecast.com/) * [TopSport](https://www.topsport.com.au/) * [Transformity](https://transformity.tech/) diff --git a/aws_lambda_powertools/event_handler/exceptions.py b/aws_lambda_powertools/event_handler/exceptions.py index e524d8a0eae..e870727cfba 100644 --- a/aws_lambda_powertools/event_handler/exceptions.py +++ b/aws_lambda_powertools/event_handler/exceptions.py @@ -1,17 +1,19 @@ +from __future__ import annotations + from http import HTTPStatus class ServiceError(Exception): """Powertools class HTTP Service Error""" - def __init__(self, status_code: int, msg: str): + def __init__(self, status_code: int, msg: str | dict): """ Parameters ---------- status_code: int Http status code - msg: str - Error message + msg: str | dict + Error message. Can be a string or a dictionary """ self.status_code = status_code self.msg = msg @@ -20,54 +22,102 @@ def __init__(self, status_code: int, msg: str): class BadRequestError(ServiceError): """Powertools class Bad Request Error (400)""" - def __init__(self, msg: str): + def __init__(self, msg: str | dict): + """ + Parameters + ---------- + msg : str | dict + Error message. Can be a string or a dictionary. + """ super().__init__(HTTPStatus.BAD_REQUEST, msg) class UnauthorizedError(ServiceError): """Powertools class Unauthorized Error (401)""" - def __init__(self, msg: str): + def __init__(self, msg: str | dict): + """ + Parameters + ---------- + msg : str | dict + Error message. Can be a string or a dictionary. + """ super().__init__(HTTPStatus.UNAUTHORIZED, msg) class ForbiddenError(ServiceError): """Powertools class Forbidden Error (403)""" - def __init__(self, msg: str): + def __init__(self, msg: str | dict): + """ + Parameters + ---------- + msg : str | dict + Error message. Can be a string or a dictionary. + """ super().__init__(HTTPStatus.FORBIDDEN, msg) class NotFoundError(ServiceError): """Powertools class Not Found Error (404)""" - def __init__(self, msg: str = "Not found"): + def __init__(self, msg: str | dict = "Not found"): + """ + Parameters + ---------- + msg : str | dict + Error message. Can be a string or a dictionary. + """ super().__init__(HTTPStatus.NOT_FOUND, msg) class RequestTimeoutError(ServiceError): """Powertools class Request Timeout Error (408)""" - def __init__(self, msg: str): + def __init__(self, msg: str | dict): + """ + Parameters + ---------- + msg : str | dict + Error message. Can be a string or a dictionary. + """ super().__init__(HTTPStatus.REQUEST_TIMEOUT, msg) class RequestEntityTooLargeError(ServiceError): """Powertools class Request Entity Too Large Error (413)""" - def __init__(self, msg: str): + def __init__(self, msg: str | dict): + """ + Parameters + ---------- + msg : str | dict + Error message. Can be a string or a dictionary. + """ super().__init__(HTTPStatus.REQUEST_ENTITY_TOO_LARGE, msg) class InternalServerError(ServiceError): """Powertools class Internal Server Error (500)""" - def __init__(self, message: str): + def __init__(self, message: str | dict): + """ + Parameters + ---------- + msg : str | dict + Error message. Can be a string or a dictionary. + """ super().__init__(HTTPStatus.INTERNAL_SERVER_ERROR, message) class ServiceUnavailableError(ServiceError): """Powertools class Service Unavailable Error (503)""" - def __init__(self, msg: str): + def __init__(self, msg: str | dict): + """ + Parameters + ---------- + msg : str | dict + Error message. Can be a string or a dictionary. + """ super().__init__(HTTPStatus.SERVICE_UNAVAILABLE, msg) diff --git a/aws_lambda_powertools/metrics/base.py b/aws_lambda_powertools/metrics/base.py index 1d5c0e48570..ee7553148b1 100644 --- a/aws_lambda_powertools/metrics/base.py +++ b/aws_lambda_powertools/metrics/base.py @@ -549,11 +549,6 @@ class SingleMetric(MetricManager): metric.add_dimension(name="function_version", value=47) print(json.dumps(metric.serialize_metric_set(), indent=4)) - - Parameters - ---------- - MetricManager : MetricManager - Inherits from `aws_lambda_powertools.metrics.base.MetricManager` """ def add_metric( diff --git a/aws_lambda_powertools/shared/functions.py b/aws_lambda_powertools/shared/functions.py index 16f51da1cb9..ea29ccf3ea5 100644 --- a/aws_lambda_powertools/shared/functions.py +++ b/aws_lambda_powertools/shared/functions.py @@ -140,8 +140,8 @@ def powertools_debug_is_set() -> bool: def slice_dictionary(data: dict, chunk_size: int) -> Generator[dict, None, None]: - for _ in range(0, len(data), chunk_size): - yield {dict_key: data[dict_key] for dict_key in itertools.islice(data, chunk_size)} + for i in range(0, len(data), chunk_size): + yield {key: data[key] for key in itertools.islice(data, i, i + chunk_size)} def extract_event_from_common_models(data: Any) -> dict | Any: diff --git a/aws_lambda_powertools/shared/version.py b/aws_lambda_powertools/shared/version.py index e089eff1295..62b1c0e7474 100644 --- a/aws_lambda_powertools/shared/version.py +++ b/aws_lambda_powertools/shared/version.py @@ -1,3 +1,3 @@ """Exposes version constant to avoid circular dependencies.""" -VERSION = "3.18.1a9" +VERSION = "3.20.0" diff --git a/aws_lambda_powertools/utilities/parser/functions.py b/aws_lambda_powertools/utilities/parser/functions.py index 351e214da93..e5c9c345714 100644 --- a/aws_lambda_powertools/utilities/parser/functions.py +++ b/aws_lambda_powertools/utilities/parser/functions.py @@ -4,7 +4,7 @@ import logging from typing import TYPE_CHECKING, Any -from pydantic import TypeAdapter +from pydantic import IPvAnyNetwork, TypeAdapter from aws_lambda_powertools.shared.cache_dict import LRUDict @@ -82,3 +82,36 @@ def _parse_and_validate_event(data: dict[str, Any] | Any, adapter: TypeAdapter): data = json.loads(data) return adapter.validate_python(data) + + +def _validate_source_ip(value): + """ + Handle sourceIp that may come with port (e.g., "10.1.15.242:39870") + in certain network configurations like Cloudflare + CloudFront + API Gateway. + Validates the IP part while preserving the original format. + See: https://github.com/aws-powertools/powertools-lambda-python/issues/7288 + """ + + if value == "test-invoke-source-ip": + return value + + try: + # The value is always an instance of str before Pydantic validation occurs. + # So the first thing to do is try to convert it. + IPvAnyNetwork(value) + except ValueError: + try: + # Handle IPv6 with port: [IPv6]:port + if value.startswith("[") and "]:" in value: + ip_part = value.split("]:")[0][1:] # Remove "[" and get IP part + elif ":" in value and value.count(":") <= 1: + ip_part = value.split(":")[0] + else: + # If it"s not in IP:port format, validate as-is + ip_part = value + + IPvAnyNetwork(ip_part) + except (ValueError, IndexError) as e: + raise ValueError(f"Invalid IP address in sourceIp: {ip_part}") from e + + return value diff --git a/aws_lambda_powertools/utilities/parser/models/apigw.py b/aws_lambda_powertools/utilities/parser/models/apigw.py index 55d2b5c7c93..ea01a5e8a6b 100644 --- a/aws_lambda_powertools/utilities/parser/models/apigw.py +++ b/aws_lambda_powertools/utilities/parser/models/apigw.py @@ -1,9 +1,11 @@ from datetime import datetime from typing import Any, Dict, List, Literal, Optional, Type, Union -from pydantic import BaseModel, model_validator +from pydantic import BaseModel, field_validator, model_validator from pydantic.networks import IPvAnyNetwork +from aws_lambda_powertools.utilities.parser.functions import _validate_source_ip + class ApiGatewayUserCertValidity(BaseModel): notBefore: str @@ -31,12 +33,17 @@ class APIGatewayEventIdentity(BaseModel): principalOrgId: Optional[str] = None # see #1562, temp workaround until API Gateway fixes it the Test button payload # removing it will not be considered a regression in the future - sourceIp: Union[IPvAnyNetwork, Literal["test-invoke-source-ip"]] + sourceIp: Union[IPvAnyNetwork, str] user: Optional[str] = None userAgent: Optional[str] = None userArn: Optional[str] = None clientCert: Optional[ApiGatewayUserCert] = None + @field_validator("sourceIp", mode="before") + @classmethod + def _validate_source_ip(cls, value): + return _validate_source_ip(value=value) + class APIGatewayEventAuthorizer(BaseModel): claims: Optional[Dict[str, Any]] = None diff --git a/aws_lambda_powertools/utilities/parser/models/apigwv2.py b/aws_lambda_powertools/utilities/parser/models/apigwv2.py index 540e7c1a30b..9bd66b7a585 100644 --- a/aws_lambda_powertools/utilities/parser/models/apigwv2.py +++ b/aws_lambda_powertools/utilities/parser/models/apigwv2.py @@ -1,9 +1,11 @@ from datetime import datetime from typing import Any, Dict, List, Literal, Optional, Type, Union -from pydantic import BaseModel, Field +from pydantic import BaseModel, Field, field_validator from pydantic.networks import IPvAnyNetwork +from aws_lambda_powertools.utilities.parser.functions import _validate_source_ip + class RequestContextV2AuthorizerIamCognito(BaseModel): amr: List[str] @@ -36,9 +38,14 @@ class RequestContextV2Http(BaseModel): method: Literal["DELETE", "GET", "HEAD", "OPTIONS", "PATCH", "POST", "PUT"] path: str protocol: str - sourceIp: IPvAnyNetwork + sourceIp: Union[IPvAnyNetwork, str] userAgent: str + @field_validator("sourceIp", mode="before") + @classmethod + def _validate_source_ip(cls, value): + return _validate_source_ip(value=value) + class RequestContextV2(BaseModel): accountId: str diff --git a/aws_lambda_powertools/utilities/parser/models/dynamodb.py b/aws_lambda_powertools/utilities/parser/models/dynamodb.py index 99d82c7853d..e3c3dd4544f 100644 --- a/aws_lambda_powertools/utilities/parser/models/dynamodb.py +++ b/aws_lambda_powertools/utilities/parser/models/dynamodb.py @@ -2,7 +2,7 @@ from datetime import datetime from typing import Any, Dict, List, Literal, Optional, Type, Union -from pydantic import BaseModel, field_validator +from pydantic import BaseModel, Field, field_validator from aws_lambda_powertools.shared.dynamodb_deserializer import TypeDeserializer @@ -10,24 +10,28 @@ class DynamoDBStreamChangedRecordModel(BaseModel): - ApproximateCreationDateTime: Optional[datetime] = None - Keys: Dict[str, Any] - NewImage: Optional[Union[Dict[str, Any], Type[BaseModel], BaseModel]] = None - OldImage: Optional[Union[Dict[str, Any], Type[BaseModel], BaseModel]] = None - SequenceNumber: str - SizeBytes: int - StreamViewType: Literal["NEW_AND_OLD_IMAGES", "KEYS_ONLY", "NEW_IMAGE", "OLD_IMAGE"] - - # context on why it's commented: https://github.com/aws-powertools/powertools-lambda-python/pull/118 - # since both images are optional, they can both be None. However, at least one must - # exist in a legal model of NEW_AND_OLD_IMAGES type - # @root_validator - # def check_one_image_exists(cls, values): # noqa: ERA001 - # new_img, old_img = values.get("NewImage"), values.get("OldImage") # noqa: ERA001 - # stream_type = values.get("StreamViewType") # noqa: ERA001 - # if stream_type == "NEW_AND_OLD_IMAGES" and not new_img and not old_img: # noqa: ERA001 - # raise TypeError("DynamoDB streams model failed validation, missing both new & old stream images") # noqa: ERA001,E501 - # return values # noqa: ERA001 + ApproximateCreationDateTime: Optional[datetime] = Field( # AWS sends this as Unix epoch float + default=None, + description="The approximate date and time when the stream record was created (Unix epoch time).", + examples=[1693997155.0], + ) + Keys: Dict[str, Any] = Field(description="Primary key attributes for the item.", examples=[{"Id": {"N": "101"}}]) + NewImage: Optional[Union[Dict[str, Any], Type[BaseModel], BaseModel]] = Field( + default=None, + description="The item after modifications, in DynamoDB attribute-value format.", + examples=[{"Message": {"S": "New item!"}, "Id": {"N": "101"}}], + ) + OldImage: Optional[Union[Dict[str, Any], Type[BaseModel], BaseModel]] = Field( + default=None, + description="The item before modifications, in DynamoDB attribute-value format.", + examples=[{"Message": {"S": "Old item!"}, "Id": {"N": "100"}}], + ) + SequenceNumber: str = Field(description="A unique identifier for the stream record.", examples=["222"]) + SizeBytes: int = Field(description="The size of the stream record, in bytes.", examples=[26]) + StreamViewType: Literal["NEW_AND_OLD_IMAGES", "KEYS_ONLY", "NEW_IMAGE", "OLD_IMAGE"] = Field( + description="The type of data included in the stream record.", + examples=["NEW_AND_OLD_IMAGES"], + ) @field_validator("Keys", "NewImage", "OldImage", mode="before") def deserialize_field(cls, value): @@ -35,20 +39,74 @@ def deserialize_field(cls, value): class UserIdentity(BaseModel): - type: Literal["Service"] # noqa: VNE003, A003 - principalId: Literal["dynamodb.amazonaws.com"] + type: Literal["Service"] = Field( + description="The type of identity that made the request, which is always 'Service' for DynamoDB streams.", + examples=["Service"], + ) + principalId: Literal["dynamodb.amazonaws.com"] = Field( + description="The unique identifier for the principal that made the request.", + examples=["dynamodb.amazonaws.com"], + ) class DynamoDBStreamRecordModel(BaseModel): - eventID: str - eventName: Literal["INSERT", "MODIFY", "REMOVE"] - eventVersion: float - eventSource: Literal["aws:dynamodb"] - awsRegion: str - eventSourceARN: str - dynamodb: DynamoDBStreamChangedRecordModel - userIdentity: Optional[UserIdentity] = None + eventID: str = Field(description="A unique identifier for the event.", examples=["1"]) + eventName: Literal["INSERT", "MODIFY", "REMOVE"] = Field( + description="The type of operation that was performed on the item.", + examples=["INSERT"], + ) + eventVersion: float = Field(description="The version of the stream record format.", examples=["1.0"]) + eventSource: Literal["aws:dynamodb"] = Field( + description="The source of the event, which is always 'aws:dynamodb' for DynamoDB streams.", + examples=["aws:dynamodb"], + ) + awsRegion: str = Field(description="The AWS region where the stream record was generated.", examples=["us-west-2"]) + eventSourceARN: str = Field( + description="The Amazon Resource Name (ARN) of the DynamoDB stream.", + examples=["arn:aws:dynamodb:us-west-2:123456789012:table/ExampleTable/stream/2021-01-01T00:00:00.000"], + ) + dynamodb: DynamoDBStreamChangedRecordModel = Field( + description="Contains the details of the DynamoDB stream record.", + examples=[ + { + "ApproximateCreationDateTime": 1693997155.0, + "Keys": {"Id": {"N": "101"}}, + "NewImage": {"Message": {"S": "New item!"}, "Id": {"N": "101"}}, + "OldImage": {"Message": {"S": "Old item!"}, "Id": {"N": "100"}}, + "SequenceNumber": "222", + "SizeBytes": 26, + "StreamViewType": "NEW_AND_OLD_IMAGES", + }, + ], + ) + userIdentity: Optional[UserIdentity] = Field( + default=None, + description="Information about the identity that made the request.", + examples=[{"type": "Service", "principalId": "dynamodb.amazonaws.com"}], + ) class DynamoDBStreamModel(BaseModel): - Records: List[DynamoDBStreamRecordModel] + Records: List[DynamoDBStreamRecordModel] = Field( + description="A list of records that contain the details of the DynamoDB stream events.", + examples=[ + { + "eventID": "1", + "eventName": "INSERT", + "eventVersion": "1.0", + "eventSource": "aws:dynamodb", + "awsRegion": "us-west-2", + "eventSourceARN": "arn:aws:dynamodb:us-west-2:123456789012:table/ExampleTable/stream/2021-01-01T00:00:00.000", # noqa E501 + "dynamodb": { + "ApproximateCreationDateTime": 1693997155.0, + "Keys": {"Id": {"N": "101"}}, + "NewImage": {"Message": {"S": "New item!"}, "Id": {"N": "101"}}, + "OldImage": {"Message": {"S": "Old item!"}, "Id": {"N": "100"}}, + "SequenceNumber": "222", + "SizeBytes": 26, + "StreamViewType": "NEW_AND_OLD_IMAGES", + }, + "userIdentity": {"type": "Service", "principalId": "dynamodb.amazonaws.com"}, + }, + ], + ) diff --git a/aws_lambda_powertools/utilities/parser/models/kafka.py b/aws_lambda_powertools/utilities/parser/models/kafka.py index b22c3a2613a..df232469b95 100644 --- a/aws_lambda_powertools/utilities/parser/models/kafka.py +++ b/aws_lambda_powertools/utilities/parser/models/kafka.py @@ -1,7 +1,7 @@ from datetime import datetime from typing import Dict, List, Literal, Optional, Type, Union -from pydantic import BaseModel, field_validator +from pydantic import BaseModel, Field, field_validator from aws_lambda_powertools.shared.functions import base64_decode, bytes_to_string, decode_header_bytes @@ -9,21 +9,68 @@ class KafkaRecordSchemaMetadata(BaseModel): - dataFormat: str - schemaId: str + dataFormat: str = Field( + description="The data format of the schema (e.g., AVRO, JSON).", + examples=["AVRO", "JSON", "PROTOBUF"], + ) + schemaId: str = Field( + description="The unique identifier of the schema.", + examples=["1234", "5678", "schema-abc-123"], + ) class KafkaRecordModel(BaseModel): - topic: str - partition: int - offset: int - timestamp: datetime - timestampType: str - key: Optional[bytes] = None - value: Union[str, Type[BaseModel]] - headers: List[Dict[str, bytes]] - keySchemaMetadata: Optional[KafkaRecordSchemaMetadata] = None - valueSchemaMetadata: Optional[KafkaRecordSchemaMetadata] = None + topic: str = Field( + description="The Kafka topic name from which the record originated.", + examples=["mytopic", "user-events", "order-processing", "mymessage-with-unsigned"], + ) + partition: int = Field( + description="The partition number within the topic from which the record was consumed.", + examples=[0, 1, 5, 10], + ) + offset: int = Field( + description="The offset of the record within the partition.", + examples=[15, 123, 456789, 1000000], + ) + timestamp: datetime = Field( + description="The timestamp of the record.", + examples=[1545084650987, 1640995200000, 1672531200000], + ) + timestampType: str = Field( + description="The type of timestamp (CREATE_TIME or LOG_APPEND_TIME).", + examples=["CREATE_TIME", "LOG_APPEND_TIME"], + ) + key: Optional[bytes] = Field( + default=None, + description="The message key, base64-encoded. Can be null for messages without keys.", + examples=["cmVjb3JkS2V5", "dXNlci0xMjM=", "b3JkZXItNDU2", None], + ) + value: Union[str, Type[BaseModel]] = Field( + description="The message value, base64-encoded.", + examples=[ + "eyJrZXkiOiJ2YWx1ZSJ9", + "eyJtZXNzYWdlIjogIkhlbGxvIEthZmthIn0=", + "eyJ1c2VyX2lkIjogMTIzLCAiYWN0aW9uIjogImxvZ2luIn0=", + ], + ) + headers: List[Dict[str, bytes]] = Field( + description="A list of message headers as key-value pairs with byte array values.", + examples=[ + [{"headerKey": [104, 101, 97, 100, 101, 114, 86, 97, 108, 117, 101]}], + [{"contentType": [97, 112, 112, 108, 105, 99, 97, 116, 105, 111, 110, 47, 106, 115, 111, 110]}], + [], + ], + ) + keySchemaMetadata: Optional[KafkaRecordSchemaMetadata] = Field( + default=None, + description="Schema metadata for the message key when using schema registry.", + examples=[{"dataFormat": "AVRO", "schemaId": "1234"}, None], + ) + valueSchemaMetadata: Optional[KafkaRecordSchemaMetadata] = Field( + default=None, + description="Schema metadata for the message value when using schema registry.", + examples=[{"dataFormat": "AVRO", "schemaId": "1234"}, None], + ) # key is optional; only decode if not None @field_validator("key", mode="before") @@ -44,8 +91,23 @@ def decode_headers_list(cls, value): class KafkaBaseEventModel(BaseModel): - bootstrapServers: List[str] - records: Dict[str, List[KafkaRecordModel]] + bootstrapServers: List[str] = Field( + description="A list of Kafka bootstrap servers (broker endpoints).", + examples=[ + ["b-2.demo-cluster-1.a1bcde.c1.kafka.us-east-1.amazonaws.com:9092"], + [ + "b-1.demo-cluster-1.a1bcde.c1.kafka.us-east-1.amazonaws.com:9092", + "b-2.demo-cluster-1.a1bcde.c1.kafka.us-east-1.amazonaws.com:9092", + ], + ], + ) + records: Dict[str, List[KafkaRecordModel]] = Field( + description="A dictionary mapping topic-partition combinations to lists of Kafka records.", + examples=[ + {"mytopic-0": [{"topic": "mytopic", "partition": 0, "offset": 15}]}, + {"user-events-1": [{"topic": "user-events", "partition": 1, "offset": 123}]}, + ], + ) @field_validator("bootstrapServers", mode="before") def split_servers(cls, value): @@ -59,7 +121,10 @@ class KafkaSelfManagedEventModel(KafkaBaseEventModel): - https://docs.aws.amazon.com/lambda/latest/dg/with-kafka.html """ - eventSource: Literal["SelfManagedKafka"] + eventSource: Literal["SelfManagedKafka"] = Field( + description="The event source identifier for self-managed Kafka.", + examples=["SelfManagedKafka"], + ) class KafkaMskEventModel(KafkaBaseEventModel): @@ -69,5 +134,14 @@ class KafkaMskEventModel(KafkaBaseEventModel): - https://docs.aws.amazon.com/lambda/latest/dg/with-msk.html """ - eventSource: Literal["aws:kafka"] - eventSourceArn: str + eventSource: Literal["aws:kafka"] = Field( + description="The AWS service that invoked the function.", + examples=["aws:kafka"], + ) + eventSourceArn: str = Field( + description="The Amazon Resource Name (ARN) of the MSK cluster.", + examples=[ + "arn:aws:kafka:us-east-1:0123456789019:cluster/SalesCluster/abcd1234-abcd-cafe-abab-9876543210ab-4", + "arn:aws:kafka:eu-central-1:123456789012:cluster/MyCluster/xyz789-1234-5678-90ab-cdef12345678-2", + ], + ) diff --git a/aws_lambda_powertools/utilities/parser/models/s3.py b/aws_lambda_powertools/utilities/parser/models/s3.py index 36f8250f94b..11369721e8e 100644 --- a/aws_lambda_powertools/utilities/parser/models/s3.py +++ b/aws_lambda_powertools/utilities/parser/models/s3.py @@ -10,94 +10,445 @@ class S3EventRecordGlacierRestoreEventData(BaseModel): - lifecycleRestorationExpiryTime: datetime - lifecycleRestoreStorageClass: str + lifecycleRestorationExpiryTime: datetime = Field( + description="The time, in ISO-8601 format, of Restore Expiry.", + examples=[ + "1970-01-01T00:00:00.000Z", + ], + ) + lifecycleRestoreStorageClass: str = Field( + description="Source storage class for restore.", + examples=[ + "standard", + "standard_ia", + "glacier", + ], + ) class S3EventRecordGlacierEventData(BaseModel): - restoreEventData: S3EventRecordGlacierRestoreEventData + restoreEventData: S3EventRecordGlacierRestoreEventData = Field( + description="Event data produced only for 's3:ObjectRestore:Completed' events.", + examples=[ + { + "restoreEventData": { + "lifecycleRestorationExpiryTime": "1970-01-01T00:00:00.000Z", + "lifecycleRestoreStorageClass": "glacier", + }, + }, + ], + ) class S3Identity(BaseModel): - principalId: str + principalId: str = Field( + description="Amazon identifier of the user, role, account or services who caused the event.", + examples=["AIDAJEXAMPLE1234"], + ) class S3RequestParameters(BaseModel): - sourceIPAddress: Union[IPvAnyNetwork, Literal["s3.amazonaws.com"]] + sourceIPAddress: Union[IPvAnyNetwork, Literal["s3.amazonaws.com"]] = Field( + description="Source IP address of the request.", + examples=[ + "255.255.255.255", + "s3.amazonaws.com", + ], + ) class S3ResponseElements(BaseModel): - x_amz_request_id: str = Field(..., alias="x-amz-request-id") - x_amz_id_2: str = Field(..., alias="x-amz-id-2") + x_amz_request_id: str = Field( + ..., + alias="x-amz-request-id", + description="Amazon S3 generated request ID.", + examples=[ + "C3D13FE58DE4C810", + "D82B88E5F771F645", + ], + ) + x_amz_id_2: str = Field( + ..., + alias="x-amz-id-2", + description="ID of the Amazon S3 host that processed the request.", + examples=[ + "FMyUVURIY8/IgAtTv8xRjskZQpcIZ9KG4V5Wp6S7S/JRWeUWerMUE5JgHvANOjpD", + "vlR7PnpV2Ce81l0PRw6jlUpck7Jo5ZsQjryTjKlc5aLWGVHPZLj5NeC6qMa0emYBDXOo6QBU0Wo=", + ], + ) class S3OwnerIdentify(BaseModel): - principalId: str + principalId: str = Field( + description="Amazon customer ID of the bucket owner.", + examples=[ + "A3I5XTEXAMAI3E", + "A1YQ72UWCM96UF", + "AWS:AIDAJEXAMPLE1234", + ], + ) class S3Bucket(BaseModel): - name: str - ownerIdentity: S3OwnerIdentify - arn: str + name: str = Field( + description="Name of the Amazon S3 bucket.", + examples=[ + "lambda-artifacts-deafc19498e3f2df", + "example-bucket", + "sourcebucket", + ], + ) + ownerIdentity: S3OwnerIdentify = Field( + description="Amazon customer ID of the bucket owner.", + examples=[{"principalId": "A3NL1KOZZKExample"}, {"principalId": "A1YQ72UWCM96UF"}], + ) + arn: str = Field( + description="The ARN of the Amazon S3 bucket.", + examples=[ + "arn:aws:s3:::lambda-artifacts-deafc19498e3f2df", + "arn:aws:s3:::example-bucketarn:aws:s3:::sourcebucket", + ], + ) class S3Object(BaseModel): - key: str - size: Optional[NonNegativeFloat] = None - eTag: Optional[str] = None - sequencer: Optional[str] = None - versionId: Optional[str] = None + key: str = Field( + description="The object key (file name) of the S3 object.", + examples=[ + "my-image.jpg", + "documents/report.pdf", + "logs/2023/01/15/app.log", + ], + ) + size: Optional[NonNegativeFloat] = Field( + default=None, + description="The size of the object in bytes.", + examples=[1024, 2048576, 0], + ) + eTag: Optional[str] = Field( + default=None, + description="The entity tag (ETag) of the object.", + examples=[ + "d41d8cd98f00b204e9800998ecf8427e", + "098f6bcd4621d373cade4e832627b4f6", + ], + ) + sequencer: Optional[str] = Field( + default=None, + description="A string representation of a hexadecimal value used to determine event sequence.", + examples=[ + "0A1B2C3D4E5F678901", + "005B21C13A6F24045E", + ], + ) + versionId: Optional[str] = Field( + default=None, + description="The version ID of the object (if versioning is enabled).", + examples=[ + "096fKKXTRTtl3on89fVO.nfljtsv6qko", + "null", + ], + ) class S3Message(BaseModel): - s3SchemaVersion: str - configurationId: str - bucket: S3Bucket - object: S3Object # noqa: A003 + s3SchemaVersion: str = Field( + description="S3 schema version.", + examples=[ + "1.0", + ], + ) + configurationId: str = Field( + description="ID of the bucket notification configuration.", + examples=[ + "828aa6fc-f7b5-4305-8584-487c791949c1", + "f99fa751-7860-4d65-86cb-10ff34448555", + "b1d3a482-96eb-4d3a-abd7-763662a6ba94", + ], + ) + bucket: S3Bucket = Field( + description="The S3 bucket object.", + examples=[ + { + "bucket": { + "name": "lambda-artifacts-deafc19498e3f2df", + "ownerIdentity": {"principalId": "A3I5XTEXAMAI3E"}, + "arn": "arn:aws:s3:::lambda-artifacts-deafc19498e3f2df", + }, + }, + ], + ) + object: S3Object = Field( + description="The S3 object object.", + examples=[ + { + "key": "b21b84d653bb07b05b1e6b33684dc11b", + "size": 1305107, + "eTag": "b21b84d653bb07b05b1e6b33684dc11b", + "sequencer": "0C0F6F405D6ED209E1", + }, + ], + ) # noqa: A003 class S3EventNotificationObjectModel(BaseModel): - key: str - size: Optional[NonNegativeFloat] = None - etag: str = Field(default="") - version_id: Optional[str] = Field(None, alias="version-id") - sequencer: Optional[str] = None + key: str = Field( + description="The object key (file name) of the S3 object.", + examples=[ + "my-image.jpg", + "documents/report.pdf", + "logs/2023/01/15/app.log", + ], + ) + size: Optional[NonNegativeFloat] = Field( + default=None, + description="The size of the object in bytes.", + examples=[1024, 2048576, 0], + ) + etag: str = Field( + default="", + description="The entity tag (ETag) of the object.", + examples=[ + "d41d8cd98f00b204e9800998ecf8427e", + "098f6bcd4621d373cade4e832627b4f6", + ], + ) + version_id: Optional[str] = Field( + default=None, + alias="version-id", + description="The version ID of the object (if versioning is enabled).", + examples=[ + "096fKKXTRTtl3on89fVO.nfljtsv6qko", + "null", + ], + ) + sequencer: Optional[str] = Field( + default=None, + description="A string representation of a hexadecimal value used to determine event sequence.", + examples=[ + "0A1B2C3D4E5F678901", + "005B21C13A6F24045E", + ], + ) class S3EventNotificationEventBridgeBucketModel(BaseModel): - name: str + name: str = Field( + description="Name of the Amazon S3 bucket.", + examples=[ + "lambda-artifacts-deafc19498e3f2df", + "example-bucket", + "sourcebucket", + ], + ) class S3EventNotificationEventBridgeDetailModel(BaseModel): - version: str - bucket: S3EventNotificationEventBridgeBucketModel - object: S3EventNotificationObjectModel # noqa: A003 - request_id: str = Field(..., alias="request-id") - requester: str - source_ip_address: Optional[str] = Field(None, alias="source-ip-address") - reason: Optional[str] = None - deletion_type: Optional[str] = Field(None, alias="deletion-type") - restore_expiry_time: Optional[str] = Field(None, alias="restore-expiry-time") - source_storage_class: Optional[str] = Field(None, alias="source-storage-class") - destination_storage_class: Optional[str] = Field(None, alias="destination-storage-class") - destination_access_tier: Optional[str] = Field(None, alias="destination-access-tier") + version: str = Field( + description="Version of the event message. Currently 0 (zero) for all events", + examples=[ + "0", + ], + ) + bucket: S3EventNotificationEventBridgeBucketModel = Field( + description="Bucket object of the event sent from S3 to EventBridge.", + examples=[{"name": "example-bucket"}], + ) + object: S3EventNotificationObjectModel = Field( + description="The S3 object object.", + examples=[ + { + "key": "b21b84d653bb07b05b1e6b33684dc11b", + "size": 1305107, + "eTag": "b21b84d653bb07b05b1e6b33684dc11b", + "sequencer": "0C0F6F405D6ED209E1", + }, + ], + ) # noqa: A003 + request_id: str = Field( + ..., + alias="request-id", + description="Amazon S3 generated request ID.", + examples=[ + "C3D13FE58DE4C810", + "D82B88E5F771F645", + "N4N7GDK58NMKJ12R", + ], + ) + requester: str = Field( + description="AWS account ID or AWS service principal of requester, or 's3.amazonaws.com'.", + examples=[ + "s3.amazonaws.com", + "123456789012", + ], + ) + source_ip_address: Optional[str] = Field( + None, + alias="source-ip-address", + description="Source IP address of S3 request. Only present for events triggered by an S3 request.", + examples=[ + "255.255.255.255", + ], + ) + reason: Optional[str] = Field( + default=None, + description="For 'Object Created' events, the S3 API used to create the object: PutObject, POST Object, " + "CopyObject, or CompleteMultipartUpload. For 'Object Deleted' events, this is set to 'DeleteObject' " + "when an object is deleted by an S3 API call, or 'Lifecycle Expiration' when an object is deleted by an " + "S3 Lifecycle expiration rule. For more information, see https://docs.aws.amazon.com/AmazonS3/latest/userguide/lifecycle-expire-general-considerations.html", + examples=[ + "Lifecycle Expiration", + "PutObject", + "DeleteObject", + ], + ) + deletion_type: Optional[str] = Field( + default=None, + alias="deletion-type", + description="For 'Object Deleted' events, when an unversioned object is deleted, or a versioned object is " + "permanently deleted, this is set to 'Permanently Deleted'. When a delete marker is created for a " + "versioned object, this is set to 'Delete Marker Created'. For more information, " + "see https://docs.aws.amazon.com/AmazonS3/latest/userguide/DeletingObjectVersions.html", + examples=["Delete Marker Created", "Permanently Deleted"], + ) + restore_expiry_time: Optional[str] = Field( + default=None, + alias="restore-expiry-time", + description="For 'Object Restore Completed' events, the time when the temporary copy of the object will be " + "deleted from S3. For more information, see https://docs.aws.amazon.com/AmazonS3/latest/userguide/archived-objects.html.", + examples=["2021-11-13T00:00:00Z"], + ) + source_storage_class: Optional[str] = Field( + default=None, + alias="source-storage-class", + description="For 'Object Restore Initiated' and 'Object Restore Completed' events, the storage class of the " + "object being restored. For more information, see https://docs.aws.amazon.com/AmazonS3/latest/userguide/archived-objects.html.", + examples=["GLACIER", "STANDARD", "STANDARD_IA"], + ) + destination_storage_class: Optional[str] = Field( + default=None, + alias="destination-storage-class", + description="For 'Object Storage Class Changed' events, the new storage class of the object. For more " + "information, see https://docs.aws.amazon.com/AmazonS3/latest/userguide/lifecycle-transition-general-considerations.html.", + examples=["INTELLIGENT_TIERING", "STANDARD", "STANDARD_IA"], + ) + destination_access_tier: Optional[str] = Field( + default=None, + alias="destination-access-tier", + description="For 'Object Access Tier Changed' events, the new access tier of the object. For more information, " + "see https://docs.aws.amazon.com/AmazonS3/latest/userguide/intelligent-tiering.html.", + examples=["DEEP_ARCHIVE_ACCESS", "ARCHIVE_ACCESS"], + ) class S3EventNotificationEventBridgeModel(EventBridgeModel): # type: ignore[override] - detail: S3EventNotificationEventBridgeDetailModel + detail: S3EventNotificationEventBridgeDetailModel = Field( + description="Object representing the details of the S3 Event Notification sent to EventBridge.", + examples=[ + { + "version": "0", + "bucket": {"name": "example-bucket"}, + "object": { + "key": "IMG_m7fzo3.jpg", + "size": 184662, + "etag": "4e68adba0abe2dc8653dc3354e14c01d", + "sequencer": "006408CAD69598B05E", + }, + "request-id": "57H08PA84AB1JZW0", + "requester": "123456789012", + "source-ip-address": "255.255.255.255", + "reason": "PutObject", + }, + ], + ) class S3RecordModel(BaseModel): - eventVersion: str - eventSource: Literal["aws:s3"] - awsRegion: str - eventTime: datetime - eventName: str - userIdentity: S3Identity - requestParameters: S3RequestParameters - responseElements: S3ResponseElements - s3: S3Message - glacierEventData: Optional[S3EventRecordGlacierEventData] = None + eventVersion: str = Field( + description="Version of the event message, with a major and minor version in the form ..", + examples=[ + "2.2", + "1.9", + ], + ) + eventSource: Literal["aws:s3"] = Field( + default="aws:s3", + description="Source of the event.", + examples=["aws:s3"], + ) + awsRegion: str = Field( + description="The AWS region where the event occurred.", + examples=[ + "us-east-1", + "eu-central-1", + "ap-northeast-2", + ], + ) + eventTime: datetime = Field( + description="The time, in ISO-8601 format, for example, 1970-01-01T00:00:00.000Z, when Amazon S3 finished " + "processing the request.", + examples=[ + "1970-01-01T00:00:00.000Z", + ], + ) + eventName: str = Field( + description="Name of the event notification type, without the 's3:' prefix. See more https://docs.aws.amazon.com/AmazonS3/latest/userguide/notification-how-to-event-types-and-destinations.html.", + examples=[ + "ObjectCreated", + "ObjectCreated:Put", + "LifecycleExpiration:Delete", + ], + ) + userIdentity: S3Identity = Field( + description="Amazon identifier of the user, role, account or services who caused the event.", + examples=[{"principalId": "AWS:AIDAJEXAMPLE1234"}], + ) + requestParameters: S3RequestParameters = Field( + description="Source IP address of the request.", + examples=[{"sourceIPAddress": "255.255.255.255"}], + ) + responseElements: S3ResponseElements = Field( + description="Response elements from an Amazon S3 response object. Useful if you want to trace a request by " + "following up with AWS Support.", + examples=[ + { + "x-amz-request-id": "D82B88E5F771F645", + "x-amz-id-2": "vlR7PnpV2Ce81l0PRw6jlUpck7Jo5ZsQjryTjKlc5aLWGVHPZLj5NeC6qMa0emYBDXOo6QBU0Wo=", + }, + ], + ) + s3: S3Message = Field( + description="The Amazon S3 message object.", + examples=[ + { + "s3SchemaVersion": "1.0", + "configurationId": "828aa6fc-f7b5-4305-8584-487c791949c1", + "bucket": { + "name": "lambda-artifacts-deafc19498e3f2df", + "ownerIdentity": {"principalId": "A3I5XTEXAMAI3E"}, + "arn": "arn:aws:s3:::lambda-artifacts-deafc19498e3f2df", + }, + "object": { + "key": "b21b84d653bb07b05b1e6b33684dc11b", + "size": 1305107, + "eTag": "b21b84d653bb07b05b1e6b33684dc11b", + "sequencer": "0C0F6F405D6ED209E1", + }, + }, + ], + ) + glacierEventData: Optional[S3EventRecordGlacierEventData] = Field( + default=None, + description="The Glacier event data object.", + examples=[ + { + "restoreEventData": { + "lifecycleRestorationExpiryTime": "1970-01-01T00:01:00.000Z", + "lifecycleRestoreStorageClass": "standard", + }, + }, + ], + ) @model_validator(mode="before") def validate_s3_object(cls, values): @@ -111,4 +462,36 @@ def validate_s3_object(cls, values): class S3Model(BaseModel): - Records: List[S3RecordModel] + Records: List[S3RecordModel] = Field( + description="List of S3 records included in this event.", + examples=[ + { + "eventVersion": "2.1", + "eventSource": "aws:s3", + "awsRegion": "us-east-2", + "eventTime": "2019-09-03T19:37:27.192Z", + "eventName": "ObjectCreated:Put", + "userIdentity": {"principalId": "AWS:AIDAJEXAMPLE1234"}, + "requestParameters": {"sourceIPAddress": "255.255.255.255"}, + "responseElements": { + "x-amz-request-id": "D82B88E5F771F645", + "x-amz-id-2": "vlR7PnpV2Ce81l0PRw6jlUpck7Jo5ZsQjryTjKlc5aLWGVHPZLj5NeC6qMa0emYBDXOo6QBU0Wo=", + }, + "s3": { + "s3SchemaVersion": "1.0", + "configurationId": "828aa6fc-f7b5-4305-8584-487c791949c1", + "bucket": { + "name": "lambda-artifacts-deafc19498e3f2df", + "ownerIdentity": {"principalId": "A3I5XTEXAMAI3E"}, + "arn": "arn:aws:s3:::lambda-artifacts-deafc19498e3f2df", + }, + "object": { + "key": "b21b84d653bb07b05b1e6b33684dc11b", + "size": 1305107, + "eTag": "b21b84d653bb07b05b1e6b33684dc11b", + "sequencer": "0C0F6F405D6ED209E1", + }, + }, + }, + ], + ) diff --git a/aws_lambda_powertools/utilities/parser/models/sns.py b/aws_lambda_powertools/utilities/parser/models/sns.py index 585489e9323..62b8efc2e17 100644 --- a/aws_lambda_powertools/utilities/parser/models/sns.py +++ b/aws_lambda_powertools/utilities/parser/models/sns.py @@ -2,27 +2,116 @@ from typing import Dict, List, Literal, Optional, Union from typing import Type as TypingType -from pydantic import BaseModel, model_validator +from pydantic import BaseModel, Field, model_validator from pydantic.networks import HttpUrl class SnsMsgAttributeModel(BaseModel): - Type: str - Value: str + Type: str = Field( + description="The data type of the message attribute (String, Number, Binary, or custom data type).", + examples=["String", "Number", "Binary", "String.Array", "Number.Array"], + ) + Value: str = Field( + description="The value of the message attribute. All values are strings, even for Number types.", + examples=["TestString", "123", "TestBinary", '["item1", "item2"]'], + ) class SnsNotificationModel(BaseModel): - Subject: Optional[str] = None - TopicArn: str - UnsubscribeUrl: HttpUrl - Type: Literal["Notification"] - MessageAttributes: Optional[Dict[str, SnsMsgAttributeModel]] = None - Message: Union[str, TypingType[BaseModel]] - MessageId: str - SigningCertUrl: Optional[HttpUrl] = None # NOTE: FIFO opt-in removes attribute - Signature: Optional[str] = None # NOTE: FIFO opt-in removes attribute - Timestamp: datetime - SignatureVersion: Optional[str] = None # NOTE: FIFO opt-in removes attribute + Subject: Optional[str] = Field( + default=None, + description="The subject parameter provided when the notification was published to the topic.", + examples=["TestInvoke", "Alert: System maintenance", "Order Confirmation", None], + ) + TopicArn: str = Field( + description="The Amazon Resource Name (ARN) for the topic that this message was published to.", + examples=[ + "arn:aws:sns:us-east-2:123456789012:sns-lambda", + "arn:aws:sns:eu-west-1:123456789012:notification-topic", + "arn:aws:sns:us-west-2:123456789012:alerts.fifo", + ], + ) + UnsubscribeUrl: HttpUrl = Field( + description="A URL that you can use to unsubscribe the endpoint from this topic.", + examples=[ + ( + "https://sns.us-east-2.amazonaws.com/?Action=Unsubscribe&SubscriptionArn= \ + arn:aws:sns:us-east-2:123456789012:test-lambda:21be56ed-a058-49f5-8c98-aedd2564c486" + ), + ( + "https://sns.eu-west-1.amazonaws.com/?Action=Unsubscribe&SubscriptionArn= \ + arn:aws:sns:eu-west-1:123456789012:notification-topic:abcd1234-5678-90ef-ghij-klmnopqrstuv" + ), + ], + ) + Type: Literal["Notification"] = Field( + description="The type of message. For Lambda triggers, this is always 'Notification'.", + examples=["Notification"], + ) + MessageAttributes: Optional[Dict[str, SnsMsgAttributeModel]] = Field( + default=None, + description="User-defined message attributes as key-value pairs with type information.", + examples=[ + {"Test": {"Type": "String", "Value": "TestString"}}, + {"priority": {"Type": "Number", "Value": "1"}, "env": {"Type": "String", "Value": "prod"}}, + None, + ], + ) + Message: Union[str, TypingType[BaseModel]] = Field( + description="The message value specified when the notification was published to the topic.", + examples=[ + "Hello from SNS!", + '{"alert": "CPU usage above 80%", "instance": "i-1234567890abcdef0"}', + '{"order_id": 12345, "status": "confirmed", "total": 99.99}', + ], + ) + MessageId: str = Field( + description="A Universally Unique Identifier, unique for each message published.", + examples=[ + "95df01b4-ee98-5cb9-9903-4c221d41eb5e", + "da41e39f-ea4d-435a-b922-c6aae3915ebe", + "f3c8d4e2-1a2b-4c5d-9e8f-7g6h5i4j3k2l", + ], + ) + SigningCertUrl: Optional[HttpUrl] = Field( + default=None, + description=( + "The URL to the certificate that was used to sign the message. " + "Not present for FIFO topics with content-based deduplication." + ), + examples=[ + "https://sns.us-east-2.amazonaws.com/SimpleNotificationService-1234567890.pem", + "https://sns.eu-west-1.amazonaws.com/SimpleNotificationService-0987654321.pem", + None, + ], + ) # NOTE: FIFO opt-in removes attribute + Signature: Optional[str] = Field( + default=None, + description=( + "Base64-encoded SHA1withRSA signature of the message. " + "Not present for FIFO topics with content-based deduplication." + ), + examples=[ + "tcc6faL2yUC6dgZdmrwh1Y4cGa/ebXEkAi6RibDsvpi+tE/1+82j...65r==", + "EXAMPLEw6JRNwm1LFQL4ICB0bnXrdB8ClRMTQFPGBfHs...EXAMPLEw==", + None, + ], + ) # NOTE: FIFO opt-in removes attribute + Timestamp: datetime = Field( + description="The time (GMT) when the notification was published.", + examples=[ + "2019-01-02T12:45:07.000Z", + "2023-06-15T10:30:00.000Z", + "2023-12-25T18:45:30.123Z", + ], + ) + SignatureVersion: Optional[str] = Field( + default=None, + description=( + "Version of the Amazon SNS signature used. Not present for FIFO topics with content-based deduplication." + ), + examples=["1", "2", None], + ) # NOTE: FIFO opt-in removes attribute @model_validator(mode="before") def check_sqs_protocol(cls, values): @@ -37,11 +126,28 @@ def check_sqs_protocol(cls, values): class SnsRecordModel(BaseModel): - EventSource: Literal["aws:sns"] - EventVersion: str - EventSubscriptionArn: str - Sns: SnsNotificationModel + EventSource: Literal["aws:sns"] = Field( + description="The AWS service that invoked the function.", + examples=["aws:sns"], + ) + EventVersion: str = Field( + description="The version of the event schema.", + examples=["1.0", "2.0"], + ) + EventSubscriptionArn: str = Field( + description="The Amazon Resource Name (ARN) of the subscription.", + examples=[ + "arn:aws:sns:us-east-2:123456789012:sns-lambda:21be56ed-a058-49f5-8c98-aedd2564c486", + "arn:aws:sns:eu-west-1:123456789012:notification-topic:abcd1234-5678-90ef-ghij-klmnopqrstuv", + ], + ) + Sns: SnsNotificationModel = Field( + description="The SNS message that triggered the Lambda function.", + ) class SnsModel(BaseModel): - Records: List[SnsRecordModel] + Records: List[SnsRecordModel] = Field( + description="A list of SNS message records included in the event.", + examples=[[{"EventSource": "aws:sns", "Sns": {"MessageId": "95df01b4-ee98-5cb9-9903-4c221d41eb5e"}}]], + ) diff --git a/aws_lambda_powertools/utilities/parser/models/sqs.py b/aws_lambda_powertools/utilities/parser/models/sqs.py index efa5130bf06..06452cd2a8f 100644 --- a/aws_lambda_powertools/utilities/parser/models/sqs.py +++ b/aws_lambda_powertools/utilities/parser/models/sqs.py @@ -1,27 +1,78 @@ from datetime import datetime from typing import Dict, List, Literal, Optional, Sequence, Type, Union -from pydantic import BaseModel +from pydantic import BaseModel, Field class SqsAttributesModel(BaseModel): - ApproximateReceiveCount: str - ApproximateFirstReceiveTimestamp: datetime - MessageDeduplicationId: Optional[str] = None - MessageGroupId: Optional[str] = None - SenderId: str - SentTimestamp: datetime - SequenceNumber: Optional[str] = None - AWSTraceHeader: Optional[str] = None - DeadLetterQueueSourceArn: Optional[str] = None + ApproximateReceiveCount: str = Field( + description="The number of times a message has been received across all queues but not deleted.", + examples=["1", "2"], + ) + ApproximateFirstReceiveTimestamp: datetime = Field( + description="The time the message was first received from the queue (epoch time in milliseconds).", + examples=["1545082649185", "1545082650649", "1713185156612"], + ) + MessageDeduplicationId: Optional[str] = Field( + default=None, + description="Returns the value provided by the producer that calls the SendMessage action.", + examples=["msg-dedup-12345", "unique-msg-abc123", None], + ) + MessageGroupId: Optional[str] = Field( + default=None, + description="Returns the value provided by the producer that calls the SendMessage action.", + examples=["order-processing", "user-123-updates", None], + ) + SenderId: str = Field( + description="The user ID for IAM users or the role ID for IAM roles that sent the message.", + examples=["AIDAIENQZJOLO23YVJ4VO", "AMCXIENQZJOLO23YVJ4VO"], + ) + SentTimestamp: datetime = Field( + description="The time the message was sent to the queue (epoch time in milliseconds).", + examples=["1545082649183", "1545082650636", "1713185156609"], + ) + SequenceNumber: Optional[str] = Field( + default=None, + description="Returns the value provided by Amazon SQS.", + examples=["18849496460467696128", "18849496460467696129", None], + ) + AWSTraceHeader: Optional[str] = Field( + default=None, + description="The AWS X-Ray trace header for request tracing.", + examples=["Root=1-5e1b4151-5ac6c58239c1e5b4", None], + ) + DeadLetterQueueSourceArn: Optional[str] = Field( + default=None, + description="The ARN of the dead-letter queue from which the message was moved.", + examples=["arn:aws:sqs:eu-central-1:123456789012:sqs-redrive-SampleQueue-RNvLCpwGmLi7", None], + ) class SqsMsgAttributeModel(BaseModel): - stringValue: Optional[str] = None - binaryValue: Optional[str] = None - stringListValues: List[str] = [] - binaryListValues: List[str] = [] - dataType: str + stringValue: Optional[str] = Field( + default=None, + description="The string value of the message attribute.", + examples=["100", "active", "user-12345", None], + ) + binaryValue: Optional[str] = Field( + default=None, + description="The binary value of the message attribute, base64-encoded.", + examples=["base64Str", "SGVsbG8gV29ybGQ=", None], + ) + stringListValues: List[str] = Field( + default=[], + description="A list of string values for the message attribute.", + examples=[["item1", "item2"], ["tag1", "tag2", "tag3"], []], + ) + binaryListValues: List[str] = Field( + default=[], + description="A list of binary values for the message attribute, each base64-encoded.", + examples=[["dmFsdWUx", "dmFsdWUy"], ["aGVsbG8="], []], + ) + dataType: str = Field( + description="The data type of the message attribute (String, Number, Binary, or custom data type).", + examples=["String", "Number", "Binary", "String.custom", "Number.float"], + ) # context on why it's commented: https://github.com/aws-powertools/powertools-lambda-python/pull/118 # Amazon SQS supports the logical data types String, Number, and Binary with optional custom data type @@ -49,17 +100,74 @@ class SqsMsgAttributeModel(BaseModel): class SqsRecordModel(BaseModel): - messageId: str - receiptHandle: str - body: Union[str, Type[BaseModel], BaseModel] - attributes: SqsAttributesModel - messageAttributes: Dict[str, SqsMsgAttributeModel] - md5OfBody: str - md5OfMessageAttributes: Optional[str] = None - eventSource: Literal["aws:sqs"] - eventSourceARN: str - awsRegion: str + messageId: str = Field( + description="A unique identifier for the message. A MessageId is considered unique across all AWS accounts.", + examples=[ + "059f36b4-87a3-44ab-83d2-661975830a7d", + "2e1424d4-f796-459a-8184-9c92662be6da", + "db37cc61-1bb0-4e77-b6f3-7cf87f44a72a", + ], + ) + receiptHandle: str = Field( + description="An identifier associated with the act of receiving the message, used for message deletion.", + examples=[ + "AQEBwJnKyrHigUMZj6rYigCgxlaS3SLy0a...", + "AQEBzWwaftRI0KuVm4tP+/7q1rGgNqicHq...", + ], + ) + body: Union[str, Type[BaseModel], BaseModel] = Field( + description="The message's contents (not URL-encoded). Can be plain text or JSON.", + examples=[ + "Test message.", + '{"message": "foo1"}', + "hello world", + ], + ) + attributes: SqsAttributesModel = Field( + description="A map of the attributes requested in ReceiveMessage to their respective values.", + ) + messageAttributes: Dict[str, SqsMsgAttributeModel] = Field( + description="User-defined message attributes as key-value pairs.", + examples=[ + {"testAttr": {"stringValue": "100", "binaryValue": "base64Str", "dataType": "Number"}}, + {}, + ], + ) + md5OfBody: str = Field( + description="An MD5 digest of the non-URL-encoded message body string.", + examples=[ + "e4e68fb7bd0e697a0ae8f1bb342846b3", + "6a204bd89f3c8348afd5c77c717a097a", + ], + ) + md5OfMessageAttributes: Optional[str] = Field( + default=None, + description="An MD5 digest of the non-URL-encoded message attribute string.", + examples=[ + "00484c68...59e48fb7", + "b25f48e8...f4e4f0bb", + None, + ], + ) + eventSource: Literal["aws:sqs"] = Field( + description="The AWS service that invoked the function.", + examples=["aws:sqs"], + ) + eventSourceARN: str = Field( + description="The Amazon Resource Name (ARN) of the SQS queue.", + examples=[ + "arn:aws:sqs:us-east-2:123456789012:my-queue", + "arn:aws:sqs:eu-central-1:123456789012:sqs-redrive-SampleDLQ-Emgp9MFSLBZm", + ], + ) + awsRegion: str = Field( + description="The AWS region where the SQS queue is located.", + examples=["us-east-1", "us-east-2", "eu-central-1"], + ) class SqsModel(BaseModel): - Records: Sequence[SqsRecordModel] + Records: Sequence[SqsRecordModel] = Field( + description="A list of SQS message records included in the event.", + examples=[[{"messageId": "059f36b4-87a3-44ab-83d2-661975830a7d", "body": "Test message."}]], + ) diff --git a/aws_lambda_powertools/utilities/parser/models/transfer_family.py b/aws_lambda_powertools/utilities/parser/models/transfer_family.py index 62cb49479bd..be23c29449f 100644 --- a/aws_lambda_powertools/utilities/parser/models/transfer_family.py +++ b/aws_lambda_powertools/utilities/parser/models/transfer_family.py @@ -5,8 +5,27 @@ class TransferFamilyAuthorizer(BaseModel): - username: str - password: Optional[str] = None - protocol: Literal["SFTP", "FTP", "FTPS"] - server_id: str = Field(..., alias="serverId") - source_ip: IPvAnyAddress = Field(..., alias="sourceIp") + username: str = Field( + description="The username of the user attempting to authenticate.", + examples=["bobusa", "john.doe", "sftp-user-123", "data-transfer-user"], + ) + password: Optional[str] = Field( + default=None, + description="The password for authentication.", + examples=["", "", None], + ) + protocol: Literal["SFTP", "FTP", "FTPS"] = Field( + description="The protocol used for the connection.", + examples=["SFTP", "FTPS", "FTP"], + ) + server_id: str = Field( + ..., + alias="serverId", + description="The server ID of the Transfer Family server.", + examples=["s-abcd123456", "s-1234567890abcdef0", "s-example123"], + ) + source_ip: IPvAnyAddress = Field( + ..., + alias="sourceIp", + description="The IP address of the client connecting to the Transfer Family server.", + ) diff --git a/aws_lambda_powertools/utilities/parser/models/vpc_lattice.py b/aws_lambda_powertools/utilities/parser/models/vpc_lattice.py index 8442fc92781..a9385eeb0dd 100644 --- a/aws_lambda_powertools/utilities/parser/models/vpc_lattice.py +++ b/aws_lambda_powertools/utilities/parser/models/vpc_lattice.py @@ -1,12 +1,29 @@ from typing import Dict, Type, Union -from pydantic import BaseModel +from pydantic import BaseModel, Field class VpcLatticeModel(BaseModel): - method: str - raw_path: str - body: Union[str, Type[BaseModel]] - is_base64_encoded: bool - headers: Dict[str, str] - query_string_parameters: Dict[str, str] + method: str = Field( + description="The HTTP method used for the request.", + examples=["GET", "POST", "PUT", "DELETE", "PATCH"], + ) + raw_path: str = Field( + description="The raw path portion of the request URL.", + examples=["/testpath", "/api/v1/users", "/health"], + ) + body: Union[str, Type[BaseModel]] = Field( + description="The request body. Can be a string or a parsed model if content-type allows parsing.", + ) + is_base64_encoded: bool = Field(description="Indicates whether the body is base64-encoded.", examples=[True, False]) + headers: Dict[str, str] = Field( + description="The request headers as key-value pairs.", + examples=[ + {"host": "test-lambda-service.vpc-lattice-svcs.us-east-2.on.aws", "user-agent": "curl/7.64.1"}, + {"content-type": "application/json"}, + ], + ) + query_string_parameters: Dict[str, str] = Field( + description="The query string parameters as key-value pairs.", + examples=[{"order-id": "1"}, {"page": "2", "limit": "10"}], + ) diff --git a/aws_lambda_powertools/utilities/parser/models/vpc_latticev2.py b/aws_lambda_powertools/utilities/parser/models/vpc_latticev2.py index 10366742803..cdb75642bd5 100644 --- a/aws_lambda_powertools/utilities/parser/models/vpc_latticev2.py +++ b/aws_lambda_powertools/utilities/parser/models/vpc_latticev2.py @@ -5,26 +5,98 @@ class VpcLatticeV2RequestContextIdentity(BaseModel): - source_vpc_arn: Optional[str] = Field(None, alias="sourceVpcArn") - get_type: Optional[str] = Field(None, alias="type") - principal: Optional[str] = Field(None, alias="principal") - principal_org_id: Optional[str] = Field(None, alias="principalOrgID") - session_name: Optional[str] = Field(None, alias="sessionName") - x509_subject_cn: Optional[str] = Field(None, alias="X509SubjectCn") - x509_issuer_ou: Optional[str] = Field(None, alias="X509IssuerOu") - x509_san_dns: Optional[str] = Field(None, alias="x509SanDns") - x509_san_uri: Optional[str] = Field(None, alias="X509SanUri") - x509_san_name_cn: Optional[str] = Field(None, alias="X509SanNameCn") + source_vpc_arn: Optional[str] = Field( + None, + alias="sourceVpcArn", + description="The ARN of the VPC from which the request originated.", + examples=["arn:aws:ec2:us-east-2:123456789012:vpc/vpc-0b8276c84697e7339"], + ) + get_type: Optional[str] = Field( + None, + alias="type", + description="The type of identity making the request.", + examples=["AWS_IAM", "NONE"], + ) + principal: Optional[str] = Field( + None, + alias="principal", + description="The principal ARN of the identity making the request.", + examples=["arn:aws:sts::123456789012:assumed-role/example-role/057d00f8b51257ba3c853a0f248943cf"], + ) + principal_org_id: Optional[str] = Field( + None, + alias="principalOrgID", + description="The AWS organization ID of the principal.", + examples=["o-1234567890"], + ) + session_name: Optional[str] = Field( + None, + alias="sessionName", + description="The session name for assumed role sessions.", + examples=["057d00f8b51257ba3c853a0f248943cf"], + ) + x509_subject_cn: Optional[str] = Field( + None, + alias="X509SubjectCn", + description="The X.509 certificate subject common name.", + examples=["example.com"], + ) + x509_issuer_ou: Optional[str] = Field( + None, + alias="X509IssuerOu", + description="The X.509 certificate issuer organizational unit.", + examples=["IT Department"], + ) + x509_san_dns: Optional[str] = Field( + None, + alias="x509SanDns", + description="The X.509 certificate Subject Alternative Name DNS entry.", + examples=["example.com"], + ) + x509_san_uri: Optional[str] = Field( + None, + alias="X509SanUri", + description="The X.509 certificate Subject Alternative Name URI entry.", + examples=["https://example.com"], + ) + x509_san_name_cn: Optional[str] = Field( + None, + alias="X509SanNameCn", + description="The X.509 certificate Subject Alternative Name common name.", + examples=["example.com"], + ) class VpcLatticeV2RequestContext(BaseModel): - service_network_arn: str = Field(alias="serviceNetworkArn") - service_arn: str = Field(alias="serviceArn") - target_group_arn: str = Field(alias="targetGroupArn") - identity: VpcLatticeV2RequestContextIdentity - region: str - time_epoch: float = Field(alias="timeEpoch") - time_epoch_as_datetime: datetime = Field(alias="timeEpoch") + service_network_arn: str = Field( + alias="serviceNetworkArn", + description="The ARN of the VPC Lattice service network.", + examples=["arn:aws:vpc-lattice:us-east-2:123456789012:servicenetwork/sn-0bf3f2882e9cc805a"], + ) + service_arn: str = Field( + alias="serviceArn", + description="The ARN of the VPC Lattice service that processed the request.", + examples=["arn:aws:vpc-lattice:us-east-2:123456789012:service/svc-0a40eebed65f8d69c"], + ) + target_group_arn: str = Field( + alias="targetGroupArn", + description="The ARN of the target group that received the request.", + examples=["arn:aws:vpc-lattice:us-east-2:123456789012:targetgroup/tg-6d0ecf831eec9f09"], + ) + identity: VpcLatticeV2RequestContextIdentity = Field(description="Identity information about the requester.") + region: str = Field( + description="The AWS region where the request was processed.", + examples=["us-east-2", "us-west-1", "eu-west-1"], + ) + time_epoch: float = Field( + alias="timeEpoch", + description="The request timestamp in epoch microseconds.", + examples=[1696331543569073], + ) + time_epoch_as_datetime: datetime = Field( + alias="timeEpoch", + description="The request timestamp converted to datetime.", + ) @field_validator("time_epoch_as_datetime", mode="before") def time_epoch_convert_to_miliseconds(cls, value: int): @@ -32,11 +104,40 @@ def time_epoch_convert_to_miliseconds(cls, value: int): class VpcLatticeV2Model(BaseModel): - version: str - path: str - method: str - headers: Dict[str, str] - query_string_parameters: Optional[Dict[str, str]] = Field(None, alias="queryStringParameters") - body: Optional[Union[str, Type[BaseModel]]] = None - is_base64_encoded: Optional[bool] = Field(None, alias="isBase64Encoded") - request_context: VpcLatticeV2RequestContext = Field(..., alias="requestContext") + version: str = Field(description="The version of the VPC Lattice event format.", examples=["2.0"]) + path: str = Field( + description="The path portion of the request URL.", + examples=["/newpath", "/api/v1/users", "/health"], + ) + method: str = Field( + description="The HTTP method used for the request.", + examples=["GET", "POST", "PUT", "DELETE", "PATCH"], + ) + headers: Dict[str, str] = Field( + description="The request headers as key-value pairs.", + examples=[ + {"host": "test-lambda-service.vpc-lattice-svcs.us-east-2.on.aws", "user-agent": "curl/7.64.1"}, + {"content-type": "application/json"}, + ], + ) + query_string_parameters: Optional[Dict[str, str]] = Field( + None, + alias="queryStringParameters", + description="The query string parameters as key-value pairs.", + examples=[{"order-id": "1"}, {"page": "2", "limit": "10"}], + ) + body: Optional[Union[str, Type[BaseModel]]] = Field( + None, + description="The request body. Can be a string or a parsed model if content-type allows parsing.", + ) + is_base64_encoded: Optional[bool] = Field( + None, + alias="isBase64Encoded", + description="Indicates whether the body is base64-encoded.", + examples=[False, True], + ) + request_context: VpcLatticeV2RequestContext = Field( + ..., + alias="requestContext", + description="Contains information about the request context, including VPC Lattice service details.", + ) diff --git a/docs/Dockerfile b/docs/Dockerfile index 615a54ead22..893f9a6a94b 100644 --- a/docs/Dockerfile +++ b/docs/Dockerfile @@ -1,5 +1,5 @@ # v9.1.18 -FROM squidfunk/mkdocs-material@sha256:bb7b015690d9fb5ef0dbc98ca3520f153aa43129fb96aec5ca54c9154dc3b729 +FROM squidfunk/mkdocs-material@sha256:209b62dd9530163cc5cf9a49853b5bb8570ffb3f3b5fe4eadc1d319bbda5ce2f # pip-compile --generate-hashes --output-file=requirements.txt requirements.in COPY requirements.txt /tmp/ RUN pip install --require-hashes -r /tmp/requirements.txt diff --git a/docs/api_doc/metrics/metrics.md b/docs/api_doc/metrics/metrics.md deleted file mode 100644 index ec268279335..00000000000 --- a/docs/api_doc/metrics/metrics.md +++ /dev/null @@ -1,2 +0,0 @@ - -::: aws_lambda_powertools.metrics.metrics diff --git a/docs/build_recipes/build-tools.md b/docs/build_recipes/build-tools.md new file mode 100644 index 00000000000..ae02ab8b441 --- /dev/null +++ b/docs/build_recipes/build-tools.md @@ -0,0 +1,525 @@ +--- +title: Build Tools +description: Package Lambda functions using different build tools and dependency managers +--- + + + +This guide covers different build tools and dependency managers for packaging Lambda functions with Powertools for AWS Lambda (Python). Each tool has its strengths and is optimized for different use cases. + +???+ info "Requirements file security" + For simplicity, examples in this guide use `requirements.txt` files with pinned versions. In production environments, you should use hash-checking for enhanced security by including `--hash` flags. Learn more about [secure package installation](https://pip.pypa.io/en/stable/topics/secure-installs/){target="_blank"} in the pip documentation. + +## pip + +**pip** is Python's standard package installer - simple, reliable, and available everywhere. Perfect for straightforward Lambda functions where you need basic dependency management without complex workflows. + +???+ warning "Cross-platform compatibility" + Always use `--platform manylinux2014_x86_64` and `--only-binary=:all:` flags when building on non-Linux systems to ensure Lambda compatibility. This forces pip to download Linux-compatible wheels instead of compiling from source. + +### Basic setup + +=== "requirements.txt" + + ```bash + aws-lambda-powertools[all]==3.18.0 + pydantic==2.10.4 + requests>=2.32.4 + ``` + +=== "app_pip.py" + + ```python + --8<-- "examples/build_recipes/pip/app_pip.py" + ``` + +=== "build.sh" + + ```bash + --8<-- "examples/build_recipes/pip/build.sh" + ``` + +### Advanced pip with Lambda Layers + +Optimize your deployment by using Lambda layers for Powertools for AWS: + +=== "requirements-layer.txt" + + ```bash + aws-lambda-powertools[all]==3.18.0 + ``` + +=== "requirements-app.txt" + + ```bash + pydantic==2.10.4 + requests>=2.32.4 + ``` + +=== "app_pip.py" + + ```python + --8<-- "examples/build_recipes/pip/app_pip.py" + ``` + +=== "build-with-layer.sh" + + ```bash + --8<-- "examples/build_recipes/pip/build-with-layer.sh" + ``` + +### Cross-platform builds + +Build packages for different Lambda architectures using platform-specific wheels: + +=== "Multi-architecture build" + + ```bash + --8<-- "examples/build_recipes/pip/build-cross-platform.sh" + ``` + +#### Platform compatibility + +| Platform Flag | Lambda Architecture | Use Case | +|---------------|-------------------|----------| +| `manylinux2014_x86_64` | x86_64 | Standard Lambda functions | +| `manylinux2014_aarch64` | arm64 | Graviton-based functions (lower cost) | + +???+ tip "Architecture selection" + - **x86_64**: Broader package compatibility, more mature ecosystem + - **arm64**: Up to 20% better price-performance, newer architecture + +## uv + +**uv** is an extremely fast Python package manager written in Rust, designed as a drop-in replacement for pip and pip-tools. It offers 10-100x faster dependency resolution and installation, making it ideal for CI/CD pipelines and performance-critical builds. Learn more at [docs.astral.sh/uv/](https://docs.astral.sh/uv/){target="_blank"}. + +???+ warning "Cross-platform compatibility" + Use `uv pip install` with `--platform manylinux2014_x86_64` and `--only-binary=:all:` flags when building on non-Linux systems. This ensures Lambda-compatible wheels are downloaded instead of compiling from source. + +### Setup uv + +=== "pyproject.toml" + + ```toml + --8<-- "examples/build_recipes/uv/pyproject.toml" + ``` + +=== "app_uv.py" + + ```python + --8<-- "examples/build_recipes/uv/app_uv.py" + ``` + +=== "build-uv.sh" + + ```bash + --8<-- "examples/build_recipes/uv/build-uv.sh" + ``` + +### uv with lock file for reproducible builds + +Generate and use lock files to ensure exact dependency versions across all environments and team members. + +=== "build-uv-locked.sh" + + ```bash + --8<-- "examples/build_recipes/uv/build-uv-locked.sh" + ``` + +### Cross-platform builds with uv + +Build packages for different Lambda architectures using uv's platform-specific installation: + +=== "Multi-architecture build" + + ```bash + --8<-- "examples/build_recipes/uv/build-uv-cross-platform.sh" + ``` + +#### uv performance advantages + +| Feature | uv | pip | Benefit | +|---------|----|----|---------| +| **Dependency resolution** | Rust-based solver | Python-based | 10-100x faster | +| **Parallel downloads** | Built-in | Limited | Faster package installation | +| **Lock file generation** | `uv lock` | Requires pip-tools | Reproducible builds | +| **Virtual environments** | `uv venv` | Separate venv tool | Integrated workflow | + +???+ tip "uv best practices for Lambda" + - Use `uv lock` for reproducible builds across environments + - Leverage `uv export` to generate requirements.txt for deployment + - Use `--frozen` flag in CI/CD to ensure exact dependency versions + +## Poetry + +**Poetry** is a modern Python dependency manager that handles packaging, dependency resolution, and virtual environments. It uses lock files to ensure reproducible builds and provides excellent developer experience with semantic versioning. + +???+ warning "Cross-platform compatibility" + When building on non-Linux systems, use `pip install` with `--platform manylinux2014_x86_64` and `--only-binary=:all:` flags after exporting requirements from Poetry. This ensures Lambda-compatible wheels are installed. + +### Setup Poetry + +???+ info "Prerequisites" + - **Poetry 2.0+** required for optimal performance and latest features + - Initialize a new project with `poetry new my-lambda-project` or `poetry init` in existing directory + - Project name in `pyproject.toml` can be customized to match your preferences + - See [Poetry documentation](https://python-poetry.org/docs/basic-usage/){target="_blank"} for detailed project setup guide + +=== "pyproject.toml" + + ```toml + --8<-- "examples/build_recipes/poetry/pyproject.toml" + ``` + +=== "app.py" + + ```python + --8<-- "examples/build_recipes/poetry/app_poetry.py" + ``` + +=== "build-with-poetry.sh" + + ```bash + --8<-- "examples/build_recipes/poetry/build-with-poetry.sh" + ``` + +#### Alternative: Poetry-only build (not recommended for production) + +For development or when cross-platform compatibility is not a concern: + +=== "build-poetry-native.sh" + + ```bash + --8<-- "examples/build_recipes/poetry/build-poetry-native.sh" + ``` + +### Cross-platform builds with Poetry + +Build packages for different Lambda architectures by combining Poetry's dependency management with pip's platform-specific installation: + +=== "Multi-architecture build" + + ```bash + --8<-- "examples/build_recipes/poetry/build-poetry-cross-platform.sh" + ``` + +#### Poetry build methods comparison + +| Method | Cross-platform Safe | Speed | Reproducibility | Recommendation | +|--------|-------------------|-------|-----------------|----------------| +| **Poetry + pip** | ✅ Yes | Fast | High | ✅ Recommended | +| **Poetry native** | ❌ No | Fastest | Medium | ⚠️ Development only | +| **Poetry + Docker** | ✅ Yes | Slower | Highest | ✅ Complex dependencies | + +???+ tip "Poetry best practices for Lambda" + - Always use `poetry export` to generate requirements.txt for deployment + - Use `--without-hashes` flag to avoid pip compatibility issues + - Combine with `pip install --platform` for cross-platform builds + - Keep `poetry.lock` in version control for reproducible builds + +### Poetry with Docker for consistent builds + +Use Docker to ensure consistent builds across different development environments and avoid platform-specific dependency issues. + +=== "Dockerfile" + + ```dockerfile title="Dockerfile.poetry" + --8<-- "examples/build_recipes/poetry/Dockerfile.poetry" + ``` + +=== "build-with-poetry-docker.sh" + + ```bash + --8<-- "examples/build_recipes/poetry/build-with-poetry-docker.sh" + ``` + +## SAM + +**AWS SAM (Serverless Application Model)** is AWS's framework for building serverless applications using CloudFormation templates. It provides local testing capabilities, built-in best practices, and seamless integration with AWS services, making it the go-to choice for AWS-native serverless development. + +SAM automatically resolves multi-architecture compatibility issues by building functions inside Lambda-compatible containers (`--use-container` flag), ensuring dependencies are installed with the correct architecture and glibc versions for the Lambda runtime environment. This eliminates the common problem of architecture mismatches when building on macOS/Windows. + +Learn more at [AWS SAM documentation](https://docs.aws.amazon.com/serverless-application-model/){target="_blank"}. + +### SAM without Layers (All-in-one package) + +Simple approach where all dependencies are packaged with the function code: + +=== "template.yaml" + + ```yaml + --8<-- "examples/build_recipes/sam/no-layers/template.yaml" + ``` + +=== "requirements.txt" + + ```txt + aws-lambda-powertools[all]==3.18.0 + pydantic==2.10.4 + requests>=2.32.4 + ``` + +=== "src/app_sam_no_layer.py" + + ```python + --8<-- "examples/build_recipes/sam/no-layers/src/app_sam_no_layer.py" + ``` + +=== "build-sam-no-layers.sh" + + ```bash + --8<-- "examples/build_recipes/sam/no-layers/build-sam-no-layers.sh" + ``` + +### SAM with Layers (Optimized approach) + +Optimized approach using Lambda Layers to separate dependencies from application code. This example demonstrates: + +* **Public Powertools for AWS Lambda layer** - Uses AWS-managed layer ARN for better performance and maintenance +* **Custom dependencies layer** - Separates application-specific dependencies + +=== "template.yaml" + + ```yaml + --8<-- "examples/build_recipes/sam/with-layers/template.yaml" + ``` + +=== "layers/dependencies/requirements.txt" + + ```txt + pydantic==2.10.4 + requests>=2.32.4 + ``` + +=== "src/app/app_sam_layer.py" + + ```python + --8<-- "examples/build_recipes/sam/with-layers/src/app/app_sam_layer.py" + ``` + +=== "src/worker/worker_sam_layer.py" + + ```python + --8<-- "examples/build_recipes/sam/with-layers/src/worker/worker_sam_layer.py" + ``` + +=== "samconfig.toml" + + ```toml + --8<-- "examples/build_recipes/sam/with-layers/samconfig.toml" + ``` + +=== "build-sam-with-layers.sh" + + ```bash + --8<-- "examples/build_recipes/sam/with-layers/build-sam-with-layers.sh" + ``` + +#### Comparison: with vs without Layers + +| Aspect | Without Layers | With Layers | +|--------|----------------|-------------| +| **Deployment Speed** | Slower (uploads all deps each time) | Faster (layers cached, only app code changes) | +| **Package Size** | Larger function packages | Smaller function packages | +| **Cold Start** | Slightly faster (everything in one place) | Slightly slower (layer loading overhead) | +| **Reusability** | No sharing between functions | Layers shared across functions | +| **Complexity** | Simple, single package | More complex, multiple components | +| **Best For** | Single function, simple apps | Multiple functions, shared dependencies | + +### Advanced SAM with multiple environments + +Configure different environments (dev, staging, prod) with environment-specific settings and layer references. This example demonstrates how to use parameters, mappings, and conditions to create flexible, multi-environment deployments. + +=== "template.yaml" + + ```yaml + --8<-- "examples/build_recipes/sam/multi-env/template.yaml" + ``` + +## CDK + +The **AWS CDK (Cloud Development Kit)** allows you to define cloud infrastructure using familiar programming languages like Python, TypeScript, or Java. It provides type safety, IDE support, and the ability to create reusable constructs, making it perfect for complex infrastructure requirements and teams that prefer code over YAML. + +Learn more at [AWS CDK documentation](https://docs.aws.amazon.com/cdk/){target="_blank"}. + +### Basic CDK setup with Python + +CDK uses the concept of **Apps**, **Stacks**, and **Constructs** to organize infrastructure. A CDK app contains one or more stacks, and each stack contains constructs that represent AWS resources. + +#### Project structure + +```bash +my-lambda-cdk/ +├── app.py # CDK app entry point +├── cdk.json # CDK configuration +├── requirements.txt # CDK dependencies +├── src/ +│ └── lambda_function.py # Lambda function code +└── stacks/ + └── lambda_stack.py # Stack definition (optional) +``` + +#### Key CDK concepts for Lambda + +| Concept | Description | Lambda Usage | +|---------|-------------|--------------| +| **App** | Root construct, contains stacks | Entry point for your Lambda infrastructure | +| **Stack** | Unit of deployment | Groups related Lambda functions and resources | +| **Construct** | Reusable cloud component | Lambda function, API Gateway, DynamoDB table | +| **Asset** | Local files bundled with deployment | Lambda function code, layers | + +#### Prerequisites + +Before starting, ensure you have: + +```bash +--8<-- "examples/build_recipes/cdk/basic/setup-cdk.sh" +``` + +#### Basic implementation + +=== "app.py" + + ```python + --8<-- "examples/build_recipes/cdk/basic/app.py" + ``` + +=== "cdk.json" + + ```json + --8<-- "examples/build_recipes/cdk/basic/cdk.json" + ``` + +=== "requirements.txt" + + ```txt + aws-cdk-lib>=2.100.0 + constructs>=10.0.0 + ``` + +=== "src/lambda_function.py" + + ```python + --8<-- "examples/build_recipes/cdk/basic/src/lambda_function.py" + ``` + +=== "build-cdk.sh" + + ```bash + --8<-- "examples/build_recipes/cdk/basic/build-cdk.sh" + ``` + +#### CDK bundling options + +CDK provides several ways to handle Lambda function dependencies: + +| Method | Description | Best For | +|--------|-------------|----------| +| **Inline bundling** | CDK bundles dependencies automatically | Simple functions with few dependencies | +| **Docker bundling** | Uses Docker for consistent builds | Complex dependencies, cross-platform builds | +| **Pre-built assets** | Upload pre-packaged ZIP files | Custom build processes, CI/CD integration | +| **Lambda Layers** | Separate dependencies from code | Shared dependencies across functions | + +#### Common CDK commands + +```bash +--8<-- "examples/build_recipes/cdk/basic/cdk-commands.sh" +``` + +### Advanced CDK with multiple stacks + +Multi-environment CDK setup with separate stacks, DynamoDB integration, and SQS message processing using BatchProcessor. + +=== "stacks/powertools_cdk_stack.py" + + ```python + --8<-- "examples/build_recipes/cdk/multi-stack/stacks/powertools_cdk_stack.py" + ``` + +=== "cdk.json" + + ```json + --8<-- "examples/build_recipes/cdk/multi-stack/cdk.json" + ``` + +=== "app_multi_stack.py" + + ```python + --8<-- "examples/build_recipes/cdk/multi-stack/app_multi_stack.py" + ``` + +=== "src/app/api.py" + + ```python + --8<-- "examples/build_recipes/cdk/multi-stack/src/app/api.py" + ``` + +=== "src/worker/worker.py" + + ```python + --8<-- "examples/build_recipes/cdk/multi-stack/src/worker/worker.py" + ``` + +=== "deploy-environments.sh" + + ```bash + --8<-- "examples/build_recipes/cdk/multi-stack/deploy-environments.sh" + ``` + +## Pants + +**Pants** is a powerful build system designed for large codebases and monorepos. It provides incremental builds, dependency inference, and advanced caching mechanisms. Ideal for organizations with complex Python projects that need fine-grained build control and optimization. + +### Setup + +=== "pants.toml" + + ```toml + --8<-- "examples/build_recipes/pants/basic_pants/pants.toml" + ``` + +=== "BUILD" + + ```python + --8<-- "examples/build_recipes/pants/basic_pants/BUILD" + ``` + +=== "app.py" + + ```python + --8<-- "examples/build_recipes/pants/basic_pants/app_pants.py" + ``` + +=== "build-pants.sh" + + ```bash + --8<-- "examples/build_recipes/pants/basic_pants/build-pants.sh" + ``` + +### Advanced Pants with multiple targets + +Pants excels at managing complex projects with multiple Lambda functions that share dependencies. This approach provides significant benefits for monorepo architectures and microservices. + +=== "BUILD" + + ```python + --8<-- "examples/build_recipes/pants/multi-target/BUILD" + ``` + +=== "app/handler.py" + + ```python + --8<-- "examples/build_recipes/pants/multi-target/app/handler.py" + ``` + +=== "worker/worker_pants.py" + + ```python + --8<-- "examples/build_recipes/pants/multi-target/worker/worker_pants.py" + ``` + +=== "build-pants-multi.sh" + + ```bash + --8<-- "examples/build_recipes/pants/multi-target/build-pants-multi.sh" + ``` diff --git a/docs/build_recipes/cicd-integration.md b/docs/build_recipes/cicd-integration.md new file mode 100644 index 00000000000..69e6fb261a2 --- /dev/null +++ b/docs/build_recipes/cicd-integration.md @@ -0,0 +1,68 @@ +--- +title: CI/CD Integration +description: Automate Lambda function builds and deployments +--- + + + +Automate your Lambda function builds and deployments using popular CI/CD platforms. These examples show how to build and deploy Lambda functions with Powertools for AWS with proper cross-platform compatibility and deploy them reliably. + +## GitHub Actions + +**GitHub Actions** provides a powerful, integrated CI/CD platform that runs directly in your GitHub repository. It offers excellent integration with AWS services, supports matrix builds for testing multiple configurations, and provides a rich ecosystem of pre-built actions. + +=== "Modern AWS Lambda deploy action" + + ```yaml + --8<-- "examples/build_recipes/cicd/github-actions/deploy-modern.yml" + ``` + +=== "Multi-environment deployment" + + ```yaml + --8<-- "examples/build_recipes/cicd/github-actions/deploy-multi-env.yml" + ``` + +=== "Simple source code deployment" + + ```yaml + --8<-- "examples/build_recipes/cicd/github-actions/deploy-simple.yml" + ``` + +=== "S3 deployment method" + + ```yaml + --8<-- "examples/build_recipes/cicd/github-actions/deploy-s3.yml" + ``` + +=== "Build tool integration" + + ```yaml + --8<-- "examples/build_recipes/cicd/github-actions/deploy-build-tools.yml" + ``` + +## AWS CodeBuild + +**AWS CodeBuild** is a fully managed build service that compiles source code, runs tests, and produces deployment packages. It integrates seamlessly with other AWS services and provides consistent build environments with automatic scaling. + +=== "Basic CodeBuild Configuration" + + ```yaml + --8<-- "examples/build_recipes/cicd/codebuild/buildspec.yml" + ``` + +## Best Practices for CI/CD + +1. **Use Linux runners** (ubuntu-latest) to ensure Lambda compatibility +2. **Cache dependencies** to speed up builds (uv, poetry cache, pip cache) +3. **Run tests first** before building deployment packages +4. **Use matrix builds** to test multiple Python versions or configurations +5. **Implement proper secrets management** with GitHub Secrets or AWS Parameter Store +6. **Add deployment gates** for production environments +7. **Monitor deployment success** with CloudWatch metrics and alarms + +???+ tip "Performance Optimization" + - Use **uv** for fastest dependency installation in CI/CD + - **Cache virtual environments** between builds when possible + - **Parallelize builds** for multiple environments + - **Use container images** for complex dependencies or large packages diff --git a/docs/build_recipes/cross-platform.md b/docs/build_recipes/cross-platform.md new file mode 100644 index 00000000000..9f4c5caaefa --- /dev/null +++ b/docs/build_recipes/cross-platform.md @@ -0,0 +1,255 @@ +--- +title: Cross-Platform Build Considerations +description: Handle architecture differences when building AWS Lambda packages +--- + + + +Many modern Python packages include compiled extensions written in Rust or C/C++ for performance reasons. These compiled components are platform-specific and can cause deployment issues when building on different architectures. + +???+ warning "Architecture Mismatch Issues" + Building AWS Lambda packages on macOS (ARM64/Intel) for deployment on AWS Lambda (Linux x86_64 or ARM64) will result in incompatible binary dependencies that cause import errors at runtime. + +## Common compiled libraries + +Taking into consideration Powertools for AWS dependencies and common Python packages, these libraries include compiled Rust/C components that require architecture-specific builds: + +| Library | Language | Components | Impact | Used in Powertools for AWS| +|---------|----------|------------|--------|-------------------| +| **pydantic** | Rust | Core validation engine | High - Core functionality affected | ✅ Core dependency | +| **aws-encryption-sdk** | C | Encryption/decryption | High - Data masking fails | ✅ Optional (datamasking extra) | +| **protobuf** | C++ | Protocol buffer serialization | High - Message parsing fails | ✅ Optional (kafka-consumer-protobuf) | +| **redis** | C | Redis client with hiredis | Medium - Falls back to pure Python | ✅ Optional (redis extra) | +| **valkey-glide** | Rust | High-performance Redis client | High - Client completely broken | ✅ Optional (valkey extra) | +| **orjson** | Rust | JSON serialization | Medium - Performance degradation | ❌ Not used (but common) | +| **uvloop** | C | Event loop implementation | Medium - Falls back to asyncio | ❌ Not used (but common) | +| **lxml** | C | XML/HTML processing | High - XML parsing fails | ❌ Not used (but common) | + +## Powertools extras dependencies and architecture + +Different Powertools for AWS extras dependencies have varying levels of architecture dependency: + +=== "Safe extras (pure python)" + + ```txt title="requirements.txt - Safe for any platform" + # The 'all' extra includes both safe and architecture-dependent packages + aws-lambda-powertools[all]==3.18.0 + + # This is equivalent to: + # pydantic, pydantic-settings, aws-xray-sdk, fastjsonschema, + # aws-encryption-sdk, jsonpath-ng + ``` + +=== "Architecture-dependent extras" + + ```txt title="requirements.txt - Requires Linux builds" + # These extras include compiled dependencies + aws-lambda-powertools[parser]==3.18.0 # pydantic (Rust) + aws-lambda-powertools[validation]==3.18.0 # fastjsonschema (C) + aws-lambda-powertools[datamasking]==3.18.0 # aws-encryption-sdk (C) + aws-lambda-powertools[redis]==3.18.0 # redis with hiredis (C) + aws-lambda-powertools[valkey]==3.18.0 # valkey-glide (Rust) + aws-lambda-powertools[kafka-consumer-avro]==3.18.0 # avro (C) + aws-lambda-powertools[kafka-consumer-protobuf]==3.18.0 # protobuf (C++) + ``` + +=== "All extras (mixed dependencies)" + + ```txt title="requirements.txt - Requires careful platform handling" + # These extras have minimal or no compiled dependencies + aws-lambda-powertools[tracer]==3.18.0 # aws-xray-sdk (mostly pure Python) + aws-lambda-powertools[aws-sdk]==3.18.0 # boto3 (pure Python) + + ``` + +???+ tip "Powertools for AWS build strategy" + 1. **Use `[all]` extra with Docker builds** for maximum compatibility + 2. **Use specific extras** if you want to avoid certain compiled dependencies + 3. **Test imports** after building to catch architecture mismatches early + +## Understanding Python wheels + +Python wheels are binary distribution packages that include compiled extensions. Lambda requires specific wheel types based on the target runtime architecture and GLIBC version. + +### Wheel naming convention + +Wheels follow a specific naming pattern that indicates compatibility: + +```txt +{package}-{version}-{python tag}-{abi tag}-{platform tag}.whl +``` + +**Example breakdown:** + +```txt +pydantic-2.5.0-cp311-cp311-linux_x86_64.whl +│ │ │ │ └─ Platform: Linux x86_64 +│ │ │ └─ ABI: CPython 3.11 +│ │ └─ Python: CPython 3.11 +│ └─ Version: 2.5.0 +└─ Package: pydantic +``` + +### Platform tags and Lambda compatibility + +| Platform Tag | Description | Lambda Compatibility | +|--------------|-------------|---------------------| +| `linux_x86_64` | Linux 64-bit Intel/AMD | ✅ Lambda x86_64 | +| `linux_aarch64` | Linux 64-bit ARM | ✅ Lambda arm64 | +| `macosx_*` | macOS (any version) | ❌ Not compatible | +| `win_*` | Windows (any version) | ❌ Not compatible | +| `any` | Pure Python, no compiled code | ✅ All platforms | + +### Source distributions vs wheels + +| Package Type | Extension | Compilation | Lambda Recommendation | +|--------------|-----------|-------------|----------------------| +| **Wheel** | `.whl` | Pre-compiled | ✅ Preferred - faster, consistent | +| **Source Distribution** | `.tar.gz` | Compile during install | ❌ Avoid - platform-dependent compilation | + +**Why wheels matter for Lambda:** + +* **Consistent builds** - Same binary across environments +* **Faster installs** - No compilation step required +* **Predictable dependencies** - Known system library requirements +* **Architecture safety** - Platform-specific binaries + +## Lambda runtime environments + + +Lambda managed runtimes use [specific Amazon Linux versions](https://docs.aws.amazon.com/lambda/latest/dg/lambda-runtimes.html#runtimes-supported) versions with fixed GLIBC versions. Packages built on development machines with newer GLIBC versions will fail at runtime with import errors. Each Python runtime version corresponds to a specific Amazon Linux base system that determines compatible system library versions. + + +### Amazon Linux versions and GLIBC compatibility + +| Python Runtime | Base System | GLIBC Version | Architecture Support | +|----------------|-------------------|---------------|----------------------| +| **python3.9** | Amazon Linux 2 | 2.26 | x86_64, arm64 | +| **python3.10** | Amazon Linux 2 | 2.26 | x86_64, arm64 | +| **python3.11** | Amazon Linux 2 | 2.26 | x86_64, arm64 | +| **python3.12** | Amazon Linux 2023 | 2.34 | x86_64, arm64 | +| **python3.13** | Amazon Linux 2023 | 2.34 | x86_64, arm64 | + +???+ warning "GLIBC Version Mismatch" + Compiled libraries built on systems with newer GLIBC versions will fail on Lambda runtimes with older GLIBC versions. Ubuntu 24.04 (GLIBC 2.39) and Ubuntu 22.04 (GLIBC 2.35) are incompatible with Lambda python3.11 and earlier (GLIBC 2.26). Always use `--platform` flags or Docker with Lambda base images. + +### Manylinux compatibility tags + +Python wheels use manylinux tags to indicate GLIBC compatibility. Understanding these tags helps you choose the right wheels for Lambda: + +| manylinux Tag | GLIBC Version | Lambda Compatibility | Recommendation | +|---------------|---------------|---------------------|----------------| +| **manylinux1** | 2.5 | ✅ All runtimes | Legacy, limited package support | +| **manylinux2010** | 2.12 | ✅ All runtimes | Good compatibility | +| **manylinux2014** | 2.17 | ✅ All runtimes | Recommended for most packages | +| **manylinux_2_17** | 2.17 | ✅ All runtimes | Modern standard | +| **manylinux_2_24** | 2.24 | ✅ All runtimes | Good for newer packages | +| **manylinux_2_28** | 2.28 | ✅ python3.12+, ❌ python3.11- | Use with caution | +| **manylinux_2_34** | 2.34 | ✅ python3.12+, ❌ python3.11- | AL2023 only | + +## Runtime-specific considerations + +### Amazon Linux 2 (python3.8 - python3.11) + +Amazon Linux 2 is based on RHEL 7 and uses an older GLIBC version (2.26). This provides broad compatibility but may limit access to newer compiled features. + +**Characteristics:** + +* **GLIBC 2.26** - Compatible with most manylinux wheels +* **OpenSSL 1.0.2** - Legacy TLS support + +**Best practices:** + +```bash +--8<-- "examples/build_recipes/build_multi_arch/build-al2.sh" +``` + +### Amazon Linux 2023 (python3.12+) + +Amazon Linux 2023 is a modern, minimal Linux distribution with updated system libraries and better security. + +**Characteristics:** + +* **GLIBC 2.34** - Supports newer compiled libraries +* **OpenSSL 3.0** - Latest TLS and cryptographic features +* **Smaller footprint** - Optimized for containers and serverless + +**Migration considerations:** + +```bash +--8<-- "examples/build_recipes/build_multi_arch/build-al2023.sh" +``` + +## Multi-platform build strategies + +=== "Docker-based Builds (Recommended)" + + Use AWS Lambda base images to ensure Linux x86_64 or ARM64 compatibility: + + === "Dockerfile" + + ```dockerfile + --8<-- "examples/build_recipes/build_multi_arch/Dockerfile.lambda" + ``` + + === "Build Script" + + ```bash + --8<-- "examples/build_recipes/build_multi_arch/build-multiplatform.sh" + ``` + +=== "Platform-specific pip install" + + Force installation of Linux-compatible wheels: + + === "Build Script" + + ```bash + --8<-- "examples/build_recipes/build_multi_arch/build-linux-wheels.sh" + ``` + +=== "GitHub Actions multi-arch" + + Use GitHub Actions with Linux runners for consistent builds: + + === "Workflow" + + ```yaml + --8<-- "examples/build_recipes/build_multi_arch/lambda-build.yml" + ``` + +## Debugging compatibility issues + +When you encounter runtime errors related to compiled dependencies, use these techniques to diagnose and fix the issues: + +### Common error patterns + +=== "GLIBC version errors" + + ```bash + --8<-- "examples/build_recipes/build_multi_arch/debug-glibc.sh" + ``` + +=== "Architecture mismatch" + + ```bash + --8<-- "examples/build_recipes/build_multi_arch/debug-arch-mismatch.sh" + ``` + +=== "Missing system libraries" + + ```bash + --8<-- "examples/build_recipes/build_multi_arch/debug-missing-libs.sh" + ``` + +## Best practices for cross-platform builds + +???+ tip "Development Workflow" + Develop locally on your preferred platform, but always build deployment packages in a Linux environment or Docker container to ensure compatibility. + +1. **Always build on Linux** for Lambda deployments, or use Docker with Lambda base images +2. **Use `--platform` flags** when installing with pip to force Linux-compatible wheels +3. **Test imports** in your build environment before deployment +4. **Pin dependency versions** to ensure reproducible builds across platforms +5. **Use CI/CD with Linux runners** to avoid local architecture issues +6. **Consider Lambda container images** for complex dependency scenarios diff --git a/docs/build_recipes/getting-started.md b/docs/build_recipes/getting-started.md new file mode 100644 index 00000000000..95288f274f3 --- /dev/null +++ b/docs/build_recipes/getting-started.md @@ -0,0 +1,30 @@ +--- +title: Getting Started +description: Prerequisites and setup for building Lambda functions with Powertools +--- + + + +## Prerequisites + +Before using any of these recipes, ensure you have: + +* [AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html){target="_blank"} configured +* Python 3.10+ installed +* Your preferred build tool installed (see individual recipes) + +## Choosing the right tool + +Each build tool has its strengths and is optimized for different use cases. Consider your project complexity, team preferences, and deployment requirements when selecting the best approach. + +| Tool | Best for | Considerations | +| --------------------- | --------------------------------- | ------------------------------------------- | +| **[pip](build-tools.md#pip)** | Simple projects, CI/CD | Lightweight, universal | +| **[uv](build-tools.md#uv)** | Fast builds, performance-critical | Extremely fast, Rust-based | +| **[poetry](build-tools.md#poetry)** | Modern Python projects | Excellent dependency management, lock files | +| **[SAM](build-tools.md#sam)** | AWS-native deployments | Integrated with AWS, local testing | +| **[CDK](build-tools.md#cdk)** | Infrastructure as code | Programmatic infrastructure, type safety | +| **[pants](build-tools.md#pants)** | Monorepos, complex projects | Advanced build system, incremental builds | + +???+ tip + All examples in this guide are available in the [project repository](https://github.com/aws-powertools/powertools-lambda-python/tree/develop/examples/build_recipes){target="_blank"}. diff --git a/docs/build_recipes/index.md b/docs/build_recipes/index.md new file mode 100644 index 00000000000..ea7e53838af --- /dev/null +++ b/docs/build_recipes/index.md @@ -0,0 +1,57 @@ +--- +title: Build Recipes +description: Lambda function packaging recipes with Powertools for AWS +--- + + + +As the Python ecosystem continues to evolve with new package managers, build tools, and dependency resolution strategies, choosing the right approach for Lambda deployments has become increasingly complex. Modern Python applications often involve compiled extensions, platform-specific dependencies, and sophisticated toolchains that require careful consideration for serverless environments. + +This guide provides practical recipes for packaging Lambda functions with Powertools for AWS Lambda (Python) using different build tools and dependency managers. + +## Key benefits + +* **Optimized packaging** - Reduce deployment package size and cold start times +* **Dependency management** - Handle complex dependency trees efficiently +* **Build reproducibility** - Consistent builds across environments +* **Layer optimization** - Leverage Lambda Layers for better performance +* **Multi-tool support** - Choose the right tool for your workflow + +## Terminology + +Understanding these key terms will help you navigate the build recipes more effectively: + +| Term | Definition | +|------|------------| +| **Deployment Package** | A ZIP archive or container image containing your Lambda function code and all its dependencies, ready for deployment to AWS Lambda | +| **Lambda Layer** | A ZIP archive containing libraries, custom runtimes, or other function dependencies that can be shared across multiple Lambda functions | +| **Build Tool** | Software that automates the process of compiling, packaging, and preparing your code for deployment (e.g., pip, poetry, uv, pants) | +| **Dependency Manager** | Tool responsible for resolving, downloading, and managing external libraries your project depends on | +| **Lock File** | A file that records the exact versions of all dependencies used in your project, ensuring reproducible builds (e.g., poetry.lock, uv.lock) | +| **Cold Start** | The initialization time when AWS Lambda creates a new execution environment for your function, including loading your deployment package | +| **SAM (Serverless Application Model)** | AWS framework for building serverless applications, providing templates and CLI tools for deploying Lambda functions and related resources | +| **CDK (Cloud Development Kit)** | AWS framework for defining cloud infrastructure using familiar programming languages, enabling infrastructure as code for Lambda deployments | + +## Guide sections + +This guide is organized into focused sections to help you find exactly what you need: + +### 📚 Fundamentals + +* **[Getting started](getting-started.md)** - Prerequisites, tool selection, and basic setup +* **[Cross-platform builds](cross-platform.md)** - Handle architecture differences and compiled dependencies + +### 🔧 Build tools + +* **[Build with pip](build-tools.md#pip)** - Simple, universal package management +* **[Build with uv](build-tools.md#uv)** - Extremely fast Rust-based package manager +* **[Build with Poetry](build-tools.md#poetry)** - Modern dependency management with lock files +* **[Build with SAM](build-tools.md#sam)** - AWS Serverless Application Model integration +* **[Build with CDK](build-tools.md#cdk)** - Infrastructure as code with type safety +* **[Build with Pants](build-tools.md#pants)** - Advanced build system for monorepos + +### ⚡ Advanced topics + +* **[Performance optimization](performance-optimization.md)** - Reduce cold starts and package size +* **[CI/CD integration](cicd-integration.md)** - Automate builds with GitHub Actions and CodeBuild +* **[Troubleshooting](troubleshooting.md)** - Common issues and solutions diff --git a/docs/build_recipes/performance-optimization.md b/docs/build_recipes/performance-optimization.md new file mode 100644 index 00000000000..22431999d47 --- /dev/null +++ b/docs/build_recipes/performance-optimization.md @@ -0,0 +1,34 @@ +--- +title: Performance Optimization +description: Optimize Lambda functions for better performance and reduced costs +--- + + + +Optimize your Lambda functions for better performance, reduced cold start times, and lower costs. These techniques help minimize package size, improve startup speed, and reduce memory usage. + +## Reduce cold start times + +1. **Minimize package size** by excluding unnecessary files +2. **Use compiled dependencies** when possible +3. **Leverage Lambda SnapStart** or **Provisioned concurrency** when possible + +## Build optimization + +=== "Exclude unnecessary files" + + ```bash + --8<-- "examples/build_recipes/build_optimization/optimize-package.sh" + ``` + +=== "Layer optimization" + + ```bash + --8<-- "examples/build_recipes/build_optimization/optimize-layer.sh" + ``` + +=== "Advanced optimization with debug symbol removal" + + ```bash + --8<-- "examples/build_recipes/build_optimization/optimize-advanced.sh" + ``` diff --git a/docs/build_recipes/troubleshooting.md b/docs/build_recipes/troubleshooting.md new file mode 100644 index 00000000000..aece222f746 --- /dev/null +++ b/docs/build_recipes/troubleshooting.md @@ -0,0 +1,79 @@ +--- +title: Troubleshooting +description: Common issues and solutions when building Lambda packages +--- + + + +## Common issues and solutions + +This section covers the most frequent issues encountered when building and deploying Lambda functions with Powertools for AWS Lambda (Python). Each issue includes symptoms to help identify the problem and practical solutions with working code examples. + +### Package size issues + +???+ warning "Lambda deployment package too large (>50MB unzipped)" + **Symptoms:** + - `RequestEntityTooLargeException` during deployment + - Slow cold starts + - High memory usage + + **Solutions:** + ```bash + --8<-- "examples/build_recipes/troubleshooting/optimize-package-size.sh" + ``` + +### Import and runtime errors + +???+ error "ModuleNotFoundError or ImportError" + **Symptoms:** + - `ModuleNotFoundError: No module named 'aws_lambda_powertools'` + - Function fails at runtime with import errors + + **Solutions:** + ```bash + --8<-- "examples/build_recipes/troubleshooting/debug-import-errors.sh" + ``` + +???+ error "Architecture mismatch errors" + **Symptoms:** + - `ImportError: /lib64/libc.so.6: version GLIBC_2.XX not found` + - Compiled extensions fail to load + + **Solutions:** + ```bash + --8<-- "examples/build_recipes/troubleshooting/fix-architecture-mismatch.sh" + ``` + +### Performance issues + +???+ warning "Slow cold starts" + **Symptoms:** + - High initialization duration in CloudWatch logs + - Timeouts on first invocation + + **Solutions:** + ```bash + --8<-- "examples/build_recipes/troubleshooting/optimize-cold-starts.sh" + ``` + +### Build and deployment issues + +???+ error "Build inconsistencies across environments" + **Symptoms:** + - Works locally but fails in CI/CD + - Different behavior between team members + + **Solutions:** + ```bash + --8<-- "examples/build_recipes/troubleshooting/fix-build-inconsistencies.sh" + ``` + +???+ error "Layer compatibility issues" + **Symptoms:** + - Layer not found or incompatible runtime + - Version conflicts between layer and function dependencies + + **Solutions:** + ```bash + --8<-- "examples/build_recipes/troubleshooting/fix-layer-compatibility.sh" + ``` diff --git a/docs/contributing/getting_started.md b/docs/contributing/getting_started.md index 3cdcc6b1ddc..3ee11c93c32 100644 --- a/docs/contributing/getting_started.md +++ b/docs/contributing/getting_started.md @@ -17,7 +17,7 @@ graph LR ## Types of contributions -We consider any contribution that help this project improve everyone's experience to be valid, as long as you agree with our [tenets](../index.md#tenets){target="_blank"}, [licensing](../../LICENSE){target="_blank"}, and [Code of Conduct](#code-of-conduct). +We consider any contribution that help this project improve everyone's experience to be valid, as long as you agree with our [tenets](../index.md#tenets){target="_blank"}, [licensing](https://github.com/aws-powertools/powertools-lambda-python/blob/develop/LICENSE){target="_blank"}, and [Code of Conduct](#code-of-conduct). Whether you're new contributor or a pro, we compiled a list of the common contributions to help you choose your first: diff --git a/docs/core/event_handler/api_gateway.md b/docs/core/event_handler/api_gateway.md index 3dc09f61131..af0600a9f22 100644 --- a/docs/core/event_handler/api_gateway.md +++ b/docs/core/event_handler/api_gateway.md @@ -1013,7 +1013,7 @@ These are native middlewares that may become native features depending on custom | Middleware | Purpose | | ------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------- | -| [SchemaValidationMiddleware](/lambda/python/latest/api/event_handler/middlewares/schema_validation.html){target="_blank"} | Validates API request body and response against JSON Schema, using [Validation utility](../../utilities/validation.md){target="_blank"} | +| SchemaValidationMiddleware | Validates API request body and response against JSON Schema, using [Validation utility](../../utilities/validation.md){target="_blank"} | #### Being a good citizen diff --git a/docs/core/event_handler/bedrock_agents.md b/docs/core/event_handler/bedrock_agents.md index 0e6adcd9767..1f2ca9e38b2 100644 --- a/docs/core/event_handler/bedrock_agents.md +++ b/docs/core/event_handler/bedrock_agents.md @@ -173,7 +173,7 @@ You'll need to regenerate the OpenAPI schema and update your Agent everytime you ``` 1. This ensures that it's only executed when running the file directly, and not when running on the Lambda runtime. - 2. You can use [additional options](#customizing-openapi-metadata) to customize the OpenAPI schema. + 2. You can use [additional options](#customizing-api-operations) to customize the OpenAPI schema. === "OpenAPI schema" diff --git a/docs/core/metrics.md b/docs/core/metrics.md index aa52e9b98e8..7d3dd46509d 100644 --- a/docs/core/metrics.md +++ b/docs/core/metrics.md @@ -395,7 +395,7 @@ Current providers: | Provider | Notes | | ------------------------------------- | -------------------------------------------------------- | -| [Datadog](./datadog){target="_blank"} | Uses Datadog SDK and Datadog Lambda Extension by default | +| [Datadog](./datadog.md){target="_blank"} | Uses Datadog SDK and Datadog Lambda Extension by default | ## Testing your code diff --git a/docs/includes/_layer_homepage_arm64.md b/docs/includes/_layer_homepage_arm64.md index 391ca0ebd30..204816aa6eb 100644 --- a/docs/includes/_layer_homepage_arm64.md +++ b/docs/includes/_layer_homepage_arm64.md @@ -1,182 +1,183 @@ + ??? note "Click to expand and copy any regional Lambda Layer ARN" === "Python 3.9" | Region | Layer ARN | | -------------------- | -------------------------------------------------------------------------------------------------------------------------- | - | **`af-south-1`** | **arn:aws:lambda:af-south-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python39-arm64:21**{: .copyMe}:clipboard: | - | **`ap-east-1`** | **arn:aws:lambda:ap-east-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python39-arm64:21**{: .copyMe}:clipboard: | - | **`ap-northeast-1`** | **arn:aws:lambda:ap-northeast-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python39-arm64:21**{: .copyMe}:clipboard: | - | **`ap-northeast-2`** | **arn:aws:lambda:ap-northeast-2:017000801446:layer:AWSLambdaPowertoolsPythonV3-python39-arm64:21**{: .copyMe}:clipboard: | - | **`ap-northeast-3`** | **arn:aws:lambda:ap-northeast-3:017000801446:layer:AWSLambdaPowertoolsPythonV3-python39-arm64:21**{: .copyMe}:clipboard: | - | **`ap-south-1`** | **arn:aws:lambda:ap-south-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python39-arm64:21**{: .copyMe}:clipboard: | - | **`ap-south-2`** | **arn:aws:lambda:ap-south-2:017000801446:layer:AWSLambdaPowertoolsPythonV3-python39-arm64:21**{: .copyMe}:clipboard: | - | **`ap-southeast-1`** | **arn:aws:lambda:ap-southeast-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python39-arm64:21**{: .copyMe}:clipboard: | - | **`ap-southeast-2`** | **arn:aws:lambda:ap-southeast-2:017000801446:layer:AWSLambdaPowertoolsPythonV3-python39-arm64:21**{: .copyMe}:clipboard: | - | **`ap-southeast-3`** | **arn:aws:lambda:ap-southeast-3:017000801446:layer:AWSLambdaPowertoolsPythonV3-python39-arm64:21**{: .copyMe}:clipboard: | - | **`ap-southeast-4`** | **arn:aws:lambda:ap-southeast-4:017000801446:layer:AWSLambdaPowertoolsPythonV3-python39-arm64:21**{: .copyMe}:clipboard: | - | **`ap-southeast-5`** | **arn:aws:lambda:ap-southeast-5:017000801446:layer:AWSLambdaPowertoolsPythonV3-python39-arm64:21**{: .copyMe}:clipboard: | - | **`ap-southeast-7`** | **arn:aws:lambda:ap-southeast-7:017000801446:layer:AWSLambdaPowertoolsPythonV3-python39-arm64:21**{: .copyMe}:clipboard: | - | **`ca-central-1`** | **arn:aws:lambda:ca-central-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python39-arm64:21**{: .copyMe}:clipboard: | - | **`eu-central-1`** | **arn:aws:lambda:eu-central-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python39-arm64:21**{: .copyMe}:clipboard: | - | **`eu-central-2`** | **arn:aws:lambda:eu-central-2:017000801446:layer:AWSLambdaPowertoolsPythonV3-python39-arm64:21**{: .copyMe}:clipboard: | - | **`eu-north-1`** | **arn:aws:lambda:eu-north-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python39-arm64:21**{: .copyMe}:clipboard: | - | **`eu-south-1`** | **arn:aws:lambda:eu-south-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python39-arm64:21**{: .copyMe}:clipboard: | - | **`eu-south-2`** | **arn:aws:lambda:eu-south-2:017000801446:layer:AWSLambdaPowertoolsPythonV3-python39-arm64:21**{: .copyMe}:clipboard: | - | **`eu-west-1`** | **arn:aws:lambda:eu-west-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python39-arm64:21**{: .copyMe}:clipboard: | - | **`eu-west-2`** | **arn:aws:lambda:eu-west-2:017000801446:layer:AWSLambdaPowertoolsPythonV3-python39-arm64:21**{: .copyMe}:clipboard: | - | **`eu-west-3`** | **arn:aws:lambda:eu-west-3:017000801446:layer:AWSLambdaPowertoolsPythonV3-python39-arm64:21**{: .copyMe}:clipboard: | - | **`il-central-1`** | **arn:aws:lambda:il-central-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python39-arm64:21**{: .copyMe}:clipboard: | - | **`me-central-1`** | **arn:aws:lambda:me-central-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python39-arm64:21**{: .copyMe}:clipboard: | - | **`me-south-1`** | **arn:aws:lambda:me-south-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python39-arm64:21**{: .copyMe}:clipboard: | - | **`mx-central-1`** | **arn:aws:lambda:mx-central-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python39-arm64:21**{: .copyMe}:clipboard: | - | **`sa-east-1`** | **arn:aws:lambda:sa-east-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python39-arm64:21**{: .copyMe}:clipboard: | - | **`us-east-1`** | **arn:aws:lambda:us-east-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python39-arm64:21**{: .copyMe}:clipboard: | - | **`us-east-2`** | **arn:aws:lambda:us-east-2:017000801446:layer:AWSLambdaPowertoolsPythonV3-python39-arm64:21**{: .copyMe}:clipboard: | - | **`us-west-1`** | **arn:aws:lambda:us-west-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python39-arm64:21**{: .copyMe}:clipboard: | - | **`us-west-2`** | **arn:aws:lambda:us-west-2:017000801446:layer:AWSLambdaPowertoolsPythonV3-python39-arm64:21**{: .copyMe}:clipboard: | + | **`af-south-1`** | **arn:aws:lambda:af-south-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python39-arm64:23**{: .copyMe} | + | **`ap-east-1`** | **arn:aws:lambda:ap-east-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python39-arm64:23**{: .copyMe} | + | **`ap-northeast-1`** | **arn:aws:lambda:ap-northeast-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python39-arm64:23**{: .copyMe} | + | **`ap-northeast-2`** | **arn:aws:lambda:ap-northeast-2:017000801446:layer:AWSLambdaPowertoolsPythonV3-python39-arm64:23**{: .copyMe} | + | **`ap-northeast-3`** | **arn:aws:lambda:ap-northeast-3:017000801446:layer:AWSLambdaPowertoolsPythonV3-python39-arm64:23**{: .copyMe} | + | **`ap-south-1`** | **arn:aws:lambda:ap-south-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python39-arm64:23**{: .copyMe} | + | **`ap-south-2`** | **arn:aws:lambda:ap-south-2:017000801446:layer:AWSLambdaPowertoolsPythonV3-python39-arm64:23**{: .copyMe} | + | **`ap-southeast-1`** | **arn:aws:lambda:ap-southeast-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python39-arm64:23**{: .copyMe} | + | **`ap-southeast-2`** | **arn:aws:lambda:ap-southeast-2:017000801446:layer:AWSLambdaPowertoolsPythonV3-python39-arm64:23**{: .copyMe} | + | **`ap-southeast-3`** | **arn:aws:lambda:ap-southeast-3:017000801446:layer:AWSLambdaPowertoolsPythonV3-python39-arm64:23**{: .copyMe} | + | **`ap-southeast-4`** | **arn:aws:lambda:ap-southeast-4:017000801446:layer:AWSLambdaPowertoolsPythonV3-python39-arm64:23**{: .copyMe} | + | **`ap-southeast-5`** | **arn:aws:lambda:ap-southeast-5:017000801446:layer:AWSLambdaPowertoolsPythonV3-python39-arm64:23**{: .copyMe} | + | **`ap-southeast-7`** | **arn:aws:lambda:ap-southeast-7:017000801446:layer:AWSLambdaPowertoolsPythonV3-python39-arm64:23**{: .copyMe} | + | **`ca-central-1`** | **arn:aws:lambda:ca-central-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python39-arm64:23**{: .copyMe} | + | **`eu-central-1`** | **arn:aws:lambda:eu-central-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python39-arm64:23**{: .copyMe} | + | **`eu-central-2`** | **arn:aws:lambda:eu-central-2:017000801446:layer:AWSLambdaPowertoolsPythonV3-python39-arm64:23**{: .copyMe} | + | **`eu-north-1`** | **arn:aws:lambda:eu-north-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python39-arm64:23**{: .copyMe} | + | **`eu-south-1`** | **arn:aws:lambda:eu-south-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python39-arm64:23**{: .copyMe} | + | **`eu-south-2`** | **arn:aws:lambda:eu-south-2:017000801446:layer:AWSLambdaPowertoolsPythonV3-python39-arm64:23**{: .copyMe} | + | **`eu-west-1`** | **arn:aws:lambda:eu-west-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python39-arm64:23**{: .copyMe} | + | **`eu-west-2`** | **arn:aws:lambda:eu-west-2:017000801446:layer:AWSLambdaPowertoolsPythonV3-python39-arm64:23**{: .copyMe} | + | **`eu-west-3`** | **arn:aws:lambda:eu-west-3:017000801446:layer:AWSLambdaPowertoolsPythonV3-python39-arm64:23**{: .copyMe} | + | **`il-central-1`** | **arn:aws:lambda:il-central-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python39-arm64:23**{: .copyMe} | + | **`me-central-1`** | **arn:aws:lambda:me-central-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python39-arm64:23**{: .copyMe} | + | **`me-south-1`** | **arn:aws:lambda:me-south-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python39-arm64:23**{: .copyMe} | + | **`mx-central-1`** | **arn:aws:lambda:mx-central-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python39-arm64:23**{: .copyMe} | + | **`sa-east-1`** | **arn:aws:lambda:sa-east-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python39-arm64:23**{: .copyMe} | + | **`us-east-1`** | **arn:aws:lambda:us-east-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python39-arm64:23**{: .copyMe} | + | **`us-east-2`** | **arn:aws:lambda:us-east-2:017000801446:layer:AWSLambdaPowertoolsPythonV3-python39-arm64:23**{: .copyMe} | + | **`us-west-1`** | **arn:aws:lambda:us-west-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python39-arm64:23**{: .copyMe} | + | **`us-west-2`** | **arn:aws:lambda:us-west-2:017000801446:layer:AWSLambdaPowertoolsPythonV3-python39-arm64:23**{: .copyMe} | === "Python 3.10" | Region | Layer ARN | | -------------------- | --------------------------------------------------------------------------------------------------------------- | - | **`af-south-1`** | **arn:aws:lambda:af-south-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python310-arm64:21**{: .copyMe}:clipboard: | - | **`ap-east-1`** | **arn:aws:lambda:ap-east-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python310-arm64:21**{: .copyMe}:clipboard: | - | **`ap-northeast-1`** | **arn:aws:lambda:ap-northeast-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python310-arm64:21**{: .copyMe}:clipboard: | - | **`ap-northeast-2`** | **arn:aws:lambda:ap-northeast-2:017000801446:layer:AWSLambdaPowertoolsPythonV3-python310-arm64:21**{: .copyMe}:clipboard: | - | **`ap-northeast-3`** | **arn:aws:lambda:ap-northeast-3:017000801446:layer:AWSLambdaPowertoolsPythonV3-python310-arm64:21**{: .copyMe}:clipboard: | - | **`ap-south-1`** | **arn:aws:lambda:ap-south-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python310-arm64:21**{: .copyMe}:clipboard: | - | **`ap-south-2`** | **arn:aws:lambda:ap-south-2:017000801446:layer:AWSLambdaPowertoolsPythonV3-python310-arm64:21**{: .copyMe}:clipboard: | - | **`ap-southeast-1`** | **arn:aws:lambda:ap-southeast-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python310-arm64:21**{: .copyMe}:clipboard: | - | **`ap-southeast-2`** | **arn:aws:lambda:ap-southeast-2:017000801446:layer:AWSLambdaPowertoolsPythonV3-python310-arm64:21**{: .copyMe}:clipboard: | - | **`ap-southeast-3`** | **arn:aws:lambda:ap-southeast-3:017000801446:layer:AWSLambdaPowertoolsPythonV3-python310-arm64:21**{: .copyMe}:clipboard: | - | **`ap-southeast-4`** | **arn:aws:lambda:ap-southeast-4:017000801446:layer:AWSLambdaPowertoolsPythonV3-python310-arm64:21**{: .copyMe}:clipboard: | - | **`ap-southeast-5`** | **arn:aws:lambda:ap-southeast-5:017000801446:layer:AWSLambdaPowertoolsPythonV3-python310-arm64:21**{: .copyMe}:clipboard: | - | **`ap-southeast-7`** | **arn:aws:lambda:ap-southeast-7:017000801446:layer:AWSLambdaPowertoolsPythonV3-python310-arm64:21**{: .copyMe}:clipboard: | - | **`ca-central-1`** | **arn:aws:lambda:ca-central-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python310-arm64:21**{: .copyMe}:clipboard: | - | **`eu-central-1`** | **arn:aws:lambda:eu-central-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python310-arm64:21**{: .copyMe}:clipboard: | - | **`eu-central-2`** | **arn:aws:lambda:eu-central-2:017000801446:layer:AWSLambdaPowertoolsPythonV3-python310-arm64:21**{: .copyMe}:clipboard: | - | **`eu-north-1`** | **arn:aws:lambda:eu-north-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python310-arm64:21**{: .copyMe}:clipboard: | - | **`eu-south-1`** | **arn:aws:lambda:eu-south-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python310-arm64:21**{: .copyMe}:clipboard: | - | **`eu-south-2`** | **arn:aws:lambda:eu-south-2:017000801446:layer:AWSLambdaPowertoolsPythonV3-python310-arm64:21**{: .copyMe}:clipboard: | - | **`eu-west-1`** | **arn:aws:lambda:eu-west-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python310-arm64:21**{: .copyMe}:clipboard: | - | **`eu-west-2`** | **arn:aws:lambda:eu-west-2:017000801446:layer:AWSLambdaPowertoolsPythonV3-python310-arm64:21**{: .copyMe}:clipboard: | - | **`eu-west-3`** | **arn:aws:lambda:eu-west-3:017000801446:layer:AWSLambdaPowertoolsPythonV3-python310-arm64:21**{: .copyMe}:clipboard: | - | **`il-central-1`** | **arn:aws:lambda:il-central-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python310-arm64:21**{: .copyMe}:clipboard: | - | **`me-central-1`** | **arn:aws:lambda:me-central-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python310-arm64:21**{: .copyMe}:clipboard: | - | **`me-south-1`** | **arn:aws:lambda:me-south-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python310-arm64:21**{: .copyMe}:clipboard: | - | **`mx-central-1`** | **arn:aws:lambda:mx-central-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python310-arm64:21**{: .copyMe}:clipboard: | - | **`sa-east-1`** | **arn:aws:lambda:sa-east-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python310-arm64:21**{: .copyMe}:clipboard: | - | **`us-east-1`** | **arn:aws:lambda:us-east-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python310-arm64:21**{: .copyMe}:clipboard: | - | **`us-east-2`** | **arn:aws:lambda:us-east-2:017000801446:layer:AWSLambdaPowertoolsPythonV3-python310-arm64:21**{: .copyMe}:clipboard: | - | **`us-west-1`** | **arn:aws:lambda:us-west-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python310-arm64:21**{: .copyMe}:clipboard: | - | **`us-west-2`** | **arn:aws:lambda:us-west-2:017000801446:layer:AWSLambdaPowertoolsPythonV3-python310-arm64:21**{: .copyMe}:clipboard: | + | **`af-south-1`** | **arn:aws:lambda:af-south-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python310-arm64:23**{: .copyMe} | + | **`ap-east-1`** | **arn:aws:lambda:ap-east-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python310-arm64:23**{: .copyMe} | + | **`ap-northeast-1`** | **arn:aws:lambda:ap-northeast-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python310-arm64:23**{: .copyMe} | + | **`ap-northeast-2`** | **arn:aws:lambda:ap-northeast-2:017000801446:layer:AWSLambdaPowertoolsPythonV3-python310-arm64:23**{: .copyMe} | + | **`ap-northeast-3`** | **arn:aws:lambda:ap-northeast-3:017000801446:layer:AWSLambdaPowertoolsPythonV3-python310-arm64:23**{: .copyMe} | + | **`ap-south-1`** | **arn:aws:lambda:ap-south-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python310-arm64:23**{: .copyMe} | + | **`ap-south-2`** | **arn:aws:lambda:ap-south-2:017000801446:layer:AWSLambdaPowertoolsPythonV3-python310-arm64:23**{: .copyMe} | + | **`ap-southeast-1`** | **arn:aws:lambda:ap-southeast-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python310-arm64:23**{: .copyMe} | + | **`ap-southeast-2`** | **arn:aws:lambda:ap-southeast-2:017000801446:layer:AWSLambdaPowertoolsPythonV3-python310-arm64:23**{: .copyMe} | + | **`ap-southeast-3`** | **arn:aws:lambda:ap-southeast-3:017000801446:layer:AWSLambdaPowertoolsPythonV3-python310-arm64:23**{: .copyMe} | + | **`ap-southeast-4`** | **arn:aws:lambda:ap-southeast-4:017000801446:layer:AWSLambdaPowertoolsPythonV3-python310-arm64:23**{: .copyMe} | + | **`ap-southeast-5`** | **arn:aws:lambda:ap-southeast-5:017000801446:layer:AWSLambdaPowertoolsPythonV3-python310-arm64:23**{: .copyMe} | + | **`ap-southeast-7`** | **arn:aws:lambda:ap-southeast-7:017000801446:layer:AWSLambdaPowertoolsPythonV3-python310-arm64:23**{: .copyMe} | + | **`ca-central-1`** | **arn:aws:lambda:ca-central-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python310-arm64:23**{: .copyMe} | + | **`eu-central-1`** | **arn:aws:lambda:eu-central-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python310-arm64:23**{: .copyMe} | + | **`eu-central-2`** | **arn:aws:lambda:eu-central-2:017000801446:layer:AWSLambdaPowertoolsPythonV3-python310-arm64:23**{: .copyMe} | + | **`eu-north-1`** | **arn:aws:lambda:eu-north-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python310-arm64:23**{: .copyMe} | + | **`eu-south-1`** | **arn:aws:lambda:eu-south-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python310-arm64:23**{: .copyMe} | + | **`eu-south-2`** | **arn:aws:lambda:eu-south-2:017000801446:layer:AWSLambdaPowertoolsPythonV3-python310-arm64:23**{: .copyMe} | + | **`eu-west-1`** | **arn:aws:lambda:eu-west-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python310-arm64:23**{: .copyMe} | + | **`eu-west-2`** | **arn:aws:lambda:eu-west-2:017000801446:layer:AWSLambdaPowertoolsPythonV3-python310-arm64:23**{: .copyMe} | + | **`eu-west-3`** | **arn:aws:lambda:eu-west-3:017000801446:layer:AWSLambdaPowertoolsPythonV3-python310-arm64:23**{: .copyMe} | + | **`il-central-1`** | **arn:aws:lambda:il-central-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python310-arm64:23**{: .copyMe} | + | **`me-central-1`** | **arn:aws:lambda:me-central-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python310-arm64:23**{: .copyMe} | + | **`me-south-1`** | **arn:aws:lambda:me-south-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python310-arm64:23**{: .copyMe} | + | **`mx-central-1`** | **arn:aws:lambda:mx-central-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python310-arm64:23**{: .copyMe} | + | **`sa-east-1`** | **arn:aws:lambda:sa-east-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python310-arm64:23**{: .copyMe} | + | **`us-east-1`** | **arn:aws:lambda:us-east-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python310-arm64:23**{: .copyMe} | + | **`us-east-2`** | **arn:aws:lambda:us-east-2:017000801446:layer:AWSLambdaPowertoolsPythonV3-python310-arm64:23**{: .copyMe} | + | **`us-west-1`** | **arn:aws:lambda:us-west-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python310-arm64:23**{: .copyMe} | + | **`us-west-2`** | **arn:aws:lambda:us-west-2:017000801446:layer:AWSLambdaPowertoolsPythonV3-python310-arm64:23**{: .copyMe} | === "Python 3.11" | Region | Layer ARN | | -------------------- | --------------------------------------------------------------------------------------------------------------- | - | **`af-south-1`** | **arn:aws:lambda:af-south-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python311-arm64:21**{: .copyMe}:clipboard: | - | **`ap-east-1`** | **arn:aws:lambda:ap-east-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python311-arm64:21**{: .copyMe}:clipboard: | - | **`ap-northeast-1`** | **arn:aws:lambda:ap-northeast-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python311-arm64:21**{: .copyMe}:clipboard: | - | **`ap-northeast-2`** | **arn:aws:lambda:ap-northeast-2:017000801446:layer:AWSLambdaPowertoolsPythonV3-python311-arm64:21**{: .copyMe}:clipboard: | - | **`ap-northeast-3`** | **arn:aws:lambda:ap-northeast-3:017000801446:layer:AWSLambdaPowertoolsPythonV3-python311-arm64:21**{: .copyMe}:clipboard: | - | **`ap-south-1`** | **arn:aws:lambda:ap-south-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python311-arm64:21**{: .copyMe}:clipboard: | - | **`ap-south-2`** | **arn:aws:lambda:ap-south-2:017000801446:layer:AWSLambdaPowertoolsPythonV3-python311-arm64:21**{: .copyMe}:clipboard: | - | **`ap-southeast-1`** | **arn:aws:lambda:ap-southeast-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python311-arm64:21**{: .copyMe}:clipboard: | - | **`ap-southeast-2`** | **arn:aws:lambda:ap-southeast-2:017000801446:layer:AWSLambdaPowertoolsPythonV3-python311-arm64:21**{: .copyMe}:clipboard: | - | **`ap-southeast-3`** | **arn:aws:lambda:ap-southeast-3:017000801446:layer:AWSLambdaPowertoolsPythonV3-python311-arm64:21**{: .copyMe}:clipboard: | - | **`ap-southeast-4`** | **arn:aws:lambda:ap-southeast-4:017000801446:layer:AWSLambdaPowertoolsPythonV3-python311-arm64:21**{: .copyMe}:clipboard: | - | **`ap-southeast-5`** | **arn:aws:lambda:ap-southeast-5:017000801446:layer:AWSLambdaPowertoolsPythonV3-python311-arm64:21**{: .copyMe}:clipboard: | - | **`ap-southeast-7`** | **arn:aws:lambda:ap-southeast-7:017000801446:layer:AWSLambdaPowertoolsPythonV3-python311-arm64:21**{: .copyMe}:clipboard: | - | **`ca-central-1`** | **arn:aws:lambda:ca-central-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python311-arm64:21**{: .copyMe}:clipboard: | - | **`eu-central-1`** | **arn:aws:lambda:eu-central-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python311-arm64:21**{: .copyMe}:clipboard: | - | **`eu-central-2`** | **arn:aws:lambda:eu-central-2:017000801446:layer:AWSLambdaPowertoolsPythonV3-python311-arm64:21**{: .copyMe}:clipboard: | - | **`eu-north-1`** | **arn:aws:lambda:eu-north-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python311-arm64:21**{: .copyMe}:clipboard: | - | **`eu-south-1`** | **arn:aws:lambda:eu-south-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python311-arm64:21**{: .copyMe}:clipboard: | - | **`eu-south-2`** | **arn:aws:lambda:eu-south-2:017000801446:layer:AWSLambdaPowertoolsPythonV3-python311-arm64:21**{: .copyMe}:clipboard: | - | **`eu-west-1`** | **arn:aws:lambda:eu-west-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python311-arm64:21**{: .copyMe}:clipboard: | - | **`eu-west-2`** | **arn:aws:lambda:eu-west-2:017000801446:layer:AWSLambdaPowertoolsPythonV3-python311-arm64:21**{: .copyMe}:clipboard: | - | **`eu-west-3`** | **arn:aws:lambda:eu-west-3:017000801446:layer:AWSLambdaPowertoolsPythonV3-python311-arm64:21**{: .copyMe}:clipboard: | - | **`il-central-1`** | **arn:aws:lambda:il-central-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python311-arm64:21**{: .copyMe}:clipboard: | - | **`me-central-1`** | **arn:aws:lambda:me-central-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python311-arm64:21**{: .copyMe}:clipboard: | - | **`me-south-1`** | **arn:aws:lambda:me-south-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python311-arm64:21**{: .copyMe}:clipboard: | - | **`mx-central-1`** | **arn:aws:lambda:mx-central-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python311-arm64:21**{: .copyMe}:clipboard: | - | **`sa-east-1`** | **arn:aws:lambda:sa-east-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python311-arm64:21**{: .copyMe}:clipboard: | - | **`us-east-1`** | **arn:aws:lambda:us-east-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python311-arm64:21**{: .copyMe}:clipboard: | - | **`us-east-2`** | **arn:aws:lambda:us-east-2:017000801446:layer:AWSLambdaPowertoolsPythonV3-python311-arm64:21**{: .copyMe}:clipboard: | - | **`us-west-1`** | **arn:aws:lambda:us-west-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python311-arm64:21**{: .copyMe}:clipboard: | - | **`us-west-2`** | **arn:aws:lambda:us-west-2:017000801446:layer:AWSLambdaPowertoolsPythonV3-python311-arm64:21**{: .copyMe}:clipboard: | + | **`af-south-1`** | **arn:aws:lambda:af-south-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python311-arm64:23**{: .copyMe} | + | **`ap-east-1`** | **arn:aws:lambda:ap-east-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python311-arm64:23**{: .copyMe} | + | **`ap-northeast-1`** | **arn:aws:lambda:ap-northeast-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python311-arm64:23**{: .copyMe} | + | **`ap-northeast-2`** | **arn:aws:lambda:ap-northeast-2:017000801446:layer:AWSLambdaPowertoolsPythonV3-python311-arm64:23**{: .copyMe} | + | **`ap-northeast-3`** | **arn:aws:lambda:ap-northeast-3:017000801446:layer:AWSLambdaPowertoolsPythonV3-python311-arm64:23**{: .copyMe} | + | **`ap-south-1`** | **arn:aws:lambda:ap-south-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python311-arm64:23**{: .copyMe} | + | **`ap-south-2`** | **arn:aws:lambda:ap-south-2:017000801446:layer:AWSLambdaPowertoolsPythonV3-python311-arm64:23**{: .copyMe} | + | **`ap-southeast-1`** | **arn:aws:lambda:ap-southeast-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python311-arm64:23**{: .copyMe} | + | **`ap-southeast-2`** | **arn:aws:lambda:ap-southeast-2:017000801446:layer:AWSLambdaPowertoolsPythonV3-python311-arm64:23**{: .copyMe} | + | **`ap-southeast-3`** | **arn:aws:lambda:ap-southeast-3:017000801446:layer:AWSLambdaPowertoolsPythonV3-python311-arm64:23**{: .copyMe} | + | **`ap-southeast-4`** | **arn:aws:lambda:ap-southeast-4:017000801446:layer:AWSLambdaPowertoolsPythonV3-python311-arm64:23**{: .copyMe} | + | **`ap-southeast-5`** | **arn:aws:lambda:ap-southeast-5:017000801446:layer:AWSLambdaPowertoolsPythonV3-python311-arm64:23**{: .copyMe} | + | **`ap-southeast-7`** | **arn:aws:lambda:ap-southeast-7:017000801446:layer:AWSLambdaPowertoolsPythonV3-python311-arm64:23**{: .copyMe} | + | **`ca-central-1`** | **arn:aws:lambda:ca-central-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python311-arm64:23**{: .copyMe} | + | **`eu-central-1`** | **arn:aws:lambda:eu-central-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python311-arm64:23**{: .copyMe} | + | **`eu-central-2`** | **arn:aws:lambda:eu-central-2:017000801446:layer:AWSLambdaPowertoolsPythonV3-python311-arm64:23**{: .copyMe} | + | **`eu-north-1`** | **arn:aws:lambda:eu-north-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python311-arm64:23**{: .copyMe} | + | **`eu-south-1`** | **arn:aws:lambda:eu-south-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python311-arm64:23**{: .copyMe} | + | **`eu-south-2`** | **arn:aws:lambda:eu-south-2:017000801446:layer:AWSLambdaPowertoolsPythonV3-python311-arm64:23**{: .copyMe} | + | **`eu-west-1`** | **arn:aws:lambda:eu-west-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python311-arm64:23**{: .copyMe} | + | **`eu-west-2`** | **arn:aws:lambda:eu-west-2:017000801446:layer:AWSLambdaPowertoolsPythonV3-python311-arm64:23**{: .copyMe} | + | **`eu-west-3`** | **arn:aws:lambda:eu-west-3:017000801446:layer:AWSLambdaPowertoolsPythonV3-python311-arm64:23**{: .copyMe} | + | **`il-central-1`** | **arn:aws:lambda:il-central-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python311-arm64:23**{: .copyMe} | + | **`me-central-1`** | **arn:aws:lambda:me-central-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python311-arm64:23**{: .copyMe} | + | **`me-south-1`** | **arn:aws:lambda:me-south-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python311-arm64:23**{: .copyMe} | + | **`mx-central-1`** | **arn:aws:lambda:mx-central-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python311-arm64:23**{: .copyMe} | + | **`sa-east-1`** | **arn:aws:lambda:sa-east-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python311-arm64:23**{: .copyMe} | + | **`us-east-1`** | **arn:aws:lambda:us-east-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python311-arm64:23**{: .copyMe} | + | **`us-east-2`** | **arn:aws:lambda:us-east-2:017000801446:layer:AWSLambdaPowertoolsPythonV3-python311-arm64:23**{: .copyMe} | + | **`us-west-1`** | **arn:aws:lambda:us-west-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python311-arm64:23**{: .copyMe} | + | **`us-west-2`** | **arn:aws:lambda:us-west-2:017000801446:layer:AWSLambdaPowertoolsPythonV3-python311-arm64:23**{: .copyMe} | === "Python 3.12" | Region | Layer ARN | | -------------------- | --------------------------------------------------------------------------------------------------------------- | - | **`af-south-1`** | **arn:aws:lambda:af-south-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python312-arm64:21**{: .copyMe}:clipboard: | - | **`ap-east-1`** | **arn:aws:lambda:ap-east-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python312-arm64:21**{: .copyMe}:clipboard: | - | **`ap-northeast-1`** | **arn:aws:lambda:ap-northeast-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python312-arm64:21**{: .copyMe}:clipboard: | - | **`ap-northeast-2`** | **arn:aws:lambda:ap-northeast-2:017000801446:layer:AWSLambdaPowertoolsPythonV3-python312-arm64:21**{: .copyMe}:clipboard: | - | **`ap-northeast-3`** | **arn:aws:lambda:ap-northeast-3:017000801446:layer:AWSLambdaPowertoolsPythonV3-python312-arm64:21**{: .copyMe}:clipboard: | - | **`ap-south-1`** | **arn:aws:lambda:ap-south-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python312-arm64:21**{: .copyMe}:clipboard: | - | **`ap-south-2`** | **arn:aws:lambda:ap-south-2:017000801446:layer:AWSLambdaPowertoolsPythonV3-python312-arm64:21**{: .copyMe}:clipboard: | - | **`ap-southeast-1`** | **arn:aws:lambda:ap-southeast-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python312-arm64:21**{: .copyMe}:clipboard: | - | **`ap-southeast-2`** | **arn:aws:lambda:ap-southeast-2:017000801446:layer:AWSLambdaPowertoolsPythonV3-python312-arm64:21**{: .copyMe}:clipboard: | - | **`ap-southeast-3`** | **arn:aws:lambda:ap-southeast-3:017000801446:layer:AWSLambdaPowertoolsPythonV3-python312-arm64:21**{: .copyMe}:clipboard: | - | **`ap-southeast-4`** | **arn:aws:lambda:ap-southeast-4:017000801446:layer:AWSLambdaPowertoolsPythonV3-python312-arm64:21**{: .copyMe}:clipboard: | - | **`ap-southeast-5`** | **arn:aws:lambda:ap-southeast-5:017000801446:layer:AWSLambdaPowertoolsPythonV3-python312-arm64:21**{: .copyMe}:clipboard: | - | **`ap-southeast-7`** | **arn:aws:lambda:ap-southeast-7:017000801446:layer:AWSLambdaPowertoolsPythonV3-python312-arm64:21**{: .copyMe}:clipboard: | - | **`ca-central-1`** | **arn:aws:lambda:ca-central-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python312-arm64:21**{: .copyMe}:clipboard: | - | **`eu-central-1`** | **arn:aws:lambda:eu-central-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python312-arm64:21**{: .copyMe}:clipboard: | - | **`eu-central-2`** | **arn:aws:lambda:eu-central-2:017000801446:layer:AWSLambdaPowertoolsPythonV3-python312-arm64:21**{: .copyMe}:clipboard: | - | **`eu-north-1`** | **arn:aws:lambda:eu-north-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python312-arm64:21**{: .copyMe}:clipboard: | - | **`eu-south-1`** | **arn:aws:lambda:eu-south-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python312-arm64:21**{: .copyMe}:clipboard: | - | **`eu-south-2`** | **arn:aws:lambda:eu-south-2:017000801446:layer:AWSLambdaPowertoolsPythonV3-python312-arm64:21**{: .copyMe}:clipboard: | - | **`eu-west-1`** | **arn:aws:lambda:eu-west-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python312-arm64:21**{: .copyMe}:clipboard: | - | **`eu-west-2`** | **arn:aws:lambda:eu-west-2:017000801446:layer:AWSLambdaPowertoolsPythonV3-python312-arm64:21**{: .copyMe}:clipboard: | - | **`eu-west-3`** | **arn:aws:lambda:eu-west-3:017000801446:layer:AWSLambdaPowertoolsPythonV3-python312-arm64:21**{: .copyMe}:clipboard: | - | **`il-central-1`** | **arn:aws:lambda:il-central-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python312-arm64:21**{: .copyMe}:clipboard: | - | **`me-central-1`** | **arn:aws:lambda:me-central-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python312-arm64:21**{: .copyMe}:clipboard: | - | **`me-south-1`** | **arn:aws:lambda:me-south-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python312-arm64:21**{: .copyMe}:clipboard: | - | **`mx-central-1`** | **arn:aws:lambda:mx-central-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python312-arm64:21**{: .copyMe}:clipboard: | - | **`sa-east-1`** | **arn:aws:lambda:sa-east-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python312-arm64:21**{: .copyMe}:clipboard: | - | **`us-east-1`** | **arn:aws:lambda:us-east-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python312-arm64:21**{: .copyMe}:clipboard: | - | **`us-east-2`** | **arn:aws:lambda:us-east-2:017000801446:layer:AWSLambdaPowertoolsPythonV3-python312-arm64:21**{: .copyMe}:clipboard: | - | **`us-west-1`** | **arn:aws:lambda:us-west-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python312-arm64:21**{: .copyMe}:clipboard: | - | **`us-west-2`** | **arn:aws:lambda:us-west-2:017000801446:layer:AWSLambdaPowertoolsPythonV3-python312-arm64:21**{: .copyMe}:clipboard: | + | **`af-south-1`** | **arn:aws:lambda:af-south-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python312-arm64:23**{: .copyMe} | + | **`ap-east-1`** | **arn:aws:lambda:ap-east-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python312-arm64:23**{: .copyMe} | + | **`ap-northeast-1`** | **arn:aws:lambda:ap-northeast-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python312-arm64:23**{: .copyMe} | + | **`ap-northeast-2`** | **arn:aws:lambda:ap-northeast-2:017000801446:layer:AWSLambdaPowertoolsPythonV3-python312-arm64:23**{: .copyMe} | + | **`ap-northeast-3`** | **arn:aws:lambda:ap-northeast-3:017000801446:layer:AWSLambdaPowertoolsPythonV3-python312-arm64:23**{: .copyMe} | + | **`ap-south-1`** | **arn:aws:lambda:ap-south-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python312-arm64:23**{: .copyMe} | + | **`ap-south-2`** | **arn:aws:lambda:ap-south-2:017000801446:layer:AWSLambdaPowertoolsPythonV3-python312-arm64:23**{: .copyMe} | + | **`ap-southeast-1`** | **arn:aws:lambda:ap-southeast-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python312-arm64:23**{: .copyMe} | + | **`ap-southeast-2`** | **arn:aws:lambda:ap-southeast-2:017000801446:layer:AWSLambdaPowertoolsPythonV3-python312-arm64:23**{: .copyMe} | + | **`ap-southeast-3`** | **arn:aws:lambda:ap-southeast-3:017000801446:layer:AWSLambdaPowertoolsPythonV3-python312-arm64:23**{: .copyMe} | + | **`ap-southeast-4`** | **arn:aws:lambda:ap-southeast-4:017000801446:layer:AWSLambdaPowertoolsPythonV3-python312-arm64:23**{: .copyMe} | + | **`ap-southeast-5`** | **arn:aws:lambda:ap-southeast-5:017000801446:layer:AWSLambdaPowertoolsPythonV3-python312-arm64:23**{: .copyMe} | + | **`ap-southeast-7`** | **arn:aws:lambda:ap-southeast-7:017000801446:layer:AWSLambdaPowertoolsPythonV3-python312-arm64:23**{: .copyMe} | + | **`ca-central-1`** | **arn:aws:lambda:ca-central-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python312-arm64:23**{: .copyMe} | + | **`eu-central-1`** | **arn:aws:lambda:eu-central-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python312-arm64:23**{: .copyMe} | + | **`eu-central-2`** | **arn:aws:lambda:eu-central-2:017000801446:layer:AWSLambdaPowertoolsPythonV3-python312-arm64:23**{: .copyMe} | + | **`eu-north-1`** | **arn:aws:lambda:eu-north-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python312-arm64:23**{: .copyMe} | + | **`eu-south-1`** | **arn:aws:lambda:eu-south-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python312-arm64:23**{: .copyMe} | + | **`eu-south-2`** | **arn:aws:lambda:eu-south-2:017000801446:layer:AWSLambdaPowertoolsPythonV3-python312-arm64:23**{: .copyMe} | + | **`eu-west-1`** | **arn:aws:lambda:eu-west-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python312-arm64:23**{: .copyMe} | + | **`eu-west-2`** | **arn:aws:lambda:eu-west-2:017000801446:layer:AWSLambdaPowertoolsPythonV3-python312-arm64:23**{: .copyMe} | + | **`eu-west-3`** | **arn:aws:lambda:eu-west-3:017000801446:layer:AWSLambdaPowertoolsPythonV3-python312-arm64:23**{: .copyMe} | + | **`il-central-1`** | **arn:aws:lambda:il-central-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python312-arm64:23**{: .copyMe} | + | **`me-central-1`** | **arn:aws:lambda:me-central-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python312-arm64:23**{: .copyMe} | + | **`me-south-1`** | **arn:aws:lambda:me-south-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python312-arm64:23**{: .copyMe} | + | **`mx-central-1`** | **arn:aws:lambda:mx-central-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python312-arm64:23**{: .copyMe} | + | **`sa-east-1`** | **arn:aws:lambda:sa-east-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python312-arm64:23**{: .copyMe} | + | **`us-east-1`** | **arn:aws:lambda:us-east-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python312-arm64:23**{: .copyMe} | + | **`us-east-2`** | **arn:aws:lambda:us-east-2:017000801446:layer:AWSLambdaPowertoolsPythonV3-python312-arm64:23**{: .copyMe} | + | **`us-west-1`** | **arn:aws:lambda:us-west-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python312-arm64:23**{: .copyMe} | + | **`us-west-2`** | **arn:aws:lambda:us-west-2:017000801446:layer:AWSLambdaPowertoolsPythonV3-python312-arm64:23**{: .copyMe} | === "Python 3.13" | Region | Layer ARN | | -------------------- | --------------------------------------------------------------------------------------------------------------- | - | **`af-south-1`** | **arn:aws:lambda:af-south-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python313-arm64:21**{: .copyMe}:clipboard: | - | **`ap-east-1`** | **arn:aws:lambda:ap-east-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python313-arm64:21**{: .copyMe}:clipboard: | - | **`ap-northeast-1`** | **arn:aws:lambda:ap-northeast-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python313-arm64:21**{: .copyMe}:clipboard: | - | **`ap-northeast-2`** | **arn:aws:lambda:ap-northeast-2:017000801446:layer:AWSLambdaPowertoolsPythonV3-python313-arm64:21**{: .copyMe}:clipboard: | - | **`ap-northeast-3`** | **arn:aws:lambda:ap-northeast-3:017000801446:layer:AWSLambdaPowertoolsPythonV3-python313-arm64:21**{: .copyMe}:clipboard: | - | **`ap-south-1`** | **arn:aws:lambda:ap-south-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python313-arm64:21**{: .copyMe}:clipboard: | - | **`ap-south-2`** | **arn:aws:lambda:ap-south-2:017000801446:layer:AWSLambdaPowertoolsPythonV3-python313-arm64:21**{: .copyMe}:clipboard: | - | **`ap-southeast-1`** | **arn:aws:lambda:ap-southeast-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python313-arm64:21**{: .copyMe}:clipboard: | - | **`ap-southeast-2`** | **arn:aws:lambda:ap-southeast-2:017000801446:layer:AWSLambdaPowertoolsPythonV3-python313-arm64:21**{: .copyMe}:clipboard: | - | **`ap-southeast-3`** | **arn:aws:lambda:ap-southeast-3:017000801446:layer:AWSLambdaPowertoolsPythonV3-python313-arm64:21**{: .copyMe}:clipboard: | - | **`ap-southeast-4`** | **arn:aws:lambda:ap-southeast-4:017000801446:layer:AWSLambdaPowertoolsPythonV3-python313-arm64:21**{: .copyMe}:clipboard: | - | **`ap-southeast-5`** | **arn:aws:lambda:ap-southeast-5:017000801446:layer:AWSLambdaPowertoolsPythonV3-python313-arm64:21**{: .copyMe}:clipboard: | - | **`ap-southeast-7`** | **arn:aws:lambda:ap-southeast-7:017000801446:layer:AWSLambdaPowertoolsPythonV3-python313-arm64:21**{: .copyMe}:clipboard: | - | **`ca-central-1`** | **arn:aws:lambda:ca-central-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python313-arm64:21**{: .copyMe}:clipboard: | - | **`eu-central-1`** | **arn:aws:lambda:eu-central-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python313-arm64:21**{: .copyMe}:clipboard: | - | **`eu-central-2`** | **arn:aws:lambda:eu-central-2:017000801446:layer:AWSLambdaPowertoolsPythonV3-python313-arm64:21**{: .copyMe}:clipboard: | - | **`eu-north-1`** | **arn:aws:lambda:eu-north-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python313-arm64:21**{: .copyMe}:clipboard: | - | **`eu-south-1`** | **arn:aws:lambda:eu-south-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python313-arm64:21**{: .copyMe}:clipboard: | - | **`eu-south-2`** | **arn:aws:lambda:eu-south-2:017000801446:layer:AWSLambdaPowertoolsPythonV3-python313-arm64:21**{: .copyMe}:clipboard: | - | **`eu-west-1`** | **arn:aws:lambda:eu-west-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python313-arm64:21**{: .copyMe}:clipboard: | - | **`eu-west-2`** | **arn:aws:lambda:eu-west-2:017000801446:layer:AWSLambdaPowertoolsPythonV3-python313-arm64:21**{: .copyMe}:clipboard: | - | **`eu-west-3`** | **arn:aws:lambda:eu-west-3:017000801446:layer:AWSLambdaPowertoolsPythonV3-python313-arm64:21**{: .copyMe}:clipboard: | - | **`il-central-1`** | **arn:aws:lambda:il-central-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python313-arm64:21**{: .copyMe}:clipboard: | - | **`me-central-1`** | **arn:aws:lambda:me-central-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python313-arm64:21**{: .copyMe}:clipboard: | - | **`me-south-1`** | **arn:aws:lambda:me-south-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python313-arm64:21**{: .copyMe}:clipboard: | - | **`mx-central-1`** | **arn:aws:lambda:mx-central-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python313-arm64:21**{: .copyMe}:clipboard: | - | **`sa-east-1`** | **arn:aws:lambda:sa-east-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python313-arm64:21**{: .copyMe}:clipboard: | - | **`us-east-1`** | **arn:aws:lambda:us-east-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python313-arm64:21**{: .copyMe}:clipboard: | - | **`us-east-2`** | **arn:aws:lambda:us-east-2:017000801446:layer:AWSLambdaPowertoolsPythonV3-python313-arm64:21**{: .copyMe}:clipboard: | - | **`us-west-1`** | **arn:aws:lambda:us-west-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python313-arm64:21**{: .copyMe}:clipboard: | - | **`us-west-2`** | **arn:aws:lambda:us-west-2:017000801446:layer:AWSLambdaPowertoolsPythonV3-python313-arm64:21**{: .copyMe}:clipboard: | + | **`af-south-1`** | **arn:aws:lambda:af-south-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python313-arm64:23**{: .copyMe} | + | **`ap-east-1`** | **arn:aws:lambda:ap-east-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python313-arm64:23**{: .copyMe} | + | **`ap-northeast-1`** | **arn:aws:lambda:ap-northeast-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python313-arm64:23**{: .copyMe} | + | **`ap-northeast-2`** | **arn:aws:lambda:ap-northeast-2:017000801446:layer:AWSLambdaPowertoolsPythonV3-python313-arm64:23**{: .copyMe} | + | **`ap-northeast-3`** | **arn:aws:lambda:ap-northeast-3:017000801446:layer:AWSLambdaPowertoolsPythonV3-python313-arm64:23**{: .copyMe} | + | **`ap-south-1`** | **arn:aws:lambda:ap-south-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python313-arm64:23**{: .copyMe} | + | **`ap-south-2`** | **arn:aws:lambda:ap-south-2:017000801446:layer:AWSLambdaPowertoolsPythonV3-python313-arm64:23**{: .copyMe} | + | **`ap-southeast-1`** | **arn:aws:lambda:ap-southeast-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python313-arm64:23**{: .copyMe} | + | **`ap-southeast-2`** | **arn:aws:lambda:ap-southeast-2:017000801446:layer:AWSLambdaPowertoolsPythonV3-python313-arm64:23**{: .copyMe} | + | **`ap-southeast-3`** | **arn:aws:lambda:ap-southeast-3:017000801446:layer:AWSLambdaPowertoolsPythonV3-python313-arm64:23**{: .copyMe} | + | **`ap-southeast-4`** | **arn:aws:lambda:ap-southeast-4:017000801446:layer:AWSLambdaPowertoolsPythonV3-python313-arm64:23**{: .copyMe} | + | **`ap-southeast-5`** | **arn:aws:lambda:ap-southeast-5:017000801446:layer:AWSLambdaPowertoolsPythonV3-python313-arm64:23**{: .copyMe} | + | **`ap-southeast-7`** | **arn:aws:lambda:ap-southeast-7:017000801446:layer:AWSLambdaPowertoolsPythonV3-python313-arm64:23**{: .copyMe} | + | **`ca-central-1`** | **arn:aws:lambda:ca-central-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python313-arm64:23**{: .copyMe} | + | **`eu-central-1`** | **arn:aws:lambda:eu-central-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python313-arm64:23**{: .copyMe} | + | **`eu-central-2`** | **arn:aws:lambda:eu-central-2:017000801446:layer:AWSLambdaPowertoolsPythonV3-python313-arm64:23**{: .copyMe} | + | **`eu-north-1`** | **arn:aws:lambda:eu-north-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python313-arm64:23**{: .copyMe} | + | **`eu-south-1`** | **arn:aws:lambda:eu-south-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python313-arm64:23**{: .copyMe} | + | **`eu-south-2`** | **arn:aws:lambda:eu-south-2:017000801446:layer:AWSLambdaPowertoolsPythonV3-python313-arm64:23**{: .copyMe} | + | **`eu-west-1`** | **arn:aws:lambda:eu-west-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python313-arm64:23**{: .copyMe} | + | **`eu-west-2`** | **arn:aws:lambda:eu-west-2:017000801446:layer:AWSLambdaPowertoolsPythonV3-python313-arm64:23**{: .copyMe} | + | **`eu-west-3`** | **arn:aws:lambda:eu-west-3:017000801446:layer:AWSLambdaPowertoolsPythonV3-python313-arm64:23**{: .copyMe} | + | **`il-central-1`** | **arn:aws:lambda:il-central-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python313-arm64:23**{: .copyMe} | + | **`me-central-1`** | **arn:aws:lambda:me-central-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python313-arm64:23**{: .copyMe} | + | **`me-south-1`** | **arn:aws:lambda:me-south-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python313-arm64:23**{: .copyMe} | + | **`mx-central-1`** | **arn:aws:lambda:mx-central-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python313-arm64:23**{: .copyMe} | + | **`sa-east-1`** | **arn:aws:lambda:sa-east-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python313-arm64:23**{: .copyMe} | + | **`us-east-1`** | **arn:aws:lambda:us-east-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python313-arm64:23**{: .copyMe} | + | **`us-east-2`** | **arn:aws:lambda:us-east-2:017000801446:layer:AWSLambdaPowertoolsPythonV3-python313-arm64:23**{: .copyMe} | + | **`us-west-1`** | **arn:aws:lambda:us-west-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python313-arm64:23**{: .copyMe} | + | **`us-west-2`** | **arn:aws:lambda:us-west-2:017000801446:layer:AWSLambdaPowertoolsPythonV3-python313-arm64:23**{: .copyMe} | diff --git a/docs/includes/_layer_homepage_x86.md b/docs/includes/_layer_homepage_x86.md index c9e66bb9cb0..46f2abae31e 100644 --- a/docs/includes/_layer_homepage_x86.md +++ b/docs/includes/_layer_homepage_x86.md @@ -5,183 +5,183 @@ | Region | Layer ARN | | -------------------- | --------------------------------------------------------------------------------------------------------- | - | **`af-south-1`** | **arn:aws:lambda:af-south-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python39-x86_64:21**{: .copyMe}:clipboard: | - | **`ap-east-1`** | **arn:aws:lambda:ap-east-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python39-x86_64:21**{: .copyMe}:clipboard: | - | **`ap-northeast-1`** | **arn:aws:lambda:ap-northeast-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python39-x86_64:21**{: .copyMe}:clipboard: | - | **`ap-northeast-2`** | **arn:aws:lambda:ap-northeast-2:017000801446:layer:AWSLambdaPowertoolsPythonV3-python39-x86_64:21**{: .copyMe}:clipboard: | - | **`ap-northeast-3`** | **arn:aws:lambda:ap-northeast-3:017000801446:layer:AWSLambdaPowertoolsPythonV3-python39-x86_64:21**{: .copyMe}:clipboard: | - | **`ap-south-1`** | **arn:aws:lambda:ap-south-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python39-x86_64:21**{: .copyMe}:clipboard: | - | **`ap-south-2`** | **arn:aws:lambda:ap-south-2:017000801446:layer:AWSLambdaPowertoolsPythonV3-python39-x86_64:21**{: .copyMe}:clipboard: | - | **`ap-southeast-1`** | **arn:aws:lambda:ap-southeast-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python39-x86_64:21**{: .copyMe}:clipboard: | - | **`ap-southeast-2`** | **arn:aws:lambda:ap-southeast-2:017000801446:layer:AWSLambdaPowertoolsPythonV3-python39-x86_64:21**{: .copyMe}:clipboard: | - | **`ap-southeast-3`** | **arn:aws:lambda:ap-southeast-3:017000801446:layer:AWSLambdaPowertoolsPythonV3-python39-x86_64:21**{: .copyMe}:clipboard: | - | **`ap-southeast-4`** | **arn:aws:lambda:ap-southeast-4:017000801446:layer:AWSLambdaPowertoolsPythonV3-python39-x86_64:21**{: .copyMe}:clipboard: | - | **`ap-southeast-5`** | **arn:aws:lambda:ap-southeast-5:017000801446:layer:AWSLambdaPowertoolsPythonV3-python39-x86_64:21**{: .copyMe}:clipboard: | - | **`ap-southeast-7`** | **arn:aws:lambda:ap-southeast-7:017000801446:layer:AWSLambdaPowertoolsPythonV3-python39-x86_64:21**{: .copyMe}:clipboard: | - | **`ca-central-1`** | **arn:aws:lambda:ca-central-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python39-x86_64:21**{: .copyMe}:clipboard: | - | **`ca-west-1`** | **arn:aws:lambda:ca-west-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python39-x86_64:21**{: .copyMe}:clipboard: | - | **`eu-central-1`** | **arn:aws:lambda:eu-central-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python39-x86_64:21**{: .copyMe}:clipboard: | - | **`eu-central-2`** | **arn:aws:lambda:eu-central-2:017000801446:layer:AWSLambdaPowertoolsPythonV3-python39-x86_64:21**{: .copyMe}:clipboard: | - | **`eu-north-1`** | **arn:aws:lambda:eu-north-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python39-x86_64:21**{: .copyMe}:clipboard: | - | **`eu-south-1`** | **arn:aws:lambda:eu-south-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python39-x86_64:21**{: .copyMe}:clipboard: | - | **`eu-south-2`** | **arn:aws:lambda:eu-south-2:017000801446:layer:AWSLambdaPowertoolsPythonV3-python39-x86_64:21**{: .copyMe}:clipboard: | - | **`eu-west-1`** | **arn:aws:lambda:eu-west-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python39-x86_64:21**{: .copyMe}:clipboard: | - | **`eu-west-2`** | **arn:aws:lambda:eu-west-2:017000801446:layer:AWSLambdaPowertoolsPythonV3-python39-x86_64:21**{: .copyMe}:clipboard: | - | **`eu-west-3`** | **arn:aws:lambda:eu-west-3:017000801446:layer:AWSLambdaPowertoolsPythonV3-python39-x86_64:21**{: .copyMe}:clipboard: | - | **`il-central-1`** | **arn:aws:lambda:il-central-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python39-x86_64:21**{: .copyMe}:clipboard: | - | **`me-central-1`** | **arn:aws:lambda:me-central-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python39-x86_64:21**{: .copyMe}:clipboard: | - | **`me-south-1`** | **arn:aws:lambda:me-south-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python39-x86_64:21**{: .copyMe}:clipboard: | - | **`mx-central-1`** | **arn:aws:lambda:mx-central-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python39-x86_64:21**{: .copyMe}:clipboard: | - | **`sa-east-1`** | **arn:aws:lambda:sa-east-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python39-x86_64:21**{: .copyMe}:clipboard: | - | **`us-east-1`** | **arn:aws:lambda:us-east-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python39-x86_64:21**{: .copyMe}:clipboard: | - | **`us-east-2`** | **arn:aws:lambda:us-east-2:017000801446:layer:AWSLambdaPowertoolsPythonV3-python39-x86_64:21**{: .copyMe}:clipboard: | - | **`us-west-1`** | **arn:aws:lambda:us-west-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python39-x86_64:21**{: .copyMe}:clipboard: | - | **`us-west-2`** | **arn:aws:lambda:us-west-2:017000801446:layer:AWSLambdaPowertoolsPythonV3-python39-x86_64:21**{: .copyMe}:clipboard: | + | **`af-south-1`** | **arn:aws:lambda:af-south-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python39-x86_64:23**{: .copyMe} | + | **`ap-east-1`** | **arn:aws:lambda:ap-east-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python39-x86_64:23**{: .copyMe} | + | **`ap-northeast-1`** | **arn:aws:lambda:ap-northeast-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python39-x86_64:23**{: .copyMe} | + | **`ap-northeast-2`** | **arn:aws:lambda:ap-northeast-2:017000801446:layer:AWSLambdaPowertoolsPythonV3-python39-x86_64:23**{: .copyMe} | + | **`ap-northeast-3`** | **arn:aws:lambda:ap-northeast-3:017000801446:layer:AWSLambdaPowertoolsPythonV3-python39-x86_64:23**{: .copyMe} | + | **`ap-south-1`** | **arn:aws:lambda:ap-south-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python39-x86_64:23**{: .copyMe} | + | **`ap-south-2`** | **arn:aws:lambda:ap-south-2:017000801446:layer:AWSLambdaPowertoolsPythonV3-python39-x86_64:23**{: .copyMe} | + | **`ap-southeast-1`** | **arn:aws:lambda:ap-southeast-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python39-x86_64:23**{: .copyMe} | + | **`ap-southeast-2`** | **arn:aws:lambda:ap-southeast-2:017000801446:layer:AWSLambdaPowertoolsPythonV3-python39-x86_64:23**{: .copyMe} | + | **`ap-southeast-3`** | **arn:aws:lambda:ap-southeast-3:017000801446:layer:AWSLambdaPowertoolsPythonV3-python39-x86_64:23**{: .copyMe} | + | **`ap-southeast-4`** | **arn:aws:lambda:ap-southeast-4:017000801446:layer:AWSLambdaPowertoolsPythonV3-python39-x86_64:23**{: .copyMe} | + | **`ap-southeast-5`** | **arn:aws:lambda:ap-southeast-5:017000801446:layer:AWSLambdaPowertoolsPythonV3-python39-x86_64:23**{: .copyMe} | + | **`ap-southeast-7`** | **arn:aws:lambda:ap-southeast-7:017000801446:layer:AWSLambdaPowertoolsPythonV3-python39-x86_64:23**{: .copyMe} | + | **`ca-central-1`** | **arn:aws:lambda:ca-central-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python39-x86_64:23**{: .copyMe} | + | **`ca-west-1`** | **arn:aws:lambda:ca-west-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python39-x86_64:23**{: .copyMe} | + | **`eu-central-1`** | **arn:aws:lambda:eu-central-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python39-x86_64:23**{: .copyMe} | + | **`eu-central-2`** | **arn:aws:lambda:eu-central-2:017000801446:layer:AWSLambdaPowertoolsPythonV3-python39-x86_64:23**{: .copyMe} | + | **`eu-north-1`** | **arn:aws:lambda:eu-north-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python39-x86_64:23**{: .copyMe} | + | **`eu-south-1`** | **arn:aws:lambda:eu-south-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python39-x86_64:23**{: .copyMe} | + | **`eu-south-2`** | **arn:aws:lambda:eu-south-2:017000801446:layer:AWSLambdaPowertoolsPythonV3-python39-x86_64:23**{: .copyMe} | + | **`eu-west-1`** | **arn:aws:lambda:eu-west-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python39-x86_64:23**{: .copyMe} | + | **`eu-west-2`** | **arn:aws:lambda:eu-west-2:017000801446:layer:AWSLambdaPowertoolsPythonV3-python39-x86_64:23**{: .copyMe} | + | **`eu-west-3`** | **arn:aws:lambda:eu-west-3:017000801446:layer:AWSLambdaPowertoolsPythonV3-python39-x86_64:23**{: .copyMe} | + | **`il-central-1`** | **arn:aws:lambda:il-central-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python39-x86_64:23**{: .copyMe} | + | **`me-central-1`** | **arn:aws:lambda:me-central-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python39-x86_64:23**{: .copyMe} | + | **`me-south-1`** | **arn:aws:lambda:me-south-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python39-x86_64:23**{: .copyMe} | + | **`mx-central-1`** | **arn:aws:lambda:mx-central-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python39-x86_64:23**{: .copyMe} | + | **`sa-east-1`** | **arn:aws:lambda:sa-east-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python39-x86_64:23**{: .copyMe} | + | **`us-east-1`** | **arn:aws:lambda:us-east-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python39-x86_64:23**{: .copyMe} | + | **`us-east-2`** | **arn:aws:lambda:us-east-2:017000801446:layer:AWSLambdaPowertoolsPythonV3-python39-x86_64:23**{: .copyMe} | + | **`us-west-1`** | **arn:aws:lambda:us-west-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python39-x86_64:23**{: .copyMe} | + | **`us-west-2`** | **arn:aws:lambda:us-west-2:017000801446:layer:AWSLambdaPowertoolsPythonV3-python39-x86_64:23**{: .copyMe} | === "Python 3.10" | Region | Layer ARN | | -------------------- | --------------------------------------------------------------------------------------------------------- | - | **`af-south-1`** | **arn:aws:lambda:af-south-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python310-x86_64:21**{: .copyMe}:clipboard: | - | **`ap-east-1`** | **arn:aws:lambda:ap-east-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python310-x86_64:21**{: .copyMe}:clipboard: | - | **`ap-northeast-1`** | **arn:aws:lambda:ap-northeast-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python310-x86_64:21**{: .copyMe}:clipboard: | - | **`ap-northeast-2`** | **arn:aws:lambda:ap-northeast-2:017000801446:layer:AWSLambdaPowertoolsPythonV3-python310-x86_64:21**{: .copyMe}:clipboard: | - | **`ap-northeast-3`** | **arn:aws:lambda:ap-northeast-3:017000801446:layer:AWSLambdaPowertoolsPythonV3-python310-x86_64:21**{: .copyMe}:clipboard: | - | **`ap-south-1`** | **arn:aws:lambda:ap-south-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python310-x86_64:21**{: .copyMe}:clipboard: | - | **`ap-south-2`** | **arn:aws:lambda:ap-south-2:017000801446:layer:AWSLambdaPowertoolsPythonV3-python310-x86_64:21**{: .copyMe}:clipboard: | - | **`ap-southeast-1`** | **arn:aws:lambda:ap-southeast-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python310-x86_64:21**{: .copyMe}:clipboard: | - | **`ap-southeast-2`** | **arn:aws:lambda:ap-southeast-2:017000801446:layer:AWSLambdaPowertoolsPythonV3-python310-x86_64:21**{: .copyMe}:clipboard: | - | **`ap-southeast-3`** | **arn:aws:lambda:ap-southeast-3:017000801446:layer:AWSLambdaPowertoolsPythonV3-python310-x86_64:21**{: .copyMe}:clipboard: | - | **`ap-southeast-4`** | **arn:aws:lambda:ap-southeast-4:017000801446:layer:AWSLambdaPowertoolsPythonV3-python310-x86_64:21**{: .copyMe}:clipboard: | - | **`ap-southeast-5`** | **arn:aws:lambda:ap-southeast-5:017000801446:layer:AWSLambdaPowertoolsPythonV3-python310-x86_64:21**{: .copyMe}:clipboard: | - | **`ap-southeast-7`** | **arn:aws:lambda:ap-southeast-7:017000801446:layer:AWSLambdaPowertoolsPythonV3-python310-x86_64:21**{: .copyMe}:clipboard: | - | **`ca-central-1`** | **arn:aws:lambda:ca-central-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python310-x86_64:21**{: .copyMe}:clipboard: | - | **`ca-west-1`** | **arn:aws:lambda:ca-west-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python310-x86_64:21**{: .copyMe}:clipboard: | - | **`eu-central-1`** | **arn:aws:lambda:eu-central-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python310-x86_64:21**{: .copyMe}:clipboard: | - | **`eu-central-2`** | **arn:aws:lambda:eu-central-2:017000801446:layer:AWSLambdaPowertoolsPythonV3-python310-x86_64:21**{: .copyMe}:clipboard: | - | **`eu-north-1`** | **arn:aws:lambda:eu-north-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python310-x86_64:21**{: .copyMe}:clipboard: | - | **`eu-south-1`** | **arn:aws:lambda:eu-south-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python310-x86_64:21**{: .copyMe}:clipboard: | - | **`eu-south-2`** | **arn:aws:lambda:eu-south-2:017000801446:layer:AWSLambdaPowertoolsPythonV3-python310-x86_64:21**{: .copyMe}:clipboard: | - | **`eu-west-1`** | **arn:aws:lambda:eu-west-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python310-x86_64:21**{: .copyMe}:clipboard: | - | **`eu-west-2`** | **arn:aws:lambda:eu-west-2:017000801446:layer:AWSLambdaPowertoolsPythonV3-python310-x86_64:21**{: .copyMe}:clipboard: | - | **`eu-west-3`** | **arn:aws:lambda:eu-west-3:017000801446:layer:AWSLambdaPowertoolsPythonV3-python310-x86_64:21**{: .copyMe}:clipboard: | - | **`il-central-1`** | **arn:aws:lambda:il-central-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python310-x86_64:21**{: .copyMe}:clipboard: | - | **`me-central-1`** | **arn:aws:lambda:me-central-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python310-x86_64:21**{: .copyMe}:clipboard: | - | **`me-south-1`** | **arn:aws:lambda:me-south-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python310-x86_64:21**{: .copyMe}:clipboard: | - | **`mx-central-1`** | **arn:aws:lambda:mx-central-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python310-x86_64:21**{: .copyMe}:clipboard: | - | **`sa-east-1`** | **arn:aws:lambda:sa-east-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python310-x86_64:21**{: .copyMe}:clipboard: | - | **`us-east-1`** | **arn:aws:lambda:us-east-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python310-x86_64:21**{: .copyMe}:clipboard: | - | **`us-east-2`** | **arn:aws:lambda:us-east-2:017000801446:layer:AWSLambdaPowertoolsPythonV3-python310-x86_64:21**{: .copyMe}:clipboard: | - | **`us-west-1`** | **arn:aws:lambda:us-west-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python310-x86_64:21**{: .copyMe}:clipboard: | - | **`us-west-2`** | **arn:aws:lambda:us-west-2:017000801446:layer:AWSLambdaPowertoolsPythonV3-python310-x86_64:21**{: .copyMe}:clipboard: | + | **`af-south-1`** | **arn:aws:lambda:af-south-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python310-x86_64:23**{: .copyMe} | + | **`ap-east-1`** | **arn:aws:lambda:ap-east-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python310-x86_64:23**{: .copyMe} | + | **`ap-northeast-1`** | **arn:aws:lambda:ap-northeast-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python310-x86_64:23**{: .copyMe} | + | **`ap-northeast-2`** | **arn:aws:lambda:ap-northeast-2:017000801446:layer:AWSLambdaPowertoolsPythonV3-python310-x86_64:23**{: .copyMe} | + | **`ap-northeast-3`** | **arn:aws:lambda:ap-northeast-3:017000801446:layer:AWSLambdaPowertoolsPythonV3-python310-x86_64:23**{: .copyMe} | + | **`ap-south-1`** | **arn:aws:lambda:ap-south-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python310-x86_64:23**{: .copyMe} | + | **`ap-south-2`** | **arn:aws:lambda:ap-south-2:017000801446:layer:AWSLambdaPowertoolsPythonV3-python310-x86_64:23**{: .copyMe} | + | **`ap-southeast-1`** | **arn:aws:lambda:ap-southeast-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python310-x86_64:23**{: .copyMe} | + | **`ap-southeast-2`** | **arn:aws:lambda:ap-southeast-2:017000801446:layer:AWSLambdaPowertoolsPythonV3-python310-x86_64:23**{: .copyMe} | + | **`ap-southeast-3`** | **arn:aws:lambda:ap-southeast-3:017000801446:layer:AWSLambdaPowertoolsPythonV3-python310-x86_64:23**{: .copyMe} | + | **`ap-southeast-4`** | **arn:aws:lambda:ap-southeast-4:017000801446:layer:AWSLambdaPowertoolsPythonV3-python310-x86_64:23**{: .copyMe} | + | **`ap-southeast-5`** | **arn:aws:lambda:ap-southeast-5:017000801446:layer:AWSLambdaPowertoolsPythonV3-python310-x86_64:23**{: .copyMe} | + | **`ap-southeast-7`** | **arn:aws:lambda:ap-southeast-7:017000801446:layer:AWSLambdaPowertoolsPythonV3-python310-x86_64:23**{: .copyMe} | + | **`ca-central-1`** | **arn:aws:lambda:ca-central-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python310-x86_64:23**{: .copyMe} | + | **`ca-west-1`** | **arn:aws:lambda:ca-west-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python310-x86_64:23**{: .copyMe} | + | **`eu-central-1`** | **arn:aws:lambda:eu-central-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python310-x86_64:23**{: .copyMe} | + | **`eu-central-2`** | **arn:aws:lambda:eu-central-2:017000801446:layer:AWSLambdaPowertoolsPythonV3-python310-x86_64:23**{: .copyMe} | + | **`eu-north-1`** | **arn:aws:lambda:eu-north-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python310-x86_64:23**{: .copyMe} | + | **`eu-south-1`** | **arn:aws:lambda:eu-south-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python310-x86_64:23**{: .copyMe} | + | **`eu-south-2`** | **arn:aws:lambda:eu-south-2:017000801446:layer:AWSLambdaPowertoolsPythonV3-python310-x86_64:23**{: .copyMe} | + | **`eu-west-1`** | **arn:aws:lambda:eu-west-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python310-x86_64:23**{: .copyMe} | + | **`eu-west-2`** | **arn:aws:lambda:eu-west-2:017000801446:layer:AWSLambdaPowertoolsPythonV3-python310-x86_64:23**{: .copyMe} | + | **`eu-west-3`** | **arn:aws:lambda:eu-west-3:017000801446:layer:AWSLambdaPowertoolsPythonV3-python310-x86_64:23**{: .copyMe} | + | **`il-central-1`** | **arn:aws:lambda:il-central-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python310-x86_64:23**{: .copyMe} | + | **`me-central-1`** | **arn:aws:lambda:me-central-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python310-x86_64:23**{: .copyMe} | + | **`me-south-1`** | **arn:aws:lambda:me-south-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python310-x86_64:23**{: .copyMe} | + | **`mx-central-1`** | **arn:aws:lambda:mx-central-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python310-x86_64:23**{: .copyMe} | + | **`sa-east-1`** | **arn:aws:lambda:sa-east-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python310-x86_64:23**{: .copyMe} | + | **`us-east-1`** | **arn:aws:lambda:us-east-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python310-x86_64:23**{: .copyMe} | + | **`us-east-2`** | **arn:aws:lambda:us-east-2:017000801446:layer:AWSLambdaPowertoolsPythonV3-python310-x86_64:23**{: .copyMe} | + | **`us-west-1`** | **arn:aws:lambda:us-west-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python310-x86_64:23**{: .copyMe} | + | **`us-west-2`** | **arn:aws:lambda:us-west-2:017000801446:layer:AWSLambdaPowertoolsPythonV3-python310-x86_64:23**{: .copyMe} | === "Python 3.11" | Region | Layer ARN | | -------------------- | --------------------------------------------------------------------------------------------------------- | - | **`af-south-1`** | **arn:aws:lambda:af-south-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python311-x86_64:21**{: .copyMe}:clipboard: | - | **`ap-east-1`** | **arn:aws:lambda:ap-east-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python311-x86_64:21**{: .copyMe}:clipboard: | - | **`ap-northeast-1`** | **arn:aws:lambda:ap-northeast-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python311-x86_64:21**{: .copyMe}:clipboard: | - | **`ap-northeast-2`** | **arn:aws:lambda:ap-northeast-2:017000801446:layer:AWSLambdaPowertoolsPythonV3-python311-x86_64:21**{: .copyMe}:clipboard: | - | **`ap-northeast-3`** | **arn:aws:lambda:ap-northeast-3:017000801446:layer:AWSLambdaPowertoolsPythonV3-python311-x86_64:21**{: .copyMe}:clipboard: | - | **`ap-south-1`** | **arn:aws:lambda:ap-south-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python311-x86_64:21**{: .copyMe}:clipboard: | - | **`ap-south-2`** | **arn:aws:lambda:ap-south-2:017000801446:layer:AWSLambdaPowertoolsPythonV3-python311-x86_64:21**{: .copyMe}:clipboard: | - | **`ap-southeast-1`** | **arn:aws:lambda:ap-southeast-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python311-x86_64:21**{: .copyMe}:clipboard: | - | **`ap-southeast-2`** | **arn:aws:lambda:ap-southeast-2:017000801446:layer:AWSLambdaPowertoolsPythonV3-python311-x86_64:21**{: .copyMe}:clipboard: | - | **`ap-southeast-3`** | **arn:aws:lambda:ap-southeast-3:017000801446:layer:AWSLambdaPowertoolsPythonV3-python311-x86_64:21**{: .copyMe}:clipboard: | - | **`ap-southeast-4`** | **arn:aws:lambda:ap-southeast-4:017000801446:layer:AWSLambdaPowertoolsPythonV3-python311-x86_64:21**{: .copyMe}:clipboard: | - | **`ap-southeast-5`** | **arn:aws:lambda:ap-southeast-5:017000801446:layer:AWSLambdaPowertoolsPythonV3-python311-x86_64:21**{: .copyMe}:clipboard: | - | **`ap-southeast-7`** | **arn:aws:lambda:ap-southeast-7:017000801446:layer:AWSLambdaPowertoolsPythonV3-python311-x86_64:21**{: .copyMe}:clipboard: | - | **`ca-central-1`** | **arn:aws:lambda:ca-central-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python311-x86_64:21**{: .copyMe}:clipboard: | - | **`ca-west-1`** | **arn:aws:lambda:ca-west-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python311-x86_64:21**{: .copyMe}:clipboard: | - | **`eu-central-1`** | **arn:aws:lambda:eu-central-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python311-x86_64:21**{: .copyMe}:clipboard: | - | **`eu-central-2`** | **arn:aws:lambda:eu-central-2:017000801446:layer:AWSLambdaPowertoolsPythonV3-python311-x86_64:21**{: .copyMe}:clipboard: | - | **`eu-north-1`** | **arn:aws:lambda:eu-north-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python311-x86_64:21**{: .copyMe}:clipboard: | - | **`eu-south-1`** | **arn:aws:lambda:eu-south-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python311-x86_64:21**{: .copyMe}:clipboard: | - | **`eu-south-2`** | **arn:aws:lambda:eu-south-2:017000801446:layer:AWSLambdaPowertoolsPythonV3-python311-x86_64:21**{: .copyMe}:clipboard: | - | **`eu-west-1`** | **arn:aws:lambda:eu-west-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python311-x86_64:21**{: .copyMe}:clipboard: | - | **`eu-west-2`** | **arn:aws:lambda:eu-west-2:017000801446:layer:AWSLambdaPowertoolsPythonV3-python311-x86_64:21**{: .copyMe}:clipboard: | - | **`eu-west-3`** | **arn:aws:lambda:eu-west-3:017000801446:layer:AWSLambdaPowertoolsPythonV3-python311-x86_64:21**{: .copyMe}:clipboard: | - | **`il-central-1`** | **arn:aws:lambda:il-central-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python311-x86_64:21**{: .copyMe}:clipboard: | - | **`me-central-1`** | **arn:aws:lambda:me-central-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python311-x86_64:21**{: .copyMe}:clipboard: | - | **`me-south-1`** | **arn:aws:lambda:me-south-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python311-x86_64:21**{: .copyMe}:clipboard: | - | **`mx-central-1`** | **arn:aws:lambda:mx-central-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python311-x86_64:21**{: .copyMe}:clipboard: | - | **`sa-east-1`** | **arn:aws:lambda:sa-east-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python311-x86_64:21**{: .copyMe}:clipboard: | - | **`us-east-1`** | **arn:aws:lambda:us-east-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python311-x86_64:21**{: .copyMe}:clipboard: | - | **`us-east-2`** | **arn:aws:lambda:us-east-2:017000801446:layer:AWSLambdaPowertoolsPythonV3-python311-x86_64:21**{: .copyMe}:clipboard: | - | **`us-west-1`** | **arn:aws:lambda:us-west-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python311-x86_64:21**{: .copyMe}:clipboard: | - | **`us-west-2`** | **arn:aws:lambda:us-west-2:017000801446:layer:AWSLambdaPowertoolsPythonV3-python311-x86_64:21**{: .copyMe}:clipboard: | + | **`af-south-1`** | **arn:aws:lambda:af-south-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python311-x86_64:23**{: .copyMe} | + | **`ap-east-1`** | **arn:aws:lambda:ap-east-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python311-x86_64:23**{: .copyMe} | + | **`ap-northeast-1`** | **arn:aws:lambda:ap-northeast-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python311-x86_64:23**{: .copyMe} | + | **`ap-northeast-2`** | **arn:aws:lambda:ap-northeast-2:017000801446:layer:AWSLambdaPowertoolsPythonV3-python311-x86_64:23**{: .copyMe} | + | **`ap-northeast-3`** | **arn:aws:lambda:ap-northeast-3:017000801446:layer:AWSLambdaPowertoolsPythonV3-python311-x86_64:23**{: .copyMe} | + | **`ap-south-1`** | **arn:aws:lambda:ap-south-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python311-x86_64:23**{: .copyMe} | + | **`ap-south-2`** | **arn:aws:lambda:ap-south-2:017000801446:layer:AWSLambdaPowertoolsPythonV3-python311-x86_64:23**{: .copyMe} | + | **`ap-southeast-1`** | **arn:aws:lambda:ap-southeast-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python311-x86_64:23**{: .copyMe} | + | **`ap-southeast-2`** | **arn:aws:lambda:ap-southeast-2:017000801446:layer:AWSLambdaPowertoolsPythonV3-python311-x86_64:23**{: .copyMe} | + | **`ap-southeast-3`** | **arn:aws:lambda:ap-southeast-3:017000801446:layer:AWSLambdaPowertoolsPythonV3-python311-x86_64:23**{: .copyMe} | + | **`ap-southeast-4`** | **arn:aws:lambda:ap-southeast-4:017000801446:layer:AWSLambdaPowertoolsPythonV3-python311-x86_64:23**{: .copyMe} | + | **`ap-southeast-5`** | **arn:aws:lambda:ap-southeast-5:017000801446:layer:AWSLambdaPowertoolsPythonV3-python311-x86_64:23**{: .copyMe} | + | **`ap-southeast-7`** | **arn:aws:lambda:ap-southeast-7:017000801446:layer:AWSLambdaPowertoolsPythonV3-python311-x86_64:23**{: .copyMe} | + | **`ca-central-1`** | **arn:aws:lambda:ca-central-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python311-x86_64:23**{: .copyMe} | + | **`ca-west-1`** | **arn:aws:lambda:ca-west-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python311-x86_64:23**{: .copyMe} | + | **`eu-central-1`** | **arn:aws:lambda:eu-central-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python311-x86_64:23**{: .copyMe} | + | **`eu-central-2`** | **arn:aws:lambda:eu-central-2:017000801446:layer:AWSLambdaPowertoolsPythonV3-python311-x86_64:23**{: .copyMe} | + | **`eu-north-1`** | **arn:aws:lambda:eu-north-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python311-x86_64:23**{: .copyMe} | + | **`eu-south-1`** | **arn:aws:lambda:eu-south-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python311-x86_64:23**{: .copyMe} | + | **`eu-south-2`** | **arn:aws:lambda:eu-south-2:017000801446:layer:AWSLambdaPowertoolsPythonV3-python311-x86_64:23**{: .copyMe} | + | **`eu-west-1`** | **arn:aws:lambda:eu-west-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python311-x86_64:23**{: .copyMe} | + | **`eu-west-2`** | **arn:aws:lambda:eu-west-2:017000801446:layer:AWSLambdaPowertoolsPythonV3-python311-x86_64:23**{: .copyMe} | + | **`eu-west-3`** | **arn:aws:lambda:eu-west-3:017000801446:layer:AWSLambdaPowertoolsPythonV3-python311-x86_64:23**{: .copyMe} | + | **`il-central-1`** | **arn:aws:lambda:il-central-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python311-x86_64:23**{: .copyMe} | + | **`me-central-1`** | **arn:aws:lambda:me-central-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python311-x86_64:23**{: .copyMe} | + | **`me-south-1`** | **arn:aws:lambda:me-south-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python311-x86_64:23**{: .copyMe} | + | **`mx-central-1`** | **arn:aws:lambda:mx-central-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python311-x86_64:23**{: .copyMe} | + | **`sa-east-1`** | **arn:aws:lambda:sa-east-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python311-x86_64:23**{: .copyMe} | + | **`us-east-1`** | **arn:aws:lambda:us-east-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python311-x86_64:23**{: .copyMe} | + | **`us-east-2`** | **arn:aws:lambda:us-east-2:017000801446:layer:AWSLambdaPowertoolsPythonV3-python311-x86_64:23**{: .copyMe} | + | **`us-west-1`** | **arn:aws:lambda:us-west-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python311-x86_64:23**{: .copyMe} | + | **`us-west-2`** | **arn:aws:lambda:us-west-2:017000801446:layer:AWSLambdaPowertoolsPythonV3-python311-x86_64:23**{: .copyMe} | === "Python 3.12" | Region | Layer ARN | | -------------------- | --------------------------------------------------------------------------------------------------------- | - | **`af-south-1`** | **arn:aws:lambda:af-south-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python312-x86_64:21**{: .copyMe}:clipboard: | - | **`ap-east-1`** | **arn:aws:lambda:ap-east-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python312-x86_64:21**{: .copyMe}:clipboard: | - | **`ap-northeast-1`** | **arn:aws:lambda:ap-northeast-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python312-x86_64:21**{: .copyMe}:clipboard: | - | **`ap-northeast-2`** | **arn:aws:lambda:ap-northeast-2:017000801446:layer:AWSLambdaPowertoolsPythonV3-python312-x86_64:21**{: .copyMe}:clipboard: | - | **`ap-northeast-3`** | **arn:aws:lambda:ap-northeast-3:017000801446:layer:AWSLambdaPowertoolsPythonV3-python312-x86_64:21**{: .copyMe}:clipboard: | - | **`ap-south-1`** | **arn:aws:lambda:ap-south-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python312-x86_64:21**{: .copyMe}:clipboard: | - | **`ap-south-2`** | **arn:aws:lambda:ap-south-2:017000801446:layer:AWSLambdaPowertoolsPythonV3-python312-x86_64:21**{: .copyMe}:clipboard: | - | **`ap-southeast-1`** | **arn:aws:lambda:ap-southeast-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python312-x86_64:21**{: .copyMe}:clipboard: | - | **`ap-southeast-2`** | **arn:aws:lambda:ap-southeast-2:017000801446:layer:AWSLambdaPowertoolsPythonV3-python312-x86_64:21**{: .copyMe}:clipboard: | - | **`ap-southeast-3`** | **arn:aws:lambda:ap-southeast-3:017000801446:layer:AWSLambdaPowertoolsPythonV3-python312-x86_64:21**{: .copyMe}:clipboard: | - | **`ap-southeast-4`** | **arn:aws:lambda:ap-southeast-4:017000801446:layer:AWSLambdaPowertoolsPythonV3-python312-x86_64:21**{: .copyMe}:clipboard: | - | **`ap-southeast-5`** | **arn:aws:lambda:ap-southeast-5:017000801446:layer:AWSLambdaPowertoolsPythonV3-python312-x86_64:21**{: .copyMe}:clipboard: | - | **`ap-southeast-7`** | **arn:aws:lambda:ap-southeast-7:017000801446:layer:AWSLambdaPowertoolsPythonV3-python312-x86_64:21**{: .copyMe}:clipboard: | - | **`ca-central-1`** | **arn:aws:lambda:ca-central-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python312-x86_64:21**{: .copyMe}:clipboard: | - | **`ca-west-1`** | **arn:aws:lambda:ca-west-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python312-x86_64:21**{: .copyMe}:clipboard: | - | **`eu-central-1`** | **arn:aws:lambda:eu-central-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python312-x86_64:21**{: .copyMe}:clipboard: | - | **`eu-central-2`** | **arn:aws:lambda:eu-central-2:017000801446:layer:AWSLambdaPowertoolsPythonV3-python312-x86_64:21**{: .copyMe}:clipboard: | - | **`eu-north-1`** | **arn:aws:lambda:eu-north-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python312-x86_64:21**{: .copyMe}:clipboard: | - | **`eu-south-1`** | **arn:aws:lambda:eu-south-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python312-x86_64:21**{: .copyMe}:clipboard: | - | **`eu-south-2`** | **arn:aws:lambda:eu-south-2:017000801446:layer:AWSLambdaPowertoolsPythonV3-python312-x86_64:21**{: .copyMe}:clipboard: | - | **`eu-west-1`** | **arn:aws:lambda:eu-west-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python312-x86_64:21**{: .copyMe}:clipboard: | - | **`eu-west-2`** | **arn:aws:lambda:eu-west-2:017000801446:layer:AWSLambdaPowertoolsPythonV3-python312-x86_64:21**{: .copyMe}:clipboard: | - | **`eu-west-3`** | **arn:aws:lambda:eu-west-3:017000801446:layer:AWSLambdaPowertoolsPythonV3-python312-x86_64:21**{: .copyMe}:clipboard: | - | **`il-central-1`** | **arn:aws:lambda:il-central-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python312-x86_64:21**{: .copyMe}:clipboard: | - | **`me-central-1`** | **arn:aws:lambda:me-central-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python312-x86_64:21**{: .copyMe}:clipboard: | - | **`me-south-1`** | **arn:aws:lambda:me-south-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python312-x86_64:21**{: .copyMe}:clipboard: | - | **`mx-central-1`** | **arn:aws:lambda:mx-central-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python312-x86_64:21**{: .copyMe}:clipboard: | - | **`sa-east-1`** | **arn:aws:lambda:sa-east-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python312-x86_64:21**{: .copyMe}:clipboard: | - | **`us-east-1`** | **arn:aws:lambda:us-east-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python312-x86_64:21**{: .copyMe}:clipboard: | - | **`us-east-2`** | **arn:aws:lambda:us-east-2:017000801446:layer:AWSLambdaPowertoolsPythonV3-python312-x86_64:21**{: .copyMe}:clipboard: | - | **`us-west-1`** | **arn:aws:lambda:us-west-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python312-x86_64:21**{: .copyMe}:clipboard: | - | **`us-west-2`** | **arn:aws:lambda:us-west-2:017000801446:layer:AWSLambdaPowertoolsPythonV3-python312-x86_64:21**{: .copyMe}:clipboard: | + | **`af-south-1`** | **arn:aws:lambda:af-south-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python312-x86_64:23**{: .copyMe} | + | **`ap-east-1`** | **arn:aws:lambda:ap-east-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python312-x86_64:23**{: .copyMe} | + | **`ap-northeast-1`** | **arn:aws:lambda:ap-northeast-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python312-x86_64:23**{: .copyMe} | + | **`ap-northeast-2`** | **arn:aws:lambda:ap-northeast-2:017000801446:layer:AWSLambdaPowertoolsPythonV3-python312-x86_64:23**{: .copyMe} | + | **`ap-northeast-3`** | **arn:aws:lambda:ap-northeast-3:017000801446:layer:AWSLambdaPowertoolsPythonV3-python312-x86_64:23**{: .copyMe} | + | **`ap-south-1`** | **arn:aws:lambda:ap-south-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python312-x86_64:23**{: .copyMe} | + | **`ap-south-2`** | **arn:aws:lambda:ap-south-2:017000801446:layer:AWSLambdaPowertoolsPythonV3-python312-x86_64:23**{: .copyMe} | + | **`ap-southeast-1`** | **arn:aws:lambda:ap-southeast-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python312-x86_64:23**{: .copyMe} | + | **`ap-southeast-2`** | **arn:aws:lambda:ap-southeast-2:017000801446:layer:AWSLambdaPowertoolsPythonV3-python312-x86_64:23**{: .copyMe} | + | **`ap-southeast-3`** | **arn:aws:lambda:ap-southeast-3:017000801446:layer:AWSLambdaPowertoolsPythonV3-python312-x86_64:23**{: .copyMe} | + | **`ap-southeast-4`** | **arn:aws:lambda:ap-southeast-4:017000801446:layer:AWSLambdaPowertoolsPythonV3-python312-x86_64:23**{: .copyMe} | + | **`ap-southeast-5`** | **arn:aws:lambda:ap-southeast-5:017000801446:layer:AWSLambdaPowertoolsPythonV3-python312-x86_64:23**{: .copyMe} | + | **`ap-southeast-7`** | **arn:aws:lambda:ap-southeast-7:017000801446:layer:AWSLambdaPowertoolsPythonV3-python312-x86_64:23**{: .copyMe} | + | **`ca-central-1`** | **arn:aws:lambda:ca-central-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python312-x86_64:23**{: .copyMe} | + | **`ca-west-1`** | **arn:aws:lambda:ca-west-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python312-x86_64:23**{: .copyMe} | + | **`eu-central-1`** | **arn:aws:lambda:eu-central-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python312-x86_64:23**{: .copyMe} | + | **`eu-central-2`** | **arn:aws:lambda:eu-central-2:017000801446:layer:AWSLambdaPowertoolsPythonV3-python312-x86_64:23**{: .copyMe} | + | **`eu-north-1`** | **arn:aws:lambda:eu-north-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python312-x86_64:23**{: .copyMe} | + | **`eu-south-1`** | **arn:aws:lambda:eu-south-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python312-x86_64:23**{: .copyMe} | + | **`eu-south-2`** | **arn:aws:lambda:eu-south-2:017000801446:layer:AWSLambdaPowertoolsPythonV3-python312-x86_64:23**{: .copyMe} | + | **`eu-west-1`** | **arn:aws:lambda:eu-west-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python312-x86_64:23**{: .copyMe} | + | **`eu-west-2`** | **arn:aws:lambda:eu-west-2:017000801446:layer:AWSLambdaPowertoolsPythonV3-python312-x86_64:23**{: .copyMe} | + | **`eu-west-3`** | **arn:aws:lambda:eu-west-3:017000801446:layer:AWSLambdaPowertoolsPythonV3-python312-x86_64:23**{: .copyMe} | + | **`il-central-1`** | **arn:aws:lambda:il-central-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python312-x86_64:23**{: .copyMe} | + | **`me-central-1`** | **arn:aws:lambda:me-central-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python312-x86_64:23**{: .copyMe} | + | **`me-south-1`** | **arn:aws:lambda:me-south-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python312-x86_64:23**{: .copyMe} | + | **`mx-central-1`** | **arn:aws:lambda:mx-central-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python312-x86_64:23**{: .copyMe} | + | **`sa-east-1`** | **arn:aws:lambda:sa-east-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python312-x86_64:23**{: .copyMe} | + | **`us-east-1`** | **arn:aws:lambda:us-east-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python312-x86_64:23**{: .copyMe} | + | **`us-east-2`** | **arn:aws:lambda:us-east-2:017000801446:layer:AWSLambdaPowertoolsPythonV3-python312-x86_64:23**{: .copyMe} | + | **`us-west-1`** | **arn:aws:lambda:us-west-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python312-x86_64:23**{: .copyMe} | + | **`us-west-2`** | **arn:aws:lambda:us-west-2:017000801446:layer:AWSLambdaPowertoolsPythonV3-python312-x86_64:23**{: .copyMe} | === "Python 3.13" | Region | Layer ARN | | -------------------- | --------------------------------------------------------------------------------------------------------- | - | **`af-south-1`** | **arn:aws:lambda:af-south-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python313-x86_64:21**{: .copyMe}:clipboard: | - | **`ap-east-1`** | **arn:aws:lambda:ap-east-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python313-x86_64:21**{: .copyMe}:clipboard: | - | **`ap-northeast-1`** | **arn:aws:lambda:ap-northeast-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python313-x86_64:21**{: .copyMe}:clipboard: | - | **`ap-northeast-2`** | **arn:aws:lambda:ap-northeast-2:017000801446:layer:AWSLambdaPowertoolsPythonV3-python313-x86_64:21**{: .copyMe}:clipboard: | - | **`ap-northeast-3`** | **arn:aws:lambda:ap-northeast-3:017000801446:layer:AWSLambdaPowertoolsPythonV3-python313-x86_64:21**{: .copyMe}:clipboard: | - | **`ap-south-1`** | **arn:aws:lambda:ap-south-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python313-x86_64:21**{: .copyMe}:clipboard: | - | **`ap-south-2`** | **arn:aws:lambda:ap-south-2:017000801446:layer:AWSLambdaPowertoolsPythonV3-python313-x86_64:21**{: .copyMe}:clipboard: | - | **`ap-southeast-1`** | **arn:aws:lambda:ap-southeast-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python313-x86_64:21**{: .copyMe}:clipboard: | - | **`ap-southeast-2`** | **arn:aws:lambda:ap-southeast-2:017000801446:layer:AWSLambdaPowertoolsPythonV3-python313-x86_64:21**{: .copyMe}:clipboard: | - | **`ap-southeast-3`** | **arn:aws:lambda:ap-southeast-3:017000801446:layer:AWSLambdaPowertoolsPythonV3-python313-x86_64:21**{: .copyMe}:clipboard: | - | **`ap-southeast-4`** | **arn:aws:lambda:ap-southeast-4:017000801446:layer:AWSLambdaPowertoolsPythonV3-python313-x86_64:21**{: .copyMe}:clipboard: | - | **`ap-southeast-5`** | **arn:aws:lambda:ap-southeast-5:017000801446:layer:AWSLambdaPowertoolsPythonV3-python313-x86_64:21**{: .copyMe}:clipboard: | - | **`ap-southeast-7`** | **arn:aws:lambda:ap-southeast-7:017000801446:layer:AWSLambdaPowertoolsPythonV3-python313-x86_64:21**{: .copyMe}:clipboard: | - | **`ca-central-1`** | **arn:aws:lambda:ca-central-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python313-x86_64:21**{: .copyMe}:clipboard: | - | **`ca-west-1`** | **arn:aws:lambda:ca-west-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python313-x86_64:21**{: .copyMe}:clipboard: | - | **`eu-central-1`** | **arn:aws:lambda:eu-central-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python313-x86_64:21**{: .copyMe}:clipboard: | - | **`eu-central-2`** | **arn:aws:lambda:eu-central-2:017000801446:layer:AWSLambdaPowertoolsPythonV3-python313-x86_64:21**{: .copyMe}:clipboard: | - | **`eu-north-1`** | **arn:aws:lambda:eu-north-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python313-x86_64:21**{: .copyMe}:clipboard: | - | **`eu-south-1`** | **arn:aws:lambda:eu-south-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python313-x86_64:21**{: .copyMe}:clipboard: | - | **`eu-south-2`** | **arn:aws:lambda:eu-south-2:017000801446:layer:AWSLambdaPowertoolsPythonV3-python313-x86_64:21**{: .copyMe}:clipboard: | - | **`eu-west-1`** | **arn:aws:lambda:eu-west-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python313-x86_64:21**{: .copyMe}:clipboard: | - | **`eu-west-2`** | **arn:aws:lambda:eu-west-2:017000801446:layer:AWSLambdaPowertoolsPythonV3-python313-x86_64:21**{: .copyMe}:clipboard: | - | **`eu-west-3`** | **arn:aws:lambda:eu-west-3:017000801446:layer:AWSLambdaPowertoolsPythonV3-python313-x86_64:21**{: .copyMe}:clipboard: | - | **`il-central-1`** | **arn:aws:lambda:il-central-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python313-x86_64:21**{: .copyMe}:clipboard: | - | **`me-central-1`** | **arn:aws:lambda:me-central-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python313-x86_64:21**{: .copyMe}:clipboard: | - | **`me-south-1`** | **arn:aws:lambda:me-south-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python313-x86_64:21**{: .copyMe}:clipboard: | - | **`mx-central-1`** | **arn:aws:lambda:mx-central-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python313-x86_64:21**{: .copyMe}:clipboard: | - | **`sa-east-1`** | **arn:aws:lambda:sa-east-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python313-x86_64:21**{: .copyMe}:clipboard: | - | **`us-east-1`** | **arn:aws:lambda:us-east-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python313-x86_64:21**{: .copyMe}:clipboard: | - | **`us-east-2`** | **arn:aws:lambda:us-east-2:017000801446:layer:AWSLambdaPowertoolsPythonV3-python313-x86_64:21**{: .copyMe}:clipboard: | - | **`us-west-1`** | **arn:aws:lambda:us-west-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python313-x86_64:21**{: .copyMe}:clipboard: | - | **`us-west-2`** | **arn:aws:lambda:us-west-2:017000801446:layer:AWSLambdaPowertoolsPythonV3-python313-x86_64:21**{: .copyMe}:clipboard: | + | **`af-south-1`** | **arn:aws:lambda:af-south-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python313-x86_64:23**{: .copyMe} | + | **`ap-east-1`** | **arn:aws:lambda:ap-east-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python313-x86_64:23**{: .copyMe} | + | **`ap-northeast-1`** | **arn:aws:lambda:ap-northeast-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python313-x86_64:23**{: .copyMe} | + | **`ap-northeast-2`** | **arn:aws:lambda:ap-northeast-2:017000801446:layer:AWSLambdaPowertoolsPythonV3-python313-x86_64:23**{: .copyMe} | + | **`ap-northeast-3`** | **arn:aws:lambda:ap-northeast-3:017000801446:layer:AWSLambdaPowertoolsPythonV3-python313-x86_64:23**{: .copyMe} | + | **`ap-south-1`** | **arn:aws:lambda:ap-south-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python313-x86_64:23**{: .copyMe} | + | **`ap-south-2`** | **arn:aws:lambda:ap-south-2:017000801446:layer:AWSLambdaPowertoolsPythonV3-python313-x86_64:23**{: .copyMe} | + | **`ap-southeast-1`** | **arn:aws:lambda:ap-southeast-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python313-x86_64:23**{: .copyMe} | + | **`ap-southeast-2`** | **arn:aws:lambda:ap-southeast-2:017000801446:layer:AWSLambdaPowertoolsPythonV3-python313-x86_64:23**{: .copyMe} | + | **`ap-southeast-3`** | **arn:aws:lambda:ap-southeast-3:017000801446:layer:AWSLambdaPowertoolsPythonV3-python313-x86_64:23**{: .copyMe} | + | **`ap-southeast-4`** | **arn:aws:lambda:ap-southeast-4:017000801446:layer:AWSLambdaPowertoolsPythonV3-python313-x86_64:23**{: .copyMe} | + | **`ap-southeast-5`** | **arn:aws:lambda:ap-southeast-5:017000801446:layer:AWSLambdaPowertoolsPythonV3-python313-x86_64:23**{: .copyMe} | + | **`ap-southeast-7`** | **arn:aws:lambda:ap-southeast-7:017000801446:layer:AWSLambdaPowertoolsPythonV3-python313-x86_64:23**{: .copyMe} | + | **`ca-central-1`** | **arn:aws:lambda:ca-central-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python313-x86_64:23**{: .copyMe} | + | **`ca-west-1`** | **arn:aws:lambda:ca-west-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python313-x86_64:23**{: .copyMe} | + | **`eu-central-1`** | **arn:aws:lambda:eu-central-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python313-x86_64:23**{: .copyMe} | + | **`eu-central-2`** | **arn:aws:lambda:eu-central-2:017000801446:layer:AWSLambdaPowertoolsPythonV3-python313-x86_64:23**{: .copyMe} | + | **`eu-north-1`** | **arn:aws:lambda:eu-north-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python313-x86_64:23**{: .copyMe} | + | **`eu-south-1`** | **arn:aws:lambda:eu-south-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python313-x86_64:23**{: .copyMe} | + | **`eu-south-2`** | **arn:aws:lambda:eu-south-2:017000801446:layer:AWSLambdaPowertoolsPythonV3-python313-x86_64:23**{: .copyMe} | + | **`eu-west-1`** | **arn:aws:lambda:eu-west-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python313-x86_64:23**{: .copyMe} | + | **`eu-west-2`** | **arn:aws:lambda:eu-west-2:017000801446:layer:AWSLambdaPowertoolsPythonV3-python313-x86_64:23**{: .copyMe} | + | **`eu-west-3`** | **arn:aws:lambda:eu-west-3:017000801446:layer:AWSLambdaPowertoolsPythonV3-python313-x86_64:23**{: .copyMe} | + | **`il-central-1`** | **arn:aws:lambda:il-central-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python313-x86_64:23**{: .copyMe} | + | **`me-central-1`** | **arn:aws:lambda:me-central-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python313-x86_64:23**{: .copyMe} | + | **`me-south-1`** | **arn:aws:lambda:me-south-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python313-x86_64:23**{: .copyMe} | + | **`mx-central-1`** | **arn:aws:lambda:mx-central-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python313-x86_64:23**{: .copyMe} | + | **`sa-east-1`** | **arn:aws:lambda:sa-east-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python313-x86_64:23**{: .copyMe} | + | **`us-east-1`** | **arn:aws:lambda:us-east-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python313-x86_64:23**{: .copyMe} | + | **`us-east-2`** | **arn:aws:lambda:us-east-2:017000801446:layer:AWSLambdaPowertoolsPythonV3-python313-x86_64:23**{: .copyMe} | + | **`us-west-1`** | **arn:aws:lambda:us-west-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python313-x86_64:23**{: .copyMe} | + | **`us-west-2`** | **arn:aws:lambda:us-west-2:017000801446:layer:AWSLambdaPowertoolsPythonV3-python313-x86_64:23**{: .copyMe} | diff --git a/docs/index.md b/docs/index.md index b51d6bf979d..75756b2162b 100644 --- a/docs/index.md +++ b/docs/index.md @@ -44,9 +44,10 @@ You can install Powertools for AWS Lambda (Python) using your favorite dependenc Most features use Python standard library and the AWS SDK _(boto3)_ that are available in the AWS Lambda runtime. - * **pip**: **`pip install "aws-lambda-powertools"`**{: .copyMe}:clipboard: - * **poetry**: **`poetry add "aws-lambda-powertools"`**{: .copyMe}:clipboard: - * **pdm**: **`pdm add "aws-lambda-powertools"`**{: .copyMe}:clipboard: + * **pip**: **`pip install "aws-lambda-powertools"`**{: .copyMe} + * **poetry**: **`poetry add "aws-lambda-powertools"`**{: .copyMe} + * **pdm**: **`pdm add "aws-lambda-powertools"`**{: .copyMe} + * **uv**: **`uv add "aws-lambda-powertools"`**{: .copyMe} ### Extra dependencies @@ -54,12 +55,12 @@ You can install Powertools for AWS Lambda (Python) using your favorite dependenc | Feature | Install | Default dependency | | ------------------------------------------------------- | ---------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------- | - | **[Tracer](./core/tracer.md#install)** | **`pip install "aws-lambda-powertools[tracer]"`**{.copyMe}:clipboard: | `aws-xray-sdk` | - | **[Validation](./utilities/validation.md#install)** | **`pip install "aws-lambda-powertools[validation]"`**{.copyMe}:clipboard: | `fastjsonschema` | - | **[Parser](./utilities/parser.md#install)** | **`pip install "aws-lambda-powertools[parser]"`**{.copyMe}:clipboard: | `pydantic` _(v2)_ | - | **[Data Masking](./utilities/data_masking.md#install)** | **`pip install "aws-lambda-powertools[datamasking]"`**{.copyMe}:clipboard: | `aws-encryption-sdk`, `jsonpath-ng` | - | **All extra dependencies at once** | **`pip install "aws-lambda-powertools[all]"`**{.copyMe}:clipboard: | - | **Two or more extra dependencies only, not all** | **`pip install "aws-lambda-powertools[tracer,parser,datamasking]"`**{.copyMe}:clipboard: | + | **[Tracer](./core/tracer.md#install)** | **`pip install "aws-lambda-powertools[tracer]"`**{.copyMe} | `aws-xray-sdk` | + | **[Validation](./utilities/validation.md#install)** | **`pip install "aws-lambda-powertools[validation]"`**{.copyMe} | `fastjsonschema` | + | **[Parser](./utilities/parser.md#install)** | **`pip install "aws-lambda-powertools[parser]"`**{.copyMe} | `pydantic` _(v2)_ | + | **[Data Masking](./utilities/data_masking.md#install)** | **`pip install "aws-lambda-powertools[datamasking]"`**{.copyMe} | `aws-encryption-sdk`, `jsonpath-ng` | + | **All extra dependencies at once** | **`pip install "aws-lambda-powertools[all]"`**{.copyMe} | + | **Two or more extra dependencies only, not all** | **`pip install "aws-lambda-powertools[tracer,parser,datamasking]"`**{.copyMe} | === "Lambda Layer" @@ -69,8 +70,8 @@ You can install Powertools for AWS Lambda (Python) using your favorite dependenc | Architecture | Layer ARN | | ------------ | ----------------------------------------------------------------------------------------------------------------------------- | - | x86_64 | __arn:aws:lambda:{region}:017000801446:layer:AWSLambdaPowertoolsPythonV3-{python_version}-x86_64:18__{: .copyMe}:clipboard: | - | ARM | __arn:aws:lambda:{region}:017000801446:layer:AWSLambdaPowertoolsPythonV3-{python_version}-arm64:18__{: .copyMe}:clipboard: | + | x86_64 | __arn:aws:lambda:{region}:017000801446:layer:AWSLambdaPowertoolsPythonV3-{python_version}-x86_64:18__{: .copyMe} | + | ARM | __arn:aws:lambda:{region}:017000801446:layer:AWSLambdaPowertoolsPythonV3-{python_version}-arm64:18__{: .copyMe} | === "AWS Console" @@ -205,7 +206,7 @@ You can install Powertools for AWS Lambda (Python) using your favorite dependenc You can use AWS CLI to generate a pre-signed URL to download the contents of our Lambda Layer. ```bash title="AWS CLI command to download Lambda Layer content" - aws lambda get-layer-version-by-arn --arn arn:aws:lambda:eu-west-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python312-x86_64:21 --region eu-west-1 + aws lambda get-layer-version-by-arn --arn arn:aws:lambda:eu-west-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python312-x86_64:23 --region eu-west-1 ``` You'll find the pre-signed URL under `Location` key as part of the CLI command output. @@ -220,8 +221,8 @@ You can install Powertools for AWS Lambda (Python) using your favorite dependenc | Architecture | Layer ARN | | ------------ | --------------------------------------------------------------------------------------------------------- | - | x86_64 | __arn:aws-cn:lambda:cn-north-1:498634801083:layer:AWSLambdaPowertoolsPythonV3-{python_version}-x86_64:18__{: .copyMe}:clipboard: | - | ARM | __arn:aws-cn:lambda:cn-north-1:498634801083:layer:AWSLambdaPowertoolsPythonV3-{python_version}-arm64:18__{: .copyMe}:clipboard: | + | x86_64 | __arn:aws-cn:lambda:cn-north-1:498634801083:layer:AWSLambdaPowertoolsPythonV3-{python_version}-x86_64:18__{: .copyMe} | + | ARM | __arn:aws-cn:lambda:cn-north-1:498634801083:layer:AWSLambdaPowertoolsPythonV3-{python_version}-arm64:18__{: .copyMe} | === "Lambda Layer (GovCloud)" @@ -240,8 +241,8 @@ You can install Powertools for AWS Lambda (Python) using your favorite dependenc | Architecture | Layer ARN | | ------------ | --------------------------------------------------------------------------------------------------------- | - | x86_64 | __arn:aws-us-gov:lambda:us-gov-west-1:165093116878:layer:AWSLambdaPowertoolsPythonV3-{python_version}-x86_64:18__{: .copyMe}:clipboard: | - | ARM | __arn:aws-us-gov:lambda:us-gov-west-1:165093116878:layer:AWSLambdaPowertoolsPythonV3-{python_version}-arm64:18__{: .copyMe}:clipboard: | + | x86_64 | __arn:aws-us-gov:lambda:us-gov-west-1:165093116878:layer:AWSLambdaPowertoolsPythonV3-{python_version}-x86_64:18__{: .copyMe} | + | ARM | __arn:aws-us-gov:lambda:us-gov-west-1:165093116878:layer:AWSLambdaPowertoolsPythonV3-{python_version}-arm64:18__{: .copyMe} | === "Serverless Application Repository (SAR)" @@ -296,19 +297,21 @@ You can install Powertools for AWS Lambda (Python) using your favorite dependenc Here's how you can use them: - - __Pip__: [**`pip install --pre "aws-lambda-powertools"`**](#){: .copyMe}:clipboard: - - __Poetry__: [**`poetry add --allow-prereleases "aws-lambda-powertools" --group dev`**](#){: .copyMe}:clipboard: - - __Pdm__: [**`pdm add -dG --prerelease "aws-lambda-powertools"`**](#){: .copyMe}:clipboard: + - __Pip__: [**`pip install --pre "aws-lambda-powertools"`**](#){: .copyMe} + - __Poetry__: [**`poetry add --allow-prereleases "aws-lambda-powertools" --group dev`**](#){: .copyMe} + - __Pdm__: [**`pdm add -dG --prerelease "aws-lambda-powertools"`**](#){: .copyMe} + - __uv__: [**`uv add --prerelease allow "aws-lambda-powertools"`**](#){: .copyMe} ### Local development -!!! info "Using Lambda Layer? Simply add [**`"aws-lambda-powertools[all]"`**](#){: .copyMe}:clipboard: as a development dependency." +!!! info "Using Lambda Layer? Simply add [**`"aws-lambda-powertools[all]"`**](#){: .copyMe} as a development dependency." Powertools for AWS Lambda (Python) relies on the [AWS SDK bundled in the Lambda runtime](https://docs.aws.amazon.com/lambda/latest/dg/lambda-python.html){target="_blank"}. This helps us achieve an optimal package size and initialization. However, when developing locally, you need to install AWS SDK as a development dependency to support IDE auto-completion and to run your tests locally: -- __Pip__: [**`pip install "aws-lambda-powertools[aws-sdk]"`**](#){: .copyMe}:clipboard: -- __Poetry__: [**`poetry add "aws-lambda-powertools[aws-sdk]" --group dev`**](#){: .copyMe}:clipboard: -- __Pdm__: [**`pdm add -dG "aws-lambda-powertools[aws-sdk]"`**](#){: .copyMe}:clipboard: +- __Pip__: [**`pip install "aws-lambda-powertools[aws-sdk]"`**](#){: .copyMe} +- __Poetry__: [**`poetry add "aws-lambda-powertools[aws-sdk]" --group dev`**](#){: .copyMe} +- __Pdm__: [**`pdm add -dG "aws-lambda-powertools[aws-sdk]"`**](#){: .copyMe} +- __uv__: [**`uv add "aws-lambda-powertools[aws-sdk]"`**](#){: .copyMe} __A word about dependency resolution__ @@ -332,7 +335,7 @@ In this context, `[aws-sdk]` is an alias to the `boto3` package. Due to dependen The pre-signed URL to download this Lambda Layer will be within `Location` key in the CLI output. The CLI output will also contain the Powertools for AWS Lambda version it contains. ```bash title="AWS CLI command to download Lambda Layer content" -aws lambda get-layer-version-by-arn --arn arn:aws:lambda:eu-west-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python312-x86_64:21 --region eu-west-1 +aws lambda get-layer-version-by-arn --arn arn:aws:lambda:eu-west-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python312-x86_64:23 --region eu-west-1 ``` #### SAR @@ -343,16 +346,16 @@ Compared with the [public Layer ARN](#lambda-layer) option, SAR allows you to ch | App | ARN | Python version | Architecture | | --- | --- | -------------- | ------------ | -| [aws-lambda-powertools-python-layer-v3-python39-x86-64](https://serverlessrepo.aws.amazon.com/applications/eu-west-1/057560766410/aws-lambda-powertools-python-layer-v3-python39-x86-64){target="_blank"} | [arn:aws:serverlessrepo:eu-west-1:057560766410:applications/aws-lambda-powertools-python-layer-v3-python39-x86-64](#){: .copyMe}:clipboard: | Python 3.9 | X86_64 | -| [aws-lambda-powertools-python-layer-v3-python310-x86-64](https://serverlessrepo.aws.amazon.com/applications/eu-west-1/057560766410/aws-lambda-powertools-python-layer-v3-python310-x86-64){target="_blank"} | [arn:aws:serverlessrepo:eu-west-1:057560766410:applications/aws-lambda-powertools-python-layer-v3-python310-x86-64](#){: .copyMe}:clipboard: | Python 3.10 | X86_64 | -| [aws-lambda-powertools-python-layer-v3-python311-x86-64](https://serverlessrepo.aws.amazon.com/applications/eu-west-1/057560766410/aws-lambda-powertools-python-layer-v3-python11-x86-64){target="_blank"} | [arn:aws:serverlessrepo:eu-west-1:057560766410:applications/aws-lambda-powertools-python-layer-v3-python311-x86-64](#){: .copyMe}:clipboard: | Python 3.11 | X86_64 | -| [aws-lambda-powertools-python-layer-v3-python312-x86-64](https://serverlessrepo.aws.amazon.com/applications/eu-west-1/057560766410/aws-lambda-powertools-python-layer-v3-python12-x86-64){target="_blank"} | [arn:aws:serverlessrepo:eu-west-1:057560766410:applications/aws-lambda-powertools-python-layer-v3-python312-x86-64](#){: .copyMe}:clipboard: | Python 3.12 | X86_64 | -| [aws-lambda-powertools-python-layer-v3-python313-x86-64](https://serverlessrepo.aws.amazon.com/applications/eu-west-1/057560766410/aws-lambda-powertools-python-layer-v3-python313-x86-64){target="_blank"} | [arn:aws:serverlessrepo:eu-west-1:057560766410:applications/aws-lambda-powertools-python-layer-v3-python313-x86-64](#){: .copyMe}:clipboard: | Python 3.13 | X86_64 | -| [aws-lambda-powertools-python-layer-v3-python39-arm64](https://serverlessrepo.aws.amazon.com/applications/eu-west-1/057560766410/aws-lambda-powertools-python-layer-v3-python39-arm64){target="_blank"} | [arn:aws:serverlessrepo:eu-west-1:057560766410:applications/aws-lambda-powertools-python-layer-v3-python39-arm64](#){: .copyMe}:clipboard: | Python 3.9 | ARM64 | -| [aws-lambda-powertools-python-layer-v3-python310-arm64](https://serverlessrepo.aws.amazon.com/applications/eu-west-1/057560766410/aws-lambda-powertools-python-layer-v3-python310-arm64){target="_blank"} | [arn:aws:serverlessrepo:eu-west-1:057560766410:applications/aws-lambda-powertools-python-layer-v3-python310-arm64](#){: .copyMe}:clipboard: | Python 3.10 | ARM64 | -| [aws-lambda-powertools-python-layer-v3-python311-arm64](https://serverlessrepo.aws.amazon.com/applications/eu-west-1/057560766410/aws-lambda-powertools-python-layer-v3-python11-arm64){target="_blank"} | [arn:aws:serverlessrepo:eu-west-1:057560766410:applications/aws-lambda-powertools-python-layer-v3-python311-arm64](#){: .copyMe}:clipboard: | Python 3.11 | ARM64 | -| [aws-lambda-powertools-python-layer-v3-python312-arm64](https://serverlessrepo.aws.amazon.com/applications/eu-west-1/057560766410/aws-lambda-powertools-python-layer-v3-python12-arm64){target="_blank"} | [arn:aws:serverlessrepo:eu-west-1:057560766410:applications/aws-lambda-powertools-python-layer-v3-python312-arm64](#){: .copyMe}:clipboard: | Python 3.12 | ARM64 | -| [aws-lambda-powertools-python-layer-v3-python313-arm64](https://serverlessrepo.aws.amazon.com/applications/eu-west-1/057560766410/aws-lambda-powertools-python-layer-v3-python313-arm64){target="_blank"} | [arn:aws:serverlessrepo:eu-west-1:057560766410:applications/aws-lambda-powertools-python-layer-v3-python313-arm64](#){: .copyMe}:clipboard: | Python 3.13 | ARM64 | +| [aws-lambda-powertools-python-layer-v3-python39-x86-64](https://serverlessrepo.aws.amazon.com/applications/eu-west-1/057560766410/aws-lambda-powertools-python-layer-v3-python39-x86-64){target="_blank"} | [arn:aws:serverlessrepo:eu-west-1:057560766410:applications/aws-lambda-powertools-python-layer-v3-python39-x86-64](#){: .copyMe} | Python 3.9 | X86_64 | +| [aws-lambda-powertools-python-layer-v3-python310-x86-64](https://serverlessrepo.aws.amazon.com/applications/eu-west-1/057560766410/aws-lambda-powertools-python-layer-v3-python310-x86-64){target="_blank"} | [arn:aws:serverlessrepo:eu-west-1:057560766410:applications/aws-lambda-powertools-python-layer-v3-python310-x86-64](#){: .copyMe} | Python 3.10 | X86_64 | +| [aws-lambda-powertools-python-layer-v3-python311-x86-64](https://serverlessrepo.aws.amazon.com/applications/eu-west-1/057560766410/aws-lambda-powertools-python-layer-v3-python11-x86-64){target="_blank"} | [arn:aws:serverlessrepo:eu-west-1:057560766410:applications/aws-lambda-powertools-python-layer-v3-python311-x86-64](#){: .copyMe} | Python 3.11 | X86_64 | +| [aws-lambda-powertools-python-layer-v3-python312-x86-64](https://serverlessrepo.aws.amazon.com/applications/eu-west-1/057560766410/aws-lambda-powertools-python-layer-v3-python12-x86-64){target="_blank"} | [arn:aws:serverlessrepo:eu-west-1:057560766410:applications/aws-lambda-powertools-python-layer-v3-python312-x86-64](#){: .copyMe} | Python 3.12 | X86_64 | +| [aws-lambda-powertools-python-layer-v3-python313-x86-64](https://serverlessrepo.aws.amazon.com/applications/eu-west-1/057560766410/aws-lambda-powertools-python-layer-v3-python313-x86-64){target="_blank"} | [arn:aws:serverlessrepo:eu-west-1:057560766410:applications/aws-lambda-powertools-python-layer-v3-python313-x86-64](#){: .copyMe} | Python 3.13 | X86_64 | +| [aws-lambda-powertools-python-layer-v3-python39-arm64](https://serverlessrepo.aws.amazon.com/applications/eu-west-1/057560766410/aws-lambda-powertools-python-layer-v3-python39-arm64){target="_blank"} | [arn:aws:serverlessrepo:eu-west-1:057560766410:applications/aws-lambda-powertools-python-layer-v3-python39-arm64](#){: .copyMe} | Python 3.9 | ARM64 | +| [aws-lambda-powertools-python-layer-v3-python310-arm64](https://serverlessrepo.aws.amazon.com/applications/eu-west-1/057560766410/aws-lambda-powertools-python-layer-v3-python310-arm64){target="_blank"} | [arn:aws:serverlessrepo:eu-west-1:057560766410:applications/aws-lambda-powertools-python-layer-v3-python310-arm64](#){: .copyMe} | Python 3.10 | ARM64 | +| [aws-lambda-powertools-python-layer-v3-python311-arm64](https://serverlessrepo.aws.amazon.com/applications/eu-west-1/057560766410/aws-lambda-powertools-python-layer-v3-python11-arm64){target="_blank"} | [arn:aws:serverlessrepo:eu-west-1:057560766410:applications/aws-lambda-powertools-python-layer-v3-python311-arm64](#){: .copyMe} | Python 3.11 | ARM64 | +| [aws-lambda-powertools-python-layer-v3-python312-arm64](https://serverlessrepo.aws.amazon.com/applications/eu-west-1/057560766410/aws-lambda-powertools-python-layer-v3-python12-arm64){target="_blank"} | [arn:aws:serverlessrepo:eu-west-1:057560766410:applications/aws-lambda-powertools-python-layer-v3-python312-arm64](#){: .copyMe} | Python 3.12 | ARM64 | +| [aws-lambda-powertools-python-layer-v3-python313-arm64](https://serverlessrepo.aws.amazon.com/applications/eu-west-1/057560766410/aws-lambda-powertools-python-layer-v3-python313-arm64){target="_blank"} | [arn:aws:serverlessrepo:eu-west-1:057560766410:applications/aws-lambda-powertools-python-layer-v3-python313-arm64](#){: .copyMe} | Python 3.13 | ARM64 | ??? note "Click to expand and copy SAR code snippets for popular frameworks" @@ -495,86 +498,6 @@ There are many ways you can help us gain future investments to improve everyone' -### Becoming a reference customer - -Knowing which companies are using this library is important to help prioritize the project internally. The following companies, among others, use Powertools: - -
- -[**Alma Media**](https://www.almamedia.fi/en/){target="_blank" rel="nofollow"} -{ .card } - -[**Banxware**](https://www.banxware.com){target="_blank" rel="nofollow"} -{ .card } - -[**Brsk**](https://www.brsk.co.uk/){target="_blank" rel="nofollow"} -{ .card } - -[**BusPatrol**](https://buspatrol.com/){target="_blank" rel="nofollow"} -{ .card } - -[**Capital One**](https://www.capitalone.com/){target="_blank" rel="nofollow"} -{ .card } - -[**Caylent**](https://caylent.com/){target="_blank" rel="nofollow"} -{ .card } - -[**CHS Inc.**](https://www.chsinc.com/){target="_blank" rel="nofollow"} -{ .card } - -[**CPQi (Exadel Financial Services)**](https://cpqi.com/){target="_blank" rel="nofollow"} -{ .card } - -[**CloudZero**](https://www.cloudzero.com/){target="_blank" rel="nofollow"} -{ .card } - -[**CyberArk**](https://www.cyberark.com/){target="_blank" rel="nofollow"} -{ .card } - -[**Flyweight**](https://flyweight.io/){target="_blank" rel="nofollow"} -{ .card } - -[**globaldatanet**](https://globaldatanet.com/){target="_blank" rel="nofollow"} -{ .card } - -[**Guild**](https://guild.com/){target="_blank" rel="nofollow"} -{ .card } - -[**Instil**](https://instil.co/){target="_blank" rel="nofollow"} -{ .card } - -[**IMS**](https://ims.tech/){target="_blank" rel="nofollow"} -{ .card } - -[**Jit Security**](https://www.jit.io/){target="_blank" rel="nofollow"} -{ .card } - -[**LocalStack**](https://www.localstack.cloud/){target="_blank" rel="nofollow"} -{ .card } - -[**Propellor.ai**](https://www.propellor.ai/){target="_blank" rel="nofollow"} -{ .card } - -[**Pushpay**](https://pushpay.com/){target="_blank" rel="nofollow"} -{ .card } - -[**Recast**](https://getrecast.com/){target="_blank" rel="nofollow"} -{ .card } - -[**TopSport**](https://www.topsport.com.au/){target="_blank" rel="nofollow"} -{ .card } - -[**Transformity**](https://transformity.tech/){target="_blank" rel="nofollow"} -{ .card } - -[**Trek10**](https://www.trek10.com/){target="_blank" rel="nofollow"} -{ .card } - -[**Vertex Pharmaceuticals**](https://www.vrtx.com/){target="_blank" rel="nofollow"} -{ .card } - -
- ### Using Lambda Layers !!! note "Layers help us understand who uses Powertools for AWS Lambda (Python) in a non-intrusive way." diff --git a/docs/requirements.in b/docs/requirements.in index 0f47746e3e7..ea1c39109ca 100644 --- a/docs/requirements.in +++ b/docs/requirements.in @@ -1,4 +1,4 @@ mkdocs-git-revision-date-plugin==0.3.2 -mkdocstrings-python==1.16.12 +mkdocstrings-python==1.18.2 mkdocs-llmstxt==0.3.1 -mkdocs-material==9.6.16 +mkdocs-material==9.6.19 diff --git a/docs/requirements.txt b/docs/requirements.txt index d9d3785e837..77e534a183c 100644 --- a/docs/requirements.txt +++ b/docs/requirements.txt @@ -124,7 +124,9 @@ charset-normalizer==3.4.2 \ click==8.1.8 \ --hash=sha256:63c132bbbed01578a06712a2d1f497bb62d9c1c0d329b7903a866228027263b2 \ --hash=sha256:ed53c9d8990d83c2a27deae68e4ee337473f6330c040a31d4225c9574d16096a - # via mkdocs + # via + # mkdocs + # mkdocs-material colorama==0.4.6 \ --hash=sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44 \ --hash=sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6 @@ -143,9 +145,9 @@ gitpython==3.1.44 \ --hash=sha256:9e0e10cda9bed1ee64bc9a6de50e7e38a9c9943241cd7f585f6df3ed28011110 \ --hash=sha256:c87e30b26253bf5418b01b0660f818967f3c503193838337fe5e573331249269 # via mkdocs-git-revision-date-plugin -griffe==1.7.3 \ - --hash=sha256:52ee893c6a3a968b639ace8015bec9d36594961e156e23315c8e8e51401fa50b \ - --hash=sha256:c6b3ee30c2f0f17f30bcdef5068d6ab7a2a4f1b8bf1a3e74b56fffd21e1c5f75 +griffe==1.13.0 \ + --hash=sha256:246ea436a5e78f7fbf5f24ca8a727bb4d2a4b442a2959052eea3d0bfe9a076e0 \ + --hash=sha256:470fde5b735625ac0a36296cd194617f039e9e83e301fcbd493e2b58382d0559 # via mkdocstrings-python idna==3.10 \ --hash=sha256:12f65c9b470abda6dc35cf8e63cc574b1c52b11df2c86030af0ac09b01b13ea9 \ @@ -297,21 +299,21 @@ mkdocs-llmstxt==0.3.1 \ --hash=sha256:123119d9b984c1d1224ed5af250bfbc49879ad83decdaff59d8b0ebb459ddc54 \ --hash=sha256:31f5b6aaae6123c09a2b1c32912c3eb21ccb356b5db7abb867f105e8cc392653 # via -r docs/requirements.in -mkdocs-material==9.6.16 \ - --hash=sha256:8d1a1282b892fe1fdf77bfeb08c485ba3909dd743c9ba69a19a40f637c6ec18c \ - --hash=sha256:d07011df4a5c02ee0877496d9f1bfc986cfb93d964799b032dd99fe34c0e9d19 +mkdocs-material==9.6.19 \ + --hash=sha256:7492d2ac81952a467ca8a10cac915d6ea5c22876932f44b5a0f4f8e7d68ac06f \ + --hash=sha256:80e7b3f9acabfee9b1f68bd12c26e59c865b3d5bbfb505fd1344e970db02c4aa # via -r docs/requirements.in mkdocs-material-extensions==1.3.1 \ --hash=sha256:10c9511cea88f568257f960358a467d12b970e1f7b2c0e5fb2bb48cab1928443 \ --hash=sha256:adff8b62700b25cb77b53358dad940f3ef973dd6db797907c49e3c2ef3ab4e31 # via mkdocs-material -mkdocstrings==0.29.1 \ - --hash=sha256:37a9736134934eea89cbd055a513d40a020d87dfcae9e3052c2a6b8cd4af09b6 \ - --hash=sha256:8722f8f8c5cd75da56671e0a0c1bbed1df9946c0cef74794d6141b34011abd42 +mkdocstrings==0.30.0 \ + --hash=sha256:5d8019b9c31ddacd780b6784ffcdd6f21c408f34c0bd1103b5351d609d5b4444 \ + --hash=sha256:ae9e4a0d8c1789697ac776f2e034e2ddd71054ae1cf2c2bb1433ccfd07c226f2 # via mkdocstrings-python -mkdocstrings-python==1.16.12 \ - --hash=sha256:22ded3a63b3d823d57457a70ff9860d5a4de9e8b1e482876fc9baabaf6f5f374 \ - --hash=sha256:9b9eaa066e0024342d433e332a41095c4e429937024945fea511afe58f63175d +mkdocstrings-python==1.18.2 \ + --hash=sha256:4ad536920a07b6336f50d4c6d5603316fafb1172c5c882370cbbc954770ad323 \ + --hash=sha256:944fe6deb8f08f33fa936d538233c4036e9f53e840994f6146e8e94eb71b600d # via -r docs/requirements.in packaging==25.0 \ --hash=sha256:29572ef2b1f17581046b3a2227d5c611fb25ec70ca1ba8554b24b0e69331a484 \ diff --git a/docs/stylesheets/extra.css b/docs/stylesheets/extra.css index 8d6903b5f75..39be947a77a 100644 --- a/docs/stylesheets/extra.css +++ b/docs/stylesheets/extra.css @@ -43,8 +43,11 @@ } .copyMe { - cursor: pointer; - border-bottom: 0.1px dashed black; + cursor: pointer; +} + +.copyMe::after { + content: " 📋"; } p > code, diff --git a/docs/tutorial/index.md b/docs/tutorial/index.md index a66edad20de..c561dea8953 100644 --- a/docs/tutorial/index.md +++ b/docs/tutorial/index.md @@ -487,8 +487,8 @@ Let's break this down: * **L5**: We add Powertools for AWS Lambda (Python) Logger; the boilerplate is now done for you. By default, we set `INFO` as the logging level if `POWERTOOLS_LOG_LEVEL` env var isn't set. * **L22**: We use `logger.inject_lambda_context` decorator to inject key information from Lambda context into every log. -* **L22**: We also instruct Logger to use the incoming API Gateway Request ID as a [correlation id](../core/logger.md##set_correlation_id-method){target="_blank"} automatically. -* **L22**: Since we're in dev, we also use `log_event=True` to automatically log each incoming request for debugging. This can be also set via [environment variables](./index.md#environment-variables){target="_blank"}. +* **L22**: We also instruct Logger to use the incoming API Gateway Request ID as a [correlation id](../core/logger.md#setting-a-correlation-id){target="_blank"} automatically. +* **L22**: Since we're in dev, we also use `log_event=True` to automatically log each incoming request for debugging. This can be also set via [environment variables](../index.md#environment-variables){target="_blank"}. This is how the logs would look like now: diff --git a/docs/upgrade.md b/docs/upgrade.md index 0e57d8fb609..25de20fec23 100644 --- a/docs/upgrade.md +++ b/docs/upgrade.md @@ -13,7 +13,7 @@ Given our commitment to all of our customers using Powertools for AWS Lambda (Py ## Migrate to v3 from v2 -!!! info "We strongly encourage you to migrate to v3. However, if you still need to upgrade from v1 to v2, you can find the [upgrade guide](/lambda/python/2.43.1/upgrade/)." +!!! info "We strongly encourage you to migrate to v3. However, if you still need to upgrade from v1 to v2, you can find the [upgrade guide](https://docs.powertools.aws.dev/lambda/python/2.43.1/)." We've made minimal breaking changes to make your transition to v3 as smooth as possible. diff --git a/docs/utilities/data_masking.md b/docs/utilities/data_masking.md index 5abcc185938..2f7ea247155 100644 --- a/docs/utilities/data_masking.md +++ b/docs/utilities/data_masking.md @@ -105,7 +105,7 @@ Erasing will remove the original data and replace it with a `*****`. This means --8<-- "examples/data_masking/src/getting_started_erase_data.py" ``` - 1. See [working with nested data](#working-with-nested-data) to learn more about the `fields` parameter.

If we omit `fields` parameter, the entire dictionary will be erased with `*****`. + 1. See [choosing parts of your data](#choosing-parts-of-your-data) to learn more about the `fields` parameter.

If we omit `fields` parameter, the entire dictionary will be erased with `*****`. === "generic_data_input.json" ```json hl_lines="7 9 14" diff --git a/docs/utilities/idempotency.md b/docs/utilities/idempotency.md index 7786813b9e4..afda814459f 100644 --- a/docs/utilities/idempotency.md +++ b/docs/utilities/idempotency.md @@ -54,7 +54,7 @@ classDiagram ## Getting started -We use Amazon DynamoDB as the default persistence layer in the documentation. If you prefer Redis, you can learn more from [this section](#redis-database). +We use Amazon DynamoDB as the default persistence layer in the documentation. If you prefer Redis, you can learn more from [this section](#cache-database). ### IAM Permissions @@ -69,7 +69,7 @@ When using Amazon DynamoDB as the persistence layer, you will need the following **First time setting it up?** -We provide Infrastrucure as Code examples with [AWS Serverless Application Model (SAM)](#aws-serverless-application-model-sam-example), [AWS Cloud Development Kit (CDK)](#aws-cloud-development-kit-cdk), and [Terraform](#terraform) with the required permissions. +We provide Infrastrucure as Code examples with [AWS Serverless Application Model (SAM)](#dynamodb-iac-examples), [AWS Cloud Development Kit (CDK)](#aws-cloud-development-kit-cdk), and [Terraform](#terraform) with the required permissions. ### Required resources diff --git a/docs/utilities/parameters.md b/docs/utilities/parameters.md index 42487cbcee3..680d673fe3d 100644 --- a/docs/utilities/parameters.md +++ b/docs/utilities/parameters.md @@ -243,7 +243,7 @@ For greater flexibility such as configuring the underlying SDK client used by bu ``` === "builtin_provider_ssm_recursive_parameter.py" - ```python hl_lines="6 19-25" + ```python hl_lines="6 26 32" --8<-- "examples/parameters/src/builtin_provider_ssm_recursive_parameter.py" ``` diff --git a/examples/build_recipes/build_multi_arch/Dockerfile.lambda b/examples/build_recipes/build_multi_arch/Dockerfile.lambda new file mode 100644 index 00000000000..629555f21d2 --- /dev/null +++ b/examples/build_recipes/build_multi_arch/Dockerfile.lambda @@ -0,0 +1,16 @@ +#Public Lambda image +FROM public.ecr.aws/lambda/python@sha256:7e7f098baa11a527fbe59f33f4ed032a36b6e87b22ea73da1175522095885f74 + +# Set workdir file +WORKDIR /tmp/app + +# Copy requirements first for better caching +COPY requirements.txt . + +# Install dependencies in Lambda-compatible environment +RUN pip install -r requirements.txt + +# Copy application code +COPY . . + +CMD ["app.lambda_handler"] diff --git a/examples/build_recipes/build_multi_arch/build-al2.sh b/examples/build_recipes/build_multi_arch/build-al2.sh new file mode 100644 index 00000000000..ded510e39e4 --- /dev/null +++ b/examples/build_recipes/build_multi_arch/build-al2.sh @@ -0,0 +1,5 @@ +#!/bin/bash +# Use Amazon Linux 2 base image for builds +docker run --rm -v "$PWD":/var/task \ + public.ecr.aws/lambda/python:3.11 \ + pip install -r requirements.txt -t /var/task/ diff --git a/examples/build_recipes/build_multi_arch/build-al2023.sh b/examples/build_recipes/build_multi_arch/build-al2023.sh new file mode 100644 index 00000000000..3347a5bdef7 --- /dev/null +++ b/examples/build_recipes/build_multi_arch/build-al2023.sh @@ -0,0 +1,9 @@ +#!/bin/bash +# Some packages may require rebuilding for AL2023 +# Check for GLIBC symbol errors in logs: +# ImportError: /lib64/libc.so.6: version `GLIBC_2.34' not found + +# Use AL2023 base image for python3.12+ +docker run --rm -v "$PWD":/var/task \ + public.ecr.aws/lambda/python:3.12 \ + pip install -r requirements.txt -t /var/task/ diff --git a/examples/build_recipes/build_multi_arch/build-linux-wheels.sh b/examples/build_recipes/build_multi_arch/build-linux-wheels.sh new file mode 100644 index 00000000000..1b0c28a4706 --- /dev/null +++ b/examples/build_recipes/build_multi_arch/build-linux-wheels.sh @@ -0,0 +1,23 @@ +#!/bin/bash + +# Create build directory +mkdir -p build/ + +# Install Linux-compatible wheels +pip install \ + --platform manylinux2014_x86_64 \ + --target build/ \ + --implementation cp \ + --python-version 3.13 \ + --only-binary=:all: \ + --upgrade \ + --abi cp313 \ + -r requirements.txt + +# Copy application code +cp -r src/* build/ + +# Create deployment package +cd build && zip -r ../lambda-linux.zip . && cd .. + +echo "✅ Linux-compatible package created" diff --git a/examples/build_recipes/build_multi_arch/build-multiplatform.sh b/examples/build_recipes/build_multi_arch/build-multiplatform.sh new file mode 100644 index 00000000000..87607f89bd5 --- /dev/null +++ b/examples/build_recipes/build_multi_arch/build-multiplatform.sh @@ -0,0 +1,14 @@ + #!/bin/bash + +# Build using Lambda-compatible environment +docker build -f Dockerfile.lambda -t lambda-build . + +# Extract built packages +docker create --name temp-container lambda-build +docker cp temp-container:/var/task ./build +docker rm temp-container + +# Create deployment package +cd build && zip -r ../lambda-multiplatform.zip . && cd .. + +echo "✅ Multi-platform compatible package created" diff --git a/examples/build_recipes/build_multi_arch/debug-arch-mismatch.sh b/examples/build_recipes/build_multi_arch/debug-arch-mismatch.sh new file mode 100644 index 00000000000..88ccbd0c99f --- /dev/null +++ b/examples/build_recipes/build_multi_arch/debug-arch-mismatch.sh @@ -0,0 +1,12 @@ +#!/bin/bash +# Error message: +# ImportError: cannot import name '_speedups' from 'pydantic' + +# Check library architecture +file /opt/python/lib/python3.11/site-packages/pydantic/_internal/_pydantic_core.so + +# Expected output for Lambda x86_64: +# ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked + +# Solution: Force correct platform +pip install --platform manylinux2014_x86_64 --force-reinstall pydantic -t build/ diff --git a/examples/build_recipes/build_multi_arch/debug-glibc.sh b/examples/build_recipes/build_multi_arch/debug-glibc.sh new file mode 100644 index 00000000000..ec4caae76f7 --- /dev/null +++ b/examples/build_recipes/build_multi_arch/debug-glibc.sh @@ -0,0 +1,13 @@ +#!/bin/bash +# Error message: +# ImportError: /lib64/libc.so.6: version `GLIBC_2.34' not found + +# Check GLIBC version in Lambda runtime +ldd --version + +# Check required GLIBC symbols in a library +objdump -T /opt/python/lib/python3.11/site-packages/pydantic/_internal/_pydantic_core.so | grep GLIBC + +# Solution: Rebuild with compatible base image +docker run --rm -v "$PWD":/var/task public.ecr.aws/lambda/python:3.11 \ + pip install --force-reinstall pydantic -t /var/task/ diff --git a/examples/build_recipes/build_multi_arch/debug-missing-libs.sh b/examples/build_recipes/build_multi_arch/debug-missing-libs.sh new file mode 100644 index 00000000000..140e1b289be --- /dev/null +++ b/examples/build_recipes/build_multi_arch/debug-missing-libs.sh @@ -0,0 +1,9 @@ +#!/bin/bash +# Error message: +# ImportError: libffi.so.6: cannot open shared object file + +# Check library dependencies +ldd /opt/python/lib/python3.11/site-packages/some_package/_extension.so + +# Solution: Use Lambda base image with system dependencies +# Or switch to pure Python alternatives diff --git a/examples/build_recipes/build_multi_arch/lambda-build.yml b/examples/build_recipes/build_multi_arch/lambda-build.yml new file mode 100644 index 00000000000..432c1caf18a --- /dev/null +++ b/examples/build_recipes/build_multi_arch/lambda-build.yml @@ -0,0 +1,68 @@ +name: Build Lambda Package + +on: + push: + branches: [main] + +jobs: + build: + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v4 + + - name: Set up Python + uses: actions/setup-python@v5 + with: + python-version: '3.13' + + - name: Install dependencies with Lambda-compatible wheels + run: | + # Force Linux x86_64 wheels compatible with Lambda GLIBC 2.34 + pip install --platform manylinux2014_x86_64 --only-binary=:all: \ + --python-version 3.13 --target build/ \ + -r requirements.txt + + - name: Copy application code + run: cp -r src/* build/ + + - name: Create deployment package + run: | + cd build && zip -r ../lambda-deployment.zip . && cd .. + + - name: Upload artifact + uses: actions/upload-artifact@v4 + with: + name: lambda-package + path: lambda-deployment.zip + + build-arm64: + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v4 + + - name: Set up Python + uses: actions/setup-python@v5 + with: + python-version: '3.13' + + - name: Install dependencies for ARM64 Lambda + run: | + # Force Linux ARM64 wheels compatible with Lambda + pip install --platform manylinux2014_aarch64 --only-binary=:all: \ + --python-version 3.13 --target build/ \ + -r requirements.txt + + - name: Copy application code + run: cp -r src/* build/ + + - name: Create deployment package + run: | + cd build && zip -r ../lambda-deployment-arm64.zip . && cd .. + + - name: Upload artifact + uses: actions/upload-artifact@v4 + with: + name: lambda-package-arm64 + path: lambda-deployment-arm64.zip diff --git a/examples/build_recipes/build_optimization/optimize-advanced.sh b/examples/build_recipes/build_optimization/optimize-advanced.sh new file mode 100644 index 00000000000..b27b466166f --- /dev/null +++ b/examples/build_recipes/build_optimization/optimize-advanced.sh @@ -0,0 +1,26 @@ +#!/bin/bash + +# Remove unnecessary files +find build/ -name "*.pyc" -delete +find build/ -name "__pycache__" -type d -exec rm -rf {} + +find build/ -name "*.dist-info" -type d -exec rm -rf {} + +find build/ -name "tests" -type d -exec rm -rf {} + +find build/ -name "test_*" -delete + +# Remove debug symbols from compiled extensions +find build/ -name "*.so" -exec strip --strip-debug {} \; 2>/dev/null || true +find build/ -name "*.so.*" -exec strip --strip-debug {} \; 2>/dev/null || true + +# Remove additional bloat from common packages +rm -rf build/*/site-packages/*/tests/ +rm -rf build/*/site-packages/*/test/ +rm -rf build/*/site-packages/*/.git/ +rm -rf build/*/site-packages/*/docs/ +rm -rf build/*/site-packages/*/examples/ +rm -rf build/*/site-packages/*/*.md +rm -rf build/*/site-packages/*/*.rst +rm -rf build/*/site-packages/*/*.txt + +# Calculate size reduction +echo "📊 Package optimization completed" +du -sh build/ 2>/dev/null || echo "✅ Advanced optimization applied" diff --git a/examples/build_recipes/build_optimization/optimize-layer.sh b/examples/build_recipes/build_optimization/optimize-layer.sh new file mode 100644 index 00000000000..3b3fc6ded95 --- /dev/null +++ b/examples/build_recipes/build_optimization/optimize-layer.sh @@ -0,0 +1,18 @@ +#!/bin/bash + +# Create optimized layer structure +mkdir -p layer/python/ + +# Install only production dependencies +pip install aws-lambda-powertools[all] -t layer/python/ --no-deps +pip install pydantic -t layer/python/ --no-deps + +# Remove unnecessary files from layer +find layer/ -name "*.pyc" -delete +find layer/ -name "__pycache__" -type d -exec rm -rf {} + +find layer/ -name "tests" -type d -exec rm -rf {} + + +# Create layer zip +cd layer && zip -r ../optimized-layer.zip . && cd .. + +echo "✅ Optimized layer created: optimized-layer.zip" diff --git a/examples/build_recipes/build_optimization/optimize-package.sh b/examples/build_recipes/build_optimization/optimize-package.sh new file mode 100644 index 00000000000..d0521c3f532 --- /dev/null +++ b/examples/build_recipes/build_optimization/optimize-package.sh @@ -0,0 +1,14 @@ +#!/bin/bash + +# Remove unnecessary files to reduce package size +find build/ -name "*.pyc" -delete +find build/ -name "__pycache__" -type d -exec rm -rf {} + +find build/ -name "*.dist-info" -type d -exec rm -rf {} + +find build/ -name "tests" -type d -exec rm -rf {} + +find build/ -name "test_*" -delete + +# Remove documentation and examples +find build/ -name "docs" -type d -exec rm -rf {} + +find build/ -name "examples" -type d -exec rm -rf {} + + +echo "✅ Package optimized" diff --git a/examples/build_recipes/cdk/basic/app.py b/examples/build_recipes/cdk/basic/app.py new file mode 100644 index 00000000000..75c0f4c7193 --- /dev/null +++ b/examples/build_recipes/cdk/basic/app.py @@ -0,0 +1,74 @@ +#!/usr/bin/env python3 +import aws_cdk as cdk +from aws_cdk import ( + Duration, + Stack, +) +from aws_cdk import ( + aws_apigateway as apigateway, +) +from aws_cdk import ( + aws_lambda as _lambda, +) +from aws_cdk import ( + aws_logs as logs, +) +from constructs import Construct + + +class PowertoolsLambdaStack(Stack): + def __init__(self, scope: Construct, construct_id: str, **kwargs) -> None: + super().__init__(scope, construct_id, **kwargs) + + # Use public Powertools layer + powertools_layer = _lambda.LayerVersion.from_layer_version_arn( + self, + "PowertoolsLayer", + layer_version_arn="arn:aws:lambda:us-east-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python313-x86_64:23", + ) + + # Lambda Function + api_function = _lambda.Function( + self, + "ApiFunction", + runtime=_lambda.Runtime.PYTHON_3_13, + handler="lambda_function.lambda_handler", + code=_lambda.Code.from_asset("src"), + layers=[powertools_layer], + timeout=Duration.seconds(30), + memory_size=512, + environment={ + "POWERTOOLS_SERVICE_NAME": "api-service", + "POWERTOOLS_METRICS_NAMESPACE": "MyApp", + "POWERTOOLS_LOG_LEVEL": "INFO", + }, + log_retention=logs.RetentionDays.ONE_WEEK, + ) + + # API Gateway + api = apigateway.RestApi( + self, + "ApiGateway", + rest_api_name="Powertools API", + description="API powered by Lambda with Powertools", + ) + + # API Integration + integration = apigateway.LambdaIntegration(api_function) + api.root.add_proxy( + default_integration=integration, + any_method=True, + ) + + # Outputs + cdk.CfnOutput( + self, + "ApiUrl", + value=api.url, + description="API Gateway URL", + ) + + +app = cdk.App() +PowertoolsLambdaStack(app, "PowertoolsLambdaStack") +app.synth() diff --git a/examples/build_recipes/cdk/basic/build-cdk.sh b/examples/build_recipes/cdk/basic/build-cdk.sh new file mode 100644 index 00000000000..df689d7ba2f --- /dev/null +++ b/examples/build_recipes/cdk/basic/build-cdk.sh @@ -0,0 +1,14 @@ +#!/bin/bash + +echo "🏗️ Building CDK application..." + +# Install CDK dependencies +pip install -r requirements.txt + +# Bootstrap CDK (first time only) +# cdk bootstrap + +# Deploy stack +cdk deploy --require-approval never + +echo "✅ CDK application deployed successfully" diff --git a/examples/build_recipes/cdk/basic/cdk-commands.sh b/examples/build_recipes/cdk/basic/cdk-commands.sh new file mode 100644 index 00000000000..e975ad5bc1e --- /dev/null +++ b/examples/build_recipes/cdk/basic/cdk-commands.sh @@ -0,0 +1,21 @@ +#!/bin/bash +# Install Python dependencies +pip install -r requirements.txt + +# Synthesize CloudFormation template +cdk synth + +# Deploy stack +cdk deploy + +# Deploy specific stack +cdk deploy MyLambdaStack + +# Destroy stack +cdk destroy + +# List all stacks +cdk list + +# Compare deployed stack with current state +cdk diff diff --git a/examples/build_recipes/cdk/basic/cdk.json b/examples/build_recipes/cdk/basic/cdk.json new file mode 100644 index 00000000000..1e8e4ddaaac --- /dev/null +++ b/examples/build_recipes/cdk/basic/cdk.json @@ -0,0 +1,37 @@ +{ + "app": "python app.py", + "watch": { + "include": [ + "**" + ], + "exclude": [ + "README.md", + "cdk*.json", + "requirements*.txt", + "source.bat", + "**/__pycache__", + "**/.venv" + ] + }, + "context": { + "@aws-cdk/aws-lambda:recognizeLayerVersion": true, + "@aws-cdk/core:checkSecretUsage": true, + "@aws-cdk/core:target-partitions": ["aws", "aws-cn"], + "@aws-cdk-containers/ecs-service-extensions:enableDefaultLogDriver": true, + "@aws-cdk/aws-ec2:uniqueImdsv2TemplateName": true, + "@aws-cdk/aws-ecs:arnFormatIncludesClusterName": true, + "@aws-cdk/core:validateSnapshotRemovalPolicy": true, + "@aws-cdk/aws-codepipeline:crossAccountKeyAliasStackSafeResourceName": true, + "@aws-cdk/aws-s3:createDefaultLoggingPolicy": true, + "@aws-cdk/aws-sns-subscriptions:restrictSqsDescryption": true, + "@aws-cdk/aws-apigateway:disableCloudWatchRole": true, + "@aws-cdk/core:enablePartitionLiterals": true, + "@aws-cdk/aws-events:eventsTargetQueueSameAccount": true, + "@aws-cdk/aws-iam:minimizePolicies": true, + "@aws-cdk/core:validateSnapshotRemovalPolicy": true, + "@aws-cdk/aws-codepipeline:crossAccountKeysDefaultValueToFalse": true, + "@aws-cdk/aws-s3:serverAccessLogsUseBucketPolicy": true, + "@aws-cdk/aws-route53-patters:useCertificate": true, + "@aws-cdk/customresources:installLatestAwsSdkDefault": false + } +} diff --git a/examples/build_recipes/cdk/basic/setup-cdk.sh b/examples/build_recipes/cdk/basic/setup-cdk.sh new file mode 100644 index 00000000000..0940f9cd562 --- /dev/null +++ b/examples/build_recipes/cdk/basic/setup-cdk.sh @@ -0,0 +1,9 @@ +#!/bin/bash +# Install AWS CDK CLI +npm install -g aws-cdk + +# Verify installation +cdk --version + +# Bootstrap CDK in your AWS account (one-time setup) +cdk bootstrap aws://ACCOUNT-ID/REGION diff --git a/examples/build_recipes/cdk/basic/src/lambda_function.py b/examples/build_recipes/cdk/basic/src/lambda_function.py new file mode 100644 index 00000000000..025b8ef6fcd --- /dev/null +++ b/examples/build_recipes/cdk/basic/src/lambda_function.py @@ -0,0 +1,27 @@ +from aws_lambda_powertools import Logger, Metrics, Tracer +from aws_lambda_powertools.event_handler import APIGatewayRestResolver +from aws_lambda_powertools.logging import correlation_paths +from aws_lambda_powertools.metrics import MetricUnit + +logger = Logger() +tracer = Tracer() +metrics = Metrics() +app = APIGatewayRestResolver() + + +@app.get("/health") +def health_check(): + return {"status": "healthy", "service": "powertools-cdk"} + + +@app.get("/metrics") +def get_metrics(): + metrics.add_metric(name="MetricsEndpointCalled", unit=MetricUnit.Count, value=1) + return {"message": "Metrics recorded"} + + +@logger.inject_lambda_context(correlation_id_path=correlation_paths.API_GATEWAY_REST) +@tracer.capture_lambda_handler +@metrics.log_metrics(capture_cold_start_metric=True) +def lambda_handler(event, context): + return app.resolve(event, context) diff --git a/examples/build_recipes/cdk/multi-stack/app_multi_stack.py b/examples/build_recipes/cdk/multi-stack/app_multi_stack.py new file mode 100644 index 00000000000..be2c8077e66 --- /dev/null +++ b/examples/build_recipes/cdk/multi-stack/app_multi_stack.py @@ -0,0 +1,21 @@ +#!/usr/bin/env python3 +import aws_cdk as cdk +from stacks.powertools_cdk_stack import PowertoolsStack + +app = cdk.App() + +# Get environment from context or default to dev +environment = app.node.try_get_context("environment") or "dev" + +# Create stack for the specified environment +PowertoolsStack( + app, + f"PowertoolsStack-{environment}", + environment=environment, + env=cdk.Environment( + account=app.node.try_get_context("account"), + region=app.node.try_get_context("region") or "us-east-1", + ), +) + +app.synth() diff --git a/examples/build_recipes/cdk/multi-stack/cdk.json b/examples/build_recipes/cdk/multi-stack/cdk.json new file mode 100644 index 00000000000..4e34e02f383 --- /dev/null +++ b/examples/build_recipes/cdk/multi-stack/cdk.json @@ -0,0 +1,37 @@ +{ + "app": "python app_multi_stack.py", + "watch": { + "include": [ + "**" + ], + "exclude": [ + "README.md", + "cdk*.json", + "requirements*.txt", + "source.bat", + "**/__pycache__", + "**/.venv" + ] + }, + "context": { + "@aws-cdk/aws-lambda:recognizeLayerVersion": true, + "@aws-cdk/core:checkSecretUsage": true, + "@aws-cdk/core:target-partitions": ["aws", "aws-cn"], + "@aws-cdk-containers/ecs-service-extensions:enableDefaultLogDriver": true, + "@aws-cdk/aws-ec2:uniqueImdsv2TemplateName": true, + "@aws-cdk/aws-ecs:arnFormatIncludesClusterName": true, + "@aws-cdk/core:validateSnapshotRemovalPolicy": true, + "@aws-cdk/aws-codepipeline:crossAccountKeyAliasStackSafeResourceName": true, + "@aws-cdk/aws-s3:createDefaultLoggingPolicy": true, + "@aws-cdk/aws-sns-subscriptions:restrictSqsDescryption": true, + "@aws-cdk/aws-apigateway:disableCloudWatchRole": true, + "@aws-cdk/core:enablePartitionLiterals": true, + "@aws-cdk/aws-events:eventsTargetQueueSameAccount": true, + "@aws-cdk/aws-iam:minimizePolicies": true, + "@aws-cdk/core:validateSnapshotRemovalPolicy": true, + "@aws-cdk/aws-codepipeline:crossAccountKeysDefaultValueToFalse": true, + "@aws-cdk/aws-s3:serverAccessLogsUseBucketPolicy": true, + "@aws-cdk/aws-route53-patters:useCertificate": true, + "@aws-cdk/customresources:installLatestAwsSdkDefault": false + } +} diff --git a/examples/build_recipes/cdk/multi-stack/deploy-environments.sh b/examples/build_recipes/cdk/multi-stack/deploy-environments.sh new file mode 100644 index 00000000000..8adc8779c49 --- /dev/null +++ b/examples/build_recipes/cdk/multi-stack/deploy-environments.sh @@ -0,0 +1,14 @@ +#!/bin/bash + +# Deploy to different environments +environments=("dev" "staging" "prod") + +for env in "${environments[@]}"; do + echo "🚀 Deploying to $env environment..." + + cdk deploy PowertoolsStack-$env \ + --context environment=$env \ + --require-approval never + + echo "✅ $env deployment completed" +done diff --git a/examples/build_recipes/cdk/multi-stack/src/app/api.py b/examples/build_recipes/cdk/multi-stack/src/app/api.py new file mode 100644 index 00000000000..63d3daffb9c --- /dev/null +++ b/examples/build_recipes/cdk/multi-stack/src/app/api.py @@ -0,0 +1,49 @@ +import os + +import boto3 + +from aws_lambda_powertools import Logger, Metrics, Tracer +from aws_lambda_powertools.event_handler import APIGatewayRestResolver +from aws_lambda_powertools.logging import correlation_paths +from aws_lambda_powertools.metrics import MetricUnit + +logger = Logger() +tracer = Tracer() +metrics = Metrics() +app = APIGatewayRestResolver() + +# Initialize AWS clients +dynamodb = boto3.resource("dynamodb") +sqs = boto3.client("sqs") + +table = dynamodb.Table(os.environ["TABLE_NAME"]) +queue_url = os.environ["QUEUE_URL"] + + +@app.get("/health") +def health_check(): + return {"status": "healthy", "service": "powertools-cdk-api"} + + +@app.post("/tasks") +@tracer.capture_method +def create_task(): + task_data = app.current_event.json_body + + # Store in DynamoDB + table.put_item(Item={"pk": task_data["task_id"], "task_type": task_data["task_type"], "status": "pending"}) + + # Send to SQS for processing + sqs.send_message(QueueUrl=queue_url, MessageBody=app.current_event.body) + + metrics.add_metric(name="TaskCreated", unit=MetricUnit.Count, value=1) + logger.info("Task created", extra={"task_id": task_data["task_id"]}) + + return {"message": "Task created successfully", "task_id": task_data["task_id"]} + + +@logger.inject_lambda_context(correlation_id_path=correlation_paths.API_GATEWAY_REST) +@tracer.capture_lambda_handler +@metrics.log_metrics(capture_cold_start_metric=True) +def lambda_handler(event, context): + return app.resolve(event, context) diff --git a/examples/build_recipes/cdk/multi-stack/src/worker/__init__.py b/examples/build_recipes/cdk/multi-stack/src/worker/__init__.py new file mode 100644 index 00000000000..e69de29bb2d diff --git a/examples/build_recipes/cdk/multi-stack/src/worker/worker.py b/examples/build_recipes/cdk/multi-stack/src/worker/worker.py new file mode 100644 index 00000000000..99157c3b078 --- /dev/null +++ b/examples/build_recipes/cdk/multi-stack/src/worker/worker.py @@ -0,0 +1,82 @@ +from __future__ import annotations + +import json +import os +from typing import Any + +import boto3 + +from aws_lambda_powertools import Logger, Metrics, Tracer +from aws_lambda_powertools.utilities.batch import BatchProcessor, EventType, process_partial_response +from aws_lambda_powertools.utilities.typing import LambdaContext + +logger = Logger() +tracer = Tracer() +metrics = Metrics() + +# Initialize batch processor for SQS +processor = BatchProcessor(event_type=EventType.SQS) + +# Initialize AWS clients +dynamodb = boto3.resource("dynamodb") +table = dynamodb.Table(os.environ["TABLE_NAME"]) + + +@tracer.capture_method +def record_handler(record): + """Process individual SQS record""" + try: + # Parse message + message_data = json.loads(record.body) + task_id = message_data["task_id"] + task_type = message_data["task_type"] + + logger.info("Processing task", extra={"task_id": task_id, "task_type": task_type}) + + # Update task status in DynamoDB + table.update_item( + Key={"pk": task_id}, + UpdateExpression="SET #status = :status", + ExpressionAttributeNames={"#status": "status"}, + ExpressionAttributeValues={":status": "processing"}, + ) + + # Simulate work based on task type + if task_type == "email": + logger.info("Sending email", extra={"task_id": task_id}) + elif task_type == "report": + logger.info("Generating report", extra={"task_id": task_id}) + else: + logger.warning("Unknown task type", extra={"task_type": task_type}) + + # Mark as completed + table.update_item( + Key={"pk": task_id}, + UpdateExpression="SET #status = :status", + ExpressionAttributeNames={"#status": "status"}, + ExpressionAttributeValues={":status": "completed"}, + ) + + metrics.add_metric(name="TaskProcessed", unit="Count", value=1) + metrics.add_metadata(key="task_type", value=task_type) + + return {"status": "success", "task_id": task_id} + + except Exception as e: + logger.error("Task processing failed", extra={"error": str(e)}) + metrics.add_metric(name="TaskFailed", unit="Count", value=1) + raise + + +@logger.inject_lambda_context +@tracer.capture_lambda_handler +@metrics.log_metrics +def lambda_handler(event: dict[str, Any], context: LambdaContext): + """Process SQS messages using BatchProcessor""" + + return process_partial_response( + event=event, + record_handler=record_handler, + processor=processor, + context=context, + ) diff --git a/examples/build_recipes/cdk/multi-stack/stacks/__init__.py b/examples/build_recipes/cdk/multi-stack/stacks/__init__.py new file mode 100644 index 00000000000..e69de29bb2d diff --git a/examples/build_recipes/cdk/multi-stack/stacks/powertools_cdk_stack.py b/examples/build_recipes/cdk/multi-stack/stacks/powertools_cdk_stack.py new file mode 100644 index 00000000000..6ceba17d751 --- /dev/null +++ b/examples/build_recipes/cdk/multi-stack/stacks/powertools_cdk_stack.py @@ -0,0 +1,144 @@ +from aws_cdk import ( + Duration, + RemovalPolicy, + Stack, +) +from aws_cdk import ( + aws_apigateway as apigateway, +) +from aws_cdk import ( + aws_dynamodb as dynamodb, +) +from aws_cdk import ( + aws_lambda as _lambda, +) +from aws_cdk import ( + aws_lambda_event_sources as lambda_event_sources, +) +from aws_cdk import ( + aws_sqs as sqs, +) +from constructs import Construct + + +class PowertoolsStack(Stack): + def __init__(self, scope: Construct, construct_id: str, environment: str = "dev", **kwargs) -> None: + super().__init__(scope, construct_id, **kwargs) + + self.env = environment + + # Shared Powertools Layer (using public layer) + self.powertools_layer = self._create_powertools_layer() + + # DynamoDB Table + self.table = self._create_dynamodb_table() + + # SQS Queue + self.queue = self._create_sqs_queue() + + # Lambda Functions + self.api_function = self._create_api_function() + self.worker_function = self._create_worker_function() + + # API Gateway + self.api = self._create_api_gateway() + + def _create_powertools_layer(self) -> _lambda.ILayerVersion: + return _lambda.LayerVersion.from_layer_version_arn( + self, + "PowertoolsLayer", + layer_version_arn="arn:aws:lambda:us-east-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python313-x86_64:23", + ) + + def _create_dynamodb_table(self) -> dynamodb.Table: + return dynamodb.Table( + self, + "DataTable", + table_name=f"powertools-{self.env}-data", + partition_key=dynamodb.Attribute(name="pk", type=dynamodb.AttributeType.STRING), + billing_mode=dynamodb.BillingMode.PAY_PER_REQUEST, + removal_policy=RemovalPolicy.DESTROY if self.env != "prod" else RemovalPolicy.RETAIN, + ) + + def _create_sqs_queue(self) -> sqs.Queue: + return sqs.Queue( + self, + "WorkerQueue", + queue_name=f"powertools-{self.env}-worker", + visibility_timeout=Duration.seconds(180), + ) + + def _create_api_function(self) -> _lambda.Function: + function = _lambda.Function( + self, + "ApiFunction", + runtime=_lambda.Runtime.PYTHON_3_13, + handler="app.lambda_handler", + code=_lambda.Code.from_asset("src/app"), + layers=[self.powertools_layer], + timeout=Duration.seconds(30), + memory_size=512 if self.env == "prod" else 256, + environment={ + "ENVIRONMENT": self.env, + "POWERTOOLS_SERVICE_NAME": f"app-{self.env}", + "POWERTOOLS_METRICS_NAMESPACE": f"MyApp/{self.env}", + "POWERTOOLS_LOG_LEVEL": "INFO" if self.env == "prod" else "DEBUG", + "TABLE_NAME": self.table.table_name, + "QUEUE_URL": self.queue.queue_url, + }, + ) + + # Grant permissions + self.table.grant_read_write_data(function) + self.queue.grant_send_messages(function) + + return function + + def _create_worker_function(self) -> _lambda.Function: + function = _lambda.Function( + self, + "WorkerFunction", + runtime=_lambda.Runtime.PYTHON_3_13, + handler="worker.lambda_handler", + code=_lambda.Code.from_asset("src/worker"), + layers=[self.powertools_layer], + timeout=Duration.seconds(120), + memory_size=1024 if self.env == "prod" else 512, + environment={ + "ENVIRONMENT": self.env, + "POWERTOOLS_SERVICE_NAME": f"worker-{self.env}", + "POWERTOOLS_METRICS_NAMESPACE": f"MyApp/{self.env}", + "POWERTOOLS_LOG_LEVEL": "INFO" if self.env == "prod" else "DEBUG", + "TABLE_NAME": self.table.table_name, + }, + ) + + # Add SQS event source with partial failure support + function.add_event_source( + lambda_event_sources.SqsEventSource( + self.queue, + batch_size=10, + report_batch_item_failures=True, + ), + ) + + # Grant permissions + self.table.grant_read_write_data(function) + + return function + + def _create_api_gateway(self) -> apigateway.RestApi: + api = apigateway.RestApi( + self, + "ApiGateway", + rest_api_name=f"Powertools API - {self.env}", + description=f"API for {self.env} environment", + ) + + integration = apigateway.LambdaIntegration(self.api_function) + api.root.add_proxy( + default_integration=integration, + any_method=True, + ) + + return api diff --git a/examples/build_recipes/cicd/codebuild/buildspec-advanced.yml b/examples/build_recipes/cicd/codebuild/buildspec-advanced.yml new file mode 100644 index 00000000000..6441ad958f5 --- /dev/null +++ b/examples/build_recipes/cicd/codebuild/buildspec-advanced.yml @@ -0,0 +1,131 @@ +version: 0.2 + +env: + variables: + PYTHON_VERSION: "3.13" + BUILD_STAGE: "build" + parameter-store: + POWERTOOLS_VERSION: "/build/powertools-version" + +batch: + fast-fail: false + build-list: + - identifier: test + env: + variables: + BUILD_STAGE: "test" + - identifier: build_dev + env: + variables: + BUILD_STAGE: "build" + ENVIRONMENT: "dev" + depend-on: + - test + - identifier: build_prod + env: + variables: + BUILD_STAGE: "build" + ENVIRONMENT: "prod" + depend-on: + - test + +phases: + install: + runtime-versions: + python: $PYTHON_VERSION + commands: + - echo "Build stage: $BUILD_STAGE, Environment: $ENVIRONMENT" + - pip install --upgrade pip uv + + pre_build: + commands: + - | + if [ "$BUILD_STAGE" = "test" ]; then + echo "Installing test dependencies..." + uv venv test-env + source test-env/bin/activate + uv pip install aws-lambda-powertools[all]==$POWERTOOLS_VERSION pytest pytest-cov + cp -r src/ test-src/ + else + echo "Installing build dependencies..." + uv venv build-env + source build-env/bin/activate + uv pip install aws-lambda-powertools[all]==$POWERTOOLS_VERSION + uv pip install pydantic requests + fi + + build: + commands: + - | + if [ "$BUILD_STAGE" = "test" ]; then + echo "Running tests..." + source test-env/bin/activate + cd test-src + pytest tests/ --cov=. --cov-report=xml --cov-report=term + echo "Tests completed successfully" + else + echo "Building deployment package for $ENVIRONMENT..." + source build-env/bin/activate + + # Create environment-specific package + mkdir -p package-$ENVIRONMENT/ + cp -r build-env/lib/python*/site-packages/* package-$ENVIRONMENT/ + cp -r src/* package-$ENVIRONMENT/ + + # Environment-specific optimizations + if [ "$ENVIRONMENT" = "prod" ]; then + echo "Applying production optimizations..." + find package-$ENVIRONMENT/ -name "*.pyc" -delete + find package-$ENVIRONMENT/ -name "__pycache__" -type d -exec rm -rf {} + 2>/dev/null || true + find package-$ENVIRONMENT/ -name "tests" -type d -exec rm -rf {} + 2>/dev/null || true + find package-$ENVIRONMENT/ -name "*.dist-info" -type d -exec rm -rf {} + 2>/dev/null || true + fi + + # Create deployment ZIP + cd package-$ENVIRONMENT && zip -r ../lambda-$ENVIRONMENT.zip . && cd .. + + echo "Package size for $ENVIRONMENT: $(du -sh lambda-$ENVIRONMENT.zip)" + fi + + post_build: + commands: + - | + if [ "$BUILD_STAGE" = "build" ]; then + echo "Deploying to $ENVIRONMENT environment..." + + # Deploy to environment-specific function + aws lambda update-function-code \ + --function-name powertools-app-$ENVIRONMENT \ + --zip-file fileb://lambda-$ENVIRONMENT.zip \ + --region $AWS_DEFAULT_REGION + + # Update environment-specific configuration + LOG_LEVEL="INFO" + if [ "$ENVIRONMENT" = "dev" ]; then + LOG_LEVEL="DEBUG" + fi + + aws lambda update-function-configuration \ + --function-name powertools-app-$ENVIRONMENT \ + --environment Variables="{ + ENVIRONMENT=$ENVIRONMENT, + POWERTOOLS_SERVICE_NAME=powertools-app-$ENVIRONMENT, + POWERTOOLS_METRICS_NAMESPACE=MyApp/$ENVIRONMENT, + POWERTOOLS_LOG_LEVEL=$LOG_LEVEL + }" \ + --region $AWS_DEFAULT_REGION + + echo "Deployment to $ENVIRONMENT completed successfully!" + fi + +artifacts: + files: + - lambda-*.zip + - coverage.xml + name: lambda-artifacts-$(date +%Y-%m-%d-%H-%M-%S) + +cache: + paths: + - 'build-env/**/*' + - 'test-env/**/*' + diff --git a/examples/build_recipes/cicd/codebuild/buildspec.yml b/examples/build_recipes/cicd/codebuild/buildspec.yml new file mode 100644 index 00000000000..3605ba69805 --- /dev/null +++ b/examples/build_recipes/cicd/codebuild/buildspec.yml @@ -0,0 +1,85 @@ +version: 0.2 + +env: + variables: + PYTHON_VERSION: "3.13" + POWERTOOLS_VERSION: "3.18.0" + parameter-store: + FUNCTION_NAME: "/lambda/powertools-app/function-name" + +phases: + install: + runtime-versions: + python: $PYTHON_VERSION + commands: + - echo "Installing build dependencies..." + - pip install --upgrade pip + - pip install uv poetry # Install fast package managers + + pre_build: + commands: + - echo "Pre-build phase started on $(date)" + - echo "Python version: $(python --version)" + - echo "Installing application dependencies..." + + # Use uv for fast dependency installation + - uv venv build-env + - source build-env/bin/activate + - uv pip install aws-lambda-powertools[all]==$POWERTOOLS_VERSION + - uv pip install pydantic requests + + build: + commands: + - echo "Build started on $(date)" + - echo "Creating deployment package..." + + # Create optimized deployment package + - mkdir -p package/ + - cp -r build-env/lib/python*/site-packages/* package/ + - cp -r src/* package/ + + # Remove unnecessary files to reduce package size + - find package/ -name "*.pyc" -delete + - find package/ -name "__pycache__" -type d -exec rm -rf {} + 2>/dev/null || true + - find package/ -name "tests" -type d -exec rm -rf {} + 2>/dev/null || true + - find package/ -name "*.dist-info" -type d -exec rm -rf {} + 2>/dev/null || true + + # Create deployment ZIP + - cd package && zip -r ../lambda-deployment.zip . && cd .. + + # Show package info + - echo "Package size: $(du -sh lambda-deployment.zip)" + - echo "Package contents:" + - unzip -l lambda-deployment.zip | head -20 + + post_build: + commands: + - echo "Build completed on $(date)" + - echo "Deploying Lambda function..." + + # Deploy to Lambda + - aws lambda update-function-code \ + --function-name $FUNCTION_NAME \ + --zip-file fileb://lambda-deployment.zip \ + --region $AWS_DEFAULT_REGION + + # Update environment variables + - aws lambda update-function-configuration \ + --function-name $FUNCTION_NAME \ + --environment Variables="{ + POWERTOOLS_SERVICE_NAME=powertools-codebuild, + POWERTOOLS_METRICS_NAMESPACE=MyApp/CodeBuild, + POWERTOOLS_LOG_LEVEL=INFO + }" \ + --region $AWS_DEFAULT_REGION + + - echo "Deployment completed successfully!" + +artifacts: + files: + - lambda-deployment.zip + name: lambda-deployment-$(date +%Y-%m-%d-%H-%M-%S) + +cache: + paths: + - 'build-env/**/*' # Cache virtual environment for faster builds diff --git a/examples/build_recipes/cicd/github-actions/deploy-build-tools.yml b/examples/build_recipes/cicd/github-actions/deploy-build-tools.yml new file mode 100644 index 00000000000..a9469382955 --- /dev/null +++ b/examples/build_recipes/cicd/github-actions/deploy-build-tools.yml @@ -0,0 +1,92 @@ +name: Deploy with Different Build Tools + +on: + push: + branches: [main] + +jobs: + deploy-poetry: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 + + - name: Set up Python + uses: actions/setup-python@a26af69be951a213d495a4c3e4e4022e16d87065 # v5.6.0 + with: + python-version: '3.13' + + - name: Install Poetry + run: pip install --upgrade pip poetry + + - name: Build with Poetry + run: | + # Create deployment directory + mkdir -p poetry-deploy/ + + # Export and install dependencies + poetry export -f requirements.txt --output requirements.txt --without-hashes + pip install --platform manylinux2014_x86_64 --only-binary=:all: \ + --python-version 3.13 -r requirements.txt -t poetry-deploy/ + + # Copy source code + cp -r src/* poetry-deploy/ + + - name: Configure AWS credentials + uses: aws-actions/configure-aws-credentials@209f2a4450bb4b277e1dedaff40ad2fd8d4d0a4c # v4.3.0 + with: + role-to-assume: ${{ secrets.AWS_ROLE_TO_ASSUME }} + aws-region: us-east-1 + + - name: Deploy Poetry build + uses: aws-actions/aws-lambda-deploy@246115fccc1ad110c97f729696574d09eb5c690d + with: + function-name: powertools-poetry-function + code-artifacts-dir: poetry-deploy/ + handler: app.lambda_handler + runtime: python3.13 + environment: '{"POWERTOOLS_SERVICE_NAME":"powertools-poetry","POWERTOOLS_METRICS_NAMESPACE":"MyApp","POWERTOOLS_LOG_LEVEL":"INFO"}' + role: ${{ secrets.LAMBDA_EXECUTION_ROLE_ARN }} + + deploy-uv: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 + + - name: Set up Python + uses: actions/setup-python@a26af69be951a213d495a4c3e4e4022e16d87065 # v5.6.0 + with: + python-version: '3.13' + + - name: Build with uv (fastest) + run: | + # Install uv + pip install uv + + # Create deployment directory + mkdir -p uv-deploy/ + + # Install dependencies with uv (much faster) + uv pip install \ + --target uv-deploy/ \ + --python-version 3.13 \ + --platform manylinux2014_x86_64 --only-binary=:all: \ + aws-lambda-powertools[all] pydantic requests + + # Copy source code + cp -r src/* uv-deploy/ + + - name: Configure AWS credentials + uses: aws-actions/configure-aws-credentials@209f2a4450bb4b277e1dedaff40ad2fd8d4d0a4c # v4.3.0 + with: + role-to-assume: ${{ secrets.AWS_ROLE_TO_ASSUME }} + aws-region: us-east-1 + + - name: Deploy uv build + uses: aws-actions/aws-lambda-deploy@246115fccc1ad110c97f729696574d09eb5c690d # v1.0.1 + with: + function-name: powertools-uv-function + code-artifacts-dir: uv-deploy/ + handler: app.lambda_handler + runtime: python3.13 + environment: '{"POWERTOOLS_SERVICE_NAME":"powertools-uv","POWERTOOLS_METRICS_NAMESPACE":"MyApp","POWERTOOLS_LOG_LEVEL":"INFO"}' + role: ${{ secrets.LAMBDA_EXECUTION_ROLE_ARN }} diff --git a/examples/build_recipes/cicd/github-actions/deploy-modern.yml b/examples/build_recipes/cicd/github-actions/deploy-modern.yml new file mode 100644 index 00000000000..0902f471e16 --- /dev/null +++ b/examples/build_recipes/cicd/github-actions/deploy-modern.yml @@ -0,0 +1,84 @@ +name: Deploy Lambda with AWS Lambda Deploy Action + +on: + push: + branches: [main] + pull_request: + branches: [main] + +env: + AWS_REGION: us-east-1 + PYTHON_VERSION: '3.13' + +jobs: + test: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 + + - name: Set up Python + uses: actions/setup-python@a26af69be951a213d495a4c3e4e4022e16d87065 # v5.6.0 + with: + python-version: ${{ env.PYTHON_VERSION }} + + - name: Install dependencies + run: | + pip install aws-lambda-powertools[all] pytest pytest-cov + + - name: Run tests + run: | + pytest tests/ --cov=src/ --cov-report=xml + + - name: Upload coverage to Codecov + uses: codecov/codecov-action@v4 + with: + file: ./coverage.xml + + deploy: + needs: test + runs-on: ubuntu-latest + if: github.ref == 'refs/heads/main' + + steps: + - uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 + + - name: Set up Python + uses: actions/setup-python@a26af69be951a213d495a4c3e4e4022e16d87065 # v5.6.0 + with: + python-version: ${{ env.PYTHON_VERSION }} + + - name: Prepare deployment directory + run: | + # Create deployment directory with dependencies + mkdir -p deploy/ + + # Install dependencies with Linux-compatible wheels + pip install \ + --platform manylinux2014_x86_64 \ + --target deploy/ \ + --implementation cp \ + --python-version ${{ env.PYTHON_VERSION }} \ + --only-binary=:all: \ + --upgrade \ + aws-lambda-powertools[all] pydantic requests + + # Copy application code + cp -r src/* deploy/ + + - name: Configure AWS credentials + uses: aws-actions/configure-aws-credentials@209f2a4450bb4b277e1dedaff40ad2fd8d4d0a4c # v4.3.0 + with: + role-to-assume: ${{ secrets.AWS_ROLE_TO_ASSUME }} + aws-region: ${{ env.AWS_REGION }} + + - name: Deploy to Lambda + uses: aws-actions/aws-lambda-deploy@246115fccc1ad110c97f729696574d09eb5c690d + with: + function-name: powertools-lambda-function + code-artifacts-dir: deploy/ + handler: app.lambda_handler + runtime: python3.13 + environment: '{"POWERTOOLS_SERVICE_NAME":"powertools-app","POWERTOOLS_METRICS_NAMESPACE":"MyApp","POWERTOOLS_LOG_LEVEL":"INFO"}' + timeout: 30 + memory-size: 512 + role: ${{ secrets.LAMBDA_EXECUTION_ROLE_ARN }} diff --git a/examples/build_recipes/cicd/github-actions/deploy-multi-env.yml b/examples/build_recipes/cicd/github-actions/deploy-multi-env.yml new file mode 100644 index 00000000000..f1b343bce4a --- /dev/null +++ b/examples/build_recipes/cicd/github-actions/deploy-multi-env.yml @@ -0,0 +1,80 @@ +name: Multi-Environment Lambda Deployment + +on: + push: + branches: [main, develop, staging] + +jobs: + deploy: + runs-on: ubuntu-latest + strategy: + matrix: + include: + - branch: develop + environment: dev + function-suffix: -dev + memory: 256 + timeout: 30 + log-level: DEBUG + - branch: staging + environment: staging + function-suffix: -staging + memory: 512 + timeout: 45 + log-level: INFO + - branch: main + environment: prod + function-suffix: -prod + memory: 1024 + timeout: 60 + log-level: INFO + + steps: + - uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 + if: github.ref == format('refs/heads/{0}', matrix.branch) + + - name: Set up Python + if: github.ref == format('refs/heads/{0}', matrix.branch) + uses: actions/setup-python@a26af69be951a213d495a4c3e4e4022e16d87065 # v5.6.0 + with: + python-version: '3.13' + + - name: Prepare deployment with uv (fast) + if: github.ref == format('refs/heads/{0}', matrix.branch) + run: | + # Install uv for fast dependency management + pip install uv + + # Create deployment directory + mkdir -p deploy-${{ matrix.environment }}/ + + # Install dependencies with uv (much faster than pip) + uv pip install \ + --target deploy-${{ matrix.environment }}/ \ + --python-version 3.13 \ + --platform manylinux2014_x86_64 --only-binary=:all: \ + aws-lambda-powertools[all] pydantic requests + + # Copy application code + cp -r src/* deploy-${{ matrix.environment }}/ + + - name: Configure AWS credentials + if: github.ref == format('refs/heads/{0}', matrix.branch) + uses: aws-actions/configure-aws-credentials@209f2a4450bb4b277e1dedaff40ad2fd8d4d0a4c # v4.3.0 + with: + role-to-assume: ${{ secrets.AWS_ROLE_TO_ASSUME }} + aws-region: us-east-1 + + - name: Deploy to Lambda + if: github.ref == format('refs/heads/{0}', matrix.branch) + uses: aws-actions/aws-lambda-deploy@246115fccc1ad110c97f729696574d09eb5c690d # v1.0.1 + with: + function-name: powertools-app${{ matrix.function-suffix }} + code-artifacts-dir: deploy-${{ matrix.environment }}/ + handler: app.lambda_handler + runtime: python3.13 + environment: '{"ENVIRONMENT":"${{ matrix.environment }}","POWERTOOLS_SERVICE_NAME":"powertools-app-${{ matrix.environment }}","POWERTOOLS_METRICS_NAMESPACE":"MyApp/${{ matrix.environment }}","POWERTOOLS_LOG_LEVEL":"${{ matrix.log-level }}"}' + timeout: ${{ matrix.timeout }} + memory-size: ${{ matrix.memory }} + role: ${{ secrets.LAMBDA_EXECUTION_ROLE_ARN }} + tags: '{"Environment":"${{ matrix.environment }}","Project":"powertools-demo","ManagedBy":"github-actions"}' diff --git a/examples/build_recipes/cicd/github-actions/deploy-s3.yml b/examples/build_recipes/cicd/github-actions/deploy-s3.yml new file mode 100644 index 00000000000..72ad1e6c732 --- /dev/null +++ b/examples/build_recipes/cicd/github-actions/deploy-s3.yml @@ -0,0 +1,58 @@ +name: Deploy Lambda via S3 + +on: + push: + branches: [main] + +env: + AWS_REGION: us-east-1 + S3_BUCKET: my-lambda-deployments-bucket + +jobs: + deploy: + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 + + - name: Set up Python + uses: actions/setup-python@a26af69be951a213d495a4c3e4e4022e16d87065 # v5.6.0 + with: + python-version: '3.13' + + - name: Prepare deployment directory + run: | + mkdir -p lambda-package/ + + # Install Powertools and dependencies + pip install \ + --platform manylinux2014_x86_64 \ + --target lambda-package/ \ + --implementation cp \ + --python-version 3.13 \ + --only-binary=:all: \ + aws-lambda-powertools[all] pydantic requests + + # Copy source code + cp -r src/* lambda-package/ + + - name: Configure AWS credentials + uses: aws-actions/configure-aws-credentials@209f2a4450bb4b277e1dedaff40ad2fd8d4d0a4c # v4.3.0 + with: + role-to-assume: ${{ secrets.AWS_ROLE_TO_ASSUME }} + aws-region: ${{ env.AWS_REGION }} + + - name: Deploy to Lambda via S3 + uses: aws-actions/aws-lambda-deploy@246115fccc1ad110c97f729696574d09eb5c690d # v1.0.1 + with: + function-name: powertools-s3-function + code-artifacts-dir: lambda-package/ + handler: app.lambda_handler + runtime: python3.13 + s3-bucket: ${{ env.S3_BUCKET }} + s3-key: deployments/powertools-function-${{ github.sha }}.zip + environment: '{"POWERTOOLS_SERVICE_NAME":"powertools-s3","POWERTOOLS_METRICS_NAMESPACE":"MyApp","POWERTOOLS_LOG_LEVEL":"INFO"}' + timeout: 30 + memory-size: 512 + role: ${{ secrets.LAMBDA_EXECUTION_ROLE_ARN }} + publish: true # Publish a new version diff --git a/examples/build_recipes/cicd/github-actions/deploy-simple.yml b/examples/build_recipes/cicd/github-actions/deploy-simple.yml new file mode 100644 index 00000000000..1850bb742d4 --- /dev/null +++ b/examples/build_recipes/cicd/github-actions/deploy-simple.yml @@ -0,0 +1,45 @@ +name: Simple Lambda Deployment from Source + +on: + push: + branches: [main] + +env: + AWS_REGION: us-east-1 + +jobs: + deploy: + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 + + - name: Set up Python + uses: actions/setup-python@a26af69be951a213d495a4c3e4e4022e16d87065 # v5.6.0 + with: + python-version: '3.13' + + - name: Install dependencies + run: | + # Simple pip install - the action handles the rest + pip install --platform manylinux2014_x86_64 --only-binary=:all: \ + --python-version 3.13 -r requirements.txt -t src-deploy/ + + - name: Configure AWS credentials + uses: aws-actions/configure-aws-credentials@209f2a4450bb4b277e1dedaff40ad2fd8d4d0a4c # v4.3.0 + with: + role-to-assume: ${{ secrets.AWS_ROLE_TO_ASSUME }} + aws-region: ${{ env.AWS_REGION }} + + - name: Deploy to Lambda + uses: aws-actions/aws-lambda-deploy@246115fccc1ad110c97f729696574d09eb5c690d + with: + function-name: powertools-simple-function + code-artifacts-dir: src-deploy/ # Deploy from current directory + handler: app.lambda_handler + runtime: python3.13 + environment: '{"POWERTOOLS_SERVICE_NAME":"powertools-simple","POWERTOOLS_METRICS_NAMESPACE":"MyApp","POWERTOOLS_LOG_LEVEL":"INFO"}' + timeout: 30 + memory-size: 512 + role: ${{ secrets.LAMBDA_EXECUTION_ROLE_ARN }} + dry-run: false # Set to true for validation without deployment diff --git a/examples/build_recipes/pants/basic_pants/BUILD b/examples/build_recipes/pants/basic_pants/BUILD new file mode 100644 index 00000000000..df536ae3444 --- /dev/null +++ b/examples/build_recipes/pants/basic_pants/BUILD @@ -0,0 +1,31 @@ +python_sources( + name="lambda_sources", + sources=["*.py"], +) + +python_requirement( + name="aws-lambda-powertools", + requirements=["aws-lambda-powertools[all]==3.18.0"], +) + +python_requirement( + name="pydantic", + requirements=["pydantic==2.10.4"], +) + +python_requirement( + name="requests", + requirements=["requests>=2.32.4"], +) + +pex_binary( + name="lambda_function", + entry_point="app.py:lambda_handler", + dependencies=[ + ":lambda_sources", + ":aws-lambda-powertools", + ":pydantic", + ":requests", + ], + platforms=["linux_x86_64-cp-39-cp39"], +) diff --git a/examples/build_recipes/pants/basic_pants/app_pants.py b/examples/build_recipes/pants/basic_pants/app_pants.py new file mode 100644 index 00000000000..8fb16000bd4 --- /dev/null +++ b/examples/build_recipes/pants/basic_pants/app_pants.py @@ -0,0 +1,41 @@ +from __future__ import annotations + +from typing import Any + +import requests +from pydantic import BaseModel + +from aws_lambda_powertools import Logger, Metrics, Tracer +from aws_lambda_powertools.event_handler import APIGatewayRestResolver +from aws_lambda_powertools.utilities.typing import LambdaContext + +logger = Logger() +tracer = Tracer() +metrics = Metrics() +app = APIGatewayRestResolver() + + +class TodoItem(BaseModel): + id: int + title: str + completed: bool = False + user_id: int | None = None + + +@app.get("/todos") +@tracer.capture_method +def get_todos() -> TodoItem: + """Fetch todos from external API""" + logger.info("Fetching todos from external API") + + response = requests.get("https://jsonplaceholder.typicode.com/todos") + response.raise_for_status() + + return response.json()[0] + + +@logger.inject_lambda_context +@tracer.capture_lambda_handler +@metrics.log_metrics +def lambda_handler(event: dict[str, Any], context: LambdaContext): + return app.resolve(event, context) diff --git a/examples/build_recipes/pants/basic_pants/build-pants.sh b/examples/build_recipes/pants/basic_pants/build-pants.sh new file mode 100644 index 00000000000..01f207f34ce --- /dev/null +++ b/examples/build_recipes/pants/basic_pants/build-pants.sh @@ -0,0 +1,22 @@ +#!/bin/bash + +# Build the PEX binary +pants package :lambda_function + +# The PEX file is created in dist/ +# Rename it to a more descriptive name +mv dist/lambda_function.pex lambda-pants.pex + +# For Lambda deployment, we need to extract the PEX +mkdir -p build/ +cd build/ + +# Extract PEX contents +python ../lambda-pants.pex --pex-root . --pex-path . -c "import sys; sys.exit(0)" + +# Create deployment zip +zip -r ../lambda-pants.zip . +cd .. + +echo "✅ Pants deployment package created: lambda-pants.zip" +echo "✅ Pants PEX binary created: lambda-pants.pex" diff --git a/examples/build_recipes/pants/basic_pants/pants.toml b/examples/build_recipes/pants/basic_pants/pants.toml new file mode 100644 index 00000000000..fc4b996bc8e --- /dev/null +++ b/examples/build_recipes/pants/basic_pants/pants.toml @@ -0,0 +1,17 @@ +[GLOBAL] +pants_version = "2.21.0" +backend_packages = [ + "pants.backend.python", + "pants.backend.python.lint.black", + "pants.backend.python.lint.flake8", + "pants.backend.python.typecheck.mypy", +] + +[python] +interpreter_constraints = [">=3.9,<3.14"] + +[python-infer] +use_rust_parser = true + +[source] +root_patterns = ["/"] diff --git a/examples/build_recipes/pants/multi-target/BUILD b/examples/build_recipes/pants/multi-target/BUILD new file mode 100644 index 00000000000..6f3cba9e7dc --- /dev/null +++ b/examples/build_recipes/pants/multi-target/BUILD @@ -0,0 +1,31 @@ +# Shared dependencies +python_requirement( + name="powertools", + requirements=["aws-lambda-powertools[all]==3.18.0"], +) + +# API Lambda function +python_sources( + name="api_sources", + sources=["api/*.py"], +) + +pex_binary( + name="api_lambda", + entry_point="api/handler.py:lambda_handler", + dependencies=[":api_sources", ":powertools"], + platforms=["linux_x86_64-cp-39-cp39"], +) + +# Worker Lambda function +python_sources( + name="worker_sources", + sources=["worker/*.py"], +) + +pex_binary( + name="worker_lambda", + entry_point="worker/handler.py:lambda_handler", + dependencies=[":worker_sources", ":powertools"], + platforms=["linux_x86_64-cp-39-cp39"], +) diff --git a/examples/build_recipes/pants/multi-target/app/handler.py b/examples/build_recipes/pants/multi-target/app/handler.py new file mode 100644 index 00000000000..c24d0d97cd2 --- /dev/null +++ b/examples/build_recipes/pants/multi-target/app/handler.py @@ -0,0 +1,35 @@ +from aws_lambda_powertools import Logger, Metrics, Tracer +from aws_lambda_powertools.event_handler import APIGatewayRestResolver +from aws_lambda_powertools.logging import correlation_paths +from aws_lambda_powertools.metrics import MetricUnit + +logger = Logger() +tracer = Tracer() +metrics = Metrics() +app = APIGatewayRestResolver() + + +@app.get("/health") +def health_check(): + return {"status": "healthy", "service": "powertools-pants-api"} + + +@app.get("/metrics") +def get_metrics(): + metrics.add_metric(name="MetricsEndpointCalled", unit=MetricUnit.Count, value=1) + return {"message": "Metrics recorded"} + + +@app.post("/tasks") +def create_task(): + task_data = app.current_event.json_body + logger.info("Task created", extra={"task": task_data}) + metrics.add_metric(name="TaskCreated", unit=MetricUnit.Count, value=1) + return {"message": "Task created successfully", "task_id": task_data.get("id")} + + +@logger.inject_lambda_context(correlation_id_path=correlation_paths.API_GATEWAY_REST) +@tracer.capture_lambda_handler +@metrics.log_metrics(capture_cold_start_metric=True) +def lambda_handler(event, context): + return app.resolve(event, context) diff --git a/examples/build_recipes/pants/multi-target/build-pants-multi.sh b/examples/build_recipes/pants/multi-target/build-pants-multi.sh new file mode 100644 index 00000000000..dea42d04b10 --- /dev/null +++ b/examples/build_recipes/pants/multi-target/build-pants-multi.sh @@ -0,0 +1,22 @@ +#!/bin/bash + +# Build all Lambda functions +pants package :: + +# Process each Lambda function +for pex_file in dist/*.pex; do + base_name=$(basename "$pex_file" .pex) + + # Create build directory for this function + mkdir -p "build/$base_name" + cd "build/$base_name" + + # Extract PEX contents + python "../../$pex_file" --pex-root . --pex-path . -c "import sys; sys.exit(0)" + + # Create deployment zip + zip -r "../../$base_name.zip" . + cd ../.. + + echo "✅ Created: $base_name.zip" +done diff --git a/examples/build_recipes/pants/multi-target/worker/worker_pants.py b/examples/build_recipes/pants/multi-target/worker/worker_pants.py new file mode 100644 index 00000000000..14efa4f684e --- /dev/null +++ b/examples/build_recipes/pants/multi-target/worker/worker_pants.py @@ -0,0 +1,59 @@ +from __future__ import annotations + +import json +from typing import Any + +from aws_lambda_powertools import Logger, Metrics, Tracer +from aws_lambda_powertools.utilities.batch import BatchProcessor, EventType, process_partial_response +from aws_lambda_powertools.utilities.typing import LambdaContext + +logger = Logger() +tracer = Tracer() +metrics = Metrics() + +# Initialize batch processor for SQS +processor = BatchProcessor(event_type=EventType.SQS) + + +@tracer.capture_method +def record_handler(record): + """Process individual SQS record""" + try: + # Parse message + message_data = json.loads(record.body) + task_id = message_data.get("task_id", "unknown") + task_type = message_data.get("task_type", "default") + + logger.info("Processing task", extra={"task_id": task_id, "task_type": task_type}) + + # Simulate work based on task type + if task_type == "email": + logger.info("Sending email", extra={"task_id": task_id}) + elif task_type == "report": + logger.info("Generating report", extra={"task_id": task_id}) + else: + logger.info("Processing default task", extra={"task_id": task_id}) + + metrics.add_metric(name="TaskProcessed", unit="Count", value=1) + metrics.add_metadata(key="task_type", value=task_type) + + return {"status": "success", "task_id": task_id} + + except Exception as e: + logger.error("Task processing failed", extra={"error": str(e)}) + metrics.add_metric(name="TaskFailed", unit="Count", value=1) + raise + + +@logger.inject_lambda_context +@tracer.capture_lambda_handler +@metrics.log_metrics +def lambda_handler(event: dict[str, Any], context: LambdaContext): + """Process SQS messages using BatchProcessor""" + + return process_partial_response( + event=event, + record_handler=record_handler, + processor=processor, + context=context, + ) diff --git a/examples/build_recipes/pip/app_pip.py b/examples/build_recipes/pip/app_pip.py new file mode 100644 index 00000000000..386bf4f0f83 --- /dev/null +++ b/examples/build_recipes/pip/app_pip.py @@ -0,0 +1,28 @@ +from aws_lambda_powertools import Logger, Metrics, Tracer +from aws_lambda_powertools.event_handler import APIGatewayRestResolver +from aws_lambda_powertools.logging import correlation_paths +from aws_lambda_powertools.metrics import MetricUnit + +logger = Logger() +tracer = Tracer() +metrics = Metrics() +app = APIGatewayRestResolver() + + +@app.get("/hello") +def hello(): + logger.info("Hello World API called") + metrics.add_metric(name="HelloWorldInvocations", unit=MetricUnit.Count, value=1) + return {"message": "Hello World from Powertools!"} + + +@app.get("/health") +def health_check(): + return {"status": "healthy", "service": "powertools-pip-example"} + + +@logger.inject_lambda_context(correlation_id_path=correlation_paths.API_GATEWAY_REST) +@tracer.capture_lambda_handler +@metrics.log_metrics(capture_cold_start_metric=True) +def lambda_handler(event, context): + return app.resolve(event, context) diff --git a/examples/build_recipes/pip/build-cross-platform.sh b/examples/build_recipes/pip/build-cross-platform.sh new file mode 100644 index 00000000000..a5b6990e122 --- /dev/null +++ b/examples/build_recipes/pip/build-cross-platform.sh @@ -0,0 +1,24 @@ +#!/bin/bash + +# Build for Lambda x86_64 (most common) +mkdir -p build-x86_64/ +pip install --platform manylinux2014_x86_64 --only-binary=:all: \ + --python-version 3.13 --target build-x86_64/ \ + -r requirements.txt + +# Build for Lambda ARM64 (Graviton2) +mkdir -p build-arm64/ +pip install --platform manylinux2014_aarch64 --only-binary=:all: \ + --python-version 3.13 --target build-arm64/ \ + -r requirements.txt + +# Copy application code to both builds +cp app_pip.py build-x86_64/ +cp app_pip.py build-arm64/ + +# Create deployment packages +cd build-x86_64 && zip -r ../lambda-x86_64.zip . && cd .. +cd build-arm64 && zip -r ../lambda-arm64.zip . && cd .. + +echo "✅ x86_64 package: lambda-x86_64.zip" +echo "✅ ARM64 package: lambda-arm64.zip" diff --git a/examples/build_recipes/pip/build-with-layer.sh b/examples/build_recipes/pip/build-with-layer.sh new file mode 100644 index 00000000000..99c3c69114b --- /dev/null +++ b/examples/build_recipes/pip/build-with-layer.sh @@ -0,0 +1,19 @@ +#!/bin/bash + +# Build Lambda Layer with compatible wheels +mkdir -p layer/python/ +pip install --platform manylinux2014_x86_64 --only-binary=:all: \ + --python-version 3.13 --target layer/python/ \ + -r requirements-layer.txt +cd layer && zip -r ../powertools-layer.zip . && cd .. + +# Build application package (smaller without Powertools) +mkdir -p build/ +pip install --platform manylinux2014_x86_64 --only-binary=:all: \ + --python-version 3.13 --target build/ \ + -r requirements-app.txt +cp app_pip.py build/ +cd build && zip -r ../lambda-app.zip . && cd .. + +echo "✅ Layer created: powertools-layer.zip" +echo "✅ App package created: lambda-app.zip" diff --git a/examples/build_recipes/pip/build.sh b/examples/build_recipes/pip/build.sh new file mode 100755 index 00000000000..c93d62d5e26 --- /dev/null +++ b/examples/build_recipes/pip/build.sh @@ -0,0 +1,17 @@ +#!/bin/bash + +# Create build directory +mkdir -p build/ + +# Install dependencies with Lambda-compatible wheels +pip install --platform manylinux2014_x86_64 --only-binary=:all: \ + --python-version 3.13 --target build/ \ + -r requirements.txt + +# Copy application code +cp app_pip.py build/ + +# Create deployment package +cd build && zip -r ../lambda-deployment.zip . && cd .. + +echo "✅ Deployment package created: lambda-deployment.zip" diff --git a/examples/build_recipes/poetry/Dockerfile.poetry b/examples/build_recipes/poetry/Dockerfile.poetry new file mode 100644 index 00000000000..0a40f8fa11f --- /dev/null +++ b/examples/build_recipes/poetry/Dockerfile.poetry @@ -0,0 +1,18 @@ +#Public Lambda image +FROM public.ecr.aws/lambda/python@sha256:7e7f098baa11a527fbe59f33f4ed032a36b6e87b22ea73da1175522095885f74 + +# Set workdir file +WORKDIR /tmp/app + +# Copy poetry files +COPY pyproject.toml poetry.lock ./ + +# Configure poetry and install dependencies +RUN poetry config virtualenvs.create false \ + pip install poetry \ + poetry install --only=main --no-root + +# Copy application code +COPY app_poetry.py ./ + +CMD ["app_poetry.lambda_handler"] diff --git a/examples/build_recipes/poetry/app_poetry.py b/examples/build_recipes/poetry/app_poetry.py new file mode 100644 index 00000000000..d570cca39cf --- /dev/null +++ b/examples/build_recipes/poetry/app_poetry.py @@ -0,0 +1,40 @@ +from typing import Optional + +from pydantic import BaseModel + +from aws_lambda_powertools import Logger, Metrics, Tracer +from aws_lambda_powertools.event_handler import APIGatewayRestResolver +from aws_lambda_powertools.logging import correlation_paths +from aws_lambda_powertools.metrics import MetricUnit + +logger = Logger() +tracer = Tracer() +metrics = Metrics() +app = APIGatewayRestResolver() + + +class UserModel(BaseModel): + name: str + email: str + age: Optional[int] = None + + +@app.post("/users") +def create_user(user: UserModel): + logger.info("Creating user", extra={"user": user.model_dump()}) + metrics.add_metric(name="UserCreated", unit=MetricUnit.Count, value=1) + return {"message": f"User {user.name} created successfully", "user": user.model_dump()} + + +@app.get("/users") +def list_users(): + logger.info("Listing users") + metrics.add_metric(name="UsersListed", unit=MetricUnit.Count, value=1) + return {"users": [{"name": "John Doe", "email": "john@example.com", "age": 30}]} + + +@logger.inject_lambda_context(correlation_id_path=correlation_paths.API_GATEWAY_REST) +@tracer.capture_lambda_handler +@metrics.log_metrics(capture_cold_start_metric=True) +def lambda_handler(event, context): + return app.resolve(event, context) diff --git a/examples/build_recipes/poetry/build-poetry-cross-platform.sh b/examples/build_recipes/poetry/build-poetry-cross-platform.sh new file mode 100644 index 00000000000..d63850b90e1 --- /dev/null +++ b/examples/build_recipes/poetry/build-poetry-cross-platform.sh @@ -0,0 +1,30 @@ +#!/bin/bash + +# Export requirements for Lambda +poetry export -f requirements.txt --output requirements.txt --without-hashes + +# Build for Lambda x86_64 (most common) +mkdir -p build-x86_64/ +pip install --platform manylinux2014_x86_64 --only-binary=:all: \ + --python-version 3.13 --target build-x86_64/ \ + -r requirements.txt + +# Build for Lambda ARM64 (Graviton2) +mkdir -p build-arm64/ +pip install --platform manylinux2014_aarch64 --only-binary=:all: \ + --python-version 3.13 --target build-arm64/ \ + -r requirements.txt + +# Copy application code to both builds +cp app_poetry.py build-x86_64/ +cp app_poetry.py build-arm64/ + +# Create deployment packages +cd build-x86_64 && zip -r ../lambda-poetry-x86_64.zip . && cd .. +cd build-arm64 && zip -r ../lambda-poetry-arm64.zip . && cd .. + +# Cleanup +rm requirements.txt + +echo "✅ x86_64 package: lambda-poetry-x86_64.zip" +echo "✅ ARM64 package: lambda-poetry-arm64.zip" diff --git a/examples/build_recipes/poetry/build-poetry-native.sh b/examples/build_recipes/poetry/build-poetry-native.sh new file mode 100644 index 00000000000..0534c9d4747 --- /dev/null +++ b/examples/build_recipes/poetry/build-poetry-native.sh @@ -0,0 +1,21 @@ +#!/bin/bash + +# Create build directory +mkdir -p build/ + +# Install dependencies directly to build directory using Poetry +# Note: This method may not handle cross-platform compatibility as well +poetry install --only=main --no-root + +# Copy installed packages from virtual environment +VENV_PATH=$(poetry env info --path) +cp -r "$VENV_PATH/lib/python*/site-packages"/* build/ + +# Copy application code +cp app_poetry.py build/ + +# Create deployment package +cd build && zip -r ../lambda-poetry-native.zip . && cd .. + +echo "✅ Poetry native deployment package created: lambda-poetry-native.zip" +echo "⚠️ Warning: This method may have cross-platform compatibility issues" diff --git a/examples/build_recipes/poetry/build-with-poetry-docker.sh b/examples/build_recipes/poetry/build-with-poetry-docker.sh new file mode 100644 index 00000000000..eaadded1ed0 --- /dev/null +++ b/examples/build_recipes/poetry/build-with-poetry-docker.sh @@ -0,0 +1,14 @@ +#!/bin/bash + +# Build Docker image +docker build -t lambda-powertools-app -f Dockerfile.poetry . + +# Create container and extract files +docker create --name temp-container lambda-powertools-app +docker cp temp-container:/var/task ./build +docker rm temp-container + +# Create deployment package +cd build && zip -r ../lambda-docker.zip . && cd .. + +echo "✅ Docker-based deployment package created: lambda-docker.zip" diff --git a/examples/build_recipes/poetry/build-with-poetry.sh b/examples/build_recipes/poetry/build-with-poetry.sh new file mode 100644 index 00000000000..8826f3318a4 --- /dev/null +++ b/examples/build_recipes/poetry/build-with-poetry.sh @@ -0,0 +1,23 @@ +#!/bin/bash + +# Export requirements for Lambda +poetry export -f requirements.txt --output requirements.txt --without-hashes + +# Create build directory +mkdir -p build/ + +# Install dependencies with Lambda-compatible wheels +pip install --platform manylinux2014_x86_64 --only-binary=:all: \ + --python-version 3.13 --target build/ \ + -r requirements.txt + +# Copy application code +cp app_poetry.py build/ + +# Create deployment package +cd build && zip -r ../lambda-poetry.zip . && cd .. + +# Cleanup +rm requirements.txt + +echo "✅ Poetry deployment package created: lambda-poetry.zip" diff --git a/examples/build_recipes/poetry/pyproject.toml b/examples/build_recipes/poetry/pyproject.toml new file mode 100644 index 00000000000..2fa598465db --- /dev/null +++ b/examples/build_recipes/poetry/pyproject.toml @@ -0,0 +1,23 @@ +[tool.poetry] +name = "lambda-powertools-app" +version = "0.1.0" +description = "Lambda function with Powertools" + +[tool.poetry.dependencies] +python = "^3.10" +aws-lambda-powertools = {extras = ["all"], version = "^3.18.0"} +pydantic = "^2.10.0" +requests = "^2.32.0" + +[tool.poetry.group.dev.dependencies] +pytest = "^8.0.0" +black = "^24.0.0" +mypy = "^1.8.0" + +[tool.poetry.requires-plugins] +poetry-plugin-export = ">=1.8" + +[build-system] +requires = ["poetry-core"] +build-backend = "poetry.core.masonry.api" + diff --git a/examples/build_recipes/sam/multi-env/template.yaml b/examples/build_recipes/sam/multi-env/template.yaml new file mode 100644 index 00000000000..0d7555cb797 --- /dev/null +++ b/examples/build_recipes/sam/multi-env/template.yaml @@ -0,0 +1,91 @@ +AWSTemplateFormatVersion: '2010-09-09' +Transform: AWS::Serverless-2016-10-31 + +Parameters: + Environment: + Type: String + Default: dev + AllowedValues: [dev, staging, prod] + Description: Environment name + + LogLevel: + Type: String + Default: INFO + AllowedValues: [DEBUG, INFO, WARNING, ERROR] + Description: Log level for Lambda functions + +Mappings: + EnvironmentMap: + dev: + MemorySize: 256 + Timeout: 30 + staging: + MemorySize: 512 + Timeout: 60 + prod: + MemorySize: 1024 + Timeout: 120 + +Globals: + Function: + Runtime: python3.13 + MemorySize: !FindInMap [EnvironmentMap, !Ref Environment, MemorySize] + Timeout: !FindInMap [EnvironmentMap, !Ref Environment, Timeout] + Environment: + Variables: + ENVIRONMENT: !Ref Environment + POWERTOOLS_SERVICE_NAME: !Sub "${AWS::StackName}-${Environment}" + POWERTOOLS_METRICS_NAMESPACE: !Sub "MyApp/${Environment}" + POWERTOOLS_LOG_LEVEL: !Ref LogLevel + POWERTOOLS_DEV: !If [IsDev, "true", "false"] + +Conditions: + IsDev: !Equals [!Ref Environment, "dev"] + IsProd: !Equals [!Ref Environment, "prod"] + +Resources: + # Dependencies Layer for application dependencies + DependenciesLayer: + Type: AWS::Serverless::LayerVersion + Properties: + LayerName: !Sub "${AWS::StackName}-${Environment}-dependencies" + Description: !Sub "Application dependencies for ${Environment}" + ContentUri: layers/dependencies/ + CompatibleRuntimes: + - python3.13 + RetentionPolicy: Delete + + ApiFunction: + Type: AWS::Serverless::Function + Properties: + CodeUri: src/ + Handler: app.lambda_handler + Layers: + - arn:aws:lambda:us-east-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python313-x86_64:23 + - !Ref DependenciesLayer + Events: + ApiEvent: + Type: Api + Properties: + Path: /{proxy+} + Method: ANY + Environment: + Variables: + TABLE_NAME: !Ref DynamoTable + + DynamoTable: + Type: AWS::DynamoDB::Table + Properties: + TableName: !Sub "${AWS::StackName}-${Environment}-data" + BillingMode: !If [IsProd, "PROVISIONED", "PAY_PER_REQUEST"] + AttributeDefinitions: + - AttributeName: pk + AttributeType: S + KeySchema: + - AttributeName: pk + KeyType: HASH + ProvisionedThroughput: !If + - IsProd + - ReadCapacityUnits: 5 + WriteCapacityUnits: 5 + - !Ref AWS::NoValue diff --git a/examples/build_recipes/sam/no-layers/build-sam-no-layers.sh b/examples/build_recipes/sam/no-layers/build-sam-no-layers.sh new file mode 100644 index 00000000000..53992bf3e71 --- /dev/null +++ b/examples/build_recipes/sam/no-layers/build-sam-no-layers.sh @@ -0,0 +1,9 @@ +#!/bin/bash + +echo "🏗️ Building SAM application without layers..." + +# Build and deploy (SAM will handle dependency installation) +sam build --use-container +sam deploy --guided + +echo "✅ SAM application deployed successfully (no layers)" diff --git a/examples/build_recipes/sam/no-layers/src/app_sam_no_layer.py b/examples/build_recipes/sam/no-layers/src/app_sam_no_layer.py new file mode 100644 index 00000000000..dcda4cede13 --- /dev/null +++ b/examples/build_recipes/sam/no-layers/src/app_sam_no_layer.py @@ -0,0 +1,38 @@ +from typing import Optional + +from pydantic import BaseModel + +from aws_lambda_powertools import Logger, Metrics, Tracer +from aws_lambda_powertools.event_handler import APIGatewayRestResolver +from aws_lambda_powertools.logging import correlation_paths +from aws_lambda_powertools.metrics import MetricUnit + +logger = Logger() +tracer = Tracer() +metrics = Metrics() +app = APIGatewayRestResolver() + + +class UserModel(BaseModel): + name: str + email: str + age: Optional[int] = None + + +@app.get("/health") +def health_check(): + return {"status": "healthy", "service": "powertools-sam"} + + +@app.post("/users") +def create_user(user: UserModel): + logger.info("Creating user", extra={"user": user.model_dump()}) + metrics.add_metric(name="UserCreated", unit=MetricUnit.Count, value=1) + return {"message": f"User {user.name} created successfully"} + + +@logger.inject_lambda_context(correlation_id_path=correlation_paths.API_GATEWAY_REST) +@tracer.capture_lambda_handler +@metrics.log_metrics(capture_cold_start_metric=True) +def lambda_handler(event, context): + return app.resolve(event, context) diff --git a/examples/build_recipes/sam/no-layers/template.yaml b/examples/build_recipes/sam/no-layers/template.yaml new file mode 100644 index 00000000000..02eccd08c7f --- /dev/null +++ b/examples/build_recipes/sam/no-layers/template.yaml @@ -0,0 +1,35 @@ +AWSTemplateFormatVersion: '2010-09-09' +Transform: AWS::Serverless-2016-10-31 + +Globals: + Function: + Runtime: python3.13 + Timeout: 30 + MemorySize: 512 + Environment: + Variables: + POWERTOOLS_SERVICE_NAME: !Ref AWS::StackName + POWERTOOLS_METRICS_NAMESPACE: MyApp + POWERTOOLS_LOG_LEVEL: INFO + +Resources: + # Single Lambda Function with all dependencies included + ApiFunction: + Type: AWS::Serverless::Function + Properties: + CodeUri: src/ + Handler: app_sam_no_layer.lambda_handler + Events: + ApiEvent: + Type: Api + Properties: + Path: /{proxy+} + Method: ANY + Environment: + Variables: + POWERTOOLS_SERVICE_NAME: api-service + +Outputs: + ApiUrl: + Description: API Gateway endpoint URL + Value: !Sub "https://${ServerlessRestApi}.execute-api.${AWS::Region}.amazonaws.com/Prod/" diff --git a/examples/build_recipes/sam/with-layers/build-sam-with-layers.sh b/examples/build_recipes/sam/with-layers/build-sam-with-layers.sh new file mode 100644 index 00000000000..c6d47af6809 --- /dev/null +++ b/examples/build_recipes/sam/with-layers/build-sam-with-layers.sh @@ -0,0 +1,27 @@ +#!/bin/bash + +echo "🏗️ Building SAM application with layers..." + +# Build Dependencies layer (Powertools uses public layer ARN) +echo "Building Dependencies layer..." +mkdir -p layers/dependencies/python +pip install pydantic requests -t layers/dependencies/python/ + +# Optimize layers (remove unnecessary files) +echo "Optimizing layers..." +find layers/ -name "*.pyc" -delete +find layers/ -name "__pycache__" -type d -exec rm -rf {} + 2>/dev/null || true +find layers/ -name "tests" -type d -exec rm -rf {} + 2>/dev/null || true +find layers/ -name "*.dist-info" -type d -exec rm -rf {} + 2>/dev/null || true + +# Build and deploy +sam build --use-container +sam deploy --guided + +echo "✅ SAM application with layers deployed successfully" + +# Show layer sizes +echo "" +echo "📊 Layer sizes:" +echo "Powertools: Using public layer ARN (no local build needed)" +du -sh layers/dependencies/ diff --git a/examples/build_recipes/sam/with-layers/samconfig.toml b/examples/build_recipes/sam/with-layers/samconfig.toml new file mode 100644 index 00000000000..4276a9a962b --- /dev/null +++ b/examples/build_recipes/sam/with-layers/samconfig.toml @@ -0,0 +1,26 @@ +version = 0.1 + +[default.global.parameters] +stack_name = "powertools-lambda-app" + +[default.build.parameters] +cached = true +parallel = true + +[default.deploy.parameters] +capabilities = "CAPABILITY_IAM" +confirm_changeset = true +resolve_s3 = true +region = "us-east-1" + +[default.package.parameters] +resolve_s3 = true + +[default.sync.parameters] +watch = true + +[default.local_start_api.parameters] +warm_containers = "EAGER" + +[default.local_start_lambda.parameters] +warm_containers = "EAGER" diff --git a/examples/build_recipes/sam/with-layers/src/app/app_sam_layer.py b/examples/build_recipes/sam/with-layers/src/app/app_sam_layer.py new file mode 100644 index 00000000000..9d4b39e63a1 --- /dev/null +++ b/examples/build_recipes/sam/with-layers/src/app/app_sam_layer.py @@ -0,0 +1,50 @@ +from typing import Optional + +import requests +from pydantic import BaseModel + +from aws_lambda_powertools import Logger, Metrics, Tracer +from aws_lambda_powertools.event_handler import APIGatewayRestResolver +from aws_lambda_powertools.logging import correlation_paths +from aws_lambda_powertools.metrics import MetricUnit + +logger = Logger() +tracer = Tracer() +metrics = Metrics() +app = APIGatewayRestResolver() + + +class UserModel(BaseModel): + name: str + email: str + age: Optional[int] = None + + +@app.get("/health") +def health_check(): + return {"status": "healthy", "service": "powertools-sam-layers"} + + +@app.post("/users") +def create_user(user: UserModel): + logger.info("Creating user", extra={"user": user.model_dump()}) + metrics.add_metric(name="UserCreated", unit=MetricUnit.Count, value=1) + return {"message": f"User {user.name} created successfully"} + + +@app.get("/external") +@tracer.capture_method +def fetch_external_data(): + """Example using requests from dependencies layer""" + response = requests.get("https://httpbin.org/json") + data = response.json() + + metrics.add_metric(name="ExternalApiCalled", unit=MetricUnit.Count, value=1) + return {"external_data": data} + + +@logger.inject_lambda_context(correlation_id_path=correlation_paths.API_GATEWAY_REST) +@tracer.capture_lambda_handler +@metrics.log_metrics(capture_cold_start_metric=True) +def lambda_handler(event, context): + return app.resolve(event, context) diff --git a/examples/build_recipes/sam/with-layers/src/worker/worker_sam_layer.py b/examples/build_recipes/sam/with-layers/src/worker/worker_sam_layer.py new file mode 100644 index 00000000000..d5abbd309ac --- /dev/null +++ b/examples/build_recipes/sam/with-layers/src/worker/worker_sam_layer.py @@ -0,0 +1,72 @@ +from __future__ import annotations + +import json +from typing import Any + +from pydantic import BaseModel, ValidationError + +from aws_lambda_powertools import Logger, Metrics, Tracer +from aws_lambda_powertools.utilities.batch import BatchProcessor, EventType, process_partial_response +from aws_lambda_powertools.utilities.typing import LambdaContext + +logger = Logger() +tracer = Tracer() +metrics = Metrics() + +# Initialize batch processor for SQS +processor = BatchProcessor(event_type=EventType.SQS) + + +class WorkerMessage(BaseModel): + task_id: str + task_type: str + payload: dict + + +@tracer.capture_method +def record_handler(record): + """Process individual SQS record""" + try: + # Parse and validate message + message_data = json.loads(record.body) + worker_message = WorkerMessage(**message_data) + + logger.info("Processing task", extra={"task_id": worker_message.task_id, "task_type": worker_message.task_type}) + + # Simulate work based on task type + if worker_message.task_type == "email": + # Process email task + logger.info("Sending email", extra={"task_id": worker_message.task_id}) + elif worker_message.task_type == "report": + # Process report task + logger.info("Generating report", extra={"task_id": worker_message.task_id}) + else: + logger.warning("Unknown task type", extra={"task_type": worker_message.task_type}) + + metrics.add_metric(name="TaskProcessed", unit="Count", value=1) + metrics.add_metadata(key="task_type", value=worker_message.task_type) + + return {"status": "success", "task_id": worker_message.task_id} + + except ValidationError as e: + logger.error("Invalid message format", extra={"error": str(e)}) + metrics.add_metric(name="TaskFailed", unit="Count", value=1) + raise + except Exception as e: + logger.error("Task processing failed", extra={"error": str(e)}) + metrics.add_metric(name="TaskFailed", unit="Count", value=1) + raise + + +@logger.inject_lambda_context +@tracer.capture_lambda_handler +@metrics.log_metrics +def lambda_handler(event: dict[str, Any], context: LambdaContext): + """Process SQS messages using BatchProcessor""" + + return process_partial_response( + event=event, + record_handler=record_handler, + processor=processor, + context=context, + ) diff --git a/examples/build_recipes/sam/with-layers/template.yaml b/examples/build_recipes/sam/with-layers/template.yaml new file mode 100644 index 00000000000..c59b53c037e --- /dev/null +++ b/examples/build_recipes/sam/with-layers/template.yaml @@ -0,0 +1,81 @@ +AWSTemplateFormatVersion: '2010-09-09' +Transform: AWS::Serverless-2016-10-31 + +Globals: + Function: + Runtime: python3.13 + Timeout: 30 + MemorySize: 512 + Environment: + Variables: + POWERTOOLS_SERVICE_NAME: !Ref AWS::StackName + POWERTOOLS_METRICS_NAMESPACE: MyApp + POWERTOOLS_LOG_LEVEL: INFO + +Resources: + # Dependencies Layer (pydantic, requests, etc.) + DependenciesLayer: + Type: AWS::Serverless::LayerVersion + Properties: + LayerName: !Sub "${AWS::StackName}-dependencies" + Description: Application dependencies + ContentUri: layers/dependencies/ + CompatibleRuntimes: + - python3.13 + RetentionPolicy: Delete + + # API Lambda Function (lightweight - only app code) + ApiFunction: + Type: AWS::Serverless::Function + Properties: + CodeUri: src/app/ + Handler: app_sam_layer.lambda_handler + Layers: + - arn:aws:lambda:us-east-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python313-x86_64:23 + - !Ref DependenciesLayer + Events: + ApiEvent: + Type: Api + Properties: + Path: /{proxy+} + Method: ANY + Environment: + Variables: + POWERTOOLS_SERVICE_NAME: api-service + + # Background Worker Function + WorkerFunction: + Type: AWS::Serverless::Function + Properties: + CodeUri: src/worker/ + Handler: worker_sam_layer.lambda_handler + Layers: + - arn:aws:lambda:us-east-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python313-x86_64:23 + - !Ref DependenciesLayer + Events: + SQSEvent: + Type: SQS + Properties: + Queue: !GetAtt WorkerQueue.Arn + BatchSize: 10 + FunctionResponseTypes: + - ReportBatchItemFailures + Environment: + Variables: + POWERTOOLS_SERVICE_NAME: worker-service + + # SQS Queue for worker + WorkerQueue: + Type: AWS::SQS::Queue + Properties: + QueueName: !Sub "${AWS::StackName}-worker-queue" + VisibilityTimeout: 180 + +Outputs: + ApiUrl: + Description: API Gateway endpoint URL + Value: !Sub "https://${ServerlessRestApi}.execute-api.${AWS::Region}.amazonaws.com/Prod/" + + WorkerQueueUrl: + Description: SQS Queue URL for worker + Value: !Ref WorkerQueue diff --git a/examples/build_recipes/troubleshooting/debug-import-errors.sh b/examples/build_recipes/troubleshooting/debug-import-errors.sh new file mode 100644 index 00000000000..4168ebb7bf6 --- /dev/null +++ b/examples/build_recipes/troubleshooting/debug-import-errors.sh @@ -0,0 +1,12 @@ +#!/bin/bash +# 1. Verify dependencies are in the package +unzip -l lambda-package.zip | grep powertools + +# 2. Check Python path in Lambda +python -c "import sys; print(sys.path)" + +# 3. Ensure platform compatibility +pip install --platform manylinux2014_x86_64 --only-binary=:all: aws-lambda-powertools[all] + +# 4. Test imports locally +cd build && python -c "from aws_lambda_powertools import Logger; print('OK')" diff --git a/examples/build_recipes/troubleshooting/fix-architecture-mismatch.sh b/examples/build_recipes/troubleshooting/fix-architecture-mismatch.sh new file mode 100644 index 00000000000..284e52b3526 --- /dev/null +++ b/examples/build_recipes/troubleshooting/fix-architecture-mismatch.sh @@ -0,0 +1,8 @@ +#!/bin/bash +# Use Docker with Lambda base image +docker run --rm -v "$PWD":/var/task public.ecr.aws/lambda/python:3.13 \ + pip install aws-lambda-powertools[all] -t /var/task/ + +# Or force Linux-compatible wheels +pip install --platform manylinux2014_x86_64 --implementation cp \ + --python-version 3.13 --only-binary=:all: aws-lambda-powertools[all] diff --git a/examples/build_recipes/troubleshooting/fix-build-inconsistencies.sh b/examples/build_recipes/troubleshooting/fix-build-inconsistencies.sh new file mode 100644 index 00000000000..25a927e0c68 --- /dev/null +++ b/examples/build_recipes/troubleshooting/fix-build-inconsistencies.sh @@ -0,0 +1,18 @@ +#!/bin/bash +# 1. Use lock files for reproducible builds +# Poetry: poetry.lock +# uv: uv.lock +# pip: requirements.txt with pinned versions + +# 2. Use Docker for consistent build environment +docker run --rm -v "$PWD":/app -w /app python:3.13-slim \ + bash -c "pip install -r requirements.txt -t build/" + +# 3. Pin all tool versions +pip==24.0 +poetry==1.8.0 +uv==0.1.0 + +# 4. Use same Python version everywhere +python-version: '3.13' # In CI/CD +python = "^3.13" # In pyproject.toml diff --git a/examples/build_recipes/troubleshooting/fix-layer-compatibility.sh b/examples/build_recipes/troubleshooting/fix-layer-compatibility.sh new file mode 100644 index 00000000000..5e12b6c4166 --- /dev/null +++ b/examples/build_recipes/troubleshooting/fix-layer-compatibility.sh @@ -0,0 +1,13 @@ +#!/bin/bash +# 1. Use correct layer ARN for your region and Python version +# Check: https://docs.powertools.aws.dev/lambda/python/latest/#lambda-layer + +# 2. Verify layer compatibility +aws lambda get-layer-version \ + --layer-name AWSLambdaPowertoolsPythonV3-python313-x86_64 \ + --version-number 22 \ + --region-name {REGION} + +# 3. Avoid version conflicts +# Don't include Powertools for AWS in deployment package if using layer +pip install pydantic requests -t build/ # Exclude powertools diff --git a/examples/build_recipes/troubleshooting/optimize-cold-starts.sh b/examples/build_recipes/troubleshooting/optimize-cold-starts.sh new file mode 100644 index 00000000000..cdedbe073b4 --- /dev/null +++ b/examples/build_recipes/troubleshooting/optimize-cold-starts.sh @@ -0,0 +1,14 @@ +#!/bin/bash +# 1. Optimize package size (see above) + +# 2. Use public Powertools for AWS layer +# Layer ARN: arn:aws:lambda:{REGION}:017000801446:layer:AWSLambdaPowertoolsPythonV3-python313-x86_64:1 + +# 3. Enable provisioned concurrency for critical functions +aws lambda put-provisioned-concurrency-config \ + --function-name my-function \ + --provisioned-concurrency-config ProvisionedConcurrencyCount=10 \ + --region-name {REGION} + +# 4. Minimize imports in handler +# Import only what you need, avoid heavy imports at module level diff --git a/examples/build_recipes/troubleshooting/optimize-package-size.sh b/examples/build_recipes/troubleshooting/optimize-package-size.sh new file mode 100644 index 00000000000..597ceafe227 --- /dev/null +++ b/examples/build_recipes/troubleshooting/optimize-package-size.sh @@ -0,0 +1,14 @@ +#!/bin/bash +# 1. Use Lambda Layers for heavy dependencies +pip install aws-lambda-powertools[all] -t layers/powertools/python/ + +# 2. Remove unnecessary files +find build/ -name "*.pyc" -delete +find build/ -name "__pycache__" -type d -exec rm -rf {} + +find build/ -name "tests" -type d -exec rm -rf {} + + +# 3. Strip debug symbols from compiled libraries +find build/ -name "*.so" -exec strip --strip-debug {} \; + +# 4. Use container images for very large packages +# Deploy as container image instead of ZIP diff --git a/examples/build_recipes/uv/app_uv.py b/examples/build_recipes/uv/app_uv.py new file mode 100644 index 00000000000..de382edf681 --- /dev/null +++ b/examples/build_recipes/uv/app_uv.py @@ -0,0 +1,30 @@ +from __future__ import annotations + +from typing import Any + +from aws_lambda_powertools import Logger, Metrics, Tracer +from aws_lambda_powertools.event_handler import APIGatewayRestResolver +from aws_lambda_powertools.utilities.typing import LambdaContext + +logger = Logger() +tracer = Tracer() +metrics = Metrics() +app = APIGatewayRestResolver() + + +@app.get("/health") +def health_check(): + return {"status": "healthy", "service": "lambda-powertools-uv"} + + +@app.get("/metrics") +def get_metrics(): + metrics.add_metric(name="MetricsEndpointCalled", unit="Count", value=1) + return {"message": "Metrics recorded"} + + +@logger.inject_lambda_context +@tracer.capture_lambda_handler +@metrics.log_metrics +def lambda_handler(event: dict[str, Any], context: LambdaContext): + return app.resolve(event, context) diff --git a/examples/build_recipes/uv/build-uv-cross-platform.sh b/examples/build_recipes/uv/build-uv-cross-platform.sh new file mode 100644 index 00000000000..838e34c0665 --- /dev/null +++ b/examples/build_recipes/uv/build-uv-cross-platform.sh @@ -0,0 +1,24 @@ +#!/bin/bash + +# Build for Lambda x86_64 (most common) +mkdir -p build-x86_64/ +uv pip install --platform manylinux2014_x86_64 --only-binary=:all: \ + --python-version 3.13 --target build-x86_64/ \ + -e . + +# Build for Lambda ARM64 (Graviton2) +mkdir -p build-arm64/ +uv pip install --platform manylinux2014_aarch64 --only-binary=:all: \ + --python-version 3.13 --target build-arm64/ \ + -e . + +# Copy application code to both builds +cp app_uv.py build-x86_64/ +cp app_uv.py build-arm64/ + +# Create deployment packages +cd build-x86_64 && zip -r ../lambda-uv-x86_64.zip . && cd .. +cd build-arm64 && zip -r ../lambda-uv-arm64.zip . && cd .. + +echo "✅ x86_64 package: lambda-uv-x86_64.zip" +echo "✅ ARM64 package: lambda-uv-arm64.zip" diff --git a/examples/build_recipes/uv/build-uv-locked.sh b/examples/build_recipes/uv/build-uv-locked.sh new file mode 100644 index 00000000000..dcaa3a90902 --- /dev/null +++ b/examples/build_recipes/uv/build-uv-locked.sh @@ -0,0 +1,26 @@ +#!/bin/bash + +# Generate lock file for reproducible builds +uv lock + +# Export to requirements.txt for Lambda +uv export --format requirements-txt --no-hashes > requirements.txt + +# Create build directory +mkdir -p build/ + +# Install to build directory with Lambda-compatible wheels +uv pip install --platform manylinux2014_x86_64 --only-binary=:all: \ + --python-version 3.13 --target build/ \ + -r requirements.txt + +# Copy application code +cp app_uv.py build/ + +# Create deployment package +cd build && zip -r ../lambda-uv-locked.zip . && cd .. + +# Cleanup +rm requirements.txt + +echo "✅ uv locked deployment package created: lambda-uv-locked.zip" diff --git a/examples/build_recipes/uv/build-uv.sh b/examples/build_recipes/uv/build-uv.sh new file mode 100644 index 00000000000..1ffa413f547 --- /dev/null +++ b/examples/build_recipes/uv/build-uv.sh @@ -0,0 +1,17 @@ +#!/bin/bash + +# Create build directory +mkdir -p build/ + +# Install dependencies with Lambda-compatible wheels +uv pip install --platform manylinux2014_x86_64 --only-binary=:all: \ + --python-version 3.13 --target build/ \ + -e . + +# Copy application code +cp app_uv.py build/ + +# Create deployment package +cd build && zip -r ../lambda-uv.zip . && cd .. + +echo "✅ uv deployment package created: lambda-uv.zip" diff --git a/examples/build_recipes/uv/pyproject.toml b/examples/build_recipes/uv/pyproject.toml new file mode 100644 index 00000000000..ff97a0ac5fc --- /dev/null +++ b/examples/build_recipes/uv/pyproject.toml @@ -0,0 +1,17 @@ +[project] +name = "lambda-powertools-uv" +version = "0.1.0" +description = "Lambda function with Powertools using uv" +requires-python = ">=3.9" +dependencies = [ + "aws-lambda-powertools[all]>=3.18.0", + "pydantic>=2.10.0", + "requests>=2.32.0", +] + +[project.optional-dependencies] +dev = [ + "pytest>=8.0.0", + "black>=24.0.0", + "mypy>=1.8.0", +] diff --git a/examples/homepage/install/arm64/amplify.txt b/examples/homepage/install/arm64/amplify.txt index a8735a914aa..ca6a423c2ca 100644 --- a/examples/homepage/install/arm64/amplify.txt +++ b/examples/homepage/install/arm64/amplify.txt @@ -6,7 +6,7 @@ ? Do you want to configure advanced settings? Yes ... ? Do you want to enable Lambda layers for this function? Yes -? Enter up to 5 existing Lambda layer ARNs (comma-separated): arn:aws:lambda:eu-central-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python312-arm64:21 +? Enter up to 5 existing Lambda layer ARNs (comma-separated): arn:aws:lambda:eu-central-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python312-arm64:23 ❯ amplify push -y @@ -17,5 +17,5 @@ General information - Name: ? Which setting do you want to update? Lambda layers configuration ? Do you want to enable Lambda layers for this function? Yes -? Enter up to 5 existing Lambda layer ARNs (comma-separated): arn:aws:lambda:eu-central-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python312-arm64:21 +? Enter up to 5 existing Lambda layer ARNs (comma-separated): arn:aws:lambda:eu-central-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python312-arm64:23 ? Do you want to edit the local lambda function now? No diff --git a/examples/homepage/install/arm64/cdk_arm64.py b/examples/homepage/install/arm64/cdk_arm64.py index 1f8a32131b2..4865ee248eb 100644 --- a/examples/homepage/install/arm64/cdk_arm64.py +++ b/examples/homepage/install/arm64/cdk_arm64.py @@ -9,7 +9,7 @@ def __init__(self, scope: Construct, construct_id: str, **kwargs) -> None: powertools_layer = aws_lambda.LayerVersion.from_layer_version_arn( self, id="lambda-powertools", - layer_version_arn=f"arn:aws:lambda:{Aws.REGION}:017000801446:layer:AWSLambdaPowertoolsPythonV3-python312-arm64:21", + layer_version_arn=f"arn:aws:lambda:{Aws.REGION}:017000801446:layer:AWSLambdaPowertoolsPythonV3-python312-arm64:23", ) aws_lambda.Function( self, diff --git a/examples/homepage/install/arm64/pulumi_arm64.py b/examples/homepage/install/arm64/pulumi_arm64.py index a9ae641a82f..fdf9fbbe120 100644 --- a/examples/homepage/install/arm64/pulumi_arm64.py +++ b/examples/homepage/install/arm64/pulumi_arm64.py @@ -22,7 +22,7 @@ pulumi.Output.concat( "arn:aws:lambda:", aws.get_region_output().name, - ":017000801446:layer:AWSLambdaPowertoolsPythonV3-python312-arm64:21", + ":017000801446:layer:AWSLambdaPowertoolsPythonV3-python312-arm64:23", ), ], tracing_config={"mode": "Active"}, diff --git a/examples/homepage/install/arm64/sam.yaml b/examples/homepage/install/arm64/sam.yaml index 08a77a74d4a..5be0d6d5fcd 100644 --- a/examples/homepage/install/arm64/sam.yaml +++ b/examples/homepage/install/arm64/sam.yaml @@ -9,4 +9,4 @@ Resources: Runtime: python3.12 Handler: app.lambda_handler Layers: - - !Sub arn:aws:lambda:${AWS::Region}:017000801446:layer:AWSLambdaPowertoolsPythonV3-python312-arm64:21 + - !Sub arn:aws:lambda:${AWS::Region}:017000801446:layer:AWSLambdaPowertoolsPythonV3-python312-arm64:23 diff --git a/examples/homepage/install/arm64/serverless.yml b/examples/homepage/install/arm64/serverless.yml index 2911584bddd..fe0d067c5c9 100644 --- a/examples/homepage/install/arm64/serverless.yml +++ b/examples/homepage/install/arm64/serverless.yml @@ -10,4 +10,4 @@ functions: handler: lambda_function.lambda_handler architecture: arm64 layers: - - arn:aws:lambda:${aws:region}:017000801446:layer:AWSLambdaPowertoolsPythonV3-python312-arm64:21 + - arn:aws:lambda:${aws:region}:017000801446:layer:AWSLambdaPowertoolsPythonV3-python312-arm64:23 diff --git a/examples/homepage/install/arm64/terraform.tf b/examples/homepage/install/arm64/terraform.tf index 1101699ec08..a24c16ecc53 100644 --- a/examples/homepage/install/arm64/terraform.tf +++ b/examples/homepage/install/arm64/terraform.tf @@ -34,7 +34,7 @@ resource "aws_lambda_function" "test_lambda" { role = aws_iam_role.iam_for_lambda.arn handler = "index.test" runtime = "python3.12" - layers = ["arn:aws:lambda:{region}:017000801446:layer:AWSLambdaPowertoolsPythonV3-python312-arm64:21"] + layers = ["arn:aws:lambda:{region}:017000801446:layer:AWSLambdaPowertoolsPythonV3-python312-arm64:23"] architectures = ["arm64"] source_code_hash = filebase64sha256("lambda_function_payload.zip") diff --git a/examples/homepage/install/x86_64/amplify.txt b/examples/homepage/install/x86_64/amplify.txt index 502846e6fd1..8813fdfe97a 100644 --- a/examples/homepage/install/x86_64/amplify.txt +++ b/examples/homepage/install/x86_64/amplify.txt @@ -6,7 +6,7 @@ ? Do you want to configure advanced settings? Yes ... ? Do you want to enable Lambda layers for this function? Yes -? Enter up to 5 existing Lambda layer ARNs (comma-separated): arn:aws:lambda:eu-central-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python312-x86_64:21 +? Enter up to 5 existing Lambda layer ARNs (comma-separated): arn:aws:lambda:eu-central-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python312-x86_64:23 ❯ amplify push -y @@ -17,5 +17,5 @@ General information - Name: ? Which setting do you want to update? Lambda layers configuration ? Do you want to enable Lambda layers for this function? Yes -? Enter up to 5 existing Lambda layer ARNs (comma-separated): arn:aws:lambda:eu-central-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python312-x86_64:21 +? Enter up to 5 existing Lambda layer ARNs (comma-separated): arn:aws:lambda:eu-central-1:017000801446:layer:AWSLambdaPowertoolsPythonV3-python312-x86_64:23 ? Do you want to edit the local lambda function now? No diff --git a/examples/homepage/install/x86_64/cdk_x86.py b/examples/homepage/install/x86_64/cdk_x86.py index a27419ab274..7fa71f8c483 100644 --- a/examples/homepage/install/x86_64/cdk_x86.py +++ b/examples/homepage/install/x86_64/cdk_x86.py @@ -9,7 +9,7 @@ def __init__(self, scope: Construct, construct_id: str, **kwargs) -> None: powertools_layer = aws_lambda.LayerVersion.from_layer_version_arn( self, id="lambda-powertools", - layer_version_arn=f"arn:aws:lambda:{Aws.REGION}:017000801446:layer:AWSLambdaPowertoolsPythonV3-python312-x86_64:21", + layer_version_arn=f"arn:aws:lambda:{Aws.REGION}:017000801446:layer:AWSLambdaPowertoolsPythonV3-python312-x86_64:23", ) aws_lambda.Function( self, diff --git a/examples/homepage/install/x86_64/pulumi_x86.py b/examples/homepage/install/x86_64/pulumi_x86.py index 08aa9957136..fc7229ce6ab 100644 --- a/examples/homepage/install/x86_64/pulumi_x86.py +++ b/examples/homepage/install/x86_64/pulumi_x86.py @@ -22,7 +22,7 @@ pulumi.Output.concat( "arn:aws:lambda:", aws.get_region_output().name, - ":017000801446:layer:AWSLambdaPowertoolsPythonV3-python312-x86_64:21", + ":017000801446:layer:AWSLambdaPowertoolsPythonV3-python312-x86_64:23", ), ], tracing_config={"mode": "Active"}, diff --git a/examples/homepage/install/x86_64/sam.yaml b/examples/homepage/install/x86_64/sam.yaml index 5cef3f18c91..3048ed18360 100644 --- a/examples/homepage/install/x86_64/sam.yaml +++ b/examples/homepage/install/x86_64/sam.yaml @@ -8,4 +8,4 @@ Resources: Runtime: python3.12 Handler: app.lambda_handler Layers: - - !Sub arn:aws:lambda:${AWS::Region}:017000801446:layer:AWSLambdaPowertoolsPythonV3-python312-x86_64:21 + - !Sub arn:aws:lambda:${AWS::Region}:017000801446:layer:AWSLambdaPowertoolsPythonV3-python312-x86_64:23 diff --git a/examples/homepage/install/x86_64/serverless.yml b/examples/homepage/install/x86_64/serverless.yml index 134a44da5f9..711b2550909 100644 --- a/examples/homepage/install/x86_64/serverless.yml +++ b/examples/homepage/install/x86_64/serverless.yml @@ -10,4 +10,4 @@ functions: handler: lambda_function.lambda_handler architecture: arm64 layers: - - arn:aws:lambda:${aws:region}:017000801446:layer:AWSLambdaPowertoolsPythonV3-python312-x86_64:21 + - arn:aws:lambda:${aws:region}:017000801446:layer:AWSLambdaPowertoolsPythonV3-python312-x86_64:23 diff --git a/examples/homepage/install/x86_64/terraform.tf b/examples/homepage/install/x86_64/terraform.tf index de5ddedd411..3eeaf991ff5 100644 --- a/examples/homepage/install/x86_64/terraform.tf +++ b/examples/homepage/install/x86_64/terraform.tf @@ -34,7 +34,7 @@ resource "aws_lambda_function" "test_lambda" { role = aws_iam_role.iam_for_lambda.arn handler = "index.test" runtime = "python3.12" - layers = ["arn:aws:lambda:{region}:017000801446:layer:AWSLambdaPowertoolsPythonV3-python312-x86_64:21"] + layers = ["arn:aws:lambda:{region}:017000801446:layer:AWSLambdaPowertoolsPythonV3-python312-x86_64:23"] source_code_hash = filebase64sha256("lambda_function_payload.zip") } diff --git a/examples/logger/sam/template.yaml b/examples/logger/sam/template.yaml index ccb9d838e60..6e3e8e23ee5 100644 --- a/examples/logger/sam/template.yaml +++ b/examples/logger/sam/template.yaml @@ -14,7 +14,7 @@ Globals: Layers: # Find the latest Layer version in the official documentation # https://docs.powertools.aws.dev/lambda/python/latest/#lambda-layer - - !Sub arn:aws:lambda:${AWS::Region}:017000801446:layer:AWSLambdaPowertoolsPythonV3-python312-x86_64:21 + - !Sub arn:aws:lambda:${AWS::Region}:017000801446:layer:AWSLambdaPowertoolsPythonV3-python312-x86_64:23 Resources: LoggerLambdaHandlerExample: diff --git a/examples/metrics/sam/template.yaml b/examples/metrics/sam/template.yaml index 6f0ae30ad69..db486f16406 100644 --- a/examples/metrics/sam/template.yaml +++ b/examples/metrics/sam/template.yaml @@ -16,7 +16,7 @@ Globals: Layers: # Find the latest Layer version in the official documentation # https://docs.powertools.aws.dev/lambda/python/latest/#lambda-layer - - !Sub arn:aws:lambda:${AWS::Region}:017000801446:layer:AWSLambdaPowertoolsPythonV3-python312-x86_64:21 + - !Sub arn:aws:lambda:${AWS::Region}:017000801446:layer:AWSLambdaPowertoolsPythonV3-python312-x86_64:23 Resources: CaptureLambdaHandlerExample: diff --git a/examples/metrics_datadog/sam/template.yaml b/examples/metrics_datadog/sam/template.yaml index 271f43fe79d..4e0690afaa0 100644 --- a/examples/metrics_datadog/sam/template.yaml +++ b/examples/metrics_datadog/sam/template.yaml @@ -20,7 +20,7 @@ Globals: Layers: # Find the latest Layer version in the official documentation # https://docs.powertools.aws.dev/lambda/python/latest/#lambda-layer - - !Sub arn:aws:lambda:${AWS::Region}:017000801446:layer:AWSLambdaPowertoolsPythonV3-python312-x86_64:21 + - !Sub arn:aws:lambda:${AWS::Region}:017000801446:layer:AWSLambdaPowertoolsPythonV3-python312-x86_64:23 # Find the latest Layer version in the Datadog official documentation # Datadog SDK diff --git a/examples/tracer/sam/template.yaml b/examples/tracer/sam/template.yaml index 7e2b392a945..130300ee1df 100644 --- a/examples/tracer/sam/template.yaml +++ b/examples/tracer/sam/template.yaml @@ -13,7 +13,7 @@ Globals: Layers: # Find the latest Layer version in the official documentation # https://docs.powertools.aws.dev/lambda/python/latest/#lambda-layer - - !Sub arn:aws:lambda:${AWS::Region}:017000801446:layer:AWSLambdaPowertoolsPythonV3-python312-x86_64:21 + - !Sub arn:aws:lambda:${AWS::Region}:017000801446:layer:AWSLambdaPowertoolsPythonV3-python312-x86_64:23 Resources: CaptureLambdaHandlerExample: diff --git a/mkdocs.yml b/mkdocs.yml index ce2f2aac5d6..4fe986a3957 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -9,11 +9,8 @@ nav: - Homepage: - index.md - Changelog: changelog.md - - API reference: api/" target="_blank - - Upgrade guide: upgrade.md - - We Made This (Community): we_made_this.md + - Tutorial: tutorial/index.md - Workshop 🆕: https://s12d.com/powertools-for-aws-lambda-workshop" target="_blank - - Roadmap: roadmap.md - Features: - core/tracer.md - core/logger.md @@ -40,10 +37,21 @@ nav: - utilities/middleware_factory.md - utilities/jmespath_functions.md - CloudFormation Custom Resources: https://github.com/aws-cloudformation/custom-resource-helper" target="_blank + - Build recipes: + - build_recipes/index.md + - Getting started: build_recipes/getting-started.md + - Build tools: build_recipes/build-tools.md + - Cross-platform builds: build_recipes/cross-platform.md + - Performance optimization: build_recipes/performance-optimization.md + - CI/CD integration: build_recipes/cicd-integration.md + - Troubleshooting: build_recipes/troubleshooting.md + - Upgrade guide: upgrade.md + - We Made This (Community): we_made_this.md + - Roadmap: roadmap.md - Resources: - "llms.txt": ./llms.txt - "llms.txt (full version)": ./llms-full.txt - - Tutorial: tutorial/index.md + - Processes: - Security: security.md - Automation: automation.md @@ -192,7 +200,14 @@ markdown_extensions: - pymdownx.tasklist: custom_checkbox: true -copyright: Copyright © 2023 Amazon Web Services +copyright: | + plugins: - privacy @@ -233,6 +248,14 @@ plugins: - utilities/jmespath_functions.md Tutorial: - tutorial/index.md + Build recipes: + - build_recipes/index.md + - build_recipes/getting-started.md + - build_recipes/build-tools.md + - build_recipes/cross-platform.md + - build_recipes/performance-optimization.md + - build_recipes/cicd-integration.md + - build_recipes/troubleshooting.md - mkdocstrings: default_handler: python diff --git a/package-lock.json b/package-lock.json index 0c4d843338e..31d22c96777 100644 --- a/package-lock.json +++ b/package-lock.json @@ -8,13 +8,13 @@ "name": "aws-lambda-powertools-python-e2e", "version": "1.0.0", "devDependencies": { - "aws-cdk": "^2.1024.0" + "aws-cdk": "^2.1029.0" } }, "node_modules/aws-cdk": { - "version": "2.1024.0", - "resolved": "https://registry.npmjs.org/aws-cdk/-/aws-cdk-2.1024.0.tgz", - "integrity": "sha512-hY0iVT2gPX/QOQXL7RSP2sqIRI/4BYU27vSmbhZxLEj//c3pkMkd9QpIHj7gOhyWC2gf6n5JuYPw27Dgw8FEdA==", + "version": "2.1029.0", + "resolved": "https://registry.npmjs.org/aws-cdk/-/aws-cdk-2.1029.0.tgz", + "integrity": "sha512-TYJGMs1QVYgOTqt0MnbykZvKXMThevjg/m16MuERlWK3fQErhKcUkMmJ8uUY0SBf70FvT7tQdBq9dnsa34TM2A==", "dev": true, "license": "Apache-2.0", "bin": { diff --git a/package.json b/package.json index 0ee8ccf2e1a..ca3509218ac 100644 --- a/package.json +++ b/package.json @@ -2,6 +2,6 @@ "name": "aws-lambda-powertools-python-e2e", "version": "1.0.0", "devDependencies": { - "aws-cdk": "^2.1024.0" + "aws-cdk": "^2.1029.0" } } diff --git a/poetry.lock b/poetry.lock index 4ced6d318ec..7c8bee9f49b 100644 --- a/poetry.lock +++ b/poetry.lock @@ -216,72 +216,72 @@ typeguard = ">=2.13.3,<2.14.0" [[package]] name = "aws-cdk-aws-lambda-python-alpha" -version = "2.210.0a0" +version = "2.214.0a0" description = "The CDK Construct Library for AWS Lambda in Python" optional = false python-versions = "~=3.9" groups = ["dev"] files = [ - {file = "aws_cdk_aws_lambda_python_alpha-2.210.0a0-py3-none-any.whl", hash = "sha256:2cf8c67cc4966547b7ae4783d31aa1ac5c5fc88eaed288936e3e540bf118403f"}, - {file = "aws_cdk_aws_lambda_python_alpha-2.210.0a0.tar.gz", hash = "sha256:bcb86c94666e515c227ce6f567481adf75cfd1fca1c0e34f8c52f4e46aa5e71c"}, + {file = "aws_cdk_aws_lambda_python_alpha-2.214.0a0-py3-none-any.whl", hash = "sha256:7f2d712923428693f111b8535fa88dd2d35877ec2f806cac44ae0fe1c260ff15"}, + {file = "aws_cdk_aws_lambda_python_alpha-2.214.0a0.tar.gz", hash = "sha256:58a6fa01d38fbfd6071a6e1b4396e12f6b11190847c6f30dc8344f3338922789"}, ] [package.dependencies] -aws-cdk-lib = ">=2.210.0,<3.0.0" +aws-cdk-lib = ">=2.214.0,<3.0.0" constructs = ">=10.0.0,<11.0.0" -jsii = ">=1.112.0,<2.0.0" +jsii = ">=1.113.0,<2.0.0" publication = ">=0.0.3" typeguard = ">=2.13.3,<4.3.0" [[package]] name = "aws-cdk-cloud-assembly-schema" -version = "48.2.0" +version = "48.6.0" description = "Schema for the protocol between CDK framework and CDK CLI" optional = false python-versions = "~=3.9" groups = ["dev"] files = [ - {file = "aws_cdk_cloud_assembly_schema-48.2.0-py3-none-any.whl", hash = "sha256:11b50edc74b0643c43c6218141265d33c0a115926a48ac9b0374c60cc49c3213"}, - {file = "aws_cdk_cloud_assembly_schema-48.2.0.tar.gz", hash = "sha256:d10a1daccce28495f88c740526bc9ebacc43f00f624e4d48644e06853381d0e9"}, + {file = "aws_cdk_cloud_assembly_schema-48.6.0-py3-none-any.whl", hash = "sha256:ee4a3014446bdd68de200dfb4086737f671ccaa7b3a1ec39653720d3e521f835"}, + {file = "aws_cdk_cloud_assembly_schema-48.6.0.tar.gz", hash = "sha256:716d27b6fdb05afd9981567804d91af5780e2f7f95fd9113e697380a1b69a623"}, ] [package.dependencies] -jsii = ">=1.112.0,<2.0.0" +jsii = ">=1.113.0,<2.0.0" publication = ">=0.0.3" typeguard = ">=2.13.3,<4.3.0" [[package]] name = "aws-cdk-lib" -version = "2.210.0" +version = "2.214.0" description = "Version 2 of the AWS Cloud Development Kit library" optional = false python-versions = "~=3.9" groups = ["dev"] files = [ - {file = "aws_cdk_lib-2.210.0-py3-none-any.whl", hash = "sha256:0b3c30acb1142252b649303e63fa914832bed4357452c2b2bfff5455e448253c"}, - {file = "aws_cdk_lib-2.210.0.tar.gz", hash = "sha256:a6695b0b0ec691b1007865ab0c9e4d246f33dca23ad205d980f2e5724d8cbb01"}, + {file = "aws_cdk_lib-2.214.0-py3-none-any.whl", hash = "sha256:90f3268218e020c641d634d74cff3376905824c80a572d7e2eabc219977d98ef"}, + {file = "aws_cdk_lib-2.214.0.tar.gz", hash = "sha256:374dd3b6e412becfb77808e4d828efbee070e3400968360af16df856485c3ade"}, ] [package.dependencies] "aws-cdk.asset-awscli-v1" = "2.2.242" "aws-cdk.asset-node-proxy-agent-v6" = ">=2.1.0,<3.0.0" -"aws-cdk.cloud-assembly-schema" = ">=48.2.0,<49.0.0" +"aws-cdk.cloud-assembly-schema" = ">=48.6.0,<49.0.0" constructs = ">=10.0.0,<11.0.0" -jsii = ">=1.112.0,<2.0.0" +jsii = ">=1.113.0,<2.0.0" publication = ">=0.0.3" typeguard = ">=2.13.3,<4.3.0" [[package]] name = "aws-encryption-sdk" -version = "4.0.2" +version = "4.0.3" description = "AWS Encryption SDK implementation for Python" optional = true python-versions = "*" groups = ["main"] markers = "extra == \"all\" or extra == \"datamasking\"" files = [ - {file = "aws_encryption_sdk-4.0.2-py2.py3-none-any.whl", hash = "sha256:73d9aadc3b10927148f3e057e51e0c15f0e68431df6d3ef45d8af83fefe7156f"}, - {file = "aws_encryption_sdk-4.0.2.tar.gz", hash = "sha256:911a900980732e509b86e0443fe3bdcee480760a460e0f702f360565a20f3888"}, + {file = "aws_encryption_sdk-4.0.3-py2.py3-none-any.whl", hash = "sha256:2f56993bdc5963c656e5b417ed62d1da46ee7a3c438c3ea5dfca89f3f7a86e4b"}, + {file = "aws_encryption_sdk-4.0.3.tar.gz", hash = "sha256:f715ad55bec6bd215563cd5bb103b39fa59c504cbf90a024094c36ce0ec9de1c"}, ] [package.dependencies] @@ -291,7 +291,7 @@ cryptography = ">=3.4.6" wrapt = ">=1.10.11" [package.extras] -mpl = ["aws-cryptographic-material-providers (>=1.7.4,<=1.11.0)"] +mpl = ["aws-cryptographic-material-providers (>=1.7.4,<=1.11.1)"] [[package]] name = "aws-requests-auth" @@ -464,14 +464,14 @@ crt = ["botocore[crt] (>=1.21.0,<2.0a0)"] [[package]] name = "boto3-stubs" -version = "1.40.7" -description = "Type annotations for boto3 1.40.7 generated with mypy-boto3-builder 8.11.0" +version = "1.40.26" +description = "Type annotations for boto3 1.40.26 generated with mypy-boto3-builder 8.11.0" optional = false python-versions = ">=3.8" groups = ["dev"] files = [ - {file = "boto3_stubs-1.40.7-py3-none-any.whl", hash = "sha256:76a7ce39dd0b7f0a1107ea3725def30af6eec02ee0672bf58ce21f6ecd6c259a"}, - {file = "boto3_stubs-1.40.7.tar.gz", hash = "sha256:ac4b43c93a15f65e4d74caee70f408928442446d5f037277426fb3dc06d96720"}, + {file = "boto3_stubs-1.40.26-py3-none-any.whl", hash = "sha256:bd255236b300f75427a92eb8e8efb5dccf6b108ff6e21faf507fb3590d831722"}, + {file = "boto3_stubs-1.40.26.tar.gz", hash = "sha256:f9f7538881edd07ebfab1bd7890af2bd0b829ebb16d931860845d448e4505a2d"}, ] [package.dependencies] @@ -496,7 +496,7 @@ account = ["mypy-boto3-account (>=1.40.0,<1.41.0)"] acm = ["mypy-boto3-acm (>=1.40.0,<1.41.0)"] acm-pca = ["mypy-boto3-acm-pca (>=1.40.0,<1.41.0)"] aiops = ["mypy-boto3-aiops (>=1.40.0,<1.41.0)"] -all = ["mypy-boto3-accessanalyzer (>=1.40.0,<1.41.0)", "mypy-boto3-account (>=1.40.0,<1.41.0)", "mypy-boto3-acm (>=1.40.0,<1.41.0)", "mypy-boto3-acm-pca (>=1.40.0,<1.41.0)", "mypy-boto3-aiops (>=1.40.0,<1.41.0)", "mypy-boto3-amp (>=1.40.0,<1.41.0)", "mypy-boto3-amplify (>=1.40.0,<1.41.0)", "mypy-boto3-amplifybackend (>=1.40.0,<1.41.0)", "mypy-boto3-amplifyuibuilder (>=1.40.0,<1.41.0)", "mypy-boto3-apigateway (>=1.40.0,<1.41.0)", "mypy-boto3-apigatewaymanagementapi (>=1.40.0,<1.41.0)", "mypy-boto3-apigatewayv2 (>=1.40.0,<1.41.0)", "mypy-boto3-appconfig (>=1.40.0,<1.41.0)", "mypy-boto3-appconfigdata (>=1.40.0,<1.41.0)", "mypy-boto3-appfabric (>=1.40.0,<1.41.0)", "mypy-boto3-appflow (>=1.40.0,<1.41.0)", "mypy-boto3-appintegrations (>=1.40.0,<1.41.0)", "mypy-boto3-application-autoscaling (>=1.40.0,<1.41.0)", "mypy-boto3-application-insights (>=1.40.0,<1.41.0)", "mypy-boto3-application-signals (>=1.40.0,<1.41.0)", "mypy-boto3-applicationcostprofiler (>=1.40.0,<1.41.0)", "mypy-boto3-appmesh (>=1.40.0,<1.41.0)", "mypy-boto3-apprunner (>=1.40.0,<1.41.0)", "mypy-boto3-appstream (>=1.40.0,<1.41.0)", "mypy-boto3-appsync (>=1.40.0,<1.41.0)", "mypy-boto3-apptest (>=1.40.0,<1.41.0)", "mypy-boto3-arc-region-switch (>=1.40.0,<1.41.0)", "mypy-boto3-arc-zonal-shift (>=1.40.0,<1.41.0)", "mypy-boto3-artifact (>=1.40.0,<1.41.0)", "mypy-boto3-athena (>=1.40.0,<1.41.0)", "mypy-boto3-auditmanager (>=1.40.0,<1.41.0)", "mypy-boto3-autoscaling (>=1.40.0,<1.41.0)", "mypy-boto3-autoscaling-plans (>=1.40.0,<1.41.0)", "mypy-boto3-b2bi (>=1.40.0,<1.41.0)", "mypy-boto3-backup (>=1.40.0,<1.41.0)", "mypy-boto3-backup-gateway (>=1.40.0,<1.41.0)", "mypy-boto3-backupsearch (>=1.40.0,<1.41.0)", "mypy-boto3-batch (>=1.40.0,<1.41.0)", "mypy-boto3-bcm-data-exports (>=1.40.0,<1.41.0)", "mypy-boto3-bcm-pricing-calculator (>=1.40.0,<1.41.0)", "mypy-boto3-bedrock (>=1.40.0,<1.41.0)", "mypy-boto3-bedrock-agent (>=1.40.0,<1.41.0)", "mypy-boto3-bedrock-agent-runtime (>=1.40.0,<1.41.0)", "mypy-boto3-bedrock-agentcore (>=1.40.0,<1.41.0)", "mypy-boto3-bedrock-agentcore-control (>=1.40.0,<1.41.0)", "mypy-boto3-bedrock-data-automation (>=1.40.0,<1.41.0)", "mypy-boto3-bedrock-data-automation-runtime (>=1.40.0,<1.41.0)", "mypy-boto3-bedrock-runtime (>=1.40.0,<1.41.0)", "mypy-boto3-billing (>=1.40.0,<1.41.0)", "mypy-boto3-billingconductor (>=1.40.0,<1.41.0)", "mypy-boto3-braket (>=1.40.0,<1.41.0)", "mypy-boto3-budgets (>=1.40.0,<1.41.0)", "mypy-boto3-ce (>=1.40.0,<1.41.0)", "mypy-boto3-chatbot (>=1.40.0,<1.41.0)", "mypy-boto3-chime (>=1.40.0,<1.41.0)", "mypy-boto3-chime-sdk-identity (>=1.40.0,<1.41.0)", "mypy-boto3-chime-sdk-media-pipelines (>=1.40.0,<1.41.0)", "mypy-boto3-chime-sdk-meetings (>=1.40.0,<1.41.0)", "mypy-boto3-chime-sdk-messaging (>=1.40.0,<1.41.0)", "mypy-boto3-chime-sdk-voice (>=1.40.0,<1.41.0)", "mypy-boto3-cleanrooms (>=1.40.0,<1.41.0)", "mypy-boto3-cleanroomsml (>=1.40.0,<1.41.0)", "mypy-boto3-cloud9 (>=1.40.0,<1.41.0)", "mypy-boto3-cloudcontrol (>=1.40.0,<1.41.0)", "mypy-boto3-clouddirectory (>=1.40.0,<1.41.0)", "mypy-boto3-cloudformation (>=1.40.0,<1.41.0)", "mypy-boto3-cloudfront (>=1.40.0,<1.41.0)", "mypy-boto3-cloudfront-keyvaluestore (>=1.40.0,<1.41.0)", "mypy-boto3-cloudhsm (>=1.40.0,<1.41.0)", "mypy-boto3-cloudhsmv2 (>=1.40.0,<1.41.0)", "mypy-boto3-cloudsearch (>=1.40.0,<1.41.0)", "mypy-boto3-cloudsearchdomain (>=1.40.0,<1.41.0)", "mypy-boto3-cloudtrail (>=1.40.0,<1.41.0)", "mypy-boto3-cloudtrail-data (>=1.40.0,<1.41.0)", "mypy-boto3-cloudwatch (>=1.40.0,<1.41.0)", "mypy-boto3-codeartifact (>=1.40.0,<1.41.0)", "mypy-boto3-codebuild (>=1.40.0,<1.41.0)", "mypy-boto3-codecatalyst (>=1.40.0,<1.41.0)", "mypy-boto3-codecommit (>=1.40.0,<1.41.0)", "mypy-boto3-codeconnections (>=1.40.0,<1.41.0)", "mypy-boto3-codedeploy (>=1.40.0,<1.41.0)", "mypy-boto3-codeguru-reviewer (>=1.40.0,<1.41.0)", "mypy-boto3-codeguru-security (>=1.40.0,<1.41.0)", "mypy-boto3-codeguruprofiler (>=1.40.0,<1.41.0)", "mypy-boto3-codepipeline (>=1.40.0,<1.41.0)", "mypy-boto3-codestar-connections (>=1.40.0,<1.41.0)", "mypy-boto3-codestar-notifications (>=1.40.0,<1.41.0)", "mypy-boto3-cognito-identity (>=1.40.0,<1.41.0)", "mypy-boto3-cognito-idp (>=1.40.0,<1.41.0)", "mypy-boto3-cognito-sync (>=1.40.0,<1.41.0)", "mypy-boto3-comprehend (>=1.40.0,<1.41.0)", "mypy-boto3-comprehendmedical (>=1.40.0,<1.41.0)", "mypy-boto3-compute-optimizer (>=1.40.0,<1.41.0)", "mypy-boto3-config (>=1.40.0,<1.41.0)", "mypy-boto3-connect (>=1.40.0,<1.41.0)", "mypy-boto3-connect-contact-lens (>=1.40.0,<1.41.0)", "mypy-boto3-connectcampaigns (>=1.40.0,<1.41.0)", "mypy-boto3-connectcampaignsv2 (>=1.40.0,<1.41.0)", "mypy-boto3-connectcases (>=1.40.0,<1.41.0)", "mypy-boto3-connectparticipant (>=1.40.0,<1.41.0)", "mypy-boto3-controlcatalog (>=1.40.0,<1.41.0)", "mypy-boto3-controltower (>=1.40.0,<1.41.0)", "mypy-boto3-cost-optimization-hub (>=1.40.0,<1.41.0)", "mypy-boto3-cur (>=1.40.0,<1.41.0)", "mypy-boto3-customer-profiles (>=1.40.0,<1.41.0)", "mypy-boto3-databrew (>=1.40.0,<1.41.0)", "mypy-boto3-dataexchange (>=1.40.0,<1.41.0)", "mypy-boto3-datapipeline (>=1.40.0,<1.41.0)", "mypy-boto3-datasync (>=1.40.0,<1.41.0)", "mypy-boto3-datazone (>=1.40.0,<1.41.0)", "mypy-boto3-dax (>=1.40.0,<1.41.0)", "mypy-boto3-deadline (>=1.40.0,<1.41.0)", "mypy-boto3-detective (>=1.40.0,<1.41.0)", "mypy-boto3-devicefarm (>=1.40.0,<1.41.0)", "mypy-boto3-devops-guru (>=1.40.0,<1.41.0)", "mypy-boto3-directconnect (>=1.40.0,<1.41.0)", "mypy-boto3-discovery (>=1.40.0,<1.41.0)", "mypy-boto3-dlm (>=1.40.0,<1.41.0)", "mypy-boto3-dms (>=1.40.0,<1.41.0)", "mypy-boto3-docdb (>=1.40.0,<1.41.0)", "mypy-boto3-docdb-elastic (>=1.40.0,<1.41.0)", "mypy-boto3-drs (>=1.40.0,<1.41.0)", "mypy-boto3-ds (>=1.40.0,<1.41.0)", "mypy-boto3-ds-data (>=1.40.0,<1.41.0)", "mypy-boto3-dsql (>=1.40.0,<1.41.0)", "mypy-boto3-dynamodb (>=1.40.0,<1.41.0)", "mypy-boto3-dynamodbstreams (>=1.40.0,<1.41.0)", "mypy-boto3-ebs (>=1.40.0,<1.41.0)", "mypy-boto3-ec2 (>=1.40.0,<1.41.0)", "mypy-boto3-ec2-instance-connect (>=1.40.0,<1.41.0)", "mypy-boto3-ecr (>=1.40.0,<1.41.0)", "mypy-boto3-ecr-public (>=1.40.0,<1.41.0)", "mypy-boto3-ecs (>=1.40.0,<1.41.0)", "mypy-boto3-efs (>=1.40.0,<1.41.0)", "mypy-boto3-eks (>=1.40.0,<1.41.0)", "mypy-boto3-eks-auth (>=1.40.0,<1.41.0)", "mypy-boto3-elasticache (>=1.40.0,<1.41.0)", "mypy-boto3-elasticbeanstalk (>=1.40.0,<1.41.0)", "mypy-boto3-elastictranscoder (>=1.40.0,<1.41.0)", "mypy-boto3-elb (>=1.40.0,<1.41.0)", "mypy-boto3-elbv2 (>=1.40.0,<1.41.0)", "mypy-boto3-emr (>=1.40.0,<1.41.0)", "mypy-boto3-emr-containers (>=1.40.0,<1.41.0)", "mypy-boto3-emr-serverless (>=1.40.0,<1.41.0)", "mypy-boto3-entityresolution (>=1.40.0,<1.41.0)", "mypy-boto3-es (>=1.40.0,<1.41.0)", "mypy-boto3-events (>=1.40.0,<1.41.0)", "mypy-boto3-evidently (>=1.40.0,<1.41.0)", "mypy-boto3-evs (>=1.40.0,<1.41.0)", "mypy-boto3-finspace (>=1.40.0,<1.41.0)", "mypy-boto3-finspace-data (>=1.40.0,<1.41.0)", "mypy-boto3-firehose (>=1.40.0,<1.41.0)", "mypy-boto3-fis (>=1.40.0,<1.41.0)", "mypy-boto3-fms (>=1.40.0,<1.41.0)", "mypy-boto3-forecast (>=1.40.0,<1.41.0)", "mypy-boto3-forecastquery (>=1.40.0,<1.41.0)", "mypy-boto3-frauddetector (>=1.40.0,<1.41.0)", "mypy-boto3-freetier (>=1.40.0,<1.41.0)", "mypy-boto3-fsx (>=1.40.0,<1.41.0)", "mypy-boto3-gamelift (>=1.40.0,<1.41.0)", "mypy-boto3-gameliftstreams (>=1.40.0,<1.41.0)", "mypy-boto3-geo-maps (>=1.40.0,<1.41.0)", "mypy-boto3-geo-places (>=1.40.0,<1.41.0)", "mypy-boto3-geo-routes (>=1.40.0,<1.41.0)", "mypy-boto3-glacier (>=1.40.0,<1.41.0)", "mypy-boto3-globalaccelerator (>=1.40.0,<1.41.0)", "mypy-boto3-glue (>=1.40.0,<1.41.0)", "mypy-boto3-grafana (>=1.40.0,<1.41.0)", "mypy-boto3-greengrass (>=1.40.0,<1.41.0)", "mypy-boto3-greengrassv2 (>=1.40.0,<1.41.0)", "mypy-boto3-groundstation (>=1.40.0,<1.41.0)", "mypy-boto3-guardduty (>=1.40.0,<1.41.0)", "mypy-boto3-health (>=1.40.0,<1.41.0)", "mypy-boto3-healthlake (>=1.40.0,<1.41.0)", "mypy-boto3-iam (>=1.40.0,<1.41.0)", "mypy-boto3-identitystore (>=1.40.0,<1.41.0)", "mypy-boto3-imagebuilder (>=1.40.0,<1.41.0)", "mypy-boto3-importexport (>=1.40.0,<1.41.0)", "mypy-boto3-inspector (>=1.40.0,<1.41.0)", "mypy-boto3-inspector-scan (>=1.40.0,<1.41.0)", "mypy-boto3-inspector2 (>=1.40.0,<1.41.0)", "mypy-boto3-internetmonitor (>=1.40.0,<1.41.0)", "mypy-boto3-invoicing (>=1.40.0,<1.41.0)", "mypy-boto3-iot (>=1.40.0,<1.41.0)", "mypy-boto3-iot-data (>=1.40.0,<1.41.0)", "mypy-boto3-iot-jobs-data (>=1.40.0,<1.41.0)", "mypy-boto3-iot-managed-integrations (>=1.40.0,<1.41.0)", "mypy-boto3-iotanalytics (>=1.40.0,<1.41.0)", "mypy-boto3-iotdeviceadvisor (>=1.40.0,<1.41.0)", "mypy-boto3-iotevents (>=1.40.0,<1.41.0)", "mypy-boto3-iotevents-data (>=1.40.0,<1.41.0)", "mypy-boto3-iotfleethub (>=1.40.0,<1.41.0)", "mypy-boto3-iotfleetwise (>=1.40.0,<1.41.0)", "mypy-boto3-iotsecuretunneling (>=1.40.0,<1.41.0)", "mypy-boto3-iotsitewise (>=1.40.0,<1.41.0)", "mypy-boto3-iotthingsgraph (>=1.40.0,<1.41.0)", "mypy-boto3-iottwinmaker (>=1.40.0,<1.41.0)", "mypy-boto3-iotwireless (>=1.40.0,<1.41.0)", "mypy-boto3-ivs (>=1.40.0,<1.41.0)", "mypy-boto3-ivs-realtime (>=1.40.0,<1.41.0)", "mypy-boto3-ivschat (>=1.40.0,<1.41.0)", "mypy-boto3-kafka (>=1.40.0,<1.41.0)", "mypy-boto3-kafkaconnect (>=1.40.0,<1.41.0)", "mypy-boto3-kendra (>=1.40.0,<1.41.0)", "mypy-boto3-kendra-ranking (>=1.40.0,<1.41.0)", "mypy-boto3-keyspaces (>=1.40.0,<1.41.0)", "mypy-boto3-keyspacesstreams (>=1.40.0,<1.41.0)", "mypy-boto3-kinesis (>=1.40.0,<1.41.0)", "mypy-boto3-kinesis-video-archived-media (>=1.40.0,<1.41.0)", "mypy-boto3-kinesis-video-media (>=1.40.0,<1.41.0)", "mypy-boto3-kinesis-video-signaling (>=1.40.0,<1.41.0)", "mypy-boto3-kinesis-video-webrtc-storage (>=1.40.0,<1.41.0)", "mypy-boto3-kinesisanalytics (>=1.40.0,<1.41.0)", "mypy-boto3-kinesisanalyticsv2 (>=1.40.0,<1.41.0)", "mypy-boto3-kinesisvideo (>=1.40.0,<1.41.0)", "mypy-boto3-kms (>=1.40.0,<1.41.0)", "mypy-boto3-lakeformation (>=1.40.0,<1.41.0)", "mypy-boto3-lambda (>=1.40.0,<1.41.0)", "mypy-boto3-launch-wizard (>=1.40.0,<1.41.0)", "mypy-boto3-lex-models (>=1.40.0,<1.41.0)", "mypy-boto3-lex-runtime (>=1.40.0,<1.41.0)", "mypy-boto3-lexv2-models (>=1.40.0,<1.41.0)", "mypy-boto3-lexv2-runtime (>=1.40.0,<1.41.0)", "mypy-boto3-license-manager (>=1.40.0,<1.41.0)", "mypy-boto3-license-manager-linux-subscriptions (>=1.40.0,<1.41.0)", "mypy-boto3-license-manager-user-subscriptions (>=1.40.0,<1.41.0)", "mypy-boto3-lightsail (>=1.40.0,<1.41.0)", "mypy-boto3-location (>=1.40.0,<1.41.0)", "mypy-boto3-logs (>=1.40.0,<1.41.0)", "mypy-boto3-lookoutequipment (>=1.40.0,<1.41.0)", "mypy-boto3-lookoutmetrics (>=1.40.0,<1.41.0)", "mypy-boto3-lookoutvision (>=1.40.0,<1.41.0)", "mypy-boto3-m2 (>=1.40.0,<1.41.0)", "mypy-boto3-machinelearning (>=1.40.0,<1.41.0)", "mypy-boto3-macie2 (>=1.40.0,<1.41.0)", "mypy-boto3-mailmanager (>=1.40.0,<1.41.0)", "mypy-boto3-managedblockchain (>=1.40.0,<1.41.0)", "mypy-boto3-managedblockchain-query (>=1.40.0,<1.41.0)", "mypy-boto3-marketplace-agreement (>=1.40.0,<1.41.0)", "mypy-boto3-marketplace-catalog (>=1.40.0,<1.41.0)", "mypy-boto3-marketplace-deployment (>=1.40.0,<1.41.0)", "mypy-boto3-marketplace-entitlement (>=1.40.0,<1.41.0)", "mypy-boto3-marketplace-reporting (>=1.40.0,<1.41.0)", "mypy-boto3-marketplacecommerceanalytics (>=1.40.0,<1.41.0)", "mypy-boto3-mediaconnect (>=1.40.0,<1.41.0)", "mypy-boto3-mediaconvert (>=1.40.0,<1.41.0)", "mypy-boto3-medialive (>=1.40.0,<1.41.0)", "mypy-boto3-mediapackage (>=1.40.0,<1.41.0)", "mypy-boto3-mediapackage-vod (>=1.40.0,<1.41.0)", "mypy-boto3-mediapackagev2 (>=1.40.0,<1.41.0)", "mypy-boto3-mediastore (>=1.40.0,<1.41.0)", "mypy-boto3-mediastore-data (>=1.40.0,<1.41.0)", "mypy-boto3-mediatailor (>=1.40.0,<1.41.0)", "mypy-boto3-medical-imaging (>=1.40.0,<1.41.0)", "mypy-boto3-memorydb (>=1.40.0,<1.41.0)", "mypy-boto3-meteringmarketplace (>=1.40.0,<1.41.0)", "mypy-boto3-mgh (>=1.40.0,<1.41.0)", "mypy-boto3-mgn (>=1.40.0,<1.41.0)", "mypy-boto3-migration-hub-refactor-spaces (>=1.40.0,<1.41.0)", "mypy-boto3-migrationhub-config (>=1.40.0,<1.41.0)", "mypy-boto3-migrationhuborchestrator (>=1.40.0,<1.41.0)", "mypy-boto3-migrationhubstrategy (>=1.40.0,<1.41.0)", "mypy-boto3-mpa (>=1.40.0,<1.41.0)", "mypy-boto3-mq (>=1.40.0,<1.41.0)", "mypy-boto3-mturk (>=1.40.0,<1.41.0)", "mypy-boto3-mwaa (>=1.40.0,<1.41.0)", "mypy-boto3-neptune (>=1.40.0,<1.41.0)", "mypy-boto3-neptune-graph (>=1.40.0,<1.41.0)", "mypy-boto3-neptunedata (>=1.40.0,<1.41.0)", "mypy-boto3-network-firewall (>=1.40.0,<1.41.0)", "mypy-boto3-networkflowmonitor (>=1.40.0,<1.41.0)", "mypy-boto3-networkmanager (>=1.40.0,<1.41.0)", "mypy-boto3-networkmonitor (>=1.40.0,<1.41.0)", "mypy-boto3-notifications (>=1.40.0,<1.41.0)", "mypy-boto3-notificationscontacts (>=1.40.0,<1.41.0)", "mypy-boto3-oam (>=1.40.0,<1.41.0)", "mypy-boto3-observabilityadmin (>=1.40.0,<1.41.0)", "mypy-boto3-odb (>=1.40.0,<1.41.0)", "mypy-boto3-omics (>=1.40.0,<1.41.0)", "mypy-boto3-opensearch (>=1.40.0,<1.41.0)", "mypy-boto3-opensearchserverless (>=1.40.0,<1.41.0)", "mypy-boto3-opsworks (>=1.40.0,<1.41.0)", "mypy-boto3-opsworkscm (>=1.40.0,<1.41.0)", "mypy-boto3-organizations (>=1.40.0,<1.41.0)", "mypy-boto3-osis (>=1.40.0,<1.41.0)", "mypy-boto3-outposts (>=1.40.0,<1.41.0)", "mypy-boto3-panorama (>=1.40.0,<1.41.0)", "mypy-boto3-partnercentral-selling (>=1.40.0,<1.41.0)", "mypy-boto3-payment-cryptography (>=1.40.0,<1.41.0)", "mypy-boto3-payment-cryptography-data (>=1.40.0,<1.41.0)", "mypy-boto3-pca-connector-ad (>=1.40.0,<1.41.0)", "mypy-boto3-pca-connector-scep (>=1.40.0,<1.41.0)", "mypy-boto3-pcs (>=1.40.0,<1.41.0)", "mypy-boto3-personalize (>=1.40.0,<1.41.0)", "mypy-boto3-personalize-events (>=1.40.0,<1.41.0)", "mypy-boto3-personalize-runtime (>=1.40.0,<1.41.0)", "mypy-boto3-pi (>=1.40.0,<1.41.0)", "mypy-boto3-pinpoint (>=1.40.0,<1.41.0)", "mypy-boto3-pinpoint-email (>=1.40.0,<1.41.0)", "mypy-boto3-pinpoint-sms-voice (>=1.40.0,<1.41.0)", "mypy-boto3-pinpoint-sms-voice-v2 (>=1.40.0,<1.41.0)", "mypy-boto3-pipes (>=1.40.0,<1.41.0)", "mypy-boto3-polly (>=1.40.0,<1.41.0)", "mypy-boto3-pricing (>=1.40.0,<1.41.0)", "mypy-boto3-proton (>=1.40.0,<1.41.0)", "mypy-boto3-qapps (>=1.40.0,<1.41.0)", "mypy-boto3-qbusiness (>=1.40.0,<1.41.0)", "mypy-boto3-qconnect (>=1.40.0,<1.41.0)", "mypy-boto3-qldb (>=1.40.0,<1.41.0)", "mypy-boto3-qldb-session (>=1.40.0,<1.41.0)", "mypy-boto3-quicksight (>=1.40.0,<1.41.0)", "mypy-boto3-ram (>=1.40.0,<1.41.0)", "mypy-boto3-rbin (>=1.40.0,<1.41.0)", "mypy-boto3-rds (>=1.40.0,<1.41.0)", "mypy-boto3-rds-data (>=1.40.0,<1.41.0)", "mypy-boto3-redshift (>=1.40.0,<1.41.0)", "mypy-boto3-redshift-data (>=1.40.0,<1.41.0)", "mypy-boto3-redshift-serverless (>=1.40.0,<1.41.0)", "mypy-boto3-rekognition (>=1.40.0,<1.41.0)", "mypy-boto3-repostspace (>=1.40.0,<1.41.0)", "mypy-boto3-resiliencehub (>=1.40.0,<1.41.0)", "mypy-boto3-resource-explorer-2 (>=1.40.0,<1.41.0)", "mypy-boto3-resource-groups (>=1.40.0,<1.41.0)", "mypy-boto3-resourcegroupstaggingapi (>=1.40.0,<1.41.0)", "mypy-boto3-robomaker (>=1.40.0,<1.41.0)", "mypy-boto3-rolesanywhere (>=1.40.0,<1.41.0)", "mypy-boto3-route53 (>=1.40.0,<1.41.0)", "mypy-boto3-route53-recovery-cluster (>=1.40.0,<1.41.0)", "mypy-boto3-route53-recovery-control-config (>=1.40.0,<1.41.0)", "mypy-boto3-route53-recovery-readiness (>=1.40.0,<1.41.0)", "mypy-boto3-route53domains (>=1.40.0,<1.41.0)", "mypy-boto3-route53profiles (>=1.40.0,<1.41.0)", "mypy-boto3-route53resolver (>=1.40.0,<1.41.0)", "mypy-boto3-rum (>=1.40.0,<1.41.0)", "mypy-boto3-s3 (>=1.40.0,<1.41.0)", "mypy-boto3-s3control (>=1.40.0,<1.41.0)", "mypy-boto3-s3outposts (>=1.40.0,<1.41.0)", "mypy-boto3-s3tables (>=1.40.0,<1.41.0)", "mypy-boto3-s3vectors (>=1.40.0,<1.41.0)", "mypy-boto3-sagemaker (>=1.40.0,<1.41.0)", "mypy-boto3-sagemaker-a2i-runtime (>=1.40.0,<1.41.0)", "mypy-boto3-sagemaker-edge (>=1.40.0,<1.41.0)", "mypy-boto3-sagemaker-featurestore-runtime (>=1.40.0,<1.41.0)", "mypy-boto3-sagemaker-geospatial (>=1.40.0,<1.41.0)", "mypy-boto3-sagemaker-metrics (>=1.40.0,<1.41.0)", "mypy-boto3-sagemaker-runtime (>=1.40.0,<1.41.0)", "mypy-boto3-savingsplans (>=1.40.0,<1.41.0)", "mypy-boto3-scheduler (>=1.40.0,<1.41.0)", "mypy-boto3-schemas (>=1.40.0,<1.41.0)", "mypy-boto3-sdb (>=1.40.0,<1.41.0)", "mypy-boto3-secretsmanager (>=1.40.0,<1.41.0)", "mypy-boto3-security-ir (>=1.40.0,<1.41.0)", "mypy-boto3-securityhub (>=1.40.0,<1.41.0)", "mypy-boto3-securitylake (>=1.40.0,<1.41.0)", "mypy-boto3-serverlessrepo (>=1.40.0,<1.41.0)", "mypy-boto3-service-quotas (>=1.40.0,<1.41.0)", "mypy-boto3-servicecatalog (>=1.40.0,<1.41.0)", "mypy-boto3-servicecatalog-appregistry (>=1.40.0,<1.41.0)", "mypy-boto3-servicediscovery (>=1.40.0,<1.41.0)", "mypy-boto3-ses (>=1.40.0,<1.41.0)", "mypy-boto3-sesv2 (>=1.40.0,<1.41.0)", "mypy-boto3-shield (>=1.40.0,<1.41.0)", "mypy-boto3-signer (>=1.40.0,<1.41.0)", "mypy-boto3-simspaceweaver (>=1.40.0,<1.41.0)", "mypy-boto3-sms (>=1.40.0,<1.41.0)", "mypy-boto3-snow-device-management (>=1.40.0,<1.41.0)", "mypy-boto3-snowball (>=1.40.0,<1.41.0)", "mypy-boto3-sns (>=1.40.0,<1.41.0)", "mypy-boto3-socialmessaging (>=1.40.0,<1.41.0)", "mypy-boto3-sqs (>=1.40.0,<1.41.0)", "mypy-boto3-ssm (>=1.40.0,<1.41.0)", "mypy-boto3-ssm-contacts (>=1.40.0,<1.41.0)", "mypy-boto3-ssm-guiconnect (>=1.40.0,<1.41.0)", "mypy-boto3-ssm-incidents (>=1.40.0,<1.41.0)", "mypy-boto3-ssm-quicksetup (>=1.40.0,<1.41.0)", "mypy-boto3-ssm-sap (>=1.40.0,<1.41.0)", "mypy-boto3-sso (>=1.40.0,<1.41.0)", "mypy-boto3-sso-admin (>=1.40.0,<1.41.0)", "mypy-boto3-sso-oidc (>=1.40.0,<1.41.0)", "mypy-boto3-stepfunctions (>=1.40.0,<1.41.0)", "mypy-boto3-storagegateway (>=1.40.0,<1.41.0)", "mypy-boto3-sts (>=1.40.0,<1.41.0)", "mypy-boto3-supplychain (>=1.40.0,<1.41.0)", "mypy-boto3-support (>=1.40.0,<1.41.0)", "mypy-boto3-support-app (>=1.40.0,<1.41.0)", "mypy-boto3-swf (>=1.40.0,<1.41.0)", "mypy-boto3-synthetics (>=1.40.0,<1.41.0)", "mypy-boto3-taxsettings (>=1.40.0,<1.41.0)", "mypy-boto3-textract (>=1.40.0,<1.41.0)", "mypy-boto3-timestream-influxdb (>=1.40.0,<1.41.0)", "mypy-boto3-timestream-query (>=1.40.0,<1.41.0)", "mypy-boto3-timestream-write (>=1.40.0,<1.41.0)", "mypy-boto3-tnb (>=1.40.0,<1.41.0)", "mypy-boto3-transcribe (>=1.40.0,<1.41.0)", "mypy-boto3-transfer (>=1.40.0,<1.41.0)", "mypy-boto3-translate (>=1.40.0,<1.41.0)", "mypy-boto3-trustedadvisor (>=1.40.0,<1.41.0)", "mypy-boto3-verifiedpermissions (>=1.40.0,<1.41.0)", "mypy-boto3-voice-id (>=1.40.0,<1.41.0)", "mypy-boto3-vpc-lattice (>=1.40.0,<1.41.0)", "mypy-boto3-waf (>=1.40.0,<1.41.0)", "mypy-boto3-waf-regional (>=1.40.0,<1.41.0)", "mypy-boto3-wafv2 (>=1.40.0,<1.41.0)", "mypy-boto3-wellarchitected (>=1.40.0,<1.41.0)", "mypy-boto3-wisdom (>=1.40.0,<1.41.0)", "mypy-boto3-workdocs (>=1.40.0,<1.41.0)", "mypy-boto3-workmail (>=1.40.0,<1.41.0)", "mypy-boto3-workmailmessageflow (>=1.40.0,<1.41.0)", "mypy-boto3-workspaces (>=1.40.0,<1.41.0)", "mypy-boto3-workspaces-instances (>=1.40.0,<1.41.0)", "mypy-boto3-workspaces-thin-client (>=1.40.0,<1.41.0)", "mypy-boto3-workspaces-web (>=1.40.0,<1.41.0)", "mypy-boto3-xray (>=1.40.0,<1.41.0)"] +all = ["mypy-boto3-accessanalyzer (>=1.40.0,<1.41.0)", "mypy-boto3-account (>=1.40.0,<1.41.0)", "mypy-boto3-acm (>=1.40.0,<1.41.0)", "mypy-boto3-acm-pca (>=1.40.0,<1.41.0)", "mypy-boto3-aiops (>=1.40.0,<1.41.0)", "mypy-boto3-amp (>=1.40.0,<1.41.0)", "mypy-boto3-amplify (>=1.40.0,<1.41.0)", "mypy-boto3-amplifybackend (>=1.40.0,<1.41.0)", "mypy-boto3-amplifyuibuilder (>=1.40.0,<1.41.0)", "mypy-boto3-apigateway (>=1.40.0,<1.41.0)", "mypy-boto3-apigatewaymanagementapi (>=1.40.0,<1.41.0)", "mypy-boto3-apigatewayv2 (>=1.40.0,<1.41.0)", "mypy-boto3-appconfig (>=1.40.0,<1.41.0)", "mypy-boto3-appconfigdata (>=1.40.0,<1.41.0)", "mypy-boto3-appfabric (>=1.40.0,<1.41.0)", "mypy-boto3-appflow (>=1.40.0,<1.41.0)", "mypy-boto3-appintegrations (>=1.40.0,<1.41.0)", "mypy-boto3-application-autoscaling (>=1.40.0,<1.41.0)", "mypy-boto3-application-insights (>=1.40.0,<1.41.0)", "mypy-boto3-application-signals (>=1.40.0,<1.41.0)", "mypy-boto3-applicationcostprofiler (>=1.40.0,<1.41.0)", "mypy-boto3-appmesh (>=1.40.0,<1.41.0)", "mypy-boto3-apprunner (>=1.40.0,<1.41.0)", "mypy-boto3-appstream (>=1.40.0,<1.41.0)", "mypy-boto3-appsync (>=1.40.0,<1.41.0)", "mypy-boto3-apptest (>=1.40.0,<1.41.0)", "mypy-boto3-arc-region-switch (>=1.40.0,<1.41.0)", "mypy-boto3-arc-zonal-shift (>=1.40.0,<1.41.0)", "mypy-boto3-artifact (>=1.40.0,<1.41.0)", "mypy-boto3-athena (>=1.40.0,<1.41.0)", "mypy-boto3-auditmanager (>=1.40.0,<1.41.0)", "mypy-boto3-autoscaling (>=1.40.0,<1.41.0)", "mypy-boto3-autoscaling-plans (>=1.40.0,<1.41.0)", "mypy-boto3-b2bi (>=1.40.0,<1.41.0)", "mypy-boto3-backup (>=1.40.0,<1.41.0)", "mypy-boto3-backup-gateway (>=1.40.0,<1.41.0)", "mypy-boto3-backupsearch (>=1.40.0,<1.41.0)", "mypy-boto3-batch (>=1.40.0,<1.41.0)", "mypy-boto3-bcm-dashboards (>=1.40.0,<1.41.0)", "mypy-boto3-bcm-data-exports (>=1.40.0,<1.41.0)", "mypy-boto3-bcm-pricing-calculator (>=1.40.0,<1.41.0)", "mypy-boto3-bcm-recommended-actions (>=1.40.0,<1.41.0)", "mypy-boto3-bedrock (>=1.40.0,<1.41.0)", "mypy-boto3-bedrock-agent (>=1.40.0,<1.41.0)", "mypy-boto3-bedrock-agent-runtime (>=1.40.0,<1.41.0)", "mypy-boto3-bedrock-agentcore (>=1.40.0,<1.41.0)", "mypy-boto3-bedrock-agentcore-control (>=1.40.0,<1.41.0)", "mypy-boto3-bedrock-data-automation (>=1.40.0,<1.41.0)", "mypy-boto3-bedrock-data-automation-runtime (>=1.40.0,<1.41.0)", "mypy-boto3-bedrock-runtime (>=1.40.0,<1.41.0)", "mypy-boto3-billing (>=1.40.0,<1.41.0)", "mypy-boto3-billingconductor (>=1.40.0,<1.41.0)", "mypy-boto3-braket (>=1.40.0,<1.41.0)", "mypy-boto3-budgets (>=1.40.0,<1.41.0)", "mypy-boto3-ce (>=1.40.0,<1.41.0)", "mypy-boto3-chatbot (>=1.40.0,<1.41.0)", "mypy-boto3-chime (>=1.40.0,<1.41.0)", "mypy-boto3-chime-sdk-identity (>=1.40.0,<1.41.0)", "mypy-boto3-chime-sdk-media-pipelines (>=1.40.0,<1.41.0)", "mypy-boto3-chime-sdk-meetings (>=1.40.0,<1.41.0)", "mypy-boto3-chime-sdk-messaging (>=1.40.0,<1.41.0)", "mypy-boto3-chime-sdk-voice (>=1.40.0,<1.41.0)", "mypy-boto3-cleanrooms (>=1.40.0,<1.41.0)", "mypy-boto3-cleanroomsml (>=1.40.0,<1.41.0)", "mypy-boto3-cloud9 (>=1.40.0,<1.41.0)", "mypy-boto3-cloudcontrol (>=1.40.0,<1.41.0)", "mypy-boto3-clouddirectory (>=1.40.0,<1.41.0)", "mypy-boto3-cloudformation (>=1.40.0,<1.41.0)", "mypy-boto3-cloudfront (>=1.40.0,<1.41.0)", "mypy-boto3-cloudfront-keyvaluestore (>=1.40.0,<1.41.0)", "mypy-boto3-cloudhsm (>=1.40.0,<1.41.0)", "mypy-boto3-cloudhsmv2 (>=1.40.0,<1.41.0)", "mypy-boto3-cloudsearch (>=1.40.0,<1.41.0)", "mypy-boto3-cloudsearchdomain (>=1.40.0,<1.41.0)", "mypy-boto3-cloudtrail (>=1.40.0,<1.41.0)", "mypy-boto3-cloudtrail-data (>=1.40.0,<1.41.0)", "mypy-boto3-cloudwatch (>=1.40.0,<1.41.0)", "mypy-boto3-codeartifact (>=1.40.0,<1.41.0)", "mypy-boto3-codebuild (>=1.40.0,<1.41.0)", "mypy-boto3-codecatalyst (>=1.40.0,<1.41.0)", "mypy-boto3-codecommit (>=1.40.0,<1.41.0)", "mypy-boto3-codeconnections (>=1.40.0,<1.41.0)", "mypy-boto3-codedeploy (>=1.40.0,<1.41.0)", "mypy-boto3-codeguru-reviewer (>=1.40.0,<1.41.0)", "mypy-boto3-codeguru-security (>=1.40.0,<1.41.0)", "mypy-boto3-codeguruprofiler (>=1.40.0,<1.41.0)", "mypy-boto3-codepipeline (>=1.40.0,<1.41.0)", "mypy-boto3-codestar-connections (>=1.40.0,<1.41.0)", "mypy-boto3-codestar-notifications (>=1.40.0,<1.41.0)", "mypy-boto3-cognito-identity (>=1.40.0,<1.41.0)", "mypy-boto3-cognito-idp (>=1.40.0,<1.41.0)", "mypy-boto3-cognito-sync (>=1.40.0,<1.41.0)", "mypy-boto3-comprehend (>=1.40.0,<1.41.0)", "mypy-boto3-comprehendmedical (>=1.40.0,<1.41.0)", "mypy-boto3-compute-optimizer (>=1.40.0,<1.41.0)", "mypy-boto3-config (>=1.40.0,<1.41.0)", "mypy-boto3-connect (>=1.40.0,<1.41.0)", "mypy-boto3-connect-contact-lens (>=1.40.0,<1.41.0)", "mypy-boto3-connectcampaigns (>=1.40.0,<1.41.0)", "mypy-boto3-connectcampaignsv2 (>=1.40.0,<1.41.0)", "mypy-boto3-connectcases (>=1.40.0,<1.41.0)", "mypy-boto3-connectparticipant (>=1.40.0,<1.41.0)", "mypy-boto3-controlcatalog (>=1.40.0,<1.41.0)", "mypy-boto3-controltower (>=1.40.0,<1.41.0)", "mypy-boto3-cost-optimization-hub (>=1.40.0,<1.41.0)", "mypy-boto3-cur (>=1.40.0,<1.41.0)", "mypy-boto3-customer-profiles (>=1.40.0,<1.41.0)", "mypy-boto3-databrew (>=1.40.0,<1.41.0)", "mypy-boto3-dataexchange (>=1.40.0,<1.41.0)", "mypy-boto3-datapipeline (>=1.40.0,<1.41.0)", "mypy-boto3-datasync (>=1.40.0,<1.41.0)", "mypy-boto3-datazone (>=1.40.0,<1.41.0)", "mypy-boto3-dax (>=1.40.0,<1.41.0)", "mypy-boto3-deadline (>=1.40.0,<1.41.0)", "mypy-boto3-detective (>=1.40.0,<1.41.0)", "mypy-boto3-devicefarm (>=1.40.0,<1.41.0)", "mypy-boto3-devops-guru (>=1.40.0,<1.41.0)", "mypy-boto3-directconnect (>=1.40.0,<1.41.0)", "mypy-boto3-discovery (>=1.40.0,<1.41.0)", "mypy-boto3-dlm (>=1.40.0,<1.41.0)", "mypy-boto3-dms (>=1.40.0,<1.41.0)", "mypy-boto3-docdb (>=1.40.0,<1.41.0)", "mypy-boto3-docdb-elastic (>=1.40.0,<1.41.0)", "mypy-boto3-drs (>=1.40.0,<1.41.0)", "mypy-boto3-ds (>=1.40.0,<1.41.0)", "mypy-boto3-ds-data (>=1.40.0,<1.41.0)", "mypy-boto3-dsql (>=1.40.0,<1.41.0)", "mypy-boto3-dynamodb (>=1.40.0,<1.41.0)", "mypy-boto3-dynamodbstreams (>=1.40.0,<1.41.0)", "mypy-boto3-ebs (>=1.40.0,<1.41.0)", "mypy-boto3-ec2 (>=1.40.0,<1.41.0)", "mypy-boto3-ec2-instance-connect (>=1.40.0,<1.41.0)", "mypy-boto3-ecr (>=1.40.0,<1.41.0)", "mypy-boto3-ecr-public (>=1.40.0,<1.41.0)", "mypy-boto3-ecs (>=1.40.0,<1.41.0)", "mypy-boto3-efs (>=1.40.0,<1.41.0)", "mypy-boto3-eks (>=1.40.0,<1.41.0)", "mypy-boto3-eks-auth (>=1.40.0,<1.41.0)", "mypy-boto3-elasticache (>=1.40.0,<1.41.0)", "mypy-boto3-elasticbeanstalk (>=1.40.0,<1.41.0)", "mypy-boto3-elastictranscoder (>=1.40.0,<1.41.0)", "mypy-boto3-elb (>=1.40.0,<1.41.0)", "mypy-boto3-elbv2 (>=1.40.0,<1.41.0)", "mypy-boto3-emr (>=1.40.0,<1.41.0)", "mypy-boto3-emr-containers (>=1.40.0,<1.41.0)", "mypy-boto3-emr-serverless (>=1.40.0,<1.41.0)", "mypy-boto3-entityresolution (>=1.40.0,<1.41.0)", "mypy-boto3-es (>=1.40.0,<1.41.0)", "mypy-boto3-events (>=1.40.0,<1.41.0)", "mypy-boto3-evidently (>=1.40.0,<1.41.0)", "mypy-boto3-evs (>=1.40.0,<1.41.0)", "mypy-boto3-finspace (>=1.40.0,<1.41.0)", "mypy-boto3-finspace-data (>=1.40.0,<1.41.0)", "mypy-boto3-firehose (>=1.40.0,<1.41.0)", "mypy-boto3-fis (>=1.40.0,<1.41.0)", "mypy-boto3-fms (>=1.40.0,<1.41.0)", "mypy-boto3-forecast (>=1.40.0,<1.41.0)", "mypy-boto3-forecastquery (>=1.40.0,<1.41.0)", "mypy-boto3-frauddetector (>=1.40.0,<1.41.0)", "mypy-boto3-freetier (>=1.40.0,<1.41.0)", "mypy-boto3-fsx (>=1.40.0,<1.41.0)", "mypy-boto3-gamelift (>=1.40.0,<1.41.0)", "mypy-boto3-gameliftstreams (>=1.40.0,<1.41.0)", "mypy-boto3-geo-maps (>=1.40.0,<1.41.0)", "mypy-boto3-geo-places (>=1.40.0,<1.41.0)", "mypy-boto3-geo-routes (>=1.40.0,<1.41.0)", "mypy-boto3-glacier (>=1.40.0,<1.41.0)", "mypy-boto3-globalaccelerator (>=1.40.0,<1.41.0)", "mypy-boto3-glue (>=1.40.0,<1.41.0)", "mypy-boto3-grafana (>=1.40.0,<1.41.0)", "mypy-boto3-greengrass (>=1.40.0,<1.41.0)", "mypy-boto3-greengrassv2 (>=1.40.0,<1.41.0)", "mypy-boto3-groundstation (>=1.40.0,<1.41.0)", "mypy-boto3-guardduty (>=1.40.0,<1.41.0)", "mypy-boto3-health (>=1.40.0,<1.41.0)", "mypy-boto3-healthlake (>=1.40.0,<1.41.0)", "mypy-boto3-iam (>=1.40.0,<1.41.0)", "mypy-boto3-identitystore (>=1.40.0,<1.41.0)", "mypy-boto3-imagebuilder (>=1.40.0,<1.41.0)", "mypy-boto3-importexport (>=1.40.0,<1.41.0)", "mypy-boto3-inspector (>=1.40.0,<1.41.0)", "mypy-boto3-inspector-scan (>=1.40.0,<1.41.0)", "mypy-boto3-inspector2 (>=1.40.0,<1.41.0)", "mypy-boto3-internetmonitor (>=1.40.0,<1.41.0)", "mypy-boto3-invoicing (>=1.40.0,<1.41.0)", "mypy-boto3-iot (>=1.40.0,<1.41.0)", "mypy-boto3-iot-data (>=1.40.0,<1.41.0)", "mypy-boto3-iot-jobs-data (>=1.40.0,<1.41.0)", "mypy-boto3-iot-managed-integrations (>=1.40.0,<1.41.0)", "mypy-boto3-iotanalytics (>=1.40.0,<1.41.0)", "mypy-boto3-iotdeviceadvisor (>=1.40.0,<1.41.0)", "mypy-boto3-iotevents (>=1.40.0,<1.41.0)", "mypy-boto3-iotevents-data (>=1.40.0,<1.41.0)", "mypy-boto3-iotfleethub (>=1.40.0,<1.41.0)", "mypy-boto3-iotfleetwise (>=1.40.0,<1.41.0)", "mypy-boto3-iotsecuretunneling (>=1.40.0,<1.41.0)", "mypy-boto3-iotsitewise (>=1.40.0,<1.41.0)", "mypy-boto3-iotthingsgraph (>=1.40.0,<1.41.0)", "mypy-boto3-iottwinmaker (>=1.40.0,<1.41.0)", "mypy-boto3-iotwireless (>=1.40.0,<1.41.0)", "mypy-boto3-ivs (>=1.40.0,<1.41.0)", "mypy-boto3-ivs-realtime (>=1.40.0,<1.41.0)", "mypy-boto3-ivschat (>=1.40.0,<1.41.0)", "mypy-boto3-kafka (>=1.40.0,<1.41.0)", "mypy-boto3-kafkaconnect (>=1.40.0,<1.41.0)", "mypy-boto3-kendra (>=1.40.0,<1.41.0)", "mypy-boto3-kendra-ranking (>=1.40.0,<1.41.0)", "mypy-boto3-keyspaces (>=1.40.0,<1.41.0)", "mypy-boto3-keyspacesstreams (>=1.40.0,<1.41.0)", "mypy-boto3-kinesis (>=1.40.0,<1.41.0)", "mypy-boto3-kinesis-video-archived-media (>=1.40.0,<1.41.0)", "mypy-boto3-kinesis-video-media (>=1.40.0,<1.41.0)", "mypy-boto3-kinesis-video-signaling (>=1.40.0,<1.41.0)", "mypy-boto3-kinesis-video-webrtc-storage (>=1.40.0,<1.41.0)", "mypy-boto3-kinesisanalytics (>=1.40.0,<1.41.0)", "mypy-boto3-kinesisanalyticsv2 (>=1.40.0,<1.41.0)", "mypy-boto3-kinesisvideo (>=1.40.0,<1.41.0)", "mypy-boto3-kms (>=1.40.0,<1.41.0)", "mypy-boto3-lakeformation (>=1.40.0,<1.41.0)", "mypy-boto3-lambda (>=1.40.0,<1.41.0)", "mypy-boto3-launch-wizard (>=1.40.0,<1.41.0)", "mypy-boto3-lex-models (>=1.40.0,<1.41.0)", "mypy-boto3-lex-runtime (>=1.40.0,<1.41.0)", "mypy-boto3-lexv2-models (>=1.40.0,<1.41.0)", "mypy-boto3-lexv2-runtime (>=1.40.0,<1.41.0)", "mypy-boto3-license-manager (>=1.40.0,<1.41.0)", "mypy-boto3-license-manager-linux-subscriptions (>=1.40.0,<1.41.0)", "mypy-boto3-license-manager-user-subscriptions (>=1.40.0,<1.41.0)", "mypy-boto3-lightsail (>=1.40.0,<1.41.0)", "mypy-boto3-location (>=1.40.0,<1.41.0)", "mypy-boto3-logs (>=1.40.0,<1.41.0)", "mypy-boto3-lookoutequipment (>=1.40.0,<1.41.0)", "mypy-boto3-lookoutmetrics (>=1.40.0,<1.41.0)", "mypy-boto3-lookoutvision (>=1.40.0,<1.41.0)", "mypy-boto3-m2 (>=1.40.0,<1.41.0)", "mypy-boto3-machinelearning (>=1.40.0,<1.41.0)", "mypy-boto3-macie2 (>=1.40.0,<1.41.0)", "mypy-boto3-mailmanager (>=1.40.0,<1.41.0)", "mypy-boto3-managedblockchain (>=1.40.0,<1.41.0)", "mypy-boto3-managedblockchain-query (>=1.40.0,<1.41.0)", "mypy-boto3-marketplace-agreement (>=1.40.0,<1.41.0)", "mypy-boto3-marketplace-catalog (>=1.40.0,<1.41.0)", "mypy-boto3-marketplace-deployment (>=1.40.0,<1.41.0)", "mypy-boto3-marketplace-entitlement (>=1.40.0,<1.41.0)", "mypy-boto3-marketplace-reporting (>=1.40.0,<1.41.0)", "mypy-boto3-marketplacecommerceanalytics (>=1.40.0,<1.41.0)", "mypy-boto3-mediaconnect (>=1.40.0,<1.41.0)", "mypy-boto3-mediaconvert (>=1.40.0,<1.41.0)", "mypy-boto3-medialive (>=1.40.0,<1.41.0)", "mypy-boto3-mediapackage (>=1.40.0,<1.41.0)", "mypy-boto3-mediapackage-vod (>=1.40.0,<1.41.0)", "mypy-boto3-mediapackagev2 (>=1.40.0,<1.41.0)", "mypy-boto3-mediastore (>=1.40.0,<1.41.0)", "mypy-boto3-mediastore-data (>=1.40.0,<1.41.0)", "mypy-boto3-mediatailor (>=1.40.0,<1.41.0)", "mypy-boto3-medical-imaging (>=1.40.0,<1.41.0)", "mypy-boto3-memorydb (>=1.40.0,<1.41.0)", "mypy-boto3-meteringmarketplace (>=1.40.0,<1.41.0)", "mypy-boto3-mgh (>=1.40.0,<1.41.0)", "mypy-boto3-mgn (>=1.40.0,<1.41.0)", "mypy-boto3-migration-hub-refactor-spaces (>=1.40.0,<1.41.0)", "mypy-boto3-migrationhub-config (>=1.40.0,<1.41.0)", "mypy-boto3-migrationhuborchestrator (>=1.40.0,<1.41.0)", "mypy-boto3-migrationhubstrategy (>=1.40.0,<1.41.0)", "mypy-boto3-mpa (>=1.40.0,<1.41.0)", "mypy-boto3-mq (>=1.40.0,<1.41.0)", "mypy-boto3-mturk (>=1.40.0,<1.41.0)", "mypy-boto3-mwaa (>=1.40.0,<1.41.0)", "mypy-boto3-neptune (>=1.40.0,<1.41.0)", "mypy-boto3-neptune-graph (>=1.40.0,<1.41.0)", "mypy-boto3-neptunedata (>=1.40.0,<1.41.0)", "mypy-boto3-network-firewall (>=1.40.0,<1.41.0)", "mypy-boto3-networkflowmonitor (>=1.40.0,<1.41.0)", "mypy-boto3-networkmanager (>=1.40.0,<1.41.0)", "mypy-boto3-networkmonitor (>=1.40.0,<1.41.0)", "mypy-boto3-notifications (>=1.40.0,<1.41.0)", "mypy-boto3-notificationscontacts (>=1.40.0,<1.41.0)", "mypy-boto3-oam (>=1.40.0,<1.41.0)", "mypy-boto3-observabilityadmin (>=1.40.0,<1.41.0)", "mypy-boto3-odb (>=1.40.0,<1.41.0)", "mypy-boto3-omics (>=1.40.0,<1.41.0)", "mypy-boto3-opensearch (>=1.40.0,<1.41.0)", "mypy-boto3-opensearchserverless (>=1.40.0,<1.41.0)", "mypy-boto3-organizations (>=1.40.0,<1.41.0)", "mypy-boto3-osis (>=1.40.0,<1.41.0)", "mypy-boto3-outposts (>=1.40.0,<1.41.0)", "mypy-boto3-panorama (>=1.40.0,<1.41.0)", "mypy-boto3-partnercentral-selling (>=1.40.0,<1.41.0)", "mypy-boto3-payment-cryptography (>=1.40.0,<1.41.0)", "mypy-boto3-payment-cryptography-data (>=1.40.0,<1.41.0)", "mypy-boto3-pca-connector-ad (>=1.40.0,<1.41.0)", "mypy-boto3-pca-connector-scep (>=1.40.0,<1.41.0)", "mypy-boto3-pcs (>=1.40.0,<1.41.0)", "mypy-boto3-personalize (>=1.40.0,<1.41.0)", "mypy-boto3-personalize-events (>=1.40.0,<1.41.0)", "mypy-boto3-personalize-runtime (>=1.40.0,<1.41.0)", "mypy-boto3-pi (>=1.40.0,<1.41.0)", "mypy-boto3-pinpoint (>=1.40.0,<1.41.0)", "mypy-boto3-pinpoint-email (>=1.40.0,<1.41.0)", "mypy-boto3-pinpoint-sms-voice (>=1.40.0,<1.41.0)", "mypy-boto3-pinpoint-sms-voice-v2 (>=1.40.0,<1.41.0)", "mypy-boto3-pipes (>=1.40.0,<1.41.0)", "mypy-boto3-polly (>=1.40.0,<1.41.0)", "mypy-boto3-pricing (>=1.40.0,<1.41.0)", "mypy-boto3-proton (>=1.40.0,<1.41.0)", "mypy-boto3-qapps (>=1.40.0,<1.41.0)", "mypy-boto3-qbusiness (>=1.40.0,<1.41.0)", "mypy-boto3-qconnect (>=1.40.0,<1.41.0)", "mypy-boto3-qldb (>=1.40.0,<1.41.0)", "mypy-boto3-qldb-session (>=1.40.0,<1.41.0)", "mypy-boto3-quicksight (>=1.40.0,<1.41.0)", "mypy-boto3-ram (>=1.40.0,<1.41.0)", "mypy-boto3-rbin (>=1.40.0,<1.41.0)", "mypy-boto3-rds (>=1.40.0,<1.41.0)", "mypy-boto3-rds-data (>=1.40.0,<1.41.0)", "mypy-boto3-redshift (>=1.40.0,<1.41.0)", "mypy-boto3-redshift-data (>=1.40.0,<1.41.0)", "mypy-boto3-redshift-serverless (>=1.40.0,<1.41.0)", "mypy-boto3-rekognition (>=1.40.0,<1.41.0)", "mypy-boto3-repostspace (>=1.40.0,<1.41.0)", "mypy-boto3-resiliencehub (>=1.40.0,<1.41.0)", "mypy-boto3-resource-explorer-2 (>=1.40.0,<1.41.0)", "mypy-boto3-resource-groups (>=1.40.0,<1.41.0)", "mypy-boto3-resourcegroupstaggingapi (>=1.40.0,<1.41.0)", "mypy-boto3-robomaker (>=1.40.0,<1.41.0)", "mypy-boto3-rolesanywhere (>=1.40.0,<1.41.0)", "mypy-boto3-route53 (>=1.40.0,<1.41.0)", "mypy-boto3-route53-recovery-cluster (>=1.40.0,<1.41.0)", "mypy-boto3-route53-recovery-control-config (>=1.40.0,<1.41.0)", "mypy-boto3-route53-recovery-readiness (>=1.40.0,<1.41.0)", "mypy-boto3-route53domains (>=1.40.0,<1.41.0)", "mypy-boto3-route53profiles (>=1.40.0,<1.41.0)", "mypy-boto3-route53resolver (>=1.40.0,<1.41.0)", "mypy-boto3-rum (>=1.40.0,<1.41.0)", "mypy-boto3-s3 (>=1.40.0,<1.41.0)", "mypy-boto3-s3control (>=1.40.0,<1.41.0)", "mypy-boto3-s3outposts (>=1.40.0,<1.41.0)", "mypy-boto3-s3tables (>=1.40.0,<1.41.0)", "mypy-boto3-s3vectors (>=1.40.0,<1.41.0)", "mypy-boto3-sagemaker (>=1.40.0,<1.41.0)", "mypy-boto3-sagemaker-a2i-runtime (>=1.40.0,<1.41.0)", "mypy-boto3-sagemaker-edge (>=1.40.0,<1.41.0)", "mypy-boto3-sagemaker-featurestore-runtime (>=1.40.0,<1.41.0)", "mypy-boto3-sagemaker-geospatial (>=1.40.0,<1.41.0)", "mypy-boto3-sagemaker-metrics (>=1.40.0,<1.41.0)", "mypy-boto3-sagemaker-runtime (>=1.40.0,<1.41.0)", "mypy-boto3-savingsplans (>=1.40.0,<1.41.0)", "mypy-boto3-scheduler (>=1.40.0,<1.41.0)", "mypy-boto3-schemas (>=1.40.0,<1.41.0)", "mypy-boto3-sdb (>=1.40.0,<1.41.0)", "mypy-boto3-secretsmanager (>=1.40.0,<1.41.0)", "mypy-boto3-security-ir (>=1.40.0,<1.41.0)", "mypy-boto3-securityhub (>=1.40.0,<1.41.0)", "mypy-boto3-securitylake (>=1.40.0,<1.41.0)", "mypy-boto3-serverlessrepo (>=1.40.0,<1.41.0)", "mypy-boto3-service-quotas (>=1.40.0,<1.41.0)", "mypy-boto3-servicecatalog (>=1.40.0,<1.41.0)", "mypy-boto3-servicecatalog-appregistry (>=1.40.0,<1.41.0)", "mypy-boto3-servicediscovery (>=1.40.0,<1.41.0)", "mypy-boto3-ses (>=1.40.0,<1.41.0)", "mypy-boto3-sesv2 (>=1.40.0,<1.41.0)", "mypy-boto3-shield (>=1.40.0,<1.41.0)", "mypy-boto3-signer (>=1.40.0,<1.41.0)", "mypy-boto3-simspaceweaver (>=1.40.0,<1.41.0)", "mypy-boto3-sms (>=1.40.0,<1.41.0)", "mypy-boto3-snow-device-management (>=1.40.0,<1.41.0)", "mypy-boto3-snowball (>=1.40.0,<1.41.0)", "mypy-boto3-sns (>=1.40.0,<1.41.0)", "mypy-boto3-socialmessaging (>=1.40.0,<1.41.0)", "mypy-boto3-sqs (>=1.40.0,<1.41.0)", "mypy-boto3-ssm (>=1.40.0,<1.41.0)", "mypy-boto3-ssm-contacts (>=1.40.0,<1.41.0)", "mypy-boto3-ssm-guiconnect (>=1.40.0,<1.41.0)", "mypy-boto3-ssm-incidents (>=1.40.0,<1.41.0)", "mypy-boto3-ssm-quicksetup (>=1.40.0,<1.41.0)", "mypy-boto3-ssm-sap (>=1.40.0,<1.41.0)", "mypy-boto3-sso (>=1.40.0,<1.41.0)", "mypy-boto3-sso-admin (>=1.40.0,<1.41.0)", "mypy-boto3-sso-oidc (>=1.40.0,<1.41.0)", "mypy-boto3-stepfunctions (>=1.40.0,<1.41.0)", "mypy-boto3-storagegateway (>=1.40.0,<1.41.0)", "mypy-boto3-sts (>=1.40.0,<1.41.0)", "mypy-boto3-supplychain (>=1.40.0,<1.41.0)", "mypy-boto3-support (>=1.40.0,<1.41.0)", "mypy-boto3-support-app (>=1.40.0,<1.41.0)", "mypy-boto3-swf (>=1.40.0,<1.41.0)", "mypy-boto3-synthetics (>=1.40.0,<1.41.0)", "mypy-boto3-taxsettings (>=1.40.0,<1.41.0)", "mypy-boto3-textract (>=1.40.0,<1.41.0)", "mypy-boto3-timestream-influxdb (>=1.40.0,<1.41.0)", "mypy-boto3-timestream-query (>=1.40.0,<1.41.0)", "mypy-boto3-timestream-write (>=1.40.0,<1.41.0)", "mypy-boto3-tnb (>=1.40.0,<1.41.0)", "mypy-boto3-transcribe (>=1.40.0,<1.41.0)", "mypy-boto3-transfer (>=1.40.0,<1.41.0)", "mypy-boto3-translate (>=1.40.0,<1.41.0)", "mypy-boto3-trustedadvisor (>=1.40.0,<1.41.0)", "mypy-boto3-verifiedpermissions (>=1.40.0,<1.41.0)", "mypy-boto3-voice-id (>=1.40.0,<1.41.0)", "mypy-boto3-vpc-lattice (>=1.40.0,<1.41.0)", "mypy-boto3-waf (>=1.40.0,<1.41.0)", "mypy-boto3-waf-regional (>=1.40.0,<1.41.0)", "mypy-boto3-wafv2 (>=1.40.0,<1.41.0)", "mypy-boto3-wellarchitected (>=1.40.0,<1.41.0)", "mypy-boto3-wisdom (>=1.40.0,<1.41.0)", "mypy-boto3-workdocs (>=1.40.0,<1.41.0)", "mypy-boto3-workmail (>=1.40.0,<1.41.0)", "mypy-boto3-workmailmessageflow (>=1.40.0,<1.41.0)", "mypy-boto3-workspaces (>=1.40.0,<1.41.0)", "mypy-boto3-workspaces-instances (>=1.40.0,<1.41.0)", "mypy-boto3-workspaces-thin-client (>=1.40.0,<1.41.0)", "mypy-boto3-workspaces-web (>=1.40.0,<1.41.0)", "mypy-boto3-xray (>=1.40.0,<1.41.0)"] amp = ["mypy-boto3-amp (>=1.40.0,<1.41.0)"] amplify = ["mypy-boto3-amplify (>=1.40.0,<1.41.0)"] amplifybackend = ["mypy-boto3-amplifybackend (>=1.40.0,<1.41.0)"] @@ -530,8 +530,10 @@ backup = ["mypy-boto3-backup (>=1.40.0,<1.41.0)"] backup-gateway = ["mypy-boto3-backup-gateway (>=1.40.0,<1.41.0)"] backupsearch = ["mypy-boto3-backupsearch (>=1.40.0,<1.41.0)"] batch = ["mypy-boto3-batch (>=1.40.0,<1.41.0)"] +bcm-dashboards = ["mypy-boto3-bcm-dashboards (>=1.40.0,<1.41.0)"] bcm-data-exports = ["mypy-boto3-bcm-data-exports (>=1.40.0,<1.41.0)"] bcm-pricing-calculator = ["mypy-boto3-bcm-pricing-calculator (>=1.40.0,<1.41.0)"] +bcm-recommended-actions = ["mypy-boto3-bcm-recommended-actions (>=1.40.0,<1.41.0)"] bedrock = ["mypy-boto3-bedrock (>=1.40.0,<1.41.0)"] bedrock-agent = ["mypy-boto3-bedrock-agent (>=1.40.0,<1.41.0)"] bedrock-agent-runtime = ["mypy-boto3-bedrock-agent-runtime (>=1.40.0,<1.41.0)"] @@ -542,7 +544,7 @@ bedrock-data-automation-runtime = ["mypy-boto3-bedrock-data-automation-runtime ( bedrock-runtime = ["mypy-boto3-bedrock-runtime (>=1.40.0,<1.41.0)"] billing = ["mypy-boto3-billing (>=1.40.0,<1.41.0)"] billingconductor = ["mypy-boto3-billingconductor (>=1.40.0,<1.41.0)"] -boto3 = ["boto3 (==1.40.7)"] +boto3 = ["boto3 (==1.40.26)"] braket = ["mypy-boto3-braket (>=1.40.0,<1.41.0)"] budgets = ["mypy-boto3-budgets (>=1.40.0,<1.41.0)"] ce = ["mypy-boto3-ce (>=1.40.0,<1.41.0)"] @@ -776,8 +778,6 @@ odb = ["mypy-boto3-odb (>=1.40.0,<1.41.0)"] omics = ["mypy-boto3-omics (>=1.40.0,<1.41.0)"] opensearch = ["mypy-boto3-opensearch (>=1.40.0,<1.41.0)"] opensearchserverless = ["mypy-boto3-opensearchserverless (>=1.40.0,<1.41.0)"] -opsworks = ["mypy-boto3-opsworks (>=1.40.0,<1.41.0)"] -opsworkscm = ["mypy-boto3-opsworkscm (>=1.40.0,<1.41.0)"] organizations = ["mypy-boto3-organizations (>=1.40.0,<1.41.0)"] osis = ["mypy-boto3-osis (>=1.40.0,<1.41.0)"] outposts = ["mypy-boto3-outposts (>=1.40.0,<1.41.0)"] @@ -1126,14 +1126,14 @@ pycparser = "*" [[package]] name = "cfn-lint" -version = "1.38.2" +version = "1.39.1" description = "Checks CloudFormation templates for practices and behaviour that could potentially be improved" optional = false python-versions = ">=3.9" groups = ["dev"] files = [ - {file = "cfn_lint-1.38.2-py3-none-any.whl", hash = "sha256:8b6292df12b53e6dbb67eb096cb12ee5b7377f67d8c79b97ab7271c91ee133be"}, - {file = "cfn_lint-1.38.2.tar.gz", hash = "sha256:2febd202f98a14da27feb1d6799f11f5dfdd3f3f1e89afdcb3688423bed1fd8f"}, + {file = "cfn_lint-1.39.1-py3-none-any.whl", hash = "sha256:1321dfce4a7e9b1a4c2e2aa7aae5f9055d94c5cd15705568da7ce1a4c26fd7bc"}, + {file = "cfn_lint-1.39.1.tar.gz", hash = "sha256:ddad90025c72d7e31bb2d449e2444e5cfd3fe6d2bb30caa69f865aa17e60279f"}, ] [package.dependencies] @@ -1334,100 +1334,100 @@ typeguard = ">=2.13.3,<2.14.0" [[package]] name = "coverage" -version = "7.10.3" +version = "7.10.6" description = "Code coverage measurement for Python" optional = false python-versions = ">=3.9" groups = ["dev"] files = [ - {file = "coverage-7.10.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:53808194afdf948c462215e9403cca27a81cf150d2f9b386aee4dab614ae2ffe"}, - {file = "coverage-7.10.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:f4d1b837d1abf72187a61645dbf799e0d7705aa9232924946e1f57eb09a3bf00"}, - {file = "coverage-7.10.3-cp310-cp310-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:2a90dd4505d3cc68b847ab10c5ee81822a968b5191664e8a0801778fa60459fa"}, - {file = "coverage-7.10.3-cp310-cp310-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:d52989685ff5bf909c430e6d7f6550937bc6d6f3e6ecb303c97a86100efd4596"}, - {file = "coverage-7.10.3-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:bdb558a1d97345bde3a9f4d3e8d11c9e5611f748646e9bb61d7d612a796671b5"}, - {file = "coverage-7.10.3-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:c9e6331a8f09cb1fc8bda032752af03c366870b48cce908875ba2620d20d0ad4"}, - {file = "coverage-7.10.3-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:992f48bf35b720e174e7fae916d943599f1a66501a2710d06c5f8104e0756ee1"}, - {file = "coverage-7.10.3-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:c5595fc4ad6a39312c786ec3326d7322d0cf10e3ac6a6df70809910026d67cfb"}, - {file = "coverage-7.10.3-cp310-cp310-win32.whl", hash = "sha256:9e92fa1f2bd5a57df9d00cf9ce1eb4ef6fccca4ceabec1c984837de55329db34"}, - {file = "coverage-7.10.3-cp310-cp310-win_amd64.whl", hash = "sha256:b96524d6e4a3ce6a75c56bb15dbd08023b0ae2289c254e15b9fbdddf0c577416"}, - {file = "coverage-7.10.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:f2ff2e2afdf0d51b9b8301e542d9c21a8d084fd23d4c8ea2b3a1b3c96f5f7397"}, - {file = "coverage-7.10.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:18ecc5d1b9a8c570f6c9b808fa9a2b16836b3dd5414a6d467ae942208b095f85"}, - {file = "coverage-7.10.3-cp311-cp311-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:1af4461b25fe92889590d438905e1fc79a95680ec2a1ff69a591bb3fdb6c7157"}, - {file = "coverage-7.10.3-cp311-cp311-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:3966bc9a76b09a40dc6063c8b10375e827ea5dfcaffae402dd65953bef4cba54"}, - {file = "coverage-7.10.3-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:205a95b87ef4eb303b7bc5118b47b6b6604a644bcbdb33c336a41cfc0a08c06a"}, - {file = "coverage-7.10.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:5b3801b79fb2ad61e3c7e2554bab754fc5f105626056980a2b9cf3aef4f13f84"}, - {file = "coverage-7.10.3-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:b0dc69c60224cda33d384572da945759756e3f06b9cdac27f302f53961e63160"}, - {file = "coverage-7.10.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:a83d4f134bab2c7ff758e6bb1541dd72b54ba295ced6a63d93efc2e20cb9b124"}, - {file = "coverage-7.10.3-cp311-cp311-win32.whl", hash = "sha256:54e409dd64e5302b2a8fdf44ec1c26f47abd1f45a2dcf67bd161873ee05a59b8"}, - {file = "coverage-7.10.3-cp311-cp311-win_amd64.whl", hash = "sha256:30c601610a9b23807c5e9e2e442054b795953ab85d525c3de1b1b27cebeb2117"}, - {file = "coverage-7.10.3-cp311-cp311-win_arm64.whl", hash = "sha256:dabe662312a97958e932dee056f2659051d822552c0b866823e8ba1c2fe64770"}, - {file = "coverage-7.10.3-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:449c1e2d3a84d18bd204258a897a87bc57380072eb2aded6a5b5226046207b42"}, - {file = "coverage-7.10.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:1d4f9ce50b9261ad196dc2b2e9f1fbbee21651b54c3097a25ad783679fd18294"}, - {file = "coverage-7.10.3-cp312-cp312-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:4dd4564207b160d0d45c36a10bc0a3d12563028e8b48cd6459ea322302a156d7"}, - {file = "coverage-7.10.3-cp312-cp312-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:5ca3c9530ee072b7cb6a6ea7b640bcdff0ad3b334ae9687e521e59f79b1d0437"}, - {file = "coverage-7.10.3-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b6df359e59fa243c9925ae6507e27f29c46698359f45e568fd51b9315dbbe587"}, - {file = "coverage-7.10.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:a181e4c2c896c2ff64c6312db3bda38e9ade2e1aa67f86a5628ae85873786cea"}, - {file = "coverage-7.10.3-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:a374d4e923814e8b72b205ef6b3d3a647bb50e66f3558582eda074c976923613"}, - {file = "coverage-7.10.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:daeefff05993e5e8c6e7499a8508e7bd94502b6b9a9159c84fd1fe6bce3151cb"}, - {file = "coverage-7.10.3-cp312-cp312-win32.whl", hash = "sha256:187ecdcac21f9636d570e419773df7bd2fda2e7fa040f812e7f95d0bddf5f79a"}, - {file = "coverage-7.10.3-cp312-cp312-win_amd64.whl", hash = "sha256:4a50ad2524ee7e4c2a95e60d2b0b83283bdfc745fe82359d567e4f15d3823eb5"}, - {file = "coverage-7.10.3-cp312-cp312-win_arm64.whl", hash = "sha256:c112f04e075d3495fa3ed2200f71317da99608cbb2e9345bdb6de8819fc30571"}, - {file = "coverage-7.10.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:b99e87304ffe0eb97c5308447328a584258951853807afdc58b16143a530518a"}, - {file = "coverage-7.10.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:4af09c7574d09afbc1ea7da9dcea23665c01f3bc1b1feb061dac135f98ffc53a"}, - {file = "coverage-7.10.3-cp313-cp313-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:488e9b50dc5d2aa9521053cfa706209e5acf5289e81edc28291a24f4e4488f46"}, - {file = "coverage-7.10.3-cp313-cp313-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:913ceddb4289cbba3a310704a424e3fb7aac2bc0c3a23ea473193cb290cf17d4"}, - {file = "coverage-7.10.3-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6b1f91cbc78c7112ab84ed2a8defbccd90f888fcae40a97ddd6466b0bec6ae8a"}, - {file = "coverage-7.10.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:b0bac054d45af7cd938834b43a9878b36ea92781bcb009eab040a5b09e9927e3"}, - {file = "coverage-7.10.3-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:fe72cbdd12d9e0f4aca873fa6d755e103888a7f9085e4a62d282d9d5b9f7928c"}, - {file = "coverage-7.10.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:c1e2e927ab3eadd7c244023927d646e4c15c65bb2ac7ae3c3e9537c013700d21"}, - {file = "coverage-7.10.3-cp313-cp313-win32.whl", hash = "sha256:24d0c13de473b04920ddd6e5da3c08831b1170b8f3b17461d7429b61cad59ae0"}, - {file = "coverage-7.10.3-cp313-cp313-win_amd64.whl", hash = "sha256:3564aae76bce4b96e2345cf53b4c87e938c4985424a9be6a66ee902626edec4c"}, - {file = "coverage-7.10.3-cp313-cp313-win_arm64.whl", hash = "sha256:f35580f19f297455f44afcd773c9c7a058e52eb6eb170aa31222e635f2e38b87"}, - {file = "coverage-7.10.3-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:07009152f497a0464ffdf2634586787aea0e69ddd023eafb23fc38267db94b84"}, - {file = "coverage-7.10.3-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:8dd2ba5f0c7e7e8cc418be2f0c14c4d9e3f08b8fb8e4c0f83c2fe87d03eb655e"}, - {file = "coverage-7.10.3-cp313-cp313t-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:1ae22b97003c74186e034a93e4f946c75fad8c0ce8d92fbbc168b5e15ee2841f"}, - {file = "coverage-7.10.3-cp313-cp313t-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:eb329f1046888a36b1dc35504d3029e1dd5afe2196d94315d18c45ee380f67d5"}, - {file = "coverage-7.10.3-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ce01048199a91f07f96ca3074b0c14021f4fe7ffd29a3e6a188ac60a5c3a4af8"}, - {file = "coverage-7.10.3-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:08b989a06eb9dfacf96d42b7fb4c9a22bafa370d245dc22fa839f2168c6f9fa1"}, - {file = "coverage-7.10.3-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:669fe0d4e69c575c52148511029b722ba8d26e8a3129840c2ce0522e1452b256"}, - {file = "coverage-7.10.3-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:3262d19092771c83f3413831d9904b1ccc5f98da5de4ffa4ad67f5b20c7aaf7b"}, - {file = "coverage-7.10.3-cp313-cp313t-win32.whl", hash = "sha256:cc0ee4b2ccd42cab7ee6be46d8a67d230cb33a0a7cd47a58b587a7063b6c6b0e"}, - {file = "coverage-7.10.3-cp313-cp313t-win_amd64.whl", hash = "sha256:03db599f213341e2960430984e04cf35fb179724e052a3ee627a068653cf4a7c"}, - {file = "coverage-7.10.3-cp313-cp313t-win_arm64.whl", hash = "sha256:46eae7893ba65f53c71284585a262f083ef71594f05ec5c85baf79c402369098"}, - {file = "coverage-7.10.3-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:bce8b8180912914032785850d8f3aacb25ec1810f5f54afc4a8b114e7a9b55de"}, - {file = "coverage-7.10.3-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:07790b4b37d56608536f7c1079bd1aa511567ac2966d33d5cec9cf520c50a7c8"}, - {file = "coverage-7.10.3-cp314-cp314-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:e79367ef2cd9166acedcbf136a458dfe9a4a2dd4d1ee95738fb2ee581c56f667"}, - {file = "coverage-7.10.3-cp314-cp314-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:419d2a0f769f26cb1d05e9ccbc5eab4cb5d70231604d47150867c07822acbdf4"}, - {file = "coverage-7.10.3-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ee221cf244757cdc2ac882e3062ab414b8464ad9c884c21e878517ea64b3fa26"}, - {file = "coverage-7.10.3-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:c2079d8cdd6f7373d628e14b3357f24d1db02c9dc22e6a007418ca7a2be0435a"}, - {file = "coverage-7.10.3-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:bd8df1f83c0703fa3ca781b02d36f9ec67ad9cb725b18d486405924f5e4270bd"}, - {file = "coverage-7.10.3-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:6b4e25e0fa335c8aa26e42a52053f3786a61cc7622b4d54ae2dad994aa754fec"}, - {file = "coverage-7.10.3-cp314-cp314-win32.whl", hash = "sha256:d7c3d02c2866deb217dce664c71787f4b25420ea3eaf87056f44fb364a3528f5"}, - {file = "coverage-7.10.3-cp314-cp314-win_amd64.whl", hash = "sha256:9c8916d44d9e0fe6cdb2227dc6b0edd8bc6c8ef13438bbbf69af7482d9bb9833"}, - {file = "coverage-7.10.3-cp314-cp314-win_arm64.whl", hash = "sha256:1007d6a2b3cf197c57105cc1ba390d9ff7f0bee215ced4dea530181e49c65ab4"}, - {file = "coverage-7.10.3-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:ebc8791d346410d096818788877d675ca55c91db87d60e8f477bd41c6970ffc6"}, - {file = "coverage-7.10.3-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:1f4e4d8e75f6fd3c6940ebeed29e3d9d632e1f18f6fb65d33086d99d4d073241"}, - {file = "coverage-7.10.3-cp314-cp314t-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:24581ed69f132b6225a31b0228ae4885731cddc966f8a33fe5987288bdbbbd5e"}, - {file = "coverage-7.10.3-cp314-cp314t-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:ec151569ddfccbf71bac8c422dce15e176167385a00cd86e887f9a80035ce8a5"}, - {file = "coverage-7.10.3-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:2ae8e7c56290b908ee817200c0b65929b8050bc28530b131fe7c6dfee3e7d86b"}, - {file = "coverage-7.10.3-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:5fb742309766d7e48e9eb4dc34bc95a424707bc6140c0e7d9726e794f11b92a0"}, - {file = "coverage-7.10.3-cp314-cp314t-musllinux_1_2_i686.whl", hash = "sha256:c65e2a5b32fbe1e499f1036efa6eb9cb4ea2bf6f7168d0e7a5852f3024f471b1"}, - {file = "coverage-7.10.3-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:d48d2cb07d50f12f4f18d2bb75d9d19e3506c26d96fffabf56d22936e5ed8f7c"}, - {file = "coverage-7.10.3-cp314-cp314t-win32.whl", hash = "sha256:dec0d9bc15ee305e09fe2cd1911d3f0371262d3cfdae05d79515d8cb712b4869"}, - {file = "coverage-7.10.3-cp314-cp314t-win_amd64.whl", hash = "sha256:424ea93a323aa0f7f01174308ea78bde885c3089ec1bef7143a6d93c3e24ef64"}, - {file = "coverage-7.10.3-cp314-cp314t-win_arm64.whl", hash = "sha256:f5983c132a62d93d71c9ef896a0b9bf6e6828d8d2ea32611f58684fba60bba35"}, - {file = "coverage-7.10.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:da749daa7e141985487e1ff90a68315b0845930ed53dc397f4ae8f8bab25b551"}, - {file = "coverage-7.10.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:f3126fb6a47d287f461d9b1aa5d1a8c97034d1dffb4f452f2cf211289dae74ef"}, - {file = "coverage-7.10.3-cp39-cp39-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:3da794db13cc27ca40e1ec8127945b97fab78ba548040047d54e7bfa6d442dca"}, - {file = "coverage-7.10.3-cp39-cp39-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:4e27bebbd184ef8d1c1e092b74a2b7109dcbe2618dce6e96b1776d53b14b3fe8"}, - {file = "coverage-7.10.3-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:8fd4ee2580b9fefbd301b4f8f85b62ac90d1e848bea54f89a5748cf132782118"}, - {file = "coverage-7.10.3-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:6999920bdd73259ce11cabfc1307484f071ecc6abdb2ca58d98facbcefc70f16"}, - {file = "coverage-7.10.3-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:c3623f929db885fab100cb88220a5b193321ed37e03af719efdbaf5d10b6e227"}, - {file = "coverage-7.10.3-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:25b902c5e15dea056485d782e420bb84621cc08ee75d5131ecb3dbef8bd1365f"}, - {file = "coverage-7.10.3-cp39-cp39-win32.whl", hash = "sha256:f930a4d92b004b643183451fe9c8fe398ccf866ed37d172ebaccfd443a097f61"}, - {file = "coverage-7.10.3-cp39-cp39-win_amd64.whl", hash = "sha256:08e638a93c8acba13c7842953f92a33d52d73e410329acd472280d2a21a6c0e1"}, - {file = "coverage-7.10.3-py3-none-any.whl", hash = "sha256:416a8d74dc0adfd33944ba2f405897bab87b7e9e84a391e09d241956bd953ce1"}, - {file = "coverage-7.10.3.tar.gz", hash = "sha256:812ba9250532e4a823b070b0420a36499859542335af3dca8f47fc6aa1a05619"}, + {file = "coverage-7.10.6-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:70e7bfbd57126b5554aa482691145f798d7df77489a177a6bef80de78860a356"}, + {file = "coverage-7.10.6-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:e41be6f0f19da64af13403e52f2dec38bbc2937af54df8ecef10850ff8d35301"}, + {file = "coverage-7.10.6-cp310-cp310-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:c61fc91ab80b23f5fddbee342d19662f3d3328173229caded831aa0bd7595460"}, + {file = "coverage-7.10.6-cp310-cp310-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:10356fdd33a7cc06e8051413140bbdc6f972137508a3572e3f59f805cd2832fd"}, + {file = "coverage-7.10.6-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:80b1695cf7c5ebe7b44bf2521221b9bb8cdf69b1f24231149a7e3eb1ae5fa2fb"}, + {file = "coverage-7.10.6-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:2e4c33e6378b9d52d3454bd08847a8651f4ed23ddbb4a0520227bd346382bbc6"}, + {file = "coverage-7.10.6-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:c8a3ec16e34ef980a46f60dc6ad86ec60f763c3f2fa0db6d261e6e754f72e945"}, + {file = "coverage-7.10.6-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:7d79dabc0a56f5af990cc6da9ad1e40766e82773c075f09cc571e2076fef882e"}, + {file = "coverage-7.10.6-cp310-cp310-win32.whl", hash = "sha256:86b9b59f2b16e981906e9d6383eb6446d5b46c278460ae2c36487667717eccf1"}, + {file = "coverage-7.10.6-cp310-cp310-win_amd64.whl", hash = "sha256:e132b9152749bd33534e5bd8565c7576f135f157b4029b975e15ee184325f528"}, + {file = "coverage-7.10.6-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:c706db3cabb7ceef779de68270150665e710b46d56372455cd741184f3868d8f"}, + {file = "coverage-7.10.6-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:8e0c38dc289e0508ef68ec95834cb5d2e96fdbe792eaccaa1bccac3966bbadcc"}, + {file = "coverage-7.10.6-cp311-cp311-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:752a3005a1ded28f2f3a6e8787e24f28d6abe176ca64677bcd8d53d6fe2ec08a"}, + {file = "coverage-7.10.6-cp311-cp311-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:689920ecfd60f992cafca4f5477d55720466ad2c7fa29bb56ac8d44a1ac2b47a"}, + {file = "coverage-7.10.6-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ec98435796d2624d6905820a42f82149ee9fc4f2d45c2c5bc5a44481cc50db62"}, + {file = "coverage-7.10.6-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:b37201ce4a458c7a758ecc4efa92fa8ed783c66e0fa3c42ae19fc454a0792153"}, + {file = "coverage-7.10.6-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:2904271c80898663c810a6b067920a61dd8d38341244a3605bd31ab55250dad5"}, + {file = "coverage-7.10.6-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:5aea98383463d6e1fa4e95416d8de66f2d0cb588774ee20ae1b28df826bcb619"}, + {file = "coverage-7.10.6-cp311-cp311-win32.whl", hash = "sha256:e3fb1fa01d3598002777dd259c0c2e6d9d5e10e7222976fc8e03992f972a2cba"}, + {file = "coverage-7.10.6-cp311-cp311-win_amd64.whl", hash = "sha256:f35ed9d945bece26553d5b4c8630453169672bea0050a564456eb88bdffd927e"}, + {file = "coverage-7.10.6-cp311-cp311-win_arm64.whl", hash = "sha256:99e1a305c7765631d74b98bf7dbf54eeea931f975e80f115437d23848ee8c27c"}, + {file = "coverage-7.10.6-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:5b2dd6059938063a2c9fee1af729d4f2af28fd1a545e9b7652861f0d752ebcea"}, + {file = "coverage-7.10.6-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:388d80e56191bf846c485c14ae2bc8898aa3124d9d35903fef7d907780477634"}, + {file = "coverage-7.10.6-cp312-cp312-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:90cb5b1a4670662719591aa92d0095bb41714970c0b065b02a2610172dbf0af6"}, + {file = "coverage-7.10.6-cp312-cp312-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:961834e2f2b863a0e14260a9a273aff07ff7818ab6e66d2addf5628590c628f9"}, + {file = "coverage-7.10.6-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:bf9a19f5012dab774628491659646335b1928cfc931bf8d97b0d5918dd58033c"}, + {file = "coverage-7.10.6-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:99c4283e2a0e147b9c9cc6bc9c96124de9419d6044837e9799763a0e29a7321a"}, + {file = "coverage-7.10.6-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:282b1b20f45df57cc508c1e033403f02283adfb67d4c9c35a90281d81e5c52c5"}, + {file = "coverage-7.10.6-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:8cdbe264f11afd69841bd8c0d83ca10b5b32853263ee62e6ac6a0ab63895f972"}, + {file = "coverage-7.10.6-cp312-cp312-win32.whl", hash = "sha256:a517feaf3a0a3eca1ee985d8373135cfdedfbba3882a5eab4362bda7c7cf518d"}, + {file = "coverage-7.10.6-cp312-cp312-win_amd64.whl", hash = "sha256:856986eadf41f52b214176d894a7de05331117f6035a28ac0016c0f63d887629"}, + {file = "coverage-7.10.6-cp312-cp312-win_arm64.whl", hash = "sha256:acf36b8268785aad739443fa2780c16260ee3fa09d12b3a70f772ef100939d80"}, + {file = "coverage-7.10.6-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:ffea0575345e9ee0144dfe5701aa17f3ba546f8c3bb48db62ae101afb740e7d6"}, + {file = "coverage-7.10.6-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:95d91d7317cde40a1c249d6b7382750b7e6d86fad9d8eaf4fa3f8f44cf171e80"}, + {file = "coverage-7.10.6-cp313-cp313-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:3e23dd5408fe71a356b41baa82892772a4cefcf758f2ca3383d2aa39e1b7a003"}, + {file = "coverage-7.10.6-cp313-cp313-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:0f3f56e4cb573755e96a16501a98bf211f100463d70275759e73f3cbc00d4f27"}, + {file = "coverage-7.10.6-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:db4a1d897bbbe7339946ffa2fe60c10cc81c43fab8b062d3fcb84188688174a4"}, + {file = "coverage-7.10.6-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:d8fd7879082953c156d5b13c74aa6cca37f6a6f4747b39538504c3f9c63d043d"}, + {file = "coverage-7.10.6-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:28395ca3f71cd103b8c116333fa9db867f3a3e1ad6a084aa3725ae002b6583bc"}, + {file = "coverage-7.10.6-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:61c950fc33d29c91b9e18540e1aed7d9f6787cc870a3e4032493bbbe641d12fc"}, + {file = "coverage-7.10.6-cp313-cp313-win32.whl", hash = "sha256:160c00a5e6b6bdf4e5984b0ef21fc860bc94416c41b7df4d63f536d17c38902e"}, + {file = "coverage-7.10.6-cp313-cp313-win_amd64.whl", hash = "sha256:628055297f3e2aa181464c3808402887643405573eb3d9de060d81531fa79d32"}, + {file = "coverage-7.10.6-cp313-cp313-win_arm64.whl", hash = "sha256:df4ec1f8540b0bcbe26ca7dd0f541847cc8a108b35596f9f91f59f0c060bfdd2"}, + {file = "coverage-7.10.6-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:c9a8b7a34a4de3ed987f636f71881cd3b8339f61118b1aa311fbda12741bff0b"}, + {file = "coverage-7.10.6-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:8dd5af36092430c2b075cee966719898f2ae87b636cefb85a653f1d0ba5d5393"}, + {file = "coverage-7.10.6-cp313-cp313t-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:b0353b0f0850d49ada66fdd7d0c7cdb0f86b900bb9e367024fd14a60cecc1e27"}, + {file = "coverage-7.10.6-cp313-cp313t-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:d6b9ae13d5d3e8aeca9ca94198aa7b3ebbc5acfada557d724f2a1f03d2c0b0df"}, + {file = "coverage-7.10.6-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:675824a363cc05781b1527b39dc2587b8984965834a748177ee3c37b64ffeafb"}, + {file = "coverage-7.10.6-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:692d70ea725f471a547c305f0d0fc6a73480c62fb0da726370c088ab21aed282"}, + {file = "coverage-7.10.6-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:851430a9a361c7a8484a36126d1d0ff8d529d97385eacc8dfdc9bfc8c2d2cbe4"}, + {file = "coverage-7.10.6-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:d9369a23186d189b2fc95cc08b8160ba242057e887d766864f7adf3c46b2df21"}, + {file = "coverage-7.10.6-cp313-cp313t-win32.whl", hash = "sha256:92be86fcb125e9bda0da7806afd29a3fd33fdf58fba5d60318399adf40bf37d0"}, + {file = "coverage-7.10.6-cp313-cp313t-win_amd64.whl", hash = "sha256:6b3039e2ca459a70c79523d39347d83b73f2f06af5624905eba7ec34d64d80b5"}, + {file = "coverage-7.10.6-cp313-cp313t-win_arm64.whl", hash = "sha256:3fb99d0786fe17b228eab663d16bee2288e8724d26a199c29325aac4b0319b9b"}, + {file = "coverage-7.10.6-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:6008a021907be8c4c02f37cdc3ffb258493bdebfeaf9a839f9e71dfdc47b018e"}, + {file = "coverage-7.10.6-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:5e75e37f23eb144e78940b40395b42f2321951206a4f50e23cfd6e8a198d3ceb"}, + {file = "coverage-7.10.6-cp314-cp314-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:0f7cb359a448e043c576f0da00aa8bfd796a01b06aa610ca453d4dde09cc1034"}, + {file = "coverage-7.10.6-cp314-cp314-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:c68018e4fc4e14b5668f1353b41ccf4bc83ba355f0e1b3836861c6f042d89ac1"}, + {file = "coverage-7.10.6-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:cd4b2b0707fc55afa160cd5fc33b27ccbf75ca11d81f4ec9863d5793fc6df56a"}, + {file = "coverage-7.10.6-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:4cec13817a651f8804a86e4f79d815b3b28472c910e099e4d5a0e8a3b6a1d4cb"}, + {file = "coverage-7.10.6-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:f2a6a8e06bbda06f78739f40bfb56c45d14eb8249d0f0ea6d4b3d48e1f7c695d"}, + {file = "coverage-7.10.6-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:081b98395ced0d9bcf60ada7661a0b75f36b78b9d7e39ea0790bb4ed8da14747"}, + {file = "coverage-7.10.6-cp314-cp314-win32.whl", hash = "sha256:6937347c5d7d069ee776b2bf4e1212f912a9f1f141a429c475e6089462fcecc5"}, + {file = "coverage-7.10.6-cp314-cp314-win_amd64.whl", hash = "sha256:adec1d980fa07e60b6ef865f9e5410ba760e4e1d26f60f7e5772c73b9a5b0713"}, + {file = "coverage-7.10.6-cp314-cp314-win_arm64.whl", hash = "sha256:a80f7aef9535442bdcf562e5a0d5a5538ce8abe6bb209cfbf170c462ac2c2a32"}, + {file = "coverage-7.10.6-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:0de434f4fbbe5af4fa7989521c655c8c779afb61c53ab561b64dcee6149e4c65"}, + {file = "coverage-7.10.6-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:6e31b8155150c57e5ac43ccd289d079eb3f825187d7c66e755a055d2c85794c6"}, + {file = "coverage-7.10.6-cp314-cp314t-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:98cede73eb83c31e2118ae8d379c12e3e42736903a8afcca92a7218e1f2903b0"}, + {file = "coverage-7.10.6-cp314-cp314t-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:f863c08f4ff6b64fa8045b1e3da480f5374779ef187f07b82e0538c68cb4ff8e"}, + {file = "coverage-7.10.6-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:2b38261034fda87be356f2c3f42221fdb4171c3ce7658066ae449241485390d5"}, + {file = "coverage-7.10.6-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:0e93b1476b79eae849dc3872faeb0bf7948fd9ea34869590bc16a2a00b9c82a7"}, + {file = "coverage-7.10.6-cp314-cp314t-musllinux_1_2_i686.whl", hash = "sha256:ff8a991f70f4c0cf53088abf1e3886edcc87d53004c7bb94e78650b4d3dac3b5"}, + {file = "coverage-7.10.6-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:ac765b026c9f33044419cbba1da913cfb82cca1b60598ac1c7a5ed6aac4621a0"}, + {file = "coverage-7.10.6-cp314-cp314t-win32.whl", hash = "sha256:441c357d55f4936875636ef2cfb3bee36e466dcf50df9afbd398ce79dba1ebb7"}, + {file = "coverage-7.10.6-cp314-cp314t-win_amd64.whl", hash = "sha256:073711de3181b2e204e4870ac83a7c4853115b42e9cd4d145f2231e12d670930"}, + {file = "coverage-7.10.6-cp314-cp314t-win_arm64.whl", hash = "sha256:137921f2bac5559334ba66122b753db6dc5d1cf01eb7b64eb412bb0d064ef35b"}, + {file = "coverage-7.10.6-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:90558c35af64971d65fbd935c32010f9a2f52776103a259f1dee865fe8259352"}, + {file = "coverage-7.10.6-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:8953746d371e5695405806c46d705a3cd170b9cc2b9f93953ad838f6c1e58612"}, + {file = "coverage-7.10.6-cp39-cp39-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:c83f6afb480eae0313114297d29d7c295670a41c11b274e6bca0c64540c1ce7b"}, + {file = "coverage-7.10.6-cp39-cp39-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:7eb68d356ba0cc158ca535ce1381dbf2037fa8cb5b1ae5ddfc302e7317d04144"}, + {file = "coverage-7.10.6-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5b15a87265e96307482746d86995f4bff282f14b027db75469c446da6127433b"}, + {file = "coverage-7.10.6-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:fc53ba868875bfbb66ee447d64d6413c2db91fddcfca57025a0e7ab5b07d5862"}, + {file = "coverage-7.10.6-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:efeda443000aa23f276f4df973cb82beca682fd800bb119d19e80504ffe53ec2"}, + {file = "coverage-7.10.6-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:9702b59d582ff1e184945d8b501ffdd08d2cee38d93a2206aa5f1365ce0b8d78"}, + {file = "coverage-7.10.6-cp39-cp39-win32.whl", hash = "sha256:2195f8e16ba1a44651ca684db2ea2b2d4b5345da12f07d9c22a395202a05b23c"}, + {file = "coverage-7.10.6-cp39-cp39-win_amd64.whl", hash = "sha256:f32ff80e7ef6a5b5b606ea69a36e97b219cd9dc799bcf2963018a4d8f788cfbf"}, + {file = "coverage-7.10.6-py3-none-any.whl", hash = "sha256:92c4ecf6bf11b2e85fd4d8204814dc26e6a19f0c9d938c207c5cb0eadfcabbe3"}, + {file = "coverage-7.10.6.tar.gz", hash = "sha256:f644a3ae5933a552a29dbb9aa2f90c677a875f80ebea028e5a52a4f429044b90"}, ] [package.dependencies] @@ -1803,15 +1803,15 @@ testing = ["hatch", "pre-commit", "pytest", "tox"] [[package]] name = "fastjsonschema" -version = "2.21.1" +version = "2.21.2" description = "Fastest Python implementation of JSON schema" optional = true python-versions = "*" groups = ["main"] markers = "extra == \"all\" or extra == \"validation\"" files = [ - {file = "fastjsonschema-2.21.1-py3-none-any.whl", hash = "sha256:c9e5b7e908310918cf494a434eeb31384dd84a98b57a30bcb1f535015b554667"}, - {file = "fastjsonschema-2.21.1.tar.gz", hash = "sha256:794d4f0a58f848961ba16af7b9c85a3e88cd360df008c59aac6fc5ae9323b5d4"}, + {file = "fastjsonschema-2.21.2-py3-none-any.whl", hash = "sha256:1c797122d0a86c5cace2e54bf4e819c36223b552017172f32c5c024a6b77e463"}, + {file = "fastjsonschema-2.21.2.tar.gz", hash = "sha256:b1eb43748041c880796cd077f1a07c3d94e93ae84bba5ed36800a33554ae05de"}, ] [package.extras] @@ -1819,21 +1819,16 @@ devel = ["colorama", "json-spec", "jsonschema", "pylint", "pytest", "pytest-benc [[package]] name = "filelock" -version = "3.18.0" +version = "3.19.1" description = "A platform independent file lock." optional = false python-versions = ">=3.9" groups = ["dev"] files = [ - {file = "filelock-3.18.0-py3-none-any.whl", hash = "sha256:c401f4f8377c4464e6db25fff06205fd89bdd83b65eb0488ed1b160f780e21de"}, - {file = "filelock-3.18.0.tar.gz", hash = "sha256:adbc88eabb99d2fec8c9c1b229b171f18afa655400173ddc653d5d01501fb9f2"}, + {file = "filelock-3.19.1-py3-none-any.whl", hash = "sha256:d38e30481def20772f5baf097c122c3babc4fcdb7e14e57049eb9d88c6dc017d"}, + {file = "filelock-3.19.1.tar.gz", hash = "sha256:66eda1888b0171c998b35be2bcc0f6d75c388a7ce20c3f3f37aa8e96c2dddf58"}, ] -[package.extras] -docs = ["furo (>=2024.8.6)", "sphinx (>=8.1.3)", "sphinx-autodoc-typehints (>=3)"] -testing = ["covdefaults (>=2.3)", "coverage (>=7.6.10)", "diff-cover (>=9.2.1)", "pytest (>=8.3.4)", "pytest-asyncio (>=0.25.2)", "pytest-cov (>=6)", "pytest-mock (>=3.14)", "pytest-timeout (>=2.3.1)", "virtualenv (>=20.28.1)"] -typing = ["typing-extensions (>=4.12.2) ; python_version < \"3.11\""] - [[package]] name = "ghp-import" version = "2.1.0" @@ -1888,14 +1883,14 @@ test = ["coverage[toml]", "ddt (>=1.1.1,!=1.4.3)", "mock ; python_version < \"3. [[package]] name = "griffe" -version = "1.7.3" +version = "1.13.0" description = "Signatures for entire Python programs. Extract the structure, the frame, the skeleton of your project, to generate API documentation or find breaking changes in your API." optional = false python-versions = ">=3.9" groups = ["dev"] files = [ - {file = "griffe-1.7.3-py3-none-any.whl", hash = "sha256:c6b3ee30c2f0f17f30bcdef5068d6ab7a2a4f1b8bf1a3e74b56fffd21e1c5f75"}, - {file = "griffe-1.7.3.tar.gz", hash = "sha256:52ee893c6a3a968b639ace8015bec9d36594961e156e23315c8e8e51401fa50b"}, + {file = "griffe-1.13.0-py3-none-any.whl", hash = "sha256:470fde5b735625ac0a36296cd194617f039e9e83e301fcbd493e2b58382d0559"}, + {file = "griffe-1.13.0.tar.gz", hash = "sha256:246ea436a5e78f7fbf5f24ca8a727bb4d2a4b442a2959052eea3d0bfe9a076e0"}, ] [package.dependencies] @@ -2195,19 +2190,19 @@ files = [ [[package]] name = "jsii" -version = "1.112.0" +version = "1.113.0" description = "Python client for jsii runtime" optional = false python-versions = "~=3.9" groups = ["dev"] files = [ - {file = "jsii-1.112.0-py3-none-any.whl", hash = "sha256:6510c223074d9b206fd0570849a791e4d9ecfff7ffe68428de73870cea9f55a1"}, - {file = "jsii-1.112.0.tar.gz", hash = "sha256:6b7d19f361c2565b76828ecbe8cbed8b8d6028a82aa98a46b206a4ee5083157e"}, + {file = "jsii-1.113.0-py3-none-any.whl", hash = "sha256:62377c651554234ea945693f7c03cb96a969ba425a686950c88d43b0d4d76b07"}, + {file = "jsii-1.113.0.tar.gz", hash = "sha256:2dedea9d6006af53467a7a67f1d35a56ab3f75a3d6ed4b4536fffc3e1d1fe476"}, ] [package.dependencies] attrs = ">=21.2,<26.0" -cattrs = ">=1.8,<24.2" +cattrs = ">=1.8,<25.2" importlib_resources = ">=5.2.0" publication = ">=0.0.3" python-dateutil = "*" @@ -2620,19 +2615,20 @@ mdformat-tables = ">=1.0" [[package]] name = "mkdocs-material" -version = "9.6.16" +version = "9.6.18" description = "Documentation that simply works" optional = false python-versions = ">=3.8" groups = ["dev"] files = [ - {file = "mkdocs_material-9.6.16-py3-none-any.whl", hash = "sha256:8d1a1282b892fe1fdf77bfeb08c485ba3909dd743c9ba69a19a40f637c6ec18c"}, - {file = "mkdocs_material-9.6.16.tar.gz", hash = "sha256:d07011df4a5c02ee0877496d9f1bfc986cfb93d964799b032dd99fe34c0e9d19"}, + {file = "mkdocs_material-9.6.18-py3-none-any.whl", hash = "sha256:dbc1e146a0ecce951a4d84f97b816a54936cdc9e1edd1667fc6868878ac06701"}, + {file = "mkdocs_material-9.6.18.tar.gz", hash = "sha256:a2eb253bcc8b66f8c6eaf8379c10ed6e9644090c2e2e9d0971c7722dc7211c05"}, ] [package.dependencies] babel = ">=2.10,<3.0" backrefs = ">=5.7.post1,<6.0" +click = "<8.2.2" colorama = ">=0.4,<1.0" jinja2 = ">=3.1,<4.0" markdown = ">=3.2,<4.0" @@ -2662,14 +2658,14 @@ files = [ [[package]] name = "mkdocstrings" -version = "0.29.1" +version = "0.30.0" description = "Automatic documentation from sources, for MkDocs." optional = false python-versions = ">=3.9" groups = ["dev"] files = [ - {file = "mkdocstrings-0.29.1-py3-none-any.whl", hash = "sha256:37a9736134934eea89cbd055a513d40a020d87dfcae9e3052c2a6b8cd4af09b6"}, - {file = "mkdocstrings-0.29.1.tar.gz", hash = "sha256:8722f8f8c5cd75da56671e0a0c1bbed1df9946c0cef74794d6141b34011abd42"}, + {file = "mkdocstrings-0.30.0-py3-none-any.whl", hash = "sha256:ae9e4a0d8c1789697ac776f2e034e2ddd71054ae1cf2c2bb1433ccfd07c226f2"}, + {file = "mkdocstrings-0.30.0.tar.gz", hash = "sha256:5d8019b9c31ddacd780b6784ffcdd6f21c408f34c0bd1103b5351d609d5b4444"}, ] [package.dependencies] @@ -2688,20 +2684,20 @@ python-legacy = ["mkdocstrings-python-legacy (>=0.2.1)"] [[package]] name = "mkdocstrings-python" -version = "1.16.12" +version = "1.18.2" description = "A Python handler for mkdocstrings." optional = false python-versions = ">=3.9" groups = ["dev"] files = [ - {file = "mkdocstrings_python-1.16.12-py3-none-any.whl", hash = "sha256:22ded3a63b3d823d57457a70ff9860d5a4de9e8b1e482876fc9baabaf6f5f374"}, - {file = "mkdocstrings_python-1.16.12.tar.gz", hash = "sha256:9b9eaa066e0024342d433e332a41095c4e429937024945fea511afe58f63175d"}, + {file = "mkdocstrings_python-1.18.2-py3-none-any.whl", hash = "sha256:944fe6deb8f08f33fa936d538233c4036e9f53e840994f6146e8e94eb71b600d"}, + {file = "mkdocstrings_python-1.18.2.tar.gz", hash = "sha256:4ad536920a07b6336f50d4c6d5603316fafb1172c5c882370cbbc954770ad323"}, ] [package.dependencies] -griffe = ">=1.6.2" +griffe = ">=1.13" mkdocs-autorefs = ">=1.4" -mkdocstrings = ">=0.28.3" +mkdocstrings = ">=0.30" typing-extensions = {version = ">=4.0", markers = "python_version < \"3.11\""} [[package]] @@ -3197,21 +3193,21 @@ files = [ [[package]] name = "protobuf" -version = "6.31.1" +version = "6.32.0" description = "" optional = false python-versions = ">=3.9" groups = ["main", "dev"] files = [ - {file = "protobuf-6.31.1-cp310-abi3-win32.whl", hash = "sha256:7fa17d5a29c2e04b7d90e5e32388b8bfd0e7107cd8e616feef7ed3fa6bdab5c9"}, - {file = "protobuf-6.31.1-cp310-abi3-win_amd64.whl", hash = "sha256:426f59d2964864a1a366254fa703b8632dcec0790d8862d30034d8245e1cd447"}, - {file = "protobuf-6.31.1-cp39-abi3-macosx_10_9_universal2.whl", hash = "sha256:6f1227473dc43d44ed644425268eb7c2e488ae245d51c6866d19fe158e207402"}, - {file = "protobuf-6.31.1-cp39-abi3-manylinux2014_aarch64.whl", hash = "sha256:a40fc12b84c154884d7d4c4ebd675d5b3b5283e155f324049ae396b95ddebc39"}, - {file = "protobuf-6.31.1-cp39-abi3-manylinux2014_x86_64.whl", hash = "sha256:4ee898bf66f7a8b0bd21bce523814e6fbd8c6add948045ce958b73af7e8878c6"}, - {file = "protobuf-6.31.1-cp39-cp39-win32.whl", hash = "sha256:0414e3aa5a5f3ff423828e1e6a6e907d6c65c1d5b7e6e975793d5590bdeecc16"}, - {file = "protobuf-6.31.1-cp39-cp39-win_amd64.whl", hash = "sha256:8764cf4587791e7564051b35524b72844f845ad0bb011704c3736cce762d8fe9"}, - {file = "protobuf-6.31.1-py3-none-any.whl", hash = "sha256:720a6c7e6b77288b85063569baae8536671b39f15cc22037ec7045658d80489e"}, - {file = "protobuf-6.31.1.tar.gz", hash = "sha256:d8cac4c982f0b957a4dc73a80e2ea24fab08e679c0de9deb835f4a12d69aca9a"}, + {file = "protobuf-6.32.0-cp310-abi3-win32.whl", hash = "sha256:84f9e3c1ff6fb0308dbacb0950d8aa90694b0d0ee68e75719cb044b7078fe741"}, + {file = "protobuf-6.32.0-cp310-abi3-win_amd64.whl", hash = "sha256:a8bdbb2f009cfc22a36d031f22a625a38b615b5e19e558a7b756b3279723e68e"}, + {file = "protobuf-6.32.0-cp39-abi3-macosx_10_9_universal2.whl", hash = "sha256:d52691e5bee6c860fff9a1c86ad26a13afbeb4b168cd4445c922b7e2cf85aaf0"}, + {file = "protobuf-6.32.0-cp39-abi3-manylinux2014_aarch64.whl", hash = "sha256:501fe6372fd1c8ea2a30b4d9be8f87955a64d6be9c88a973996cef5ef6f0abf1"}, + {file = "protobuf-6.32.0-cp39-abi3-manylinux2014_x86_64.whl", hash = "sha256:75a2aab2bd1aeb1f5dc7c5f33bcb11d82ea8c055c9becbb41c26a8c43fd7092c"}, + {file = "protobuf-6.32.0-cp39-cp39-win32.whl", hash = "sha256:7db8ed09024f115ac877a1427557b838705359f047b2ff2f2b2364892d19dacb"}, + {file = "protobuf-6.32.0-cp39-cp39-win_amd64.whl", hash = "sha256:15eba1b86f193a407607112ceb9ea0ba9569aed24f93333fe9a497cf2fda37d3"}, + {file = "protobuf-6.32.0-py3-none-any.whl", hash = "sha256:ba377e5b67b908c8f3072a57b63e2c6a4cbd18aea4ed98d2584350dbf46f2783"}, + {file = "protobuf-6.32.0.tar.gz", hash = "sha256:a81439049127067fc49ec1d36e25c6ee1d1a2b7be930675f919258d03c04e7d2"}, ] [[package]] @@ -3448,14 +3444,14 @@ extra = ["pygments (>=2.19.1)"] [[package]] name = "pytest" -version = "8.4.1" +version = "8.4.2" description = "pytest: simple powerful testing with Python" optional = false python-versions = ">=3.9" groups = ["dev"] files = [ - {file = "pytest-8.4.1-py3-none-any.whl", hash = "sha256:539c70ba6fcead8e78eebbf1115e8b589e7565830d7d006a8723f19ac8a0afb7"}, - {file = "pytest-8.4.1.tar.gz", hash = "sha256:7c67fd69174877359ed9371ec3af8a3d2b04741818c51e5e99cc1742251fa93c"}, + {file = "pytest-8.4.2-py3-none-any.whl", hash = "sha256:872f880de3fc3a5bdc88a11b39c9710c3497a547cfa9320bc3c5e62fbf272e79"}, + {file = "pytest-8.4.2.tar.gz", hash = "sha256:86c0d0b93306b961d58d62a4db4879f27fe25513d4b969df351abdddb3c30e01"}, ] [package.dependencies] @@ -3514,14 +3510,14 @@ histogram = ["pygal", "pygaljs", "setuptools"] [[package]] name = "pytest-cov" -version = "6.2.1" +version = "6.3.0" description = "Pytest plugin for measuring coverage." optional = false python-versions = ">=3.9" groups = ["dev"] files = [ - {file = "pytest_cov-6.2.1-py3-none-any.whl", hash = "sha256:f5bc4c23f42f1cdd23c70b1dab1bbaef4fc505ba950d53e0081d0730dd7e86d5"}, - {file = "pytest_cov-6.2.1.tar.gz", hash = "sha256:25cc6cc0a5358204b8108ecedc51a9b57b34cc6b8c967cc2c01a4e00d8a67da2"}, + {file = "pytest_cov-6.3.0-py3-none-any.whl", hash = "sha256:440db28156d2468cafc0415b4f8e50856a0d11faefa38f30906048fe490f1749"}, + {file = "pytest_cov-6.3.0.tar.gz", hash = "sha256:35c580e7800f87ce892e687461166e1ac2bcb8fb9e13aea79032518d6e503ff2"}, ] [package.dependencies] @@ -3534,14 +3530,14 @@ testing = ["fields", "hunter", "process-tests", "pytest-xdist", "virtualenv"] [[package]] name = "pytest-mock" -version = "3.14.1" +version = "3.15.0" description = "Thin-wrapper around the mock package for easier use with pytest" optional = false -python-versions = ">=3.8" +python-versions = ">=3.9" groups = ["dev"] files = [ - {file = "pytest_mock-3.14.1-py3-none-any.whl", hash = "sha256:178aefcd11307d874b4cd3100344e7e2d888d9791a6a1d9bfe90fbc1b74fd1d0"}, - {file = "pytest_mock-3.14.1.tar.gz", hash = "sha256:159e9edac4c451ce77a5cdb9fc5d1100708d2dd4ba3c3df572f14097351af80e"}, + {file = "pytest_mock-3.15.0-py3-none-any.whl", hash = "sha256:ef2219485fb1bd256b00e7ad7466ce26729b30eadfc7cbcdb4fa9a92ca68db6f"}, + {file = "pytest_mock-3.15.0.tar.gz", hash = "sha256:ab896bd190316b9d5d87b277569dfcdf718b2d049a2ccff5f7aca279c002a1cf"}, ] [package.dependencies] @@ -3885,14 +3881,14 @@ files = [ [[package]] name = "requests" -version = "2.32.4" +version = "2.32.5" description = "Python HTTP for Humans." optional = false -python-versions = ">=3.8" +python-versions = ">=3.9" groups = ["main", "dev"] files = [ - {file = "requests-2.32.4-py3-none-any.whl", hash = "sha256:27babd3cda2a6d50b30443204ee89830707d396671944c998b5975b031ac2b2c"}, - {file = "requests-2.32.4.tar.gz", hash = "sha256:27d0316682c8a29834d3264820024b62a36942083d52caf2f14c0591336d3422"}, + {file = "requests-2.32.5-py3-none-any.whl", hash = "sha256:2462f94637a34fd532264295e186976db0f5d453d1cdd31473c85a6a161affb6"}, + {file = "requests-2.32.5.tar.gz", hash = "sha256:dbba0bac56e100853db0ea71b82b4dfd5fe2bf6d3754a8893c3af500cec7d7cf"}, ] [package.dependencies] @@ -4068,30 +4064,31 @@ files = [ [[package]] name = "ruff" -version = "0.12.8" +version = "0.12.12" description = "An extremely fast Python linter and code formatter, written in Rust." optional = false python-versions = ">=3.7" groups = ["dev"] files = [ - {file = "ruff-0.12.8-py3-none-linux_armv6l.whl", hash = "sha256:63cb5a5e933fc913e5823a0dfdc3c99add73f52d139d6cd5cc8639d0e0465513"}, - {file = "ruff-0.12.8-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:9a9bbe28f9f551accf84a24c366c1aa8774d6748438b47174f8e8565ab9dedbc"}, - {file = "ruff-0.12.8-py3-none-macosx_11_0_arm64.whl", hash = "sha256:2fae54e752a3150f7ee0e09bce2e133caf10ce9d971510a9b925392dc98d2fec"}, - {file = "ruff-0.12.8-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c0acbcf01206df963d9331b5838fb31f3b44fa979ee7fa368b9b9057d89f4a53"}, - {file = "ruff-0.12.8-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ae3e7504666ad4c62f9ac8eedb52a93f9ebdeb34742b8b71cd3cccd24912719f"}, - {file = "ruff-0.12.8-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:cb82efb5d35d07497813a1c5647867390a7d83304562607f3579602fa3d7d46f"}, - {file = "ruff-0.12.8-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:dbea798fc0065ad0b84a2947b0aff4233f0cb30f226f00a2c5850ca4393de609"}, - {file = "ruff-0.12.8-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:49ebcaccc2bdad86fd51b7864e3d808aad404aab8df33d469b6e65584656263a"}, - {file = "ruff-0.12.8-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0ac9c570634b98c71c88cb17badd90f13fc076a472ba6ef1d113d8ed3df109fb"}, - {file = "ruff-0.12.8-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:560e0cd641e45591a3e42cb50ef61ce07162b9c233786663fdce2d8557d99818"}, - {file = "ruff-0.12.8-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:71c83121512e7743fba5a8848c261dcc454cafb3ef2934a43f1b7a4eb5a447ea"}, - {file = "ruff-0.12.8-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:de4429ef2ba091ecddedd300f4c3f24bca875d3d8b23340728c3cb0da81072c3"}, - {file = "ruff-0.12.8-py3-none-musllinux_1_2_i686.whl", hash = "sha256:a2cab5f60d5b65b50fba39a8950c8746df1627d54ba1197f970763917184b161"}, - {file = "ruff-0.12.8-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:45c32487e14f60b88aad6be9fd5da5093dbefb0e3e1224131cb1d441d7cb7d46"}, - {file = "ruff-0.12.8-py3-none-win32.whl", hash = "sha256:daf3475060a617fd5bc80638aeaf2f5937f10af3ec44464e280a9d2218e720d3"}, - {file = "ruff-0.12.8-py3-none-win_amd64.whl", hash = "sha256:7209531f1a1fcfbe8e46bcd7ab30e2f43604d8ba1c49029bb420b103d0b5f76e"}, - {file = "ruff-0.12.8-py3-none-win_arm64.whl", hash = "sha256:c90e1a334683ce41b0e7a04f41790c429bf5073b62c1ae701c9dc5b3d14f0749"}, - {file = "ruff-0.12.8.tar.gz", hash = "sha256:4cb3a45525176e1009b2b64126acf5f9444ea59066262791febf55e40493a033"}, + {file = "ruff-0.12.12-py3-none-linux_armv6l.whl", hash = "sha256:de1c4b916d98ab289818e55ce481e2cacfaad7710b01d1f990c497edf217dafc"}, + {file = "ruff-0.12.12-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:7acd6045e87fac75a0b0cdedacf9ab3e1ad9d929d149785903cff9bb69ad9727"}, + {file = "ruff-0.12.12-py3-none-macosx_11_0_arm64.whl", hash = "sha256:abf4073688d7d6da16611f2f126be86523a8ec4343d15d276c614bda8ec44edb"}, + {file = "ruff-0.12.12-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:968e77094b1d7a576992ac078557d1439df678a34c6fe02fd979f973af167577"}, + {file = "ruff-0.12.12-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:42a67d16e5b1ffc6d21c5f67851e0e769517fb57a8ebad1d0781b30888aa704e"}, + {file = "ruff-0.12.12-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b216ec0a0674e4b1214dcc998a5088e54eaf39417327b19ffefba1c4a1e4971e"}, + {file = "ruff-0.12.12-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:59f909c0fdd8f1dcdbfed0b9569b8bf428cf144bec87d9de298dcd4723f5bee8"}, + {file = "ruff-0.12.12-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9ac93d87047e765336f0c18eacad51dad0c1c33c9df7484c40f98e1d773876f5"}, + {file = "ruff-0.12.12-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:01543c137fd3650d322922e8b14cc133b8ea734617c4891c5a9fccf4bfc9aa92"}, + {file = "ruff-0.12.12-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2afc2fa864197634e549d87fb1e7b6feb01df0a80fd510d6489e1ce8c0b1cc45"}, + {file = "ruff-0.12.12-py3-none-manylinux_2_31_riscv64.whl", hash = "sha256:0c0945246f5ad776cb8925e36af2438e66188d2b57d9cf2eed2c382c58b371e5"}, + {file = "ruff-0.12.12-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:a0fbafe8c58e37aae28b84a80ba1817f2ea552e9450156018a478bf1fa80f4e4"}, + {file = "ruff-0.12.12-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:b9c456fb2fc8e1282affa932c9e40f5ec31ec9cbb66751a316bd131273b57c23"}, + {file = "ruff-0.12.12-py3-none-musllinux_1_2_i686.whl", hash = "sha256:5f12856123b0ad0147d90b3961f5c90e7427f9acd4b40050705499c98983f489"}, + {file = "ruff-0.12.12-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:26a1b5a2bf7dd2c47e3b46d077cd9c0fc3b93e6c6cc9ed750bd312ae9dc302ee"}, + {file = "ruff-0.12.12-py3-none-win32.whl", hash = "sha256:173be2bfc142af07a01e3a759aba6f7791aa47acf3604f610b1c36db888df7b1"}, + {file = "ruff-0.12.12-py3-none-win_amd64.whl", hash = "sha256:e99620bf01884e5f38611934c09dd194eb665b0109104acae3ba6102b600fd0d"}, + {file = "ruff-0.12.12-py3-none-win_arm64.whl", hash = "sha256:2a8199cab4ce4d72d158319b63370abf60991495fb733db96cd923a34c52d093"}, + {file = "ruff-0.12.12.tar.gz", hash = "sha256:b86cd3415dbe31b3b46a71c598f4c4b2f550346d1ccf6326b347cc0c8fd063d6"}, ] [[package]] @@ -4130,14 +4127,14 @@ pathspec = ">=0.10.1" [[package]] name = "sentry-sdk" -version = "2.34.1" +version = "2.37.0" description = "Python client for Sentry (https://sentry.io)" optional = false python-versions = ">=3.6" groups = ["dev"] files = [ - {file = "sentry_sdk-2.34.1-py2.py3-none-any.whl", hash = "sha256:b7a072e1cdc5abc48101d5146e1ae680fa81fe886d8d95aaa25a0b450c818d32"}, - {file = "sentry_sdk-2.34.1.tar.gz", hash = "sha256:69274eb8c5c38562a544c3e9f68b5be0a43be4b697f5fd385bf98e4fbe672687"}, + {file = "sentry_sdk-2.37.0-py2.py3-none-any.whl", hash = "sha256:89c1ed205d5c25926558b64a9bed8a5b4fb295b007cecc32c0ec4bf7694da2e1"}, + {file = "sentry_sdk-2.37.0.tar.gz", hash = "sha256:2c661a482dd5accf3df58464f31733545745bb4d5cf8f5e46e0e1c4eed88479f"}, ] [package.dependencies] @@ -4165,6 +4162,7 @@ httpx = ["httpx (>=0.16.0)"] huey = ["huey (>=2)"] huggingface-hub = ["huggingface_hub (>=0.22)"] langchain = ["langchain (>=0.0.210)"] +langgraph = ["langgraph (>=0.6.6)"] launchdarkly = ["launchdarkly-server-sdk (>=9.8.0)"] litestar = ["litestar (>=2.0.0)"] loguru = ["loguru (>=0.5)"] @@ -4432,14 +4430,14 @@ types-setuptools = "*" [[package]] name = "types-protobuf" -version = "6.30.2.20250809" +version = "6.30.2.20250822" description = "Typing stubs for protobuf" optional = false python-versions = ">=3.9" groups = ["dev"] files = [ - {file = "types_protobuf-6.30.2.20250809-py3-none-any.whl", hash = "sha256:7afc2d3f569d281dd22f339179577243be60bf7d1dfb4bc13d0109859fb1f1be"}, - {file = "types_protobuf-6.30.2.20250809.tar.gz", hash = "sha256:b04f2998edf0d81bd8600bbd5db0b2adf547837eef6362ba364925cee21a33b4"}, + {file = "types_protobuf-6.30.2.20250822-py3-none-any.whl", hash = "sha256:5584c39f7e36104b5f8bdfd31815fa1d5b7b3455a79ddddc097b62320f4b1841"}, + {file = "types_protobuf-6.30.2.20250822.tar.gz", hash = "sha256:faacbbe87bd8cba4472361c0bd86f49296bd36f7761e25d8ada4f64767c1bde9"}, ] [[package]] @@ -4460,14 +4458,14 @@ types-cffi = "*" [[package]] name = "types-python-dateutil" -version = "2.9.0.20250809" +version = "2.9.0.20250822" description = "Typing stubs for python-dateutil" optional = false python-versions = ">=3.9" groups = ["dev"] files = [ - {file = "types_python_dateutil-2.9.0.20250809-py3-none-any.whl", hash = "sha256:768890cac4f2d7fd9e0feb6f3217fce2abbfdfc0cadd38d11fba325a815e4b9f"}, - {file = "types_python_dateutil-2.9.0.20250809.tar.gz", hash = "sha256:69cbf8d15ef7a75c3801d65d63466e46ac25a0baa678d89d0a137fc31a608cc1"}, + {file = "types_python_dateutil-2.9.0.20250822-py3-none-any.whl", hash = "sha256:849d52b737e10a6dc6621d2bd7940ec7c65fcb69e6aa2882acf4e56b2b508ddc"}, + {file = "types_python_dateutil-2.9.0.20250822.tar.gz", hash = "sha256:84c92c34bd8e68b117bff742bc00b692a1e8531262d4507b33afcc9f7716cd53"}, ] [[package]] @@ -4557,14 +4555,14 @@ files = [ [[package]] name = "typing-extensions" -version = "4.14.1" +version = "4.15.0" description = "Backported and Experimental Type Hints for Python 3.9+" optional = false python-versions = ">=3.9" groups = ["main", "dev"] files = [ - {file = "typing_extensions-4.14.1-py3-none-any.whl", hash = "sha256:d1e1e3b58374dc93031d6eda2420a48ea44a36c2b4766a4fdeb3710755731d76"}, - {file = "typing_extensions-4.14.1.tar.gz", hash = "sha256:38b39f4aeeab64884ce9f74c94263ef78f3c22467c8724005483154c26648d36"}, + {file = "typing_extensions-4.15.0-py3-none-any.whl", hash = "sha256:f0fa19c6845758ab08074a0cfa8b7aecb71c999ca73d62883bc25cc018c4e548"}, + {file = "typing_extensions-4.15.0.tar.gz", hash = "sha256:0cea48d173cc12fa28ecabc3b837ea3cf6f38c6d1136f85cbaaf598984861466"}, ] [[package]] @@ -4987,4 +4985,4 @@ valkey = ["valkey-glide"] [metadata] lock-version = "2.1" python-versions = ">=3.9,<4.0.0" -content-hash = "f17c64c201946f57e25f144e283c40832d7fde85a7c5cd0aa8f4013ab1595da5" +content-hash = "aa5bfaaf1e1c315fd70137a7a6128648090101ff7589b52da46f2985524628a6" diff --git a/provenance/3.19.1a0/multiple.intoto.jsonl b/provenance/3.19.1a0/multiple.intoto.jsonl new file mode 100644 index 00000000000..556b0ee81da --- /dev/null +++ b/provenance/3.19.1a0/multiple.intoto.jsonl @@ -0,0 +1 @@ +{"mediaType":"application/vnd.dev.sigstore.bundle.v0.3+json", "verificationMaterial":{"certificate":{"rawBytes":"MIIHZzCCBuygAwIBAgIUJ89YFShCTGfF/QHotUAgJRCmQJgwCgYIKoZIzj0EAwMwNzEVMBMGA1UEChMMc2lnc3RvcmUuZGV2MR4wHAYDVQQDExVzaWdzdG9yZS1pbnRlcm1lZGlhdGUwHhcNMjUwODEzMDgwNzM3WhcNMjUwODEzMDgxNzM3WjAAMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEqXk4TTMrs6fFwwZ2J244KR1PhQu366OjXo5Bh7sq32ju6HsptavaNvn2e5OsnK/KV/PGqR6XlFvYcsfORd2ENKOCBgswggYHMA4GA1UdDwEB/wQEAwIHgDATBgNVHSUEDDAKBggrBgEFBQcDAzAdBgNVHQ4EFgQUNWAB99uAxXla1Jf3TsGSMfnxLjIwHwYDVR0jBBgwFoAU39Ppz1YkEZb5qNjpKFWixi4YZD8wgYQGA1UdEQEB/wR6MHiGdmh0dHBzOi8vZ2l0aHViLmNvbS9zbHNhLWZyYW1ld29yay9zbHNhLWdpdGh1Yi1nZW5lcmF0b3IvLmdpdGh1Yi93b3JrZmxvd3MvZ2VuZXJhdG9yX2dlbmVyaWNfc2xzYTMueW1sQHJlZnMvdGFncy92Mi4xLjAwOQYKKwYBBAGDvzABAQQraHR0cHM6Ly90b2tlbi5hY3Rpb25zLmdpdGh1YnVzZXJjb250ZW50LmNvbTAWBgorBgEEAYO/MAECBAhzY2hlZHVsZTA2BgorBgEEAYO/MAEDBCg0Y2I1MWNhNGY5OWQ2MGVkODA5NzExZmI0NTMzYTkyNWY2MTI5YTY3MBkGCisGAQQBg78wAQQEC1ByZS1SZWxlYXNlMDUGCisGAQQBg78wAQUEJ2F3cy1wb3dlcnRvb2xzL3Bvd2VydG9vbHMtbGFtYmRhLXB5dGhvbjAgBgorBgEEAYO/MAEGBBJyZWZzL2hlYWRzL2RldmVsb3AwOwYKKwYBBAGDvzABCAQtDCtodHRwczovL3Rva2VuLmFjdGlvbnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tMIGGBgorBgEEAYO/MAEJBHgMdmh0dHBzOi8vZ2l0aHViLmNvbS9zbHNhLWZyYW1ld29yay9zbHNhLWdpdGh1Yi1nZW5lcmF0b3IvLmdpdGh1Yi93b3JrZmxvd3MvZ2VuZXJhdG9yX2dlbmVyaWNfc2xzYTMueW1sQHJlZnMvdGFncy92Mi4xLjAwOAYKKwYBBAGDvzABCgQqDChmN2RkOGM1NGMyMDY3YmFmYzEyY2E3YTU1NTk1ZDVlZTliNzUyMDRhMB0GCisGAQQBg78wAQsEDwwNZ2l0aHViLWhvc3RlZDBKBgorBgEEAYO/MAEMBDwMOmh0dHBzOi8vZ2l0aHViLmNvbS9hd3MtcG93ZXJ0b29scy9wb3dlcnRvb2xzLWxhbWJkYS1weXRob24wOAYKKwYBBAGDvzABDQQqDCg0Y2I1MWNhNGY5OWQ2MGVkODA5NzExZmI0NTMzYTkyNWY2MTI5YTY3MCIGCisGAQQBg78wAQ4EFAwScmVmcy9oZWFkcy9kZXZlbG9wMBkGCisGAQQBg78wAQ8ECwwJMjIxOTE5Mzc5MDEGCisGAQQBg78wARAEIwwhaHR0cHM6Ly9naXRodWIuY29tL2F3cy1wb3dlcnRvb2xzMBkGCisGAQQBg78wAREECwwJMTI5MTI3NjM4MH8GCisGAQQBg78wARIEcQxvaHR0cHM6Ly9naXRodWIuY29tL2F3cy1wb3dlcnRvb2xzL3Bvd2VydG9vbHMtbGFtYmRhLXB5dGhvbi8uZ2l0aHViL3dvcmtmbG93cy9wcmUtcmVsZWFzZS55bWxAcmVmcy9oZWFkcy9kZXZlbG9wMDgGCisGAQQBg78wARMEKgwoNGNiNTFjYTRmOTlkNjBlZDgwOTcxMWZiNDUzM2E5MjVmNjEyOWE2NzAYBgorBgEEAYO/MAEUBAoMCHNjaGVkdWxlMG4GCisGAQQBg78wARUEYAxeaHR0cHM6Ly9naXRodWIuY29tL2F3cy1wb3dlcnRvb2xzL3Bvd2VydG9vbHMtbGFtYmRhLXB5dGhvbi9hY3Rpb25zL3J1bnMvMTY5MzEyNjIzODIvYXR0ZW1wdHMvMTAWBgorBgEEAYO/MAEWBAgMBnB1YmxpYzCBigYKKwYBBAHWeQIEAgR8BHoAeAB2AN09MGrGxxEyYxkeHJlnNwKiSl643jyt/4eKcoAvKe6OAAABmKJ4ar4AAAQDAEcwRQIgKWvX7nsRWB86bdGFT0PBcqpVrkAeknlm+8PX6Cv+8foCIQDKlvBftIlYzFamEBs70Zpc4Wl9AEkRiygCgKMcv8oOTzAKBggqhkjOPQQDAwNpADBmAjEAjl+mlSEoePCXLCCRWtrO5nGTNIyev9VnvVNrKd6ckDKF053WWAoKSkFJpye3xjRnAjEA4L+NHot+vEYznpa8kCax4Dbke+yo4gxGb9bbq1l7DjRVHpLPx0rdxMKUokMTgQsu"}, "tlogEntries":[{"logIndex":"388577025", "logId":{"keyId":"wNI9atQGlz+VWfO6LRygH4QUfY/8W4RFwiT5i5WRgB0="}, "kindVersion":{"kind":"dsse", "version":"0.0.1"}, "integratedTime":"1755072457", "inclusionPromise":{"signedEntryTimestamp":"MEYCIQC84evUFS2iF2lgSjqWV53r3NlCbNASbu7jiLyTQcBacQIhAKSKuxsoKjfIiZE6dIz9XxNGwJzjOEdgb5njclAgOMwa"}, "inclusionProof":{"logIndex":"266672763", "rootHash":"cLLUhfT+nSnwgF3+L7u0FjVR5n4EyTHo2sgumWGpEWM=", "treeSize":"266672768", "hashes":["Hh3G2XvuvkFax0mO74CGipT0FJqmodfzHnDyqneNVc0=", "pxxoZ2yqCpGCH/6gz9q/sNBdLcv9wr8BZ0vK/xUSttY=", "tHVQCSuF/o42ZIsEA88O2Wh+uwcglSfI9JfifVxAgT0=", "rEj/nB89LfcBIzs8Dl6XOAZNy46dg9JtMDVY7td6Vu4=", "k/8/qKXVYUhghXRvs440+lwdqxiZpK/Ip+wMUL5r0AM=", "dYw2f1eHR8wPEb9p2BgA1ajoxG3RnHMGb0+IOGJ/F94=", "hwxFQmHyykeYLcVoWlbglKSm3xWVo9am8WAnpNQOTgs=", "cOUei7einm8Id0PK9KOhNLiCL+TSN9Mz2LoY0eJQ3Kg=", "ZBL+SdpM8iDAWaSg0V+Tnc8yeOm3nXBFnJETrJ6p3y8=", "HCxYbEfqAmcmH/pwFwHzxhojAnATKp50rhfYwdm+sR8=", "etFs/IBbqEMdoGlXz53kagK1NY4Yx2TGISPPZhVj9/U=", "5ECgwDjiBjpLMM7+l2yUJvG67IlSskihxNH8CfaiKFM=", "3OgwgBUCE+nmoUGA+bQJDUFOEMn94gUpxaNWdjf4yn8=", "8v7SMD7clKOW9lIbNSL0Qnq0D9uTx0n+2NwC8N/uIdQ=", "hk65QDLT+VxJCmuxqqNkZmezcTNQnirH/6iH4JTnz+M=", "jkSPx40FxcexzA4515LOSyhJ2X2zeK5UINJ5J+3SiaY=", "4UEb5oiYfLnEfmBDb+rZMlzYP20NXNd6288+yuM/qus=", "Q8AUdGrLOK/+q7Zpb5T3hpo2AMEg3qW2VHw5OtFthRI=", "wLANT0NMxIRh/p5rRcam4MppSIbUXIfT1Ht9FQA2XnI="], "checkpoint":{"envelope":"rekor.sigstore.dev - 1193050959916656506\n266672768\ncLLUhfT+nSnwgF3+L7u0FjVR5n4EyTHo2sgumWGpEWM=\n\n— rekor.sigstore.dev wNI9ajBFAiEA1eCHjHDTkXaecFz0gn4/O8DZnW0twJ4bJ0aBxyZwoR4CIHj3arx5XuuVrFKTxpGsisVdXWn8fzsSVkycinKC8OTZ\n"}}, "canonicalizedBody":"eyJhcGlWZXJzaW9uIjoiMC4wLjEiLCJraW5kIjoiZHNzZSIsInNwZWMiOnsiZW52ZWxvcGVIYXNoIjp7ImFsZ29yaXRobSI6InNoYTI1NiIsInZhbHVlIjoiZTI5YjNiZDRkMjYwZTI2YzU1YzVkNjRhM2FiY2YyZGFhODFmMTA5OTZkN2M5YmQ2NmNiMTc5OTk2M2JhYTk3NSJ9LCJwYXlsb2FkSGFzaCI6eyJhbGdvcml0aG0iOiJzaGEyNTYiLCJ2YWx1ZSI6IjFmNTA1MTQzNDMxODUwNGU1ZDBjNGEzNzk0YjBkNDdiNmVhOTU5MTBhYWE2Zjc1OGM3YzU4NGM1NWEzOTY2N2UifSwic2lnbmF0dXJlcyI6W3sic2lnbmF0dXJlIjoiTUVZQ0lRQ1NhMitna3BBSjhnUlhTbTA0aEtOZFB0dTIvaTFkNnJsY2ZaMjU0SFNpMndJaEFMTnNQbTUyZHlLNTZ6ZDZwek8zUFpRQVE4dGlYU3lMZVNiNjcwZVl3c2Q1IiwidmVyaWZpZXIiOiJMUzB0TFMxQ1JVZEpUaUJEUlZKVVNVWkpRMEZVUlMwdExTMHRDazFKU1VoYWVrTkRRblY1WjBGM1NVSkJaMGxWU2pnNVdVWlRhRU5VUjJaR0wxRkliM1JWUVdkS1VrTnRVVXBuZDBObldVbExiMXBKZW1vd1JVRjNUWGNLVG5wRlZrMUNUVWRCTVZWRlEyaE5UV015Ykc1ak0xSjJZMjFWZFZwSFZqSk5ValIzU0VGWlJGWlJVVVJGZUZaNllWZGtlbVJIT1hsYVV6RndZbTVTYkFwamJURnNXa2RzYUdSSFZYZElhR05PVFdwVmQwOUVSWHBOUkdkM1RucE5NMWRvWTA1TmFsVjNUMFJGZWsxRVozaE9lazB6VjJwQlFVMUdhM2RGZDFsSUNrdHZXa2w2YWpCRFFWRlpTVXR2V2tsNmFqQkVRVkZqUkZGblFVVnhXR3MwVkZSTmNuTTJaa1ozZDFveVNqSTBORXRTTVZCb1VYVXpOalpQYWxodk5VSUthRGR6Y1RNeWFuVTJTSE53ZEdGMllVNTJiakpsTlU5emJrc3ZTMVl2VUVkeFVqWlliRVoyV1dOelprOVNaREpGVGt0UFEwSm5jM2RuWjFsSVRVRTBSd3BCTVZWa1JIZEZRaTkzVVVWQmQwbElaMFJCVkVKblRsWklVMVZGUkVSQlMwSm5aM0pDWjBWR1FsRmpSRUY2UVdSQ1owNVdTRkUwUlVablVWVk9WMEZDQ2prNWRVRjRXR3hoTVVwbU0xUnpSMU5OWm01NFRHcEpkMGgzV1VSV1VqQnFRa0puZDBadlFWVXpPVkJ3ZWpGWmEwVmFZalZ4VG1wd1MwWlhhWGhwTkZrS1drUTRkMmRaVVVkQk1WVmtSVkZGUWk5M1VqWk5TR2xIWkcxb01HUklRbnBQYVRoMldqSnNNR0ZJVm1sTWJVNTJZbE01ZW1KSVRtaE1WMXA1V1ZjeGJBcGtNamw1WVhrNWVtSklUbWhNVjJSd1pFZG9NVmxwTVc1YVZ6VnNZMjFHTUdJelNYWk1iV1J3WkVkb01WbHBPVE5pTTBweVdtMTRkbVF6VFhaYU1sWjFDbHBZU21oa1J6bDVXREprYkdKdFZubGhWMDVtWXpKNGVsbFVUWFZsVnpGelVVaEtiRnB1VFhaa1IwWnVZM2s1TWsxcE5IaE1ha0YzVDFGWlMwdDNXVUlLUWtGSFJIWjZRVUpCVVZGeVlVaFNNR05JVFRaTWVUa3dZakowYkdKcE5XaFpNMUp3WWpJMWVreHRaSEJrUjJneFdXNVdlbHBZU21waU1qVXdXbGMxTUFwTWJVNTJZbFJCVjBKbmIzSkNaMFZGUVZsUEwwMUJSVU5DUVdoNldUSm9iRnBJVm5OYVZFRXlRbWR2Y2tKblJVVkJXVTh2VFVGRlJFSkRaekJaTWtreENrMVhUbWhPUjFrMVQxZFJNazFIVm10UFJFRTFUbnBGZUZwdFNUQk9WRTE2V1ZScmVVNVhXVEpOVkVrMVdWUlpNMDFDYTBkRGFYTkhRVkZSUW1jM09IY0tRVkZSUlVNeFFubGFVekZUV2xkNGJGbFlUbXhOUkZWSFEybHpSMEZSVVVKbk56aDNRVkZWUlVveVJqTmplVEYzWWpOa2JHTnVVblppTW5oNlRETkNkZ3BrTWxaNVpFYzVkbUpJVFhSaVIwWjBXVzFTYUV4WVFqVmtSMmgyWW1wQlowSm5iM0pDWjBWRlFWbFBMMDFCUlVkQ1FrcDVXbGRhZWt3eWFHeFpWMUo2Q2t3eVVteGtiVlp6WWpOQmQwOTNXVXRMZDFsQ1FrRkhSSFo2UVVKRFFWRjBSRU4wYjJSSVVuZGplbTkyVEROU2RtRXlWblZNYlVacVpFZHNkbUp1VFhVS1dqSnNNR0ZJVm1sa1dFNXNZMjFPZG1KdVVteGlibEYxV1RJNWRFMUpSMGRDWjI5eVFtZEZSVUZaVHk5TlFVVktRa2huVFdSdGFEQmtTRUo2VDJrNGRncGFNbXd3WVVoV2FVeHRUblppVXpsNllraE9hRXhYV25sWlZ6RnNaREk1ZVdGNU9YcGlTRTVvVEZka2NHUkhhREZaYVRGdVdsYzFiR050UmpCaU0wbDJDa3h0WkhCa1IyZ3hXV2s1TTJJelNuSmFiWGgyWkROTmRsb3lWblZhV0Vwb1pFYzVlVmd5Wkd4aWJWWjVZVmRPWm1NeWVIcFpWRTExWlZjeGMxRklTbXdLV201TmRtUkhSbTVqZVRreVRXazBlRXhxUVhkUFFWbExTM2RaUWtKQlIwUjJla0ZDUTJkUmNVUkRhRzFPTWxKclQwZE5NVTVIVFhsTlJGa3pXVzFHYlFwWmVrVjVXVEpGTTFsVVZURk9WR3N4V2tSV2JGcFViR2xPZWxWNVRVUlNhRTFDTUVkRGFYTkhRVkZSUW1jM09IZEJVWE5GUkhkM1Rsb3liREJoU0ZacENreFhhSFpqTTFKc1drUkNTMEpuYjNKQ1owVkZRVmxQTDAxQlJVMUNSSGROVDIxb01HUklRbnBQYVRoMldqSnNNR0ZJVm1sTWJVNTJZbE01YUdRelRYUUtZMGM1TTFwWVNqQmlNamx6WTNrNWQySXpaR3hqYmxKMllqSjRla3hYZUdoaVYwcHJXVk14ZDJWWVVtOWlNalIzVDBGWlMwdDNXVUpDUVVkRWRucEJRZ3BFVVZGeFJFTm5NRmt5U1RGTlYwNW9Ua2RaTlU5WFVUSk5SMVpyVDBSQk5VNTZSWGhhYlVrd1RsUk5lbGxVYTNsT1Yxa3lUVlJKTlZsVVdUTk5RMGxIQ2tOcGMwZEJVVkZDWnpjNGQwRlJORVZHUVhkVFkyMVdiV041T1c5YVYwWnJZM2s1YTFwWVdteGlSemwzVFVKclIwTnBjMGRCVVZGQ1p6YzRkMEZST0VVS1EzZDNTazFxU1hoUFZFVTFUWHBqTlUxRVJVZERhWE5IUVZGUlFtYzNPSGRCVWtGRlNYZDNhR0ZJVWpCalNFMDJUSGs1Ym1GWVVtOWtWMGwxV1RJNWRBcE1Na1l6WTNreGQySXpaR3hqYmxKMllqSjRlazFDYTBkRGFYTkhRVkZSUW1jM09IZEJVa1ZGUTNkM1NrMVVTVFZOVkVrelRtcE5ORTFJT0VkRGFYTkhDa0ZSVVVKbk56aDNRVkpKUldOUmVIWmhTRkl3WTBoTk5reDVPVzVoV0ZKdlpGZEpkVmt5T1hSTU1rWXpZM2t4ZDJJelpHeGpibEoyWWpKNGVrd3pRbllLWkRKV2VXUkhPWFppU0UxMFlrZEdkRmx0VW1oTVdFSTFaRWRvZG1KcE9IVmFNbXd3WVVoV2FVd3paSFpqYlhSdFlrYzVNMk41T1hkamJWVjBZMjFXY3dwYVYwWjZXbE0xTldKWGVFRmpiVlp0WTNrNWIxcFhSbXRqZVRscldsaGFiR0pIT1hkTlJHZEhRMmx6UjBGUlVVSm5OemgzUVZKTlJVdG5kMjlPUjA1cENrNVVSbXBaVkZKdFQxUnNhMDVxUW14YVJHZDNUMVJqZUUxWFdtbE9SRlY2VFRKRk5VMXFWbTFPYWtWNVQxZEZNazU2UVZsQ1oyOXlRbWRGUlVGWlR5OEtUVUZGVlVKQmIwMURTRTVxWVVkV2EyUlhlR3hOUnpSSFEybHpSMEZSVVVKbk56aDNRVkpWUlZsQmVHVmhTRkl3WTBoTk5reDVPVzVoV0ZKdlpGZEpkUXBaTWpsMFRESkdNMk41TVhkaU0yUnNZMjVTZG1JeWVIcE1NMEoyWkRKV2VXUkhPWFppU0UxMFlrZEdkRmx0VW1oTVdFSTFaRWRvZG1KcE9XaFpNMUp3Q21JeU5YcE1NMG94WW01TmRrMVVXVFZOZWtWNVRtcEplazlFU1haWldGSXdXbGN4ZDJSSVRYWk5WRUZYUW1kdmNrSm5SVVZCV1U4dlRVRkZWMEpCWjAwS1FtNUNNVmx0ZUhCWmVrTkNhV2RaUzB0M1dVSkNRVWhYWlZGSlJVRm5VamhDU0c5QlpVRkNNa0ZPTURsTlIzSkhlSGhGZVZsNGEyVklTbXh1VG5kTGFRcFRiRFkwTTJwNWRDODBaVXRqYjBGMlMyVTJUMEZCUVVKdFMwbzBZWEkwUVVGQlVVUkJSV04zVWxGSlowdFhkbGczYm5OU1YwSTRObUprUjBaVU1GQkNDbU54Y0ZaeWEwRmxhMjVzYlNzNFVGZzJRM1lyT0dadlEwbFJSRXRzZGtKbWRFbHNXWHBHWVcxRlFuTTNNRnB3WXpSWGJEbEJSV3RTYVhsblEyZExUV01LZGpodlQxUjZRVXRDWjJkeGFHdHFUMUJSVVVSQmQwNXdRVVJDYlVGcVJVRnFiQ3R0YkZORmIyVlFRMWhNUTBOU1YzUnlUelZ1UjFST1NYbGxkamxXYmdwMlZrNXlTMlEyWTJ0RVMwWXdOVE5YVjBGdlMxTnJSa3B3ZVdVemVHcFNia0ZxUlVFMFRDdE9TRzkwSzNaRldYcHVjR0U0YTBOaGVEUkVZbXRsSzNsdkNqUm5lRWRpT1dKaWNURnNOMFJxVWxaSWNFeFFlREJ5WkhoTlMxVnZhMDFVWjFGemRRb3RMUzB0TFVWT1JDQkRSVkpVU1VaSlEwRlVSUzB0TFMwdENnPT0ifV19fQ=="}]}, "dsseEnvelope":{"payload":"eyJfdHlwZSI6Imh0dHBzOi8vaW4tdG90by5pby9TdGF0ZW1lbnQvdjAuMSIsInByZWRpY2F0ZVR5cGUiOiJodHRwczovL3Nsc2EuZGV2L3Byb3ZlbmFuY2UvdjAuMiIsInN1YmplY3QiOlt7Im5hbWUiOiIuL2F3c19sYW1iZGFfcG93ZXJ0b29scy0zLjE5LjFhMC1weTMtbm9uZS1hbnkud2hsIiwiZGlnZXN0Ijp7InNoYTI1NiI6ImU2NjBkOTI1N2M1ZTFlZGYxMGI3ZGNjNTQwMGY4YzdkOTJkZGM5NWZlOWQxMzgwMTk0OWQ2YTQ4Yzc3MTgxYzYifX0seyJuYW1lIjoiLi9hd3NfbGFtYmRhX3Bvd2VydG9vbHMtMy4xOS4xYTAudGFyLmd6IiwiZGlnZXN0Ijp7InNoYTI1NiI6IjE2MWNmNmQyOGE5ZTYyOTY3NTI5ZWZlMWE1NTcxZWVlOGZhZTNjM2Y5NjljZmYzN2QwMTA3ZjhmYzMyZDFmNGEifX1dLCJwcmVkaWNhdGUiOnsiYnVpbGRlciI6eyJpZCI6Imh0dHBzOi8vZ2l0aHViLmNvbS9zbHNhLWZyYW1ld29yay9zbHNhLWdpdGh1Yi1nZW5lcmF0b3IvLmdpdGh1Yi93b3JrZmxvd3MvZ2VuZXJhdG9yX2dlbmVyaWNfc2xzYTMueW1sQHJlZnMvdGFncy92Mi4xLjAifSwiYnVpbGRUeXBlIjoiaHR0cHM6Ly9naXRodWIuY29tL3Nsc2EtZnJhbWV3b3JrL3Nsc2EtZ2l0aHViLWdlbmVyYXRvci9nZW5lcmljQHYxIiwiaW52b2NhdGlvbiI6eyJjb25maWdTb3VyY2UiOnsidXJpIjoiZ2l0K2h0dHBzOi8vZ2l0aHViLmNvbS9hd3MtcG93ZXJ0b29scy9wb3dlcnRvb2xzLWxhbWJkYS1weXRob25AcmVmcy9oZWFkcy9kZXZlbG9wIiwiZGlnZXN0Ijp7InNoYTEiOiI0Y2I1MWNhNGY5OWQ2MGVkODA5NzExZmI0NTMzYTkyNWY2MTI5YTY3In0sImVudHJ5UG9pbnQiOiIuZ2l0aHViL3dvcmtmbG93cy9wcmUtcmVsZWFzZS55bWwifSwicGFyYW1ldGVycyI6eyJ2YXJzIjp7fX0sImVudmlyb25tZW50Ijp7ImdpdGh1Yl9hY3RvciI6ImxlYW5kcm9kYW1hc2NlbmEiLCJnaXRodWJfYWN0b3JfaWQiOiI0Mjk1MTczIiwiZ2l0aHViX2Jhc2VfcmVmIjoiIiwiZ2l0aHViX2V2ZW50X25hbWUiOiJzY2hlZHVsZSIsImdpdGh1Yl9ldmVudF9wYXlsb2FkIjp7ImVudGVycHJpc2UiOnsiYXZhdGFyX3VybCI6Imh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vYi8xMjkwP3Y9NCIsImNyZWF0ZWRfYXQiOiIyMDE5LTExLTEzVDE4OjA1OjQxWiIsImRlc2NyaXB0aW9uIjoiIiwiaHRtbF91cmwiOiJodHRwczovL2dpdGh1Yi5jb20vZW50ZXJwcmlzZXMvYW1hem9uIiwiaWQiOjEyOTAsIm5hbWUiOiJBbWF6b24iLCJub2RlX2lkIjoiTURFd09rVnVkR1Z5Y0hKcGMyVXhNamt3Iiwic2x1ZyI6ImFtYXpvbiIsInVwZGF0ZWRfYXQiOiIyMDI1LTA4LTEyVDIwOjU5OjE0WiIsIndlYnNpdGVfdXJsIjoiaHR0cHM6Ly93d3cuYW1hem9uLmNvbS8ifSwib3JnYW5pemF0aW9uIjp7ImF2YXRhcl91cmwiOiJodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTI5MTI3NjM4P3Y9NCIsImRlc2NyaXB0aW9uIjoiIiwiZXZlbnRzX3VybCI6Imh0dHBzOi8vYXBpLmdpdGh1Yi5jb20vb3Jncy9hd3MtcG93ZXJ0b29scy9ldmVudHMiLCJob29rc191cmwiOiJodHRwczovL2FwaS5naXRodWIuY29tL29yZ3MvYXdzLXBvd2VydG9vbHMvaG9va3MiLCJpZCI6MTI5MTI3NjM4LCJpc3N1ZXNfdXJsIjoiaHR0cHM6Ly9hcGkuZ2l0aHViLmNvbS9vcmdzL2F3cy1wb3dlcnRvb2xzL2lzc3VlcyIsImxvZ2luIjoiYXdzLXBvd2VydG9vbHMiLCJtZW1iZXJzX3VybCI6Imh0dHBzOi8vYXBpLmdpdGh1Yi5jb20vb3Jncy9hd3MtcG93ZXJ0b29scy9tZW1iZXJzey9tZW1iZXJ9Iiwibm9kZV9pZCI6Ik9fa2dET0I3SlUxZyIsInB1YmxpY19tZW1iZXJzX3VybCI6Imh0dHBzOi8vYXBpLmdpdGh1Yi5jb20vb3Jncy9hd3MtcG93ZXJ0b29scy9wdWJsaWNfbWVtYmVyc3svbWVtYmVyfSIsInJlcG9zX3VybCI6Imh0dHBzOi8vYXBpLmdpdGh1Yi5jb20vb3Jncy9hd3MtcG93ZXJ0b29scy9yZXBvcyIsInVybCI6Imh0dHBzOi8vYXBpLmdpdGh1Yi5jb20vb3Jncy9hd3MtcG93ZXJ0b29scyJ9LCJyZXBvc2l0b3J5Ijp7ImFsbG93X2ZvcmtpbmciOnRydWUsImFyY2hpdmVfdXJsIjoiaHR0cHM6Ly9hcGkuZ2l0aHViLmNvbS9yZXBvcy9hd3MtcG93ZXJ0b29scy9wb3dlcnRvb2xzLWxhbWJkYS1weXRob24ve2FyY2hpdmVfZm9ybWF0fXsvcmVmfSIsImFyY2hpdmVkIjpmYWxzZSwiYXNzaWduZWVzX3VybCI6Imh0dHBzOi8vYXBpLmdpdGh1Yi5jb20vcmVwb3MvYXdzLXBvd2VydG9vbHMvcG93ZXJ0b29scy1sYW1iZGEtcHl0aG9uL2Fzc2lnbmVlc3svdXNlcn0iLCJibG9ic191cmwiOiJodHRwczovL2FwaS5naXRodWIuY29tL3JlcG9zL2F3cy1wb3dlcnRvb2xzL3Bvd2VydG9vbHMtbGFtYmRhLXB5dGhvbi9naXQvYmxvYnN7L3NoYX0iLCJicmFuY2hlc191cmwiOiJodHRwczovL2FwaS5naXRodWIuY29tL3JlcG9zL2F3cy1wb3dlcnRvb2xzL3Bvd2VydG9vbHMtbGFtYmRhLXB5dGhvbi9icmFuY2hlc3svYnJhbmNofSIsImNsb25lX3VybCI6Imh0dHBzOi8vZ2l0aHViLmNvbS9hd3MtcG93ZXJ0b29scy9wb3dlcnRvb2xzLWxhbWJkYS1weXRob24uZ2l0IiwiY29sbGFib3JhdG9yc191cmwiOiJodHRwczovL2FwaS5naXRodWIuY29tL3JlcG9zL2F3cy1wb3dlcnRvb2xzL3Bvd2VydG9vbHMtbGFtYmRhLXB5dGhvbi9jb2xsYWJvcmF0b3Jzey9jb2xsYWJvcmF0b3J9IiwiY29tbWVudHNfdXJsIjoiaHR0cHM6Ly9hcGkuZ2l0aHViLmNvbS9yZXBvcy9hd3MtcG93ZXJ0b29scy9wb3dlcnRvb2xzLWxhbWJkYS1weXRob24vY29tbWVudHN7L251bWJlcn0iLCJjb21taXRzX3VybCI6Imh0dHBzOi8vYXBpLmdpdGh1Yi5jb20vcmVwb3MvYXdzLXBvd2VydG9vbHMvcG93ZXJ0b29scy1sYW1iZGEtcHl0aG9uL2NvbW1pdHN7L3NoYX0iLCJjb21wYXJlX3VybCI6Imh0dHBzOi8vYXBpLmdpdGh1Yi5jb20vcmVwb3MvYXdzLXBvd2VydG9vbHMvcG93ZXJ0b29scy1sYW1iZGEtcHl0aG9uL2NvbXBhcmUve2Jhc2V9Li4ue2hlYWR9IiwiY29udGVudHNfdXJsIjoiaHR0cHM6Ly9hcGkuZ2l0aHViLmNvbS9yZXBvcy9hd3MtcG93ZXJ0b29scy9wb3dlcnRvb2xzLWxhbWJkYS1weXRob24vY29udGVudHMveytwYXRofSIsImNvbnRyaWJ1dG9yc191cmwiOiJodHRwczovL2FwaS5naXRodWIuY29tL3JlcG9zL2F3cy1wb3dlcnRvb2xzL3Bvd2VydG9vbHMtbGFtYmRhLXB5dGhvbi9jb250cmlidXRvcnMiLCJjcmVhdGVkX2F0IjoiMjAxOS0xMS0xNVQxMjoyNjoxMloiLCJjdXN0b21fcHJvcGVydGllcyI6eyJzdGFnaW5nIjoiZmFsc2UiLCJ2aXNpYmlsaXR5LWFsbG93LWludGVybmFsIjoiZmFsc2UiLCJ2aXNpYmlsaXR5LWFsbG93LXByaXZhdGUiOiJmYWxzZSIsInZpc2liaWxpdHktYWxsb3ctcHVibGljIjoidHJ1ZSJ9LCJkZWZhdWx0X2JyYW5jaCI6ImRldmVsb3AiLCJkZXBsb3ltZW50c191cmwiOiJodHRwczovL2FwaS5naXRodWIuY29tL3JlcG9zL2F3cy1wb3dlcnRvb2xzL3Bvd2VydG9vbHMtbGFtYmRhLXB5dGhvbi9kZXBsb3ltZW50cyIsImRlc2NyaXB0aW9uIjoiQSBkZXZlbG9wZXIgdG9vbGtpdCB0byBpbXBsZW1lbnQgU2VydmVybGVzcyBiZXN0IHByYWN0aWNlcyBhbmQgaW5jcmVhc2UgZGV2ZWxvcGVyIHZlbG9jaXR5LiIsImRpc2FibGVkIjpmYWxzZSwiZG93bmxvYWRzX3VybCI6Imh0dHBzOi8vYXBpLmdpdGh1Yi5jb20vcmVwb3MvYXdzLXBvd2VydG9vbHMvcG93ZXJ0b29scy1sYW1iZGEtcHl0aG9uL2Rvd25sb2FkcyIsImV2ZW50c191cmwiOiJodHRwczovL2FwaS5naXRodWIuY29tL3JlcG9zL2F3cy1wb3dlcnRvb2xzL3Bvd2VydG9vbHMtbGFtYmRhLXB5dGhvbi9ldmVudHMiLCJmb3JrIjpmYWxzZSwiZm9ya3MiOjQ0NCwiZm9ya3NfY291bnQiOjQ0NCwiZm9ya3NfdXJsIjoiaHR0cHM6Ly9hcGkuZ2l0aHViLmNvbS9yZXBvcy9hd3MtcG93ZXJ0b29scy9wb3dlcnRvb2xzLWxhbWJkYS1weXRob24vZm9ya3MiLCJmdWxsX25hbWUiOiJhd3MtcG93ZXJ0b29scy9wb3dlcnRvb2xzLWxhbWJkYS1weXRob24iLCJnaXRfY29tbWl0c191cmwiOiJodHRwczovL2FwaS5naXRodWIuY29tL3JlcG9zL2F3cy1wb3dlcnRvb2xzL3Bvd2VydG9vbHMtbGFtYmRhLXB5dGhvbi9naXQvY29tbWl0c3svc2hhfSIsImdpdF9yZWZzX3VybCI6Imh0dHBzOi8vYXBpLmdpdGh1Yi5jb20vcmVwb3MvYXdzLXBvd2VydG9vbHMvcG93ZXJ0b29scy1sYW1iZGEtcHl0aG9uL2dpdC9yZWZzey9zaGF9IiwiZ2l0X3RhZ3NfdXJsIjoiaHR0cHM6Ly9hcGkuZ2l0aHViLmNvbS9yZXBvcy9hd3MtcG93ZXJ0b29scy9wb3dlcnRvb2xzLWxhbWJkYS1weXRob24vZ2l0L3RhZ3N7L3NoYX0iLCJnaXRfdXJsIjoiZ2l0Oi8vZ2l0aHViLmNvbS9hd3MtcG93ZXJ0b29scy9wb3dlcnRvb2xzLWxhbWJkYS1weXRob24uZ2l0IiwiaGFzX2Rpc2N1c3Npb25zIjp0cnVlLCJoYXNfZG93bmxvYWRzIjp0cnVlLCJoYXNfaXNzdWVzIjp0cnVlLCJoYXNfcGFnZXMiOmZhbHNlLCJoYXNfcHJvamVjdHMiOnRydWUsImhhc193aWtpIjpmYWxzZSwiaG9tZXBhZ2UiOiJodHRwczovL2RvY3MucG93ZXJ0b29scy5hd3MuZGV2L2xhbWJkYS9weXRob24vbGF0ZXN0LyIsImhvb2tzX3VybCI6Imh0dHBzOi8vYXBpLmdpdGh1Yi5jb20vcmVwb3MvYXdzLXBvd2VydG9vbHMvcG93ZXJ0b29scy1sYW1iZGEtcHl0aG9uL2hvb2tzIiwiaHRtbF91cmwiOiJodHRwczovL2dpdGh1Yi5jb20vYXdzLXBvd2VydG9vbHMvcG93ZXJ0b29scy1sYW1iZGEtcHl0aG9uIiwiaWQiOjIyMTkxOTM3OSwiaXNfdGVtcGxhdGUiOmZhbHNlLCJpc3N1ZV9jb21tZW50X3VybCI6Imh0dHBzOi8vYXBpLmdpdGh1Yi5jb20vcmVwb3MvYXdzLXBvd2VydG9vbHMvcG93ZXJ0b29scy1sYW1iZGEtcHl0aG9uL2lzc3Vlcy9jb21tZW50c3svbnVtYmVyfSIsImlzc3VlX2V2ZW50c191cmwiOiJodHRwczovL2FwaS5naXRodWIuY29tL3JlcG9zL2F3cy1wb3dlcnRvb2xzL3Bvd2VydG9vbHMtbGFtYmRhLXB5dGhvbi9pc3N1ZXMvZXZlbnRzey9udW1iZXJ9IiwiaXNzdWVzX3VybCI6Imh0dHBzOi8vYXBpLmdpdGh1Yi5jb20vcmVwb3MvYXdzLXBvd2VydG9vbHMvcG93ZXJ0b29scy1sYW1iZGEtcHl0aG9uL2lzc3Vlc3svbnVtYmVyfSIsImtleXNfdXJsIjoiaHR0cHM6Ly9hcGkuZ2l0aHViLmNvbS9yZXBvcy9hd3MtcG93ZXJ0b29scy9wb3dlcnRvb2xzLWxhbWJkYS1weXRob24va2V5c3sva2V5X2lkfSIsImxhYmVsc191cmwiOiJodHRwczovL2FwaS5naXRodWIuY29tL3JlcG9zL2F3cy1wb3dlcnRvb2xzL3Bvd2VydG9vbHMtbGFtYmRhLXB5dGhvbi9sYWJlbHN7L25hbWV9IiwibGFuZ3VhZ2UiOiJQeXRob24iLCJsYW5ndWFnZXNfdXJsIjoiaHR0cHM6Ly9hcGkuZ2l0aHViLmNvbS9yZXBvcy9hd3MtcG93ZXJ0b29scy9wb3dlcnRvb2xzLWxhbWJkYS1weXRob24vbGFuZ3VhZ2VzIiwibGljZW5zZSI6eyJrZXkiOiJtaXQtMCIsIm5hbWUiOiJNSVQgTm8gQXR0cmlidXRpb24iLCJub2RlX2lkIjoiTURjNlRHbGpaVzV6WlRReCIsInNwZHhfaWQiOiJNSVQtMCIsInVybCI6Imh0dHBzOi8vYXBpLmdpdGh1Yi5jb20vbGljZW5zZXMvbWl0LTAifSwibWVyZ2VzX3VybCI6Imh0dHBzOi8vYXBpLmdpdGh1Yi5jb20vcmVwb3MvYXdzLXBvd2VydG9vbHMvcG93ZXJ0b29scy1sYW1iZGEtcHl0aG9uL21lcmdlcyIsIm1pbGVzdG9uZXNfdXJsIjoiaHR0cHM6Ly9hcGkuZ2l0aHViLmNvbS9yZXBvcy9hd3MtcG93ZXJ0b29scy9wb3dlcnRvb2xzLWxhbWJkYS1weXRob24vbWlsZXN0b25lc3svbnVtYmVyfSIsIm1pcnJvcl91cmwiOm51bGwsIm5hbWUiOiJwb3dlcnRvb2xzLWxhbWJkYS1weXRob24iLCJub2RlX2lkIjoiTURFd09sSmxjRzl6YVhSdmNua3lNakU1TVRrek56az0iLCJub3RpZmljYXRpb25zX3VybCI6Imh0dHBzOi8vYXBpLmdpdGh1Yi5jb20vcmVwb3MvYXdzLXBvd2VydG9vbHMvcG93ZXJ0b29scy1sYW1iZGEtcHl0aG9uL25vdGlmaWNhdGlvbnN7P3NpbmNlLGFsbCxwYXJ0aWNpcGF0aW5nfSIsIm9wZW5faXNzdWVzIjo1OCwib3Blbl9pc3N1ZXNfY291bnQiOjU4LCJvd25lciI6eyJhdmF0YXJfdXJsIjoiaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzEyOTEyNzYzOD92PTQiLCJldmVudHNfdXJsIjoiaHR0cHM6Ly9hcGkuZ2l0aHViLmNvbS91c2Vycy9hd3MtcG93ZXJ0b29scy9ldmVudHN7L3ByaXZhY3l9IiwiZm9sbG93ZXJzX3VybCI6Imh0dHBzOi8vYXBpLmdpdGh1Yi5jb20vdXNlcnMvYXdzLXBvd2VydG9vbHMvZm9sbG93ZXJzIiwiZm9sbG93aW5nX3VybCI6Imh0dHBzOi8vYXBpLmdpdGh1Yi5jb20vdXNlcnMvYXdzLXBvd2VydG9vbHMvZm9sbG93aW5ney9vdGhlcl91c2VyfSIsImdpc3RzX3VybCI6Imh0dHBzOi8vYXBpLmdpdGh1Yi5jb20vdXNlcnMvYXdzLXBvd2VydG9vbHMvZ2lzdHN7L2dpc3RfaWR9IiwiZ3JhdmF0YXJfaWQiOiIiLCJodG1sX3VybCI6Imh0dHBzOi8vZ2l0aHViLmNvbS9hd3MtcG93ZXJ0b29scyIsImlkIjoxMjkxMjc2MzgsImxvZ2luIjoiYXdzLXBvd2VydG9vbHMiLCJub2RlX2lkIjoiT19rZ0RPQjdKVTFnIiwib3JnYW5pemF0aW9uc191cmwiOiJodHRwczovL2FwaS5naXRodWIuY29tL3VzZXJzL2F3cy1wb3dlcnRvb2xzL29yZ3MiLCJyZWNlaXZlZF9ldmVudHNfdXJsIjoiaHR0cHM6Ly9hcGkuZ2l0aHViLmNvbS91c2Vycy9hd3MtcG93ZXJ0b29scy9yZWNlaXZlZF9ldmVudHMiLCJyZXBvc191cmwiOiJodHRwczovL2FwaS5naXRodWIuY29tL3VzZXJzL2F3cy1wb3dlcnRvb2xzL3JlcG9zIiwic2l0ZV9hZG1pbiI6ZmFsc2UsInN0YXJyZWRfdXJsIjoiaHR0cHM6Ly9hcGkuZ2l0aHViLmNvbS91c2Vycy9hd3MtcG93ZXJ0b29scy9zdGFycmVkey9vd25lcn17L3JlcG99Iiwic3Vic2NyaXB0aW9uc191cmwiOiJodHRwczovL2FwaS5naXRodWIuY29tL3VzZXJzL2F3cy1wb3dlcnRvb2xzL3N1YnNjcmlwdGlvbnMiLCJ0eXBlIjoiT3JnYW5pemF0aW9uIiwidXJsIjoiaHR0cHM6Ly9hcGkuZ2l0aHViLmNvbS91c2Vycy9hd3MtcG93ZXJ0b29scyIsInVzZXJfdmlld190eXBlIjoicHVibGljIn0sInByaXZhdGUiOmZhbHNlLCJwdWxsc191cmwiOiJodHRwczovL2FwaS5naXRodWIuY29tL3JlcG9zL2F3cy1wb3dlcnRvb2xzL3Bvd2VydG9vbHMtbGFtYmRhLXB5dGhvbi9wdWxsc3svbnVtYmVyfSIsInB1c2hlZF9hdCI6IjIwMjUtMDgtMTNUMDE6MzE6NDlaIiwicmVsZWFzZXNfdXJsIjoiaHR0cHM6Ly9hcGkuZ2l0aHViLmNvbS9yZXBvcy9hd3MtcG93ZXJ0b29scy9wb3dlcnRvb2xzLWxhbWJkYS1weXRob24vcmVsZWFzZXN7L2lkfSIsInNpemUiOjEzMDU4Miwic3NoX3VybCI6ImdpdEBnaXRodWIuY29tOmF3cy1wb3dlcnRvb2xzL3Bvd2VydG9vbHMtbGFtYmRhLXB5dGhvbi5naXQiLCJzdGFyZ2F6ZXJzX2NvdW50IjozMTE5LCJzdGFyZ2F6ZXJzX3VybCI6Imh0dHBzOi8vYXBpLmdpdGh1Yi5jb20vcmVwb3MvYXdzLXBvd2VydG9vbHMvcG93ZXJ0b29scy1sYW1iZGEtcHl0aG9uL3N0YXJnYXplcnMiLCJzdGF0dXNlc191cmwiOiJodHRwczovL2FwaS5naXRodWIuY29tL3JlcG9zL2F3cy1wb3dlcnRvb2xzL3Bvd2VydG9vbHMtbGFtYmRhLXB5dGhvbi9zdGF0dXNlcy97c2hhfSIsInN1YnNjcmliZXJzX3VybCI6Imh0dHBzOi8vYXBpLmdpdGh1Yi5jb20vcmVwb3MvYXdzLXBvd2VydG9vbHMvcG93ZXJ0b29scy1sYW1iZGEtcHl0aG9uL3N1YnNjcmliZXJzIiwic3Vic2NyaXB0aW9uX3VybCI6Imh0dHBzOi8vYXBpLmdpdGh1Yi5jb20vcmVwb3MvYXdzLXBvd2VydG9vbHMvcG93ZXJ0b29scy1sYW1iZGEtcHl0aG9uL3N1YnNjcmlwdGlvbiIsInN2bl91cmwiOiJodHRwczovL2dpdGh1Yi5jb20vYXdzLXBvd2VydG9vbHMvcG93ZXJ0b29scy1sYW1iZGEtcHl0aG9uIiwidGFnc191cmwiOiJodHRwczovL2FwaS5naXRodWIuY29tL3JlcG9zL2F3cy1wb3dlcnRvb2xzL3Bvd2VydG9vbHMtbGFtYmRhLXB5dGhvbi90YWdzIiwidGVhbXNfdXJsIjoiaHR0cHM6Ly9hcGkuZ2l0aHViLmNvbS9yZXBvcy9hd3MtcG93ZXJ0b29scy9wb3dlcnRvb2xzLWxhbWJkYS1weXRob24vdGVhbXMiLCJ0b3BpY3MiOlsiYXdzIiwiYXdzLWxhbWJkYSIsImxhbWJkYSIsInB5dGhvbiIsInNlcnZlcmxlc3MiXSwidHJlZXNfdXJsIjoiaHR0cHM6Ly9hcGkuZ2l0aHViLmNvbS9yZXBvcy9hd3MtcG93ZXJ0b29scy9wb3dlcnRvb2xzLWxhbWJkYS1weXRob24vZ2l0L3RyZWVzey9zaGF9IiwidXBkYXRlZF9hdCI6IjIwMjUtMDgtMTJUMTA6MDY6NDRaIiwidXJsIjoiaHR0cHM6Ly9hcGkuZ2l0aHViLmNvbS9yZXBvcy9hd3MtcG93ZXJ0b29scy9wb3dlcnRvb2xzLWxhbWJkYS1weXRob24iLCJ2aXNpYmlsaXR5IjoicHVibGljIiwid2F0Y2hlcnMiOjMxMTksIndhdGNoZXJzX2NvdW50IjozMTE5LCJ3ZWJfY29tbWl0X3NpZ25vZmZfcmVxdWlyZWQiOnRydWV9LCJzY2hlZHVsZSI6IjAgOCAqICogMS01Iiwid29ya2Zsb3ciOiIuZ2l0aHViL3dvcmtmbG93cy9wcmUtcmVsZWFzZS55bWwifSwiZ2l0aHViX2hlYWRfcmVmIjoiIiwiZ2l0aHViX3JlZiI6InJlZnMvaGVhZHMvZGV2ZWxvcCIsImdpdGh1Yl9yZWZfdHlwZSI6ImJyYW5jaCIsImdpdGh1Yl9yZXBvc2l0b3J5X2lkIjoiMjIxOTE5Mzc5IiwiZ2l0aHViX3JlcG9zaXRvcnlfb3duZXIiOiJhd3MtcG93ZXJ0b29scyIsImdpdGh1Yl9yZXBvc2l0b3J5X293bmVyX2lkIjoiMTI5MTI3NjM4IiwiZ2l0aHViX3J1bl9hdHRlbXB0IjoiMSIsImdpdGh1Yl9ydW5faWQiOiIxNjkzMTI2MjM4MiIsImdpdGh1Yl9ydW5fbnVtYmVyIjoiMzA1IiwiZ2l0aHViX3NoYTEiOiI0Y2I1MWNhNGY5OWQ2MGVkODA5NzExZmI0NTMzYTkyNWY2MTI5YTY3In19LCJtZXRhZGF0YSI6eyJidWlsZEludm9jYXRpb25JRCI6IjE2OTMxMjYyMzgyLTEiLCJjb21wbGV0ZW5lc3MiOnsicGFyYW1ldGVycyI6dHJ1ZSwiZW52aXJvbm1lbnQiOmZhbHNlLCJtYXRlcmlhbHMiOmZhbHNlfSwicmVwcm9kdWNpYmxlIjpmYWxzZX0sIm1hdGVyaWFscyI6W3sidXJpIjoiZ2l0K2h0dHBzOi8vZ2l0aHViLmNvbS9hd3MtcG93ZXJ0b29scy9wb3dlcnRvb2xzLWxhbWJkYS1weXRob25AcmVmcy9oZWFkcy9kZXZlbG9wIiwiZGlnZXN0Ijp7InNoYTEiOiI0Y2I1MWNhNGY5OWQ2MGVkODA5NzExZmI0NTMzYTkyNWY2MTI5YTY3In19XX19", "payloadType":"application/vnd.in-toto+json", "signatures":[{"sig":"MEYCIQCSa2+gkpAJ8gRXSm04hKNdPtu2/i1d6rlcfZ254HSi2wIhALNsPm52dyK56zd6pzO3PZQAQ8tiXSyLeSb670eYwsd5"}]}} \ No newline at end of file diff --git a/provenance/3.19.1a1/multiple.intoto.jsonl b/provenance/3.19.1a1/multiple.intoto.jsonl new file mode 100644 index 00000000000..5becedd8765 --- /dev/null +++ b/provenance/3.19.1a1/multiple.intoto.jsonl @@ -0,0 +1 @@ +{"mediaType":"application/vnd.dev.sigstore.bundle.v0.3+json", "verificationMaterial":{"certificate":{"rawBytes":"MIIHZjCCBuygAwIBAgIUd4NNvYeqq+tAveEo+j8MZKbxaykwCgYIKoZIzj0EAwMwNzEVMBMGA1UEChMMc2lnc3RvcmUuZGV2MR4wHAYDVQQDExVzaWdzdG9yZS1pbnRlcm1lZGlhdGUwHhcNMjUwODE0MDgwODIwWhcNMjUwODE0MDgxODIwWjAAMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE84g3GSvdZnhPQjnM9C7u7+6D2enspv587kbRFgPhz8MJsd1mDRFMCBXu/y76BbA7HKBjC4dFswhqjNNdJY9wiqOCBgswggYHMA4GA1UdDwEB/wQEAwIHgDATBgNVHSUEDDAKBggrBgEFBQcDAzAdBgNVHQ4EFgQUg52TSwrEC/CNWU+ryiHaidypZEswHwYDVR0jBBgwFoAU39Ppz1YkEZb5qNjpKFWixi4YZD8wgYQGA1UdEQEB/wR6MHiGdmh0dHBzOi8vZ2l0aHViLmNvbS9zbHNhLWZyYW1ld29yay9zbHNhLWdpdGh1Yi1nZW5lcmF0b3IvLmdpdGh1Yi93b3JrZmxvd3MvZ2VuZXJhdG9yX2dlbmVyaWNfc2xzYTMueW1sQHJlZnMvdGFncy92Mi4xLjAwOQYKKwYBBAGDvzABAQQraHR0cHM6Ly90b2tlbi5hY3Rpb25zLmdpdGh1YnVzZXJjb250ZW50LmNvbTAWBgorBgEEAYO/MAECBAhzY2hlZHVsZTA2BgorBgEEAYO/MAEDBCgwMDE0YWEwMzA1OGNlNDUxYmM4MDI1MmQyMWM5ODYwODEzMDUxYTMxMBkGCisGAQQBg78wAQQEC1ByZS1SZWxlYXNlMDUGCisGAQQBg78wAQUEJ2F3cy1wb3dlcnRvb2xzL3Bvd2VydG9vbHMtbGFtYmRhLXB5dGhvbjAgBgorBgEEAYO/MAEGBBJyZWZzL2hlYWRzL2RldmVsb3AwOwYKKwYBBAGDvzABCAQtDCtodHRwczovL3Rva2VuLmFjdGlvbnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tMIGGBgorBgEEAYO/MAEJBHgMdmh0dHBzOi8vZ2l0aHViLmNvbS9zbHNhLWZyYW1ld29yay9zbHNhLWdpdGh1Yi1nZW5lcmF0b3IvLmdpdGh1Yi93b3JrZmxvd3MvZ2VuZXJhdG9yX2dlbmVyaWNfc2xzYTMueW1sQHJlZnMvdGFncy92Mi4xLjAwOAYKKwYBBAGDvzABCgQqDChmN2RkOGM1NGMyMDY3YmFmYzEyY2E3YTU1NTk1ZDVlZTliNzUyMDRhMB0GCisGAQQBg78wAQsEDwwNZ2l0aHViLWhvc3RlZDBKBgorBgEEAYO/MAEMBDwMOmh0dHBzOi8vZ2l0aHViLmNvbS9hd3MtcG93ZXJ0b29scy9wb3dlcnRvb2xzLWxhbWJkYS1weXRob24wOAYKKwYBBAGDvzABDQQqDCgwMDE0YWEwMzA1OGNlNDUxYmM4MDI1MmQyMWM5ODYwODEzMDUxYTMxMCIGCisGAQQBg78wAQ4EFAwScmVmcy9oZWFkcy9kZXZlbG9wMBkGCisGAQQBg78wAQ8ECwwJMjIxOTE5Mzc5MDEGCisGAQQBg78wARAEIwwhaHR0cHM6Ly9naXRodWIuY29tL2F3cy1wb3dlcnRvb2xzMBkGCisGAQQBg78wAREECwwJMTI5MTI3NjM4MH8GCisGAQQBg78wARIEcQxvaHR0cHM6Ly9naXRodWIuY29tL2F3cy1wb3dlcnRvb2xzL3Bvd2VydG9vbHMtbGFtYmRhLXB5dGhvbi8uZ2l0aHViL3dvcmtmbG93cy9wcmUtcmVsZWFzZS55bWxAcmVmcy9oZWFkcy9kZXZlbG9wMDgGCisGAQQBg78wARMEKgwoMDAxNGFhMDMwNThjZTQ1MWJjODAyNTJkMjFjOTg2MDgxMzA1MWEzMTAYBgorBgEEAYO/MAEUBAoMCHNjaGVkdWxlMG4GCisGAQQBg78wARUEYAxeaHR0cHM6Ly9naXRodWIuY29tL2F3cy1wb3dlcnRvb2xzL3Bvd2VydG9vbHMtbGFtYmRhLXB5dGhvbi9hY3Rpb25zL3J1bnMvMTY5NTk0NDk0NDEvYXR0ZW1wdHMvMTAWBgorBgEEAYO/MAEWBAgMBnB1YmxpYzCBigYKKwYBBAHWeQIEAgR8BHoAeAB2AN09MGrGxxEyYxkeHJlnNwKiSl643jyt/4eKcoAvKe6OAAABmKefcRgAAAQDAEcwRQIhAO5lbairb3gXsvvfM1fU/vpEZcWamq+kiqw2iLFhgpB4AiAEukPDKHNHno2zWHltq2Hk3cw1ckWUKc9PTqIHoERPqDAKBggqhkjOPQQDAwNoADBlAjEA4rpcbgel6R4Y0dC3wrIE1Q4cFRosmo69f+daxhCT5mILXvOsaRNROCb8pyOV8xK3AjAYio/sKG9Cb8T2QOCU1QDhcvyie69PwR+u0X2Lp8tlRzvc3c44Tyy2YUsbJTGLoZA="}, "tlogEntries":[{"logIndex":"393524547", "logId":{"keyId":"wNI9atQGlz+VWfO6LRygH4QUfY/8W4RFwiT5i5WRgB0="}, "kindVersion":{"kind":"dsse", "version":"0.0.1"}, "integratedTime":"1755158901", "inclusionPromise":{"signedEntryTimestamp":"MEUCIAkidrP20Ow+gSIPcuHolzMOXVWN6QWJQ9R5+o0UWjhXAiEA4NpWc4Eo56eRvS784rAxvaJDzZbxnRvGSw0qabb8MFw="}, "inclusionProof":{"logIndex":"271620285", "rootHash":"7yHZwAzcN/03rV7gq25B8odmy+C40tlIymsDYN1mrx4=", "treeSize":"271620286", "hashes":["nlwS8HL3UJTJHeUadVo8wOQGdckTi467C6X6kh92A9k=", "BgSyMeqEB+Ab/yYMZjzIMJJdRHL2P/5QNjU9D+kExNw=", "9qo7Rv4PazUXLDohew/8EoObzzB/R3TgUwUXffInuLY=", "TOsemJV3DFrQQLPrTAhR5LJX5mtBw9aBpCnkWS58O+s=", "RjA2RHNmjHRrHLvU0EnBCFNHbuxbwiAlM4JIRB5vfFw=", "i2EsK603brxvP2TA6VHM7BAaEbx6aSRPck78k/MjJxQ=", "JjdBjTK1CPWs0olTjbjHNu0V30vfKTZsXnwOmt+W0EU=", "nLBKBS/mxPaS1zY/tm/ylI/5SnSQyqYKSWvPK4s+xsM=", "1J/BdDoFeqTRr9EkXqyMxGCWjdzwE6E8zG0wuwM+7Wg=", "6QfFjG3kfyjFx5PdzVrWBdbNza9Mf4ldecvoXhR3Ip8=", "RllwumeGwAfTxo/zlW3B2deC36+2Lu0FY/hP+QL2aT8=", "vS7O4ozHIQZJWBiov+mkpI27GE8zAmVCEkRcP3NDyNE="], "checkpoint":{"envelope":"rekor.sigstore.dev - 1193050959916656506\n271620286\n7yHZwAzcN/03rV7gq25B8odmy+C40tlIymsDYN1mrx4=\n\n— rekor.sigstore.dev wNI9ajBFAiEAkjSBymbnZXnBqOfQuFfDyd1CGnp9lw6rHqpnyeEJX8ECIFJLOzuVS32IEi+JFyF8n5pBXDyx0VLHKDbQYQx4pqgR\n"}}, "canonicalizedBody":"eyJhcGlWZXJzaW9uIjoiMC4wLjEiLCJraW5kIjoiZHNzZSIsInNwZWMiOnsiZW52ZWxvcGVIYXNoIjp7ImFsZ29yaXRobSI6InNoYTI1NiIsInZhbHVlIjoiODY5ZTk4ODIwMzMwMWQwNmU5YjFkNTA0YmRhYzQ0NGRiZjE0NTE3MGVhNGZjZmYyNjVlYjk5ZDlhMDkwNjliOSJ9LCJwYXlsb2FkSGFzaCI6eyJhbGdvcml0aG0iOiJzaGEyNTYiLCJ2YWx1ZSI6IjUwYzZmOTc4MGVjZmZjYWZlYWYyY2VjMTE4Mjk2MmQ0NDNmNjNlOTJjYzE0ZjIyZDY1ZjkyOTNmMTM1MGI2ZDAifSwic2lnbmF0dXJlcyI6W3sic2lnbmF0dXJlIjoiTUVZQ0lRREFEWEJydkJSYUlHV0NWWm42bUllMFdCYlNZRXlwVnJITloyalFyYUtLMVFJaEFQaU8rVjY5eGw2V2JabUgrbVY3Sk8xdnIvSDhMczJweWN4Wm03azkvbjFHIiwidmVyaWZpZXIiOiJMUzB0TFMxQ1JVZEpUaUJEUlZKVVNVWkpRMEZVUlMwdExTMHRDazFKU1VoYWFrTkRRblY1WjBGM1NVSkJaMGxWWkRST1RuWlpaWEZ4SzNSQmRtVkZieXRxT0UxYVMySjRZWGxyZDBObldVbExiMXBKZW1vd1JVRjNUWGNLVG5wRlZrMUNUVWRCTVZWRlEyaE5UV015Ykc1ak0xSjJZMjFWZFZwSFZqSk5ValIzU0VGWlJGWlJVVVJGZUZaNllWZGtlbVJIT1hsYVV6RndZbTVTYkFwamJURnNXa2RzYUdSSFZYZElhR05PVFdwVmQwOUVSVEJOUkdkM1QwUkpkMWRvWTA1TmFsVjNUMFJGTUUxRVozaFBSRWwzVjJwQlFVMUdhM2RGZDFsSUNrdHZXa2w2YWpCRFFWRlpTVXR2V2tsNmFqQkVRVkZqUkZGblFVVTROR2N6UjFOMlpGcHVhRkJSYW01Tk9VTTNkVGNyTmtReVpXNXpjSFkxT0RkcllsSUtSbWRRYUhvNFRVcHpaREZ0UkZKR1RVTkNXSFV2ZVRjMlFtSkJOMGhMUW1wRE5HUkdjM2RvY1dwT1RtUktXVGwzYVhGUFEwSm5jM2RuWjFsSVRVRTBSd3BCTVZWa1JIZEZRaTkzVVVWQmQwbElaMFJCVkVKblRsWklVMVZGUkVSQlMwSm5aM0pDWjBWR1FsRmpSRUY2UVdSQ1owNVdTRkUwUlVablVWVm5OVEpVQ2xOM2NrVkRMME5PVjFVcmNubHBTR0ZwWkhsd1drVnpkMGgzV1VSV1VqQnFRa0puZDBadlFWVXpPVkJ3ZWpGWmEwVmFZalZ4VG1wd1MwWlhhWGhwTkZrS1drUTRkMmRaVVVkQk1WVmtSVkZGUWk5M1VqWk5TR2xIWkcxb01HUklRbnBQYVRoMldqSnNNR0ZJVm1sTWJVNTJZbE01ZW1KSVRtaE1WMXA1V1ZjeGJBcGtNamw1WVhrNWVtSklUbWhNVjJSd1pFZG9NVmxwTVc1YVZ6VnNZMjFHTUdJelNYWk1iV1J3WkVkb01WbHBPVE5pTTBweVdtMTRkbVF6VFhaYU1sWjFDbHBZU21oa1J6bDVXREprYkdKdFZubGhWMDVtWXpKNGVsbFVUWFZsVnpGelVVaEtiRnB1VFhaa1IwWnVZM2s1TWsxcE5IaE1ha0YzVDFGWlMwdDNXVUlLUWtGSFJIWjZRVUpCVVZGeVlVaFNNR05JVFRaTWVUa3dZakowYkdKcE5XaFpNMUp3WWpJMWVreHRaSEJrUjJneFdXNVdlbHBZU21waU1qVXdXbGMxTUFwTWJVNTJZbFJCVjBKbmIzSkNaMFZGUVZsUEwwMUJSVU5DUVdoNldUSm9iRnBJVm5OYVZFRXlRbWR2Y2tKblJVVkJXVTh2VFVGRlJFSkRaM2ROUkVVd0NsbFhSWGROZWtFeFQwZE9iRTVFVlhoWmJVMDBUVVJKTVUxdFVYbE5WMDAxVDBSWmQwOUVSWHBOUkZWNFdWUk5lRTFDYTBkRGFYTkhRVkZSUW1jM09IY0tRVkZSUlVNeFFubGFVekZUV2xkNGJGbFlUbXhOUkZWSFEybHpSMEZSVVVKbk56aDNRVkZWUlVveVJqTmplVEYzWWpOa2JHTnVVblppTW5oNlRETkNkZ3BrTWxaNVpFYzVkbUpJVFhSaVIwWjBXVzFTYUV4WVFqVmtSMmgyWW1wQlowSm5iM0pDWjBWRlFWbFBMMDFCUlVkQ1FrcDVXbGRhZWt3eWFHeFpWMUo2Q2t3eVVteGtiVlp6WWpOQmQwOTNXVXRMZDFsQ1FrRkhSSFo2UVVKRFFWRjBSRU4wYjJSSVVuZGplbTkyVEROU2RtRXlWblZNYlVacVpFZHNkbUp1VFhVS1dqSnNNR0ZJVm1sa1dFNXNZMjFPZG1KdVVteGlibEYxV1RJNWRFMUpSMGRDWjI5eVFtZEZSVUZaVHk5TlFVVktRa2huVFdSdGFEQmtTRUo2VDJrNGRncGFNbXd3WVVoV2FVeHRUblppVXpsNllraE9hRXhYV25sWlZ6RnNaREk1ZVdGNU9YcGlTRTVvVEZka2NHUkhhREZaYVRGdVdsYzFiR050UmpCaU0wbDJDa3h0WkhCa1IyZ3hXV2s1TTJJelNuSmFiWGgyWkROTmRsb3lWblZhV0Vwb1pFYzVlVmd5Wkd4aWJWWjVZVmRPWm1NeWVIcFpWRTExWlZjeGMxRklTbXdLV201TmRtUkhSbTVqZVRreVRXazBlRXhxUVhkUFFWbExTM2RaUWtKQlIwUjJla0ZDUTJkUmNVUkRhRzFPTWxKclQwZE5NVTVIVFhsTlJGa3pXVzFHYlFwWmVrVjVXVEpGTTFsVVZURk9WR3N4V2tSV2JGcFViR2xPZWxWNVRVUlNhRTFDTUVkRGFYTkhRVkZSUW1jM09IZEJVWE5GUkhkM1Rsb3liREJoU0ZacENreFhhSFpqTTFKc1drUkNTMEpuYjNKQ1owVkZRVmxQTDAxQlJVMUNSSGROVDIxb01HUklRbnBQYVRoMldqSnNNR0ZJVm1sTWJVNTJZbE01YUdRelRYUUtZMGM1TTFwWVNqQmlNamx6WTNrNWQySXpaR3hqYmxKMllqSjRla3hYZUdoaVYwcHJXVk14ZDJWWVVtOWlNalIzVDBGWlMwdDNXVUpDUVVkRWRucEJRZ3BFVVZGeFJFTm5kMDFFUlRCWlYwVjNUWHBCTVU5SFRteE9SRlY0V1cxTk5FMUVTVEZOYlZGNVRWZE5OVTlFV1hkUFJFVjZUVVJWZUZsVVRYaE5RMGxIQ2tOcGMwZEJVVkZDWnpjNGQwRlJORVZHUVhkVFkyMVdiV041T1c5YVYwWnJZM2s1YTFwWVdteGlSemwzVFVKclIwTnBjMGRCVVZGQ1p6YzRkMEZST0VVS1EzZDNTazFxU1hoUFZFVTFUWHBqTlUxRVJVZERhWE5IUVZGUlFtYzNPSGRCVWtGRlNYZDNhR0ZJVWpCalNFMDJUSGs1Ym1GWVVtOWtWMGwxV1RJNWRBcE1Na1l6WTNreGQySXpaR3hqYmxKMllqSjRlazFDYTBkRGFYTkhRVkZSUW1jM09IZEJVa1ZGUTNkM1NrMVVTVFZOVkVrelRtcE5ORTFJT0VkRGFYTkhDa0ZSVVVKbk56aDNRVkpKUldOUmVIWmhTRkl3WTBoTk5reDVPVzVoV0ZKdlpGZEpkVmt5T1hSTU1rWXpZM2t4ZDJJelpHeGpibEoyWWpKNGVrd3pRbllLWkRKV2VXUkhPWFppU0UxMFlrZEdkRmx0VW1oTVdFSTFaRWRvZG1KcE9IVmFNbXd3WVVoV2FVd3paSFpqYlhSdFlrYzVNMk41T1hkamJWVjBZMjFXY3dwYVYwWjZXbE0xTldKWGVFRmpiVlp0WTNrNWIxcFhSbXRqZVRscldsaGFiR0pIT1hkTlJHZEhRMmx6UjBGUlVVSm5OemgzUVZKTlJVdG5kMjlOUkVGNENrNUhSbWhOUkUxM1RsUm9hbHBVVVRGTlYwcHFUMFJCZVU1VVNtdE5ha1pxVDFSbk1rMUVaM2hOZWtFeFRWZEZlazFVUVZsQ1oyOXlRbWRGUlVGWlR5OEtUVUZGVlVKQmIwMURTRTVxWVVkV2EyUlhlR3hOUnpSSFEybHpSMEZSVVVKbk56aDNRVkpWUlZsQmVHVmhTRkl3WTBoTk5reDVPVzVoV0ZKdlpGZEpkUXBaTWpsMFRESkdNMk41TVhkaU0yUnNZMjVTZG1JeWVIcE1NMEoyWkRKV2VXUkhPWFppU0UxMFlrZEdkRmx0VW1oTVdFSTFaRWRvZG1KcE9XaFpNMUp3Q21JeU5YcE1NMG94WW01TmRrMVVXVFZPVkdzd1RrUnJNRTVFUlhaWldGSXdXbGN4ZDJSSVRYWk5WRUZYUW1kdmNrSm5SVVZCV1U4dlRVRkZWMEpCWjAwS1FtNUNNVmx0ZUhCWmVrTkNhV2RaUzB0M1dVSkNRVWhYWlZGSlJVRm5VamhDU0c5QlpVRkNNa0ZPTURsTlIzSkhlSGhGZVZsNGEyVklTbXh1VG5kTGFRcFRiRFkwTTJwNWRDODBaVXRqYjBGMlMyVTJUMEZCUVVKdFMyVm1ZMUpuUVVGQlVVUkJSV04zVWxGSmFFRlBOV3hpWVdseVlqTm5XSE4yZG1aTk1XWlZDaTkyY0VWYVkxZGhiWEVyYTJseGR6SnBURVpvWjNCQ05FRnBRVVYxYTFCRVMwaE9TRzV2TW5wWFNHeDBjVEpJYXpOamR6RmphMWRWUzJNNVVGUnhTVWdLYjBWU1VIRkVRVXRDWjJkeGFHdHFUMUJSVVVSQmQwNXZRVVJDYkVGcVJVRTBjbkJqWW1kbGJEWlNORmt3WkVNemQzSkpSVEZSTkdOR1VtOXpiVzgyT1FwbUsyUmhlR2hEVkRWdFNVeFlkazl6WVZKT1VrOURZamh3ZVU5V09IaExNMEZxUVZscGJ5OXpTMGM1UTJJNFZESlJUME5WTVZGRWFHTjJlV2xsTmpsUUNuZFNLM1V3V0RKTWNEaDBiRko2ZG1Nell6UTBWSGw1TWxsVmMySktWRWRNYjFwQlBRb3RMUzB0TFVWT1JDQkRSVkpVU1VaSlEwRlVSUzB0TFMwdENnPT0ifV19fQ=="}]}, "dsseEnvelope":{"payload":"eyJfdHlwZSI6Imh0dHBzOi8vaW4tdG90by5pby9TdGF0ZW1lbnQvdjAuMSIsInByZWRpY2F0ZVR5cGUiOiJodHRwczovL3Nsc2EuZGV2L3Byb3ZlbmFuY2UvdjAuMiIsInN1YmplY3QiOlt7Im5hbWUiOiIuL2F3c19sYW1iZGFfcG93ZXJ0b29scy0zLjE5LjFhMS1weTMtbm9uZS1hbnkud2hsIiwiZGlnZXN0Ijp7InNoYTI1NiI6Ijc1YzU5MmRlN2E5YmQ2MDQzMzdlMTU1YmI5ZmY1NzIwOThiNGM3MjlmODI5NGU5ZmMwYzk0NGNiOTI5ZTA0OTUifX0seyJuYW1lIjoiLi9hd3NfbGFtYmRhX3Bvd2VydG9vbHMtMy4xOS4xYTEudGFyLmd6IiwiZGlnZXN0Ijp7InNoYTI1NiI6ImJkNzM3OTFhYjJlYWQ3YWYwMGFhY2Q0ZmEwZmJiYzk0NDU0NDJkMzQxYWEyMzYyNTAxZmQ3Zjk2YmMwYzYzYWMifX1dLCJwcmVkaWNhdGUiOnsiYnVpbGRlciI6eyJpZCI6Imh0dHBzOi8vZ2l0aHViLmNvbS9zbHNhLWZyYW1ld29yay9zbHNhLWdpdGh1Yi1nZW5lcmF0b3IvLmdpdGh1Yi93b3JrZmxvd3MvZ2VuZXJhdG9yX2dlbmVyaWNfc2xzYTMueW1sQHJlZnMvdGFncy92Mi4xLjAifSwiYnVpbGRUeXBlIjoiaHR0cHM6Ly9naXRodWIuY29tL3Nsc2EtZnJhbWV3b3JrL3Nsc2EtZ2l0aHViLWdlbmVyYXRvci9nZW5lcmljQHYxIiwiaW52b2NhdGlvbiI6eyJjb25maWdTb3VyY2UiOnsidXJpIjoiZ2l0K2h0dHBzOi8vZ2l0aHViLmNvbS9hd3MtcG93ZXJ0b29scy9wb3dlcnRvb2xzLWxhbWJkYS1weXRob25AcmVmcy9oZWFkcy9kZXZlbG9wIiwiZGlnZXN0Ijp7InNoYTEiOiIwMDE0YWEwMzA1OGNlNDUxYmM4MDI1MmQyMWM5ODYwODEzMDUxYTMxIn0sImVudHJ5UG9pbnQiOiIuZ2l0aHViL3dvcmtmbG93cy9wcmUtcmVsZWFzZS55bWwifSwicGFyYW1ldGVycyI6eyJ2YXJzIjp7fX0sImVudmlyb25tZW50Ijp7ImdpdGh1Yl9hY3RvciI6ImxlYW5kcm9kYW1hc2NlbmEiLCJnaXRodWJfYWN0b3JfaWQiOiI0Mjk1MTczIiwiZ2l0aHViX2Jhc2VfcmVmIjoiIiwiZ2l0aHViX2V2ZW50X25hbWUiOiJzY2hlZHVsZSIsImdpdGh1Yl9ldmVudF9wYXlsb2FkIjp7ImVudGVycHJpc2UiOnsiYXZhdGFyX3VybCI6Imh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vYi8xMjkwP3Y9NCIsImNyZWF0ZWRfYXQiOiIyMDE5LTExLTEzVDE4OjA1OjQxWiIsImRlc2NyaXB0aW9uIjoiIiwiaHRtbF91cmwiOiJodHRwczovL2dpdGh1Yi5jb20vZW50ZXJwcmlzZXMvYW1hem9uIiwiaWQiOjEyOTAsIm5hbWUiOiJBbWF6b24iLCJub2RlX2lkIjoiTURFd09rVnVkR1Z5Y0hKcGMyVXhNamt3Iiwic2x1ZyI6ImFtYXpvbiIsInVwZGF0ZWRfYXQiOiIyMDI1LTA4LTEyVDIwOjU5OjE0WiIsIndlYnNpdGVfdXJsIjoiaHR0cHM6Ly93d3cuYW1hem9uLmNvbS8ifSwib3JnYW5pemF0aW9uIjp7ImF2YXRhcl91cmwiOiJodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTI5MTI3NjM4P3Y9NCIsImRlc2NyaXB0aW9uIjoiIiwiZXZlbnRzX3VybCI6Imh0dHBzOi8vYXBpLmdpdGh1Yi5jb20vb3Jncy9hd3MtcG93ZXJ0b29scy9ldmVudHMiLCJob29rc191cmwiOiJodHRwczovL2FwaS5naXRodWIuY29tL29yZ3MvYXdzLXBvd2VydG9vbHMvaG9va3MiLCJpZCI6MTI5MTI3NjM4LCJpc3N1ZXNfdXJsIjoiaHR0cHM6Ly9hcGkuZ2l0aHViLmNvbS9vcmdzL2F3cy1wb3dlcnRvb2xzL2lzc3VlcyIsImxvZ2luIjoiYXdzLXBvd2VydG9vbHMiLCJtZW1iZXJzX3VybCI6Imh0dHBzOi8vYXBpLmdpdGh1Yi5jb20vb3Jncy9hd3MtcG93ZXJ0b29scy9tZW1iZXJzey9tZW1iZXJ9Iiwibm9kZV9pZCI6Ik9fa2dET0I3SlUxZyIsInB1YmxpY19tZW1iZXJzX3VybCI6Imh0dHBzOi8vYXBpLmdpdGh1Yi5jb20vb3Jncy9hd3MtcG93ZXJ0b29scy9wdWJsaWNfbWVtYmVyc3svbWVtYmVyfSIsInJlcG9zX3VybCI6Imh0dHBzOi8vYXBpLmdpdGh1Yi5jb20vb3Jncy9hd3MtcG93ZXJ0b29scy9yZXBvcyIsInVybCI6Imh0dHBzOi8vYXBpLmdpdGh1Yi5jb20vb3Jncy9hd3MtcG93ZXJ0b29scyJ9LCJyZXBvc2l0b3J5Ijp7ImFsbG93X2ZvcmtpbmciOnRydWUsImFyY2hpdmVfdXJsIjoiaHR0cHM6Ly9hcGkuZ2l0aHViLmNvbS9yZXBvcy9hd3MtcG93ZXJ0b29scy9wb3dlcnRvb2xzLWxhbWJkYS1weXRob24ve2FyY2hpdmVfZm9ybWF0fXsvcmVmfSIsImFyY2hpdmVkIjpmYWxzZSwiYXNzaWduZWVzX3VybCI6Imh0dHBzOi8vYXBpLmdpdGh1Yi5jb20vcmVwb3MvYXdzLXBvd2VydG9vbHMvcG93ZXJ0b29scy1sYW1iZGEtcHl0aG9uL2Fzc2lnbmVlc3svdXNlcn0iLCJibG9ic191cmwiOiJodHRwczovL2FwaS5naXRodWIuY29tL3JlcG9zL2F3cy1wb3dlcnRvb2xzL3Bvd2VydG9vbHMtbGFtYmRhLXB5dGhvbi9naXQvYmxvYnN7L3NoYX0iLCJicmFuY2hlc191cmwiOiJodHRwczovL2FwaS5naXRodWIuY29tL3JlcG9zL2F3cy1wb3dlcnRvb2xzL3Bvd2VydG9vbHMtbGFtYmRhLXB5dGhvbi9icmFuY2hlc3svYnJhbmNofSIsImNsb25lX3VybCI6Imh0dHBzOi8vZ2l0aHViLmNvbS9hd3MtcG93ZXJ0b29scy9wb3dlcnRvb2xzLWxhbWJkYS1weXRob24uZ2l0IiwiY29sbGFib3JhdG9yc191cmwiOiJodHRwczovL2FwaS5naXRodWIuY29tL3JlcG9zL2F3cy1wb3dlcnRvb2xzL3Bvd2VydG9vbHMtbGFtYmRhLXB5dGhvbi9jb2xsYWJvcmF0b3Jzey9jb2xsYWJvcmF0b3J9IiwiY29tbWVudHNfdXJsIjoiaHR0cHM6Ly9hcGkuZ2l0aHViLmNvbS9yZXBvcy9hd3MtcG93ZXJ0b29scy9wb3dlcnRvb2xzLWxhbWJkYS1weXRob24vY29tbWVudHN7L251bWJlcn0iLCJjb21taXRzX3VybCI6Imh0dHBzOi8vYXBpLmdpdGh1Yi5jb20vcmVwb3MvYXdzLXBvd2VydG9vbHMvcG93ZXJ0b29scy1sYW1iZGEtcHl0aG9uL2NvbW1pdHN7L3NoYX0iLCJjb21wYXJlX3VybCI6Imh0dHBzOi8vYXBpLmdpdGh1Yi5jb20vcmVwb3MvYXdzLXBvd2VydG9vbHMvcG93ZXJ0b29scy1sYW1iZGEtcHl0aG9uL2NvbXBhcmUve2Jhc2V9Li4ue2hlYWR9IiwiY29udGVudHNfdXJsIjoiaHR0cHM6Ly9hcGkuZ2l0aHViLmNvbS9yZXBvcy9hd3MtcG93ZXJ0b29scy9wb3dlcnRvb2xzLWxhbWJkYS1weXRob24vY29udGVudHMveytwYXRofSIsImNvbnRyaWJ1dG9yc191cmwiOiJodHRwczovL2FwaS5naXRodWIuY29tL3JlcG9zL2F3cy1wb3dlcnRvb2xzL3Bvd2VydG9vbHMtbGFtYmRhLXB5dGhvbi9jb250cmlidXRvcnMiLCJjcmVhdGVkX2F0IjoiMjAxOS0xMS0xNVQxMjoyNjoxMloiLCJjdXN0b21fcHJvcGVydGllcyI6eyJzdGFnaW5nIjoiZmFsc2UiLCJ2aXNpYmlsaXR5LWFsbG93LWludGVybmFsIjoiZmFsc2UiLCJ2aXNpYmlsaXR5LWFsbG93LXByaXZhdGUiOiJmYWxzZSIsInZpc2liaWxpdHktYWxsb3ctcHVibGljIjoidHJ1ZSJ9LCJkZWZhdWx0X2JyYW5jaCI6ImRldmVsb3AiLCJkZXBsb3ltZW50c191cmwiOiJodHRwczovL2FwaS5naXRodWIuY29tL3JlcG9zL2F3cy1wb3dlcnRvb2xzL3Bvd2VydG9vbHMtbGFtYmRhLXB5dGhvbi9kZXBsb3ltZW50cyIsImRlc2NyaXB0aW9uIjoiQSBkZXZlbG9wZXIgdG9vbGtpdCB0byBpbXBsZW1lbnQgU2VydmVybGVzcyBiZXN0IHByYWN0aWNlcyBhbmQgaW5jcmVhc2UgZGV2ZWxvcGVyIHZlbG9jaXR5LiIsImRpc2FibGVkIjpmYWxzZSwiZG93bmxvYWRzX3VybCI6Imh0dHBzOi8vYXBpLmdpdGh1Yi5jb20vcmVwb3MvYXdzLXBvd2VydG9vbHMvcG93ZXJ0b29scy1sYW1iZGEtcHl0aG9uL2Rvd25sb2FkcyIsImV2ZW50c191cmwiOiJodHRwczovL2FwaS5naXRodWIuY29tL3JlcG9zL2F3cy1wb3dlcnRvb2xzL3Bvd2VydG9vbHMtbGFtYmRhLXB5dGhvbi9ldmVudHMiLCJmb3JrIjpmYWxzZSwiZm9ya3MiOjQ0NCwiZm9ya3NfY291bnQiOjQ0NCwiZm9ya3NfdXJsIjoiaHR0cHM6Ly9hcGkuZ2l0aHViLmNvbS9yZXBvcy9hd3MtcG93ZXJ0b29scy9wb3dlcnRvb2xzLWxhbWJkYS1weXRob24vZm9ya3MiLCJmdWxsX25hbWUiOiJhd3MtcG93ZXJ0b29scy9wb3dlcnRvb2xzLWxhbWJkYS1weXRob24iLCJnaXRfY29tbWl0c191cmwiOiJodHRwczovL2FwaS5naXRodWIuY29tL3JlcG9zL2F3cy1wb3dlcnRvb2xzL3Bvd2VydG9vbHMtbGFtYmRhLXB5dGhvbi9naXQvY29tbWl0c3svc2hhfSIsImdpdF9yZWZzX3VybCI6Imh0dHBzOi8vYXBpLmdpdGh1Yi5jb20vcmVwb3MvYXdzLXBvd2VydG9vbHMvcG93ZXJ0b29scy1sYW1iZGEtcHl0aG9uL2dpdC9yZWZzey9zaGF9IiwiZ2l0X3RhZ3NfdXJsIjoiaHR0cHM6Ly9hcGkuZ2l0aHViLmNvbS9yZXBvcy9hd3MtcG93ZXJ0b29scy9wb3dlcnRvb2xzLWxhbWJkYS1weXRob24vZ2l0L3RhZ3N7L3NoYX0iLCJnaXRfdXJsIjoiZ2l0Oi8vZ2l0aHViLmNvbS9hd3MtcG93ZXJ0b29scy9wb3dlcnRvb2xzLWxhbWJkYS1weXRob24uZ2l0IiwiaGFzX2Rpc2N1c3Npb25zIjp0cnVlLCJoYXNfZG93bmxvYWRzIjp0cnVlLCJoYXNfaXNzdWVzIjp0cnVlLCJoYXNfcGFnZXMiOmZhbHNlLCJoYXNfcHJvamVjdHMiOnRydWUsImhhc193aWtpIjpmYWxzZSwiaG9tZXBhZ2UiOiJodHRwczovL2RvY3MucG93ZXJ0b29scy5hd3MuZGV2L2xhbWJkYS9weXRob24vbGF0ZXN0LyIsImhvb2tzX3VybCI6Imh0dHBzOi8vYXBpLmdpdGh1Yi5jb20vcmVwb3MvYXdzLXBvd2VydG9vbHMvcG93ZXJ0b29scy1sYW1iZGEtcHl0aG9uL2hvb2tzIiwiaHRtbF91cmwiOiJodHRwczovL2dpdGh1Yi5jb20vYXdzLXBvd2VydG9vbHMvcG93ZXJ0b29scy1sYW1iZGEtcHl0aG9uIiwiaWQiOjIyMTkxOTM3OSwiaXNfdGVtcGxhdGUiOmZhbHNlLCJpc3N1ZV9jb21tZW50X3VybCI6Imh0dHBzOi8vYXBpLmdpdGh1Yi5jb20vcmVwb3MvYXdzLXBvd2VydG9vbHMvcG93ZXJ0b29scy1sYW1iZGEtcHl0aG9uL2lzc3Vlcy9jb21tZW50c3svbnVtYmVyfSIsImlzc3VlX2V2ZW50c191cmwiOiJodHRwczovL2FwaS5naXRodWIuY29tL3JlcG9zL2F3cy1wb3dlcnRvb2xzL3Bvd2VydG9vbHMtbGFtYmRhLXB5dGhvbi9pc3N1ZXMvZXZlbnRzey9udW1iZXJ9IiwiaXNzdWVzX3VybCI6Imh0dHBzOi8vYXBpLmdpdGh1Yi5jb20vcmVwb3MvYXdzLXBvd2VydG9vbHMvcG93ZXJ0b29scy1sYW1iZGEtcHl0aG9uL2lzc3Vlc3svbnVtYmVyfSIsImtleXNfdXJsIjoiaHR0cHM6Ly9hcGkuZ2l0aHViLmNvbS9yZXBvcy9hd3MtcG93ZXJ0b29scy9wb3dlcnRvb2xzLWxhbWJkYS1weXRob24va2V5c3sva2V5X2lkfSIsImxhYmVsc191cmwiOiJodHRwczovL2FwaS5naXRodWIuY29tL3JlcG9zL2F3cy1wb3dlcnRvb2xzL3Bvd2VydG9vbHMtbGFtYmRhLXB5dGhvbi9sYWJlbHN7L25hbWV9IiwibGFuZ3VhZ2UiOiJQeXRob24iLCJsYW5ndWFnZXNfdXJsIjoiaHR0cHM6Ly9hcGkuZ2l0aHViLmNvbS9yZXBvcy9hd3MtcG93ZXJ0b29scy9wb3dlcnRvb2xzLWxhbWJkYS1weXRob24vbGFuZ3VhZ2VzIiwibGljZW5zZSI6eyJrZXkiOiJtaXQtMCIsIm5hbWUiOiJNSVQgTm8gQXR0cmlidXRpb24iLCJub2RlX2lkIjoiTURjNlRHbGpaVzV6WlRReCIsInNwZHhfaWQiOiJNSVQtMCIsInVybCI6Imh0dHBzOi8vYXBpLmdpdGh1Yi5jb20vbGljZW5zZXMvbWl0LTAifSwibWVyZ2VzX3VybCI6Imh0dHBzOi8vYXBpLmdpdGh1Yi5jb20vcmVwb3MvYXdzLXBvd2VydG9vbHMvcG93ZXJ0b29scy1sYW1iZGEtcHl0aG9uL21lcmdlcyIsIm1pbGVzdG9uZXNfdXJsIjoiaHR0cHM6Ly9hcGkuZ2l0aHViLmNvbS9yZXBvcy9hd3MtcG93ZXJ0b29scy9wb3dlcnRvb2xzLWxhbWJkYS1weXRob24vbWlsZXN0b25lc3svbnVtYmVyfSIsIm1pcnJvcl91cmwiOm51bGwsIm5hbWUiOiJwb3dlcnRvb2xzLWxhbWJkYS1weXRob24iLCJub2RlX2lkIjoiTURFd09sSmxjRzl6YVhSdmNua3lNakU1TVRrek56az0iLCJub3RpZmljYXRpb25zX3VybCI6Imh0dHBzOi8vYXBpLmdpdGh1Yi5jb20vcmVwb3MvYXdzLXBvd2VydG9vbHMvcG93ZXJ0b29scy1sYW1iZGEtcHl0aG9uL25vdGlmaWNhdGlvbnN7P3NpbmNlLGFsbCxwYXJ0aWNpcGF0aW5nfSIsIm9wZW5faXNzdWVzIjo2NCwib3Blbl9pc3N1ZXNfY291bnQiOjY0LCJvd25lciI6eyJhdmF0YXJfdXJsIjoiaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzEyOTEyNzYzOD92PTQiLCJldmVudHNfdXJsIjoiaHR0cHM6Ly9hcGkuZ2l0aHViLmNvbS91c2Vycy9hd3MtcG93ZXJ0b29scy9ldmVudHN7L3ByaXZhY3l9IiwiZm9sbG93ZXJzX3VybCI6Imh0dHBzOi8vYXBpLmdpdGh1Yi5jb20vdXNlcnMvYXdzLXBvd2VydG9vbHMvZm9sbG93ZXJzIiwiZm9sbG93aW5nX3VybCI6Imh0dHBzOi8vYXBpLmdpdGh1Yi5jb20vdXNlcnMvYXdzLXBvd2VydG9vbHMvZm9sbG93aW5ney9vdGhlcl91c2VyfSIsImdpc3RzX3VybCI6Imh0dHBzOi8vYXBpLmdpdGh1Yi5jb20vdXNlcnMvYXdzLXBvd2VydG9vbHMvZ2lzdHN7L2dpc3RfaWR9IiwiZ3JhdmF0YXJfaWQiOiIiLCJodG1sX3VybCI6Imh0dHBzOi8vZ2l0aHViLmNvbS9hd3MtcG93ZXJ0b29scyIsImlkIjoxMjkxMjc2MzgsImxvZ2luIjoiYXdzLXBvd2VydG9vbHMiLCJub2RlX2lkIjoiT19rZ0RPQjdKVTFnIiwib3JnYW5pemF0aW9uc191cmwiOiJodHRwczovL2FwaS5naXRodWIuY29tL3VzZXJzL2F3cy1wb3dlcnRvb2xzL29yZ3MiLCJyZWNlaXZlZF9ldmVudHNfdXJsIjoiaHR0cHM6Ly9hcGkuZ2l0aHViLmNvbS91c2Vycy9hd3MtcG93ZXJ0b29scy9yZWNlaXZlZF9ldmVudHMiLCJyZXBvc191cmwiOiJodHRwczovL2FwaS5naXRodWIuY29tL3VzZXJzL2F3cy1wb3dlcnRvb2xzL3JlcG9zIiwic2l0ZV9hZG1pbiI6ZmFsc2UsInN0YXJyZWRfdXJsIjoiaHR0cHM6Ly9hcGkuZ2l0aHViLmNvbS91c2Vycy9hd3MtcG93ZXJ0b29scy9zdGFycmVkey9vd25lcn17L3JlcG99Iiwic3Vic2NyaXB0aW9uc191cmwiOiJodHRwczovL2FwaS5naXRodWIuY29tL3VzZXJzL2F3cy1wb3dlcnRvb2xzL3N1YnNjcmlwdGlvbnMiLCJ0eXBlIjoiT3JnYW5pemF0aW9uIiwidXJsIjoiaHR0cHM6Ly9hcGkuZ2l0aHViLmNvbS91c2Vycy9hd3MtcG93ZXJ0b29scyIsInVzZXJfdmlld190eXBlIjoicHVibGljIn0sInByaXZhdGUiOmZhbHNlLCJwdWxsc191cmwiOiJodHRwczovL2FwaS5naXRodWIuY29tL3JlcG9zL2F3cy1wb3dlcnRvb2xzL3Bvd2VydG9vbHMtbGFtYmRhLXB5dGhvbi9wdWxsc3svbnVtYmVyfSIsInB1c2hlZF9hdCI6IjIwMjUtMDgtMTNUMjE6MDM6NTdaIiwicmVsZWFzZXNfdXJsIjoiaHR0cHM6Ly9hcGkuZ2l0aHViLmNvbS9yZXBvcy9hd3MtcG93ZXJ0b29scy9wb3dlcnRvb2xzLWxhbWJkYS1weXRob24vcmVsZWFzZXN7L2lkfSIsInNpemUiOjEzMTA2Nywic3NoX3VybCI6ImdpdEBnaXRodWIuY29tOmF3cy1wb3dlcnRvb2xzL3Bvd2VydG9vbHMtbGFtYmRhLXB5dGhvbi5naXQiLCJzdGFyZ2F6ZXJzX2NvdW50IjozMTE5LCJzdGFyZ2F6ZXJzX3VybCI6Imh0dHBzOi8vYXBpLmdpdGh1Yi5jb20vcmVwb3MvYXdzLXBvd2VydG9vbHMvcG93ZXJ0b29scy1sYW1iZGEtcHl0aG9uL3N0YXJnYXplcnMiLCJzdGF0dXNlc191cmwiOiJodHRwczovL2FwaS5naXRodWIuY29tL3JlcG9zL2F3cy1wb3dlcnRvb2xzL3Bvd2VydG9vbHMtbGFtYmRhLXB5dGhvbi9zdGF0dXNlcy97c2hhfSIsInN1YnNjcmliZXJzX3VybCI6Imh0dHBzOi8vYXBpLmdpdGh1Yi5jb20vcmVwb3MvYXdzLXBvd2VydG9vbHMvcG93ZXJ0b29scy1sYW1iZGEtcHl0aG9uL3N1YnNjcmliZXJzIiwic3Vic2NyaXB0aW9uX3VybCI6Imh0dHBzOi8vYXBpLmdpdGh1Yi5jb20vcmVwb3MvYXdzLXBvd2VydG9vbHMvcG93ZXJ0b29scy1sYW1iZGEtcHl0aG9uL3N1YnNjcmlwdGlvbiIsInN2bl91cmwiOiJodHRwczovL2dpdGh1Yi5jb20vYXdzLXBvd2VydG9vbHMvcG93ZXJ0b29scy1sYW1iZGEtcHl0aG9uIiwidGFnc191cmwiOiJodHRwczovL2FwaS5naXRodWIuY29tL3JlcG9zL2F3cy1wb3dlcnRvb2xzL3Bvd2VydG9vbHMtbGFtYmRhLXB5dGhvbi90YWdzIiwidGVhbXNfdXJsIjoiaHR0cHM6Ly9hcGkuZ2l0aHViLmNvbS9yZXBvcy9hd3MtcG93ZXJ0b29scy9wb3dlcnRvb2xzLWxhbWJkYS1weXRob24vdGVhbXMiLCJ0b3BpY3MiOlsiYXdzIiwiYXdzLWxhbWJkYSIsImxhbWJkYSIsInB5dGhvbiIsInNlcnZlcmxlc3MiXSwidHJlZXNfdXJsIjoiaHR0cHM6Ly9hcGkuZ2l0aHViLmNvbS9yZXBvcy9hd3MtcG93ZXJ0b29scy9wb3dlcnRvb2xzLWxhbWJkYS1weXRob24vZ2l0L3RyZWVzey9zaGF9IiwidXBkYXRlZF9hdCI6IjIwMjUtMDgtMTNUMTA6MjE6MzdaIiwidXJsIjoiaHR0cHM6Ly9hcGkuZ2l0aHViLmNvbS9yZXBvcy9hd3MtcG93ZXJ0b29scy9wb3dlcnRvb2xzLWxhbWJkYS1weXRob24iLCJ2aXNpYmlsaXR5IjoicHVibGljIiwid2F0Y2hlcnMiOjMxMTksIndhdGNoZXJzX2NvdW50IjozMTE5LCJ3ZWJfY29tbWl0X3NpZ25vZmZfcmVxdWlyZWQiOnRydWV9LCJzY2hlZHVsZSI6IjAgOCAqICogMS01Iiwid29ya2Zsb3ciOiIuZ2l0aHViL3dvcmtmbG93cy9wcmUtcmVsZWFzZS55bWwifSwiZ2l0aHViX2hlYWRfcmVmIjoiIiwiZ2l0aHViX3JlZiI6InJlZnMvaGVhZHMvZGV2ZWxvcCIsImdpdGh1Yl9yZWZfdHlwZSI6ImJyYW5jaCIsImdpdGh1Yl9yZXBvc2l0b3J5X2lkIjoiMjIxOTE5Mzc5IiwiZ2l0aHViX3JlcG9zaXRvcnlfb3duZXIiOiJhd3MtcG93ZXJ0b29scyIsImdpdGh1Yl9yZXBvc2l0b3J5X293bmVyX2lkIjoiMTI5MTI3NjM4IiwiZ2l0aHViX3J1bl9hdHRlbXB0IjoiMSIsImdpdGh1Yl9ydW5faWQiOiIxNjk1OTQ0OTQ0MSIsImdpdGh1Yl9ydW5fbnVtYmVyIjoiMzA2IiwiZ2l0aHViX3NoYTEiOiIwMDE0YWEwMzA1OGNlNDUxYmM4MDI1MmQyMWM5ODYwODEzMDUxYTMxIn19LCJtZXRhZGF0YSI6eyJidWlsZEludm9jYXRpb25JRCI6IjE2OTU5NDQ5NDQxLTEiLCJjb21wbGV0ZW5lc3MiOnsicGFyYW1ldGVycyI6dHJ1ZSwiZW52aXJvbm1lbnQiOmZhbHNlLCJtYXRlcmlhbHMiOmZhbHNlfSwicmVwcm9kdWNpYmxlIjpmYWxzZX0sIm1hdGVyaWFscyI6W3sidXJpIjoiZ2l0K2h0dHBzOi8vZ2l0aHViLmNvbS9hd3MtcG93ZXJ0b29scy9wb3dlcnRvb2xzLWxhbWJkYS1weXRob25AcmVmcy9oZWFkcy9kZXZlbG9wIiwiZGlnZXN0Ijp7InNoYTEiOiIwMDE0YWEwMzA1OGNlNDUxYmM4MDI1MmQyMWM5ODYwODEzMDUxYTMxIn19XX19", "payloadType":"application/vnd.in-toto+json", "signatures":[{"sig":"MEYCIQDADXBrvBRaIGWCVZn6mIe0WBbSYEypVrHNZ2jQraKK1QIhAPiO+V69xl6WbZmH+mV7JO1vr/H8Ls2pycxZm7k9/n1G"}]}} \ No newline at end of file diff --git a/provenance/3.19.1a10/multiple.intoto.jsonl b/provenance/3.19.1a10/multiple.intoto.jsonl new file mode 100644 index 00000000000..07e8d99b017 --- /dev/null +++ b/provenance/3.19.1a10/multiple.intoto.jsonl @@ -0,0 +1 @@ +{"mediaType":"application/vnd.dev.sigstore.bundle.v0.3+json", "verificationMaterial":{"certificate":{"rawBytes":"MIIHZTCCBuygAwIBAgIUX2pPmiwkWM+aXxV+NN7H6YidkTEwCgYIKoZIzj0EAwMwNzEVMBMGA1UEChMMc2lnc3RvcmUuZGV2MR4wHAYDVQQDExVzaWdzdG9yZS1pbnRlcm1lZGlhdGUwHhcNMjUwODI4MDgwODExWhcNMjUwODI4MDgxODExWjAAMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAERBWRGfMhziuf/VcWtRty389KQYsFJiNolLDGCOL3hrocewciUWFcbvP+zlfTxd9c1bXYCtbpCo9OwHlbu/dt3KOCBgswggYHMA4GA1UdDwEB/wQEAwIHgDATBgNVHSUEDDAKBggrBgEFBQcDAzAdBgNVHQ4EFgQUamqiQpABHTCT3BeH7AKh9R9IE2AwHwYDVR0jBBgwFoAU39Ppz1YkEZb5qNjpKFWixi4YZD8wgYQGA1UdEQEB/wR6MHiGdmh0dHBzOi8vZ2l0aHViLmNvbS9zbHNhLWZyYW1ld29yay9zbHNhLWdpdGh1Yi1nZW5lcmF0b3IvLmdpdGh1Yi93b3JrZmxvd3MvZ2VuZXJhdG9yX2dlbmVyaWNfc2xzYTMueW1sQHJlZnMvdGFncy92Mi4xLjAwOQYKKwYBBAGDvzABAQQraHR0cHM6Ly90b2tlbi5hY3Rpb25zLmdpdGh1YnVzZXJjb250ZW50LmNvbTAWBgorBgEEAYO/MAECBAhzY2hlZHVsZTA2BgorBgEEAYO/MAEDBChiNGY0NWUzYTI1YjRkOWQ1NjI0MzAxNzIzMmEzMGFiMDBiMWU1YjVjMBkGCisGAQQBg78wAQQEC1ByZS1SZWxlYXNlMDUGCisGAQQBg78wAQUEJ2F3cy1wb3dlcnRvb2xzL3Bvd2VydG9vbHMtbGFtYmRhLXB5dGhvbjAgBgorBgEEAYO/MAEGBBJyZWZzL2hlYWRzL2RldmVsb3AwOwYKKwYBBAGDvzABCAQtDCtodHRwczovL3Rva2VuLmFjdGlvbnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tMIGGBgorBgEEAYO/MAEJBHgMdmh0dHBzOi8vZ2l0aHViLmNvbS9zbHNhLWZyYW1ld29yay9zbHNhLWdpdGh1Yi1nZW5lcmF0b3IvLmdpdGh1Yi93b3JrZmxvd3MvZ2VuZXJhdG9yX2dlbmVyaWNfc2xzYTMueW1sQHJlZnMvdGFncy92Mi4xLjAwOAYKKwYBBAGDvzABCgQqDChmN2RkOGM1NGMyMDY3YmFmYzEyY2E3YTU1NTk1ZDVlZTliNzUyMDRhMB0GCisGAQQBg78wAQsEDwwNZ2l0aHViLWhvc3RlZDBKBgorBgEEAYO/MAEMBDwMOmh0dHBzOi8vZ2l0aHViLmNvbS9hd3MtcG93ZXJ0b29scy9wb3dlcnRvb2xzLWxhbWJkYS1weXRob24wOAYKKwYBBAGDvzABDQQqDChiNGY0NWUzYTI1YjRkOWQ1NjI0MzAxNzIzMmEzMGFiMDBiMWU1YjVjMCIGCisGAQQBg78wAQ4EFAwScmVmcy9oZWFkcy9kZXZlbG9wMBkGCisGAQQBg78wAQ8ECwwJMjIxOTE5Mzc5MDEGCisGAQQBg78wARAEIwwhaHR0cHM6Ly9naXRodWIuY29tL2F3cy1wb3dlcnRvb2xzMBkGCisGAQQBg78wAREECwwJMTI5MTI3NjM4MH8GCisGAQQBg78wARIEcQxvaHR0cHM6Ly9naXRodWIuY29tL2F3cy1wb3dlcnRvb2xzL3Bvd2VydG9vbHMtbGFtYmRhLXB5dGhvbi8uZ2l0aHViL3dvcmtmbG93cy9wcmUtcmVsZWFzZS55bWxAcmVmcy9oZWFkcy9kZXZlbG9wMDgGCisGAQQBg78wARMEKgwoYjRmNDVlM2EyNWI0ZDlkNTYyNDMwMTcyMzJhMzBhYjAwYjFlNWI1YzAYBgorBgEEAYO/MAEUBAoMCHNjaGVkdWxlMG4GCisGAQQBg78wARUEYAxeaHR0cHM6Ly9naXRodWIuY29tL2F3cy1wb3dlcnRvb2xzL3Bvd2VydG9vbHMtbGFtYmRhLXB5dGhvbi9hY3Rpb25zL3J1bnMvMTcyODk2Njk3NTcvYXR0ZW1wdHMvMTAWBgorBgEEAYO/MAEWBAgMBnB1YmxpYzCBigYKKwYBBAHWeQIEAgR8BHoAeAB2AN09MGrGxxEyYxkeHJlnNwKiSl643jyt/4eKcoAvKe6OAAABmO+4VaUAAAQDAEcwRQIhANFrRy6mZTS1mcypu6jaNybRd/7t3V4PPNUFIpT6C5slAiAFfr5F2WokYwk/MacMWyhihJCYlc/cKmk2eZVCAu9B1zAKBggqhkjOPQQDAwNnADBkAjBfKZRnzX1aVkV8LeDontswXkuj9fh294v/uTzemedQ2agXmz2sQRWNHOdz8mooqTECMCpT13Ny9YxRiInKajp6DBXlgbu1ud5poeVLVCyoicNLNQ4ZadNYxzHSd6bsmv09EQ=="}, "tlogEntries":[{"logIndex":"443515538", "logId":{"keyId":"wNI9atQGlz+VWfO6LRygH4QUfY/8W4RFwiT5i5WRgB0="}, "kindVersion":{"kind":"dsse", "version":"0.0.1"}, "integratedTime":"1756368492", "inclusionPromise":{"signedEntryTimestamp":"MEUCIQDLkeAPuCk9r5SeYU8Oj/gDaK8MjE1BEHetQJxYp/RPlAIgGofT5bWKBWxsXqYdRVgeVN2xngCPQNagYYM3omvpKfg="}, "inclusionProof":{"logIndex":"321611276", "rootHash":"YtesNYpBvnYnIB6HssVeonD7ND3PbaNyjcjDbvgvFjo=", "treeSize":"321611280", "hashes":["gMa0kxUNtOrobWQrnDlCGQ5PGd85pu1++bvNy0GK88I=", "AelkJD8oxTE9xgYE7m2H0oP0QrAQGrvkT3D13rNumrw=", "vO96BDJJN4BlEGcIXxcqOjxTxYtQyHykwRFF5I7lx4w=", "9q/DRanxSekS5eYlROeKh/RLpbPTgiIbYRYbbWd1/As=", "AW3zeqNbUhV3qHUBDLWEwH4J2GWo8vrxPv+ipcUw0SQ=", "4VkFgrTki5mKSxAsBoQwq58bLN3tYJ1Y4IRyLylXh9E=", "wlnFEGm2Tn2V/3a5qvSbQ/0Y9/ShbuELXzeKJxfKTgg=", "rgdtPPdy4gRdEmM6sxACV7Pt0eYQNcfypJYgBmg611c=", "mZ/g5C9+70KuYCH6lPRFwB7TdmogBfQ5nCieN5EHzkM=", "E+yqdMiR4WrEM75VdeEmZXjIDZYLWUiutAzVtlWZhuw=", "+jsSZhXI3EAkBNrOUnfF5rLI08ZeEjjjXIvCVRlp/mU=", "sh/cbRgKGoMre/EnTT6j4KD9dh02AtrSZ0HqtWeUsuU=", "IoDcrbPugLiY2kXaX5Pfyf58GYtyeWcCwB+9Qb7FVt4=", "wCCU7hO8zBe9mf+YE82KuXgzxyhnEK0FkeZe0lH3dZ4=", "vS7O4ozHIQZJWBiov+mkpI27GE8zAmVCEkRcP3NDyNE="], "checkpoint":{"envelope":"rekor.sigstore.dev - 1193050959916656506\n321611280\nYtesNYpBvnYnIB6HssVeonD7ND3PbaNyjcjDbvgvFjo=\n\n— rekor.sigstore.dev wNI9ajBFAiEAiMhkj44fsXcsDlDYw0wNBcCJkQ53Be0hvLCQsW3OF+oCICscS7+CRY69hAEfhBm9uB3lkFPxvlKMUsttx3qMiKDv\n"}}, "canonicalizedBody":"eyJhcGlWZXJzaW9uIjoiMC4wLjEiLCJraW5kIjoiZHNzZSIsInNwZWMiOnsiZW52ZWxvcGVIYXNoIjp7ImFsZ29yaXRobSI6InNoYTI1NiIsInZhbHVlIjoiYjY3OTUzOWFkZTU5OTA2NDQ0N2QzYzExMjc4NTMzOGQyZjVkNzNiMjQ0YWIyYmEyOTBkZWUxN2E4ZjE1YWI5YSJ9LCJwYXlsb2FkSGFzaCI6eyJhbGdvcml0aG0iOiJzaGEyNTYiLCJ2YWx1ZSI6Ijc3N2YxNzY2YTY2NTdmNjU3ZjllODkwZmNkMzFiNTNmOTNlMjY1NDY2YTJjNjRhY2U3NDBhZDNiZDgxMTc2MjYifSwic2lnbmF0dXJlcyI6W3sic2lnbmF0dXJlIjoiTUVZQ0lRQ0tUY2JjZGFCUzJiajEzc0hvT01pM3VselhmNG4yWFY2NmdTNmgvZEpsS0FJaEFOY3VNUmlJUnBKVEt3RE04bmROZDdOOXFLNHZEczQ0ZFh0TGpwWDliMi9TIiwidmVyaWZpZXIiOiJMUzB0TFMxQ1JVZEpUaUJEUlZKVVNVWkpRMEZVUlMwdExTMHRDazFKU1VoYVZFTkRRblY1WjBGM1NVSkJaMGxWV0RKd1VHMXBkMnRYVFN0aFdIaFdLMDVPTjBnMldXbGthMVJGZDBObldVbExiMXBKZW1vd1JVRjNUWGNLVG5wRlZrMUNUVWRCTVZWRlEyaE5UV015Ykc1ak0xSjJZMjFWZFZwSFZqSk5ValIzU0VGWlJGWlJVVVJGZUZaNllWZGtlbVJIT1hsYVV6RndZbTVTYkFwamJURnNXa2RzYUdSSFZYZElhR05PVFdwVmQwOUVTVFJOUkdkM1QwUkZlRmRvWTA1TmFsVjNUMFJKTkUxRVozaFBSRVY0VjJwQlFVMUdhM2RGZDFsSUNrdHZXa2w2YWpCRFFWRlpTVXR2V2tsNmFqQkVRVkZqUkZGblFVVlNRbGRTUjJaTmFIcHBkV1l2Vm1OWGRGSjBlVE00T1V0UldYTkdTbWxPYjJ4TVJFY0tRMDlNTTJoeWIyTmxkMk5wVlZkR1kySjJVQ3Q2YkdaVWVHUTVZekZpV0ZsRGRHSndRMjg1VDNkSWJHSjFMMlIwTTB0UFEwSm5jM2RuWjFsSVRVRTBSd3BCTVZWa1JIZEZRaTkzVVVWQmQwbElaMFJCVkVKblRsWklVMVZGUkVSQlMwSm5aM0pDWjBWR1FsRmpSRUY2UVdSQ1owNVdTRkUwUlVablVWVmhiWEZwQ2xGd1FVSklWRU5VTTBKbFNEZEJTMmc1VWpsSlJUSkJkMGgzV1VSV1VqQnFRa0puZDBadlFWVXpPVkJ3ZWpGWmEwVmFZalZ4VG1wd1MwWlhhWGhwTkZrS1drUTRkMmRaVVVkQk1WVmtSVkZGUWk5M1VqWk5TR2xIWkcxb01HUklRbnBQYVRoMldqSnNNR0ZJVm1sTWJVNTJZbE01ZW1KSVRtaE1WMXA1V1ZjeGJBcGtNamw1WVhrNWVtSklUbWhNVjJSd1pFZG9NVmxwTVc1YVZ6VnNZMjFHTUdJelNYWk1iV1J3WkVkb01WbHBPVE5pTTBweVdtMTRkbVF6VFhaYU1sWjFDbHBZU21oa1J6bDVXREprYkdKdFZubGhWMDVtWXpKNGVsbFVUWFZsVnpGelVVaEtiRnB1VFhaa1IwWnVZM2s1TWsxcE5IaE1ha0YzVDFGWlMwdDNXVUlLUWtGSFJIWjZRVUpCVVZGeVlVaFNNR05JVFRaTWVUa3dZakowYkdKcE5XaFpNMUp3WWpJMWVreHRaSEJrUjJneFdXNVdlbHBZU21waU1qVXdXbGMxTUFwTWJVNTJZbFJCVjBKbmIzSkNaMFZGUVZsUEwwMUJSVU5DUVdoNldUSm9iRnBJVm5OYVZFRXlRbWR2Y2tKblJVVkJXVTh2VFVGRlJFSkRhR2xPUjFrd0NrNVhWWHBaVkVreFdXcFNhMDlYVVRGT2Fra3dUWHBCZUU1NlNYcE5iVVY2VFVkR2FVMUVRbWxOVjFVeFdXcFdhazFDYTBkRGFYTkhRVkZSUW1jM09IY0tRVkZSUlVNeFFubGFVekZUV2xkNGJGbFlUbXhOUkZWSFEybHpSMEZSVVVKbk56aDNRVkZWUlVveVJqTmplVEYzWWpOa2JHTnVVblppTW5oNlRETkNkZ3BrTWxaNVpFYzVkbUpJVFhSaVIwWjBXVzFTYUV4WVFqVmtSMmgyWW1wQlowSm5iM0pDWjBWRlFWbFBMMDFCUlVkQ1FrcDVXbGRhZWt3eWFHeFpWMUo2Q2t3eVVteGtiVlp6WWpOQmQwOTNXVXRMZDFsQ1FrRkhSSFo2UVVKRFFWRjBSRU4wYjJSSVVuZGplbTkyVEROU2RtRXlWblZNYlVacVpFZHNkbUp1VFhVS1dqSnNNR0ZJVm1sa1dFNXNZMjFPZG1KdVVteGlibEYxV1RJNWRFMUpSMGRDWjI5eVFtZEZSVUZaVHk5TlFVVktRa2huVFdSdGFEQmtTRUo2VDJrNGRncGFNbXd3WVVoV2FVeHRUblppVXpsNllraE9hRXhYV25sWlZ6RnNaREk1ZVdGNU9YcGlTRTVvVEZka2NHUkhhREZaYVRGdVdsYzFiR050UmpCaU0wbDJDa3h0WkhCa1IyZ3hXV2s1TTJJelNuSmFiWGgyWkROTmRsb3lWblZhV0Vwb1pFYzVlVmd5Wkd4aWJWWjVZVmRPWm1NeWVIcFpWRTExWlZjeGMxRklTbXdLV201TmRtUkhSbTVqZVRreVRXazBlRXhxUVhkUFFWbExTM2RaUWtKQlIwUjJla0ZDUTJkUmNVUkRhRzFPTWxKclQwZE5NVTVIVFhsTlJGa3pXVzFHYlFwWmVrVjVXVEpGTTFsVVZURk9WR3N4V2tSV2JGcFViR2xPZWxWNVRVUlNhRTFDTUVkRGFYTkhRVkZSUW1jM09IZEJVWE5GUkhkM1Rsb3liREJoU0ZacENreFhhSFpqTTFKc1drUkNTMEpuYjNKQ1owVkZRVmxQTDAxQlJVMUNSSGROVDIxb01HUklRbnBQYVRoMldqSnNNR0ZJVm1sTWJVNTJZbE01YUdRelRYUUtZMGM1TTFwWVNqQmlNamx6WTNrNWQySXpaR3hqYmxKMllqSjRla3hYZUdoaVYwcHJXVk14ZDJWWVVtOWlNalIzVDBGWlMwdDNXVUpDUVVkRWRucEJRZ3BFVVZGeFJFTm9hVTVIV1RCT1YxVjZXVlJKTVZscVVtdFBWMUV4VG1wSk1FMTZRWGhPZWtsNlRXMUZlazFIUm1sTlJFSnBUVmRWTVZscVZtcE5RMGxIQ2tOcGMwZEJVVkZDWnpjNGQwRlJORVZHUVhkVFkyMVdiV041T1c5YVYwWnJZM2s1YTFwWVdteGlSemwzVFVKclIwTnBjMGRCVVZGQ1p6YzRkMEZST0VVS1EzZDNTazFxU1hoUFZFVTFUWHBqTlUxRVJVZERhWE5IUVZGUlFtYzNPSGRCVWtGRlNYZDNhR0ZJVWpCalNFMDJUSGs1Ym1GWVVtOWtWMGwxV1RJNWRBcE1Na1l6WTNreGQySXpaR3hqYmxKMllqSjRlazFDYTBkRGFYTkhRVkZSUW1jM09IZEJVa1ZGUTNkM1NrMVVTVFZOVkVrelRtcE5ORTFJT0VkRGFYTkhDa0ZSVVVKbk56aDNRVkpKUldOUmVIWmhTRkl3WTBoTk5reDVPVzVoV0ZKdlpGZEpkVmt5T1hSTU1rWXpZM2t4ZDJJelpHeGpibEoyWWpKNGVrd3pRbllLWkRKV2VXUkhPWFppU0UxMFlrZEdkRmx0VW1oTVdFSTFaRWRvZG1KcE9IVmFNbXd3WVVoV2FVd3paSFpqYlhSdFlrYzVNMk41T1hkamJWVjBZMjFXY3dwYVYwWjZXbE0xTldKWGVFRmpiVlp0WTNrNWIxcFhSbXRqZVRscldsaGFiR0pIT1hkTlJHZEhRMmx6UjBGUlVVSm5OemgzUVZKTlJVdG5kMjlaYWxKdENrNUVWbXhOTWtWNVRsZEpNRnBFYkd0T1ZGbDVUa1JOZDAxVVkzbE5la3BvVFhwQ2FGbHFRWGRaYWtac1RsZEpNVmw2UVZsQ1oyOXlRbWRGUlVGWlR5OEtUVUZGVlVKQmIwMURTRTVxWVVkV2EyUlhlR3hOUnpSSFEybHpSMEZSVVVKbk56aDNRVkpWUlZsQmVHVmhTRkl3WTBoTk5reDVPVzVoV0ZKdlpGZEpkUXBaTWpsMFRESkdNMk41TVhkaU0yUnNZMjVTZG1JeWVIcE1NMEoyWkRKV2VXUkhPWFppU0UxMFlrZEdkRmx0VW1oTVdFSTFaRWRvZG1KcE9XaFpNMUp3Q21JeU5YcE1NMG94WW01TmRrMVVZM2xQUkdzeVRtcHJNMDVVWTNaWldGSXdXbGN4ZDJSSVRYWk5WRUZYUW1kdmNrSm5SVVZCV1U4dlRVRkZWMEpCWjAwS1FtNUNNVmx0ZUhCWmVrTkNhV2RaUzB0M1dVSkNRVWhYWlZGSlJVRm5VamhDU0c5QlpVRkNNa0ZPTURsTlIzSkhlSGhGZVZsNGEyVklTbXh1VG5kTGFRcFRiRFkwTTJwNWRDODBaVXRqYjBGMlMyVTJUMEZCUVVKdFR5czBWbUZWUVVGQlVVUkJSV04zVWxGSmFFRk9SbkpTZVRadFdsUlRNVzFqZVhCMU5tcGhDazU1WWxKa0x6ZDBNMVkwVUZCT1ZVWkpjRlEyUXpWemJFRnBRVVptY2pWR01sZHZhMWwzYXk5TllXTk5WM2xvYVdoS1ExbHNZeTlqUzIxck1tVmFWa01LUVhVNVFqRjZRVXRDWjJkeGFHdHFUMUJSVVVSQmQwNXVRVVJDYTBGcVFtWkxXbEp1ZWxneFlWWnJWamhNWlVSdmJuUnpkMWhyZFdvNVptZ3lPVFIyTHdwMVZIcGxiV1ZrVVRKaFoxaHRlakp6VVZKWFRraFBaSG80Ylc5dmNWUkZRMDFEY0ZReE0wNTVPVmw0VW1sSmJrdGhhbkEyUkVKWWJHZGlkVEYxWkRWd0NtOWxWa3hXUTNsdmFXTk9URTVSTkZwaFpFNVplSHBJVTJRMlluTnRkakE1UlZFOVBRb3RMUzB0TFVWT1JDQkRSVkpVU1VaSlEwRlVSUzB0TFMwdENnPT0ifV19fQ=="}]}, "dsseEnvelope":{"payload":"eyJfdHlwZSI6Imh0dHBzOi8vaW4tdG90by5pby9TdGF0ZW1lbnQvdjAuMSIsInByZWRpY2F0ZVR5cGUiOiJodHRwczovL3Nsc2EuZGV2L3Byb3ZlbmFuY2UvdjAuMiIsInN1YmplY3QiOlt7Im5hbWUiOiIuL2F3c19sYW1iZGFfcG93ZXJ0b29scy0zLjE5LjFhMTAtcHkzLW5vbmUtYW55LndobCIsImRpZ2VzdCI6eyJzaGEyNTYiOiJlMDUzOGIxMjRhMWZmYzI0YmQ5YzI4MmNiOWZhYjNkNDYzNjM0YmExNjQzMzlkYjc3NTkzNWUyNTE4NTQ4OTA0In19LHsibmFtZSI6Ii4vYXdzX2xhbWJkYV9wb3dlcnRvb2xzLTMuMTkuMWExMC50YXIuZ3oiLCJkaWdlc3QiOnsic2hhMjU2IjoiMzdmY2EyZmY5YTE3MWNkYmM3NjhkMjVmY2MzNzFmZTQ4MDFmNzBlZjQwZTEyNGZjODdlMzQ5NDllM2QzMGVjYyJ9fV0sInByZWRpY2F0ZSI6eyJidWlsZGVyIjp7ImlkIjoiaHR0cHM6Ly9naXRodWIuY29tL3Nsc2EtZnJhbWV3b3JrL3Nsc2EtZ2l0aHViLWdlbmVyYXRvci8uZ2l0aHViL3dvcmtmbG93cy9nZW5lcmF0b3JfZ2VuZXJpY19zbHNhMy55bWxAcmVmcy90YWdzL3YyLjEuMCJ9LCJidWlsZFR5cGUiOiJodHRwczovL2dpdGh1Yi5jb20vc2xzYS1mcmFtZXdvcmsvc2xzYS1naXRodWItZ2VuZXJhdG9yL2dlbmVyaWNAdjEiLCJpbnZvY2F0aW9uIjp7ImNvbmZpZ1NvdXJjZSI6eyJ1cmkiOiJnaXQraHR0cHM6Ly9naXRodWIuY29tL2F3cy1wb3dlcnRvb2xzL3Bvd2VydG9vbHMtbGFtYmRhLXB5dGhvbkByZWZzL2hlYWRzL2RldmVsb3AiLCJkaWdlc3QiOnsic2hhMSI6ImI0ZjQ1ZTNhMjViNGQ5ZDU2MjQzMDE3MjMyYTMwYWIwMGIxZTViNWMifSwiZW50cnlQb2ludCI6Ii5naXRodWIvd29ya2Zsb3dzL3ByZS1yZWxlYXNlLnltbCJ9LCJwYXJhbWV0ZXJzIjp7InZhcnMiOnt9fSwiZW52aXJvbm1lbnQiOnsiZ2l0aHViX2FjdG9yIjoibGVhbmRyb2RhbWFzY2VuYSIsImdpdGh1Yl9hY3Rvcl9pZCI6IjQyOTUxNzMiLCJnaXRodWJfYmFzZV9yZWYiOiIiLCJnaXRodWJfZXZlbnRfbmFtZSI6InNjaGVkdWxlIiwiZ2l0aHViX2V2ZW50X3BheWxvYWQiOnsiZW50ZXJwcmlzZSI6eyJhdmF0YXJfdXJsIjoiaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS9iLzEyOTA/dj00IiwiY3JlYXRlZF9hdCI6IjIwMTktMTEtMTNUMTg6MDU6NDFaIiwiZGVzY3JpcHRpb24iOiIiLCJodG1sX3VybCI6Imh0dHBzOi8vZ2l0aHViLmNvbS9lbnRlcnByaXNlcy9hbWF6b24iLCJpZCI6MTI5MCwibmFtZSI6IkFtYXpvbiIsIm5vZGVfaWQiOiJNREV3T2tWdWRHVnljSEpwYzJVeE1qa3ciLCJzbHVnIjoiYW1hem9uIiwidXBkYXRlZF9hdCI6IjIwMjUtMDgtMTJUMjA6NTk6MTRaIiwid2Vic2l0ZV91cmwiOiJodHRwczovL3d3dy5hbWF6b24uY29tLyJ9LCJvcmdhbml6YXRpb24iOnsiYXZhdGFyX3VybCI6Imh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xMjkxMjc2Mzg/dj00IiwiZGVzY3JpcHRpb24iOiIiLCJldmVudHNfdXJsIjoiaHR0cHM6Ly9pbnRlcm5hbC1hcGkuc2VydmljZS5pYWQuZ2l0aHViLm5ldC9vcmdzL2F3cy1wb3dlcnRvb2xzL2V2ZW50cyIsImhvb2tzX3VybCI6Imh0dHBzOi8vaW50ZXJuYWwtYXBpLnNlcnZpY2UuaWFkLmdpdGh1Yi5uZXQvb3Jncy9hd3MtcG93ZXJ0b29scy9ob29rcyIsImlkIjoxMjkxMjc2MzgsImlzc3Vlc191cmwiOiJodHRwczovL2ludGVybmFsLWFwaS5zZXJ2aWNlLmlhZC5naXRodWIubmV0L29yZ3MvYXdzLXBvd2VydG9vbHMvaXNzdWVzIiwibG9naW4iOiJhd3MtcG93ZXJ0b29scyIsIm1lbWJlcnNfdXJsIjoiaHR0cHM6Ly9pbnRlcm5hbC1hcGkuc2VydmljZS5pYWQuZ2l0aHViLm5ldC9vcmdzL2F3cy1wb3dlcnRvb2xzL21lbWJlcnN7L21lbWJlcn0iLCJub2RlX2lkIjoiT19rZ0RPQjdKVTFnIiwicHVibGljX21lbWJlcnNfdXJsIjoiaHR0cHM6Ly9pbnRlcm5hbC1hcGkuc2VydmljZS5pYWQuZ2l0aHViLm5ldC9vcmdzL2F3cy1wb3dlcnRvb2xzL3B1YmxpY19tZW1iZXJzey9tZW1iZXJ9IiwicmVwb3NfdXJsIjoiaHR0cHM6Ly9pbnRlcm5hbC1hcGkuc2VydmljZS5pYWQuZ2l0aHViLm5ldC9vcmdzL2F3cy1wb3dlcnRvb2xzL3JlcG9zIiwidXJsIjoiaHR0cHM6Ly9pbnRlcm5hbC1hcGkuc2VydmljZS5pYWQuZ2l0aHViLm5ldC9vcmdzL2F3cy1wb3dlcnRvb2xzIn0sInJlcG9zaXRvcnkiOnsiYWxsb3dfZm9ya2luZyI6dHJ1ZSwiYXJjaGl2ZV91cmwiOiJodHRwczovL2ludGVybmFsLWFwaS5zZXJ2aWNlLmlhZC5naXRodWIubmV0L3JlcG9zL2F3cy1wb3dlcnRvb2xzL3Bvd2VydG9vbHMtbGFtYmRhLXB5dGhvbi97YXJjaGl2ZV9mb3JtYXR9ey9yZWZ9IiwiYXJjaGl2ZWQiOmZhbHNlLCJhc3NpZ25lZXNfdXJsIjoiaHR0cHM6Ly9pbnRlcm5hbC1hcGkuc2VydmljZS5pYWQuZ2l0aHViLm5ldC9yZXBvcy9hd3MtcG93ZXJ0b29scy9wb3dlcnRvb2xzLWxhbWJkYS1weXRob24vYXNzaWduZWVzey91c2VyfSIsImJsb2JzX3VybCI6Imh0dHBzOi8vaW50ZXJuYWwtYXBpLnNlcnZpY2UuaWFkLmdpdGh1Yi5uZXQvcmVwb3MvYXdzLXBvd2VydG9vbHMvcG93ZXJ0b29scy1sYW1iZGEtcHl0aG9uL2dpdC9ibG9ic3svc2hhfSIsImJyYW5jaGVzX3VybCI6Imh0dHBzOi8vaW50ZXJuYWwtYXBpLnNlcnZpY2UuaWFkLmdpdGh1Yi5uZXQvcmVwb3MvYXdzLXBvd2VydG9vbHMvcG93ZXJ0b29scy1sYW1iZGEtcHl0aG9uL2JyYW5jaGVzey9icmFuY2h9IiwiY2xvbmVfdXJsIjoiaHR0cHM6Ly9naXRodWIuY29tL2F3cy1wb3dlcnRvb2xzL3Bvd2VydG9vbHMtbGFtYmRhLXB5dGhvbi5naXQiLCJjb2xsYWJvcmF0b3JzX3VybCI6Imh0dHBzOi8vaW50ZXJuYWwtYXBpLnNlcnZpY2UuaWFkLmdpdGh1Yi5uZXQvcmVwb3MvYXdzLXBvd2VydG9vbHMvcG93ZXJ0b29scy1sYW1iZGEtcHl0aG9uL2NvbGxhYm9yYXRvcnN7L2NvbGxhYm9yYXRvcn0iLCJjb21tZW50c191cmwiOiJodHRwczovL2ludGVybmFsLWFwaS5zZXJ2aWNlLmlhZC5naXRodWIubmV0L3JlcG9zL2F3cy1wb3dlcnRvb2xzL3Bvd2VydG9vbHMtbGFtYmRhLXB5dGhvbi9jb21tZW50c3svbnVtYmVyfSIsImNvbW1pdHNfdXJsIjoiaHR0cHM6Ly9pbnRlcm5hbC1hcGkuc2VydmljZS5pYWQuZ2l0aHViLm5ldC9yZXBvcy9hd3MtcG93ZXJ0b29scy9wb3dlcnRvb2xzLWxhbWJkYS1weXRob24vY29tbWl0c3svc2hhfSIsImNvbXBhcmVfdXJsIjoiaHR0cHM6Ly9pbnRlcm5hbC1hcGkuc2VydmljZS5pYWQuZ2l0aHViLm5ldC9yZXBvcy9hd3MtcG93ZXJ0b29scy9wb3dlcnRvb2xzLWxhbWJkYS1weXRob24vY29tcGFyZS97YmFzZX0uLi57aGVhZH0iLCJjb250ZW50c191cmwiOiJodHRwczovL2ludGVybmFsLWFwaS5zZXJ2aWNlLmlhZC5naXRodWIubmV0L3JlcG9zL2F3cy1wb3dlcnRvb2xzL3Bvd2VydG9vbHMtbGFtYmRhLXB5dGhvbi9jb250ZW50cy97K3BhdGh9IiwiY29udHJpYnV0b3JzX3VybCI6Imh0dHBzOi8vaW50ZXJuYWwtYXBpLnNlcnZpY2UuaWFkLmdpdGh1Yi5uZXQvcmVwb3MvYXdzLXBvd2VydG9vbHMvcG93ZXJ0b29scy1sYW1iZGEtcHl0aG9uL2NvbnRyaWJ1dG9ycyIsImNyZWF0ZWRfYXQiOiIyMDE5LTExLTE1VDEyOjI2OjEyWiIsImN1c3RvbV9wcm9wZXJ0aWVzIjp7InN0YWdpbmciOiJmYWxzZSIsInZpc2liaWxpdHktYWxsb3ctaW50ZXJuYWwiOiJmYWxzZSIsInZpc2liaWxpdHktYWxsb3ctcHJpdmF0ZSI6ImZhbHNlIiwidmlzaWJpbGl0eS1hbGxvdy1wdWJsaWMiOiJ0cnVlIn0sImRlZmF1bHRfYnJhbmNoIjoiZGV2ZWxvcCIsImRlcGxveW1lbnRzX3VybCI6Imh0dHBzOi8vaW50ZXJuYWwtYXBpLnNlcnZpY2UuaWFkLmdpdGh1Yi5uZXQvcmVwb3MvYXdzLXBvd2VydG9vbHMvcG93ZXJ0b29scy1sYW1iZGEtcHl0aG9uL2RlcGxveW1lbnRzIiwiZGVzY3JpcHRpb24iOiJBIGRldmVsb3BlciB0b29sa2l0IHRvIGltcGxlbWVudCBTZXJ2ZXJsZXNzIGJlc3QgcHJhY3RpY2VzIGFuZCBpbmNyZWFzZSBkZXZlbG9wZXIgdmVsb2NpdHkuIiwiZGlzYWJsZWQiOmZhbHNlLCJkb3dubG9hZHNfdXJsIjoiaHR0cHM6Ly9pbnRlcm5hbC1hcGkuc2VydmljZS5pYWQuZ2l0aHViLm5ldC9yZXBvcy9hd3MtcG93ZXJ0b29scy9wb3dlcnRvb2xzLWxhbWJkYS1weXRob24vZG93bmxvYWRzIiwiZXZlbnRzX3VybCI6Imh0dHBzOi8vaW50ZXJuYWwtYXBpLnNlcnZpY2UuaWFkLmdpdGh1Yi5uZXQvcmVwb3MvYXdzLXBvd2VydG9vbHMvcG93ZXJ0b29scy1sYW1iZGEtcHl0aG9uL2V2ZW50cyIsImZvcmsiOmZhbHNlLCJmb3JrcyI6NDQ5LCJmb3Jrc19jb3VudCI6NDQ5LCJmb3Jrc191cmwiOiJodHRwczovL2ludGVybmFsLWFwaS5zZXJ2aWNlLmlhZC5naXRodWIubmV0L3JlcG9zL2F3cy1wb3dlcnRvb2xzL3Bvd2VydG9vbHMtbGFtYmRhLXB5dGhvbi9mb3JrcyIsImZ1bGxfbmFtZSI6ImF3cy1wb3dlcnRvb2xzL3Bvd2VydG9vbHMtbGFtYmRhLXB5dGhvbiIsImdpdF9jb21taXRzX3VybCI6Imh0dHBzOi8vaW50ZXJuYWwtYXBpLnNlcnZpY2UuaWFkLmdpdGh1Yi5uZXQvcmVwb3MvYXdzLXBvd2VydG9vbHMvcG93ZXJ0b29scy1sYW1iZGEtcHl0aG9uL2dpdC9jb21taXRzey9zaGF9IiwiZ2l0X3JlZnNfdXJsIjoiaHR0cHM6Ly9pbnRlcm5hbC1hcGkuc2VydmljZS5pYWQuZ2l0aHViLm5ldC9yZXBvcy9hd3MtcG93ZXJ0b29scy9wb3dlcnRvb2xzLWxhbWJkYS1weXRob24vZ2l0L3JlZnN7L3NoYX0iLCJnaXRfdGFnc191cmwiOiJodHRwczovL2ludGVybmFsLWFwaS5zZXJ2aWNlLmlhZC5naXRodWIubmV0L3JlcG9zL2F3cy1wb3dlcnRvb2xzL3Bvd2VydG9vbHMtbGFtYmRhLXB5dGhvbi9naXQvdGFnc3svc2hhfSIsImdpdF91cmwiOiJnaXQ6Ly9naXRodWIuY29tL2F3cy1wb3dlcnRvb2xzL3Bvd2VydG9vbHMtbGFtYmRhLXB5dGhvbi5naXQiLCJoYXNfZGlzY3Vzc2lvbnMiOnRydWUsImhhc19kb3dubG9hZHMiOnRydWUsImhhc19pc3N1ZXMiOnRydWUsImhhc19wYWdlcyI6ZmFsc2UsImhhc19wcm9qZWN0cyI6dHJ1ZSwiaGFzX3dpa2kiOmZhbHNlLCJob21lcGFnZSI6Imh0dHBzOi8vZG9jcy5wb3dlcnRvb2xzLmF3cy5kZXYvbGFtYmRhL3B5dGhvbi9sYXRlc3QvIiwiaG9va3NfdXJsIjoiaHR0cHM6Ly9pbnRlcm5hbC1hcGkuc2VydmljZS5pYWQuZ2l0aHViLm5ldC9yZXBvcy9hd3MtcG93ZXJ0b29scy9wb3dlcnRvb2xzLWxhbWJkYS1weXRob24vaG9va3MiLCJodG1sX3VybCI6Imh0dHBzOi8vZ2l0aHViLmNvbS9hd3MtcG93ZXJ0b29scy9wb3dlcnRvb2xzLWxhbWJkYS1weXRob24iLCJpZCI6MjIxOTE5Mzc5LCJpc190ZW1wbGF0ZSI6ZmFsc2UsImlzc3VlX2NvbW1lbnRfdXJsIjoiaHR0cHM6Ly9pbnRlcm5hbC1hcGkuc2VydmljZS5pYWQuZ2l0aHViLm5ldC9yZXBvcy9hd3MtcG93ZXJ0b29scy9wb3dlcnRvb2xzLWxhbWJkYS1weXRob24vaXNzdWVzL2NvbW1lbnRzey9udW1iZXJ9IiwiaXNzdWVfZXZlbnRzX3VybCI6Imh0dHBzOi8vaW50ZXJuYWwtYXBpLnNlcnZpY2UuaWFkLmdpdGh1Yi5uZXQvcmVwb3MvYXdzLXBvd2VydG9vbHMvcG93ZXJ0b29scy1sYW1iZGEtcHl0aG9uL2lzc3Vlcy9ldmVudHN7L251bWJlcn0iLCJpc3N1ZXNfdXJsIjoiaHR0cHM6Ly9pbnRlcm5hbC1hcGkuc2VydmljZS5pYWQuZ2l0aHViLm5ldC9yZXBvcy9hd3MtcG93ZXJ0b29scy9wb3dlcnRvb2xzLWxhbWJkYS1weXRob24vaXNzdWVzey9udW1iZXJ9Iiwia2V5c191cmwiOiJodHRwczovL2ludGVybmFsLWFwaS5zZXJ2aWNlLmlhZC5naXRodWIubmV0L3JlcG9zL2F3cy1wb3dlcnRvb2xzL3Bvd2VydG9vbHMtbGFtYmRhLXB5dGhvbi9rZXlzey9rZXlfaWR9IiwibGFiZWxzX3VybCI6Imh0dHBzOi8vaW50ZXJuYWwtYXBpLnNlcnZpY2UuaWFkLmdpdGh1Yi5uZXQvcmVwb3MvYXdzLXBvd2VydG9vbHMvcG93ZXJ0b29scy1sYW1iZGEtcHl0aG9uL2xhYmVsc3svbmFtZX0iLCJsYW5ndWFnZSI6IlB5dGhvbiIsImxhbmd1YWdlc191cmwiOiJodHRwczovL2ludGVybmFsLWFwaS5zZXJ2aWNlLmlhZC5naXRodWIubmV0L3JlcG9zL2F3cy1wb3dlcnRvb2xzL3Bvd2VydG9vbHMtbGFtYmRhLXB5dGhvbi9sYW5ndWFnZXMiLCJsaWNlbnNlIjp7ImtleSI6Im1pdC0wIiwibmFtZSI6Ik1JVCBObyBBdHRyaWJ1dGlvbiIsIm5vZGVfaWQiOiJNRGM2VEdsalpXNXpaVFF4Iiwic3BkeF9pZCI6Ik1JVC0wIiwidXJsIjoiaHR0cHM6Ly9pbnRlcm5hbC1hcGkuc2VydmljZS5pYWQuZ2l0aHViLm5ldC9saWNlbnNlcy9taXQtMCJ9LCJtZXJnZXNfdXJsIjoiaHR0cHM6Ly9pbnRlcm5hbC1hcGkuc2VydmljZS5pYWQuZ2l0aHViLm5ldC9yZXBvcy9hd3MtcG93ZXJ0b29scy9wb3dlcnRvb2xzLWxhbWJkYS1weXRob24vbWVyZ2VzIiwibWlsZXN0b25lc191cmwiOiJodHRwczovL2ludGVybmFsLWFwaS5zZXJ2aWNlLmlhZC5naXRodWIubmV0L3JlcG9zL2F3cy1wb3dlcnRvb2xzL3Bvd2VydG9vbHMtbGFtYmRhLXB5dGhvbi9taWxlc3RvbmVzey9udW1iZXJ9IiwibWlycm9yX3VybCI6bnVsbCwibmFtZSI6InBvd2VydG9vbHMtbGFtYmRhLXB5dGhvbiIsIm5vZGVfaWQiOiJNREV3T2xKbGNHOXphWFJ2Y25reU1qRTVNVGt6TnprPSIsIm5vdGlmaWNhdGlvbnNfdXJsIjoiaHR0cHM6Ly9pbnRlcm5hbC1hcGkuc2VydmljZS5pYWQuZ2l0aHViLm5ldC9yZXBvcy9hd3MtcG93ZXJ0b29scy9wb3dlcnRvb2xzLWxhbWJkYS1weXRob24vbm90aWZpY2F0aW9uc3s/c2luY2UsYWxsLHBhcnRpY2lwYXRpbmd9Iiwib3Blbl9pc3N1ZXMiOjYyLCJvcGVuX2lzc3Vlc19jb3VudCI6NjIsIm93bmVyIjp7ImF2YXRhcl91cmwiOiJodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTI5MTI3NjM4P3Y9NCIsImV2ZW50c191cmwiOiJodHRwczovL2ludGVybmFsLWFwaS5zZXJ2aWNlLmlhZC5naXRodWIubmV0L3VzZXJzL2F3cy1wb3dlcnRvb2xzL2V2ZW50c3svcHJpdmFjeX0iLCJmb2xsb3dlcnNfdXJsIjoiaHR0cHM6Ly9pbnRlcm5hbC1hcGkuc2VydmljZS5pYWQuZ2l0aHViLm5ldC91c2Vycy9hd3MtcG93ZXJ0b29scy9mb2xsb3dlcnMiLCJmb2xsb3dpbmdfdXJsIjoiaHR0cHM6Ly9pbnRlcm5hbC1hcGkuc2VydmljZS5pYWQuZ2l0aHViLm5ldC91c2Vycy9hd3MtcG93ZXJ0b29scy9mb2xsb3dpbmd7L290aGVyX3VzZXJ9IiwiZ2lzdHNfdXJsIjoiaHR0cHM6Ly9pbnRlcm5hbC1hcGkuc2VydmljZS5pYWQuZ2l0aHViLm5ldC91c2Vycy9hd3MtcG93ZXJ0b29scy9naXN0c3svZ2lzdF9pZH0iLCJncmF2YXRhcl9pZCI6IiIsImh0bWxfdXJsIjoiaHR0cHM6Ly9naXRodWIuY29tL2F3cy1wb3dlcnRvb2xzIiwiaWQiOjEyOTEyNzYzOCwibG9naW4iOiJhd3MtcG93ZXJ0b29scyIsIm5vZGVfaWQiOiJPX2tnRE9CN0pVMWciLCJvcmdhbml6YXRpb25zX3VybCI6Imh0dHBzOi8vaW50ZXJuYWwtYXBpLnNlcnZpY2UuaWFkLmdpdGh1Yi5uZXQvdXNlcnMvYXdzLXBvd2VydG9vbHMvb3JncyIsInJlY2VpdmVkX2V2ZW50c191cmwiOiJodHRwczovL2ludGVybmFsLWFwaS5zZXJ2aWNlLmlhZC5naXRodWIubmV0L3VzZXJzL2F3cy1wb3dlcnRvb2xzL3JlY2VpdmVkX2V2ZW50cyIsInJlcG9zX3VybCI6Imh0dHBzOi8vaW50ZXJuYWwtYXBpLnNlcnZpY2UuaWFkLmdpdGh1Yi5uZXQvdXNlcnMvYXdzLXBvd2VydG9vbHMvcmVwb3MiLCJzaXRlX2FkbWluIjpmYWxzZSwic3RhcnJlZF91cmwiOiJodHRwczovL2ludGVybmFsLWFwaS5zZXJ2aWNlLmlhZC5naXRodWIubmV0L3VzZXJzL2F3cy1wb3dlcnRvb2xzL3N0YXJyZWR7L293bmVyfXsvcmVwb30iLCJzdWJzY3JpcHRpb25zX3VybCI6Imh0dHBzOi8vaW50ZXJuYWwtYXBpLnNlcnZpY2UuaWFkLmdpdGh1Yi5uZXQvdXNlcnMvYXdzLXBvd2VydG9vbHMvc3Vic2NyaXB0aW9ucyIsInR5cGUiOiJPcmdhbml6YXRpb24iLCJ1cmwiOiJodHRwczovL2ludGVybmFsLWFwaS5zZXJ2aWNlLmlhZC5naXRodWIubmV0L3VzZXJzL2F3cy1wb3dlcnRvb2xzIiwidXNlcl92aWV3X3R5cGUiOiJwdWJsaWMifSwicHJpdmF0ZSI6ZmFsc2UsInB1bGxzX3VybCI6Imh0dHBzOi8vaW50ZXJuYWwtYXBpLnNlcnZpY2UuaWFkLmdpdGh1Yi5uZXQvcmVwb3MvYXdzLXBvd2VydG9vbHMvcG93ZXJ0b29scy1sYW1iZGEtcHl0aG9uL3B1bGxzey9udW1iZXJ9IiwicHVzaGVkX2F0IjoiMjAyNS0wOC0yOFQwMDo1Nzo0NloiLCJyZWxlYXNlc191cmwiOiJodHRwczovL2ludGVybmFsLWFwaS5zZXJ2aWNlLmlhZC5naXRodWIubmV0L3JlcG9zL2F3cy1wb3dlcnRvb2xzL3Bvd2VydG9vbHMtbGFtYmRhLXB5dGhvbi9yZWxlYXNlc3svaWR9Iiwic2l6ZSI6MTMxMjM0LCJzc2hfdXJsIjoiZ2l0QGdpdGh1Yi5jb206YXdzLXBvd2VydG9vbHMvcG93ZXJ0b29scy1sYW1iZGEtcHl0aG9uLmdpdCIsInN0YXJnYXplcnNfY291bnQiOjMxMzAsInN0YXJnYXplcnNfdXJsIjoiaHR0cHM6Ly9pbnRlcm5hbC1hcGkuc2VydmljZS5pYWQuZ2l0aHViLm5ldC9yZXBvcy9hd3MtcG93ZXJ0b29scy9wb3dlcnRvb2xzLWxhbWJkYS1weXRob24vc3RhcmdhemVycyIsInN0YXR1c2VzX3VybCI6Imh0dHBzOi8vaW50ZXJuYWwtYXBpLnNlcnZpY2UuaWFkLmdpdGh1Yi5uZXQvcmVwb3MvYXdzLXBvd2VydG9vbHMvcG93ZXJ0b29scy1sYW1iZGEtcHl0aG9uL3N0YXR1c2VzL3tzaGF9Iiwic3Vic2NyaWJlcnNfdXJsIjoiaHR0cHM6Ly9pbnRlcm5hbC1hcGkuc2VydmljZS5pYWQuZ2l0aHViLm5ldC9yZXBvcy9hd3MtcG93ZXJ0b29scy9wb3dlcnRvb2xzLWxhbWJkYS1weXRob24vc3Vic2NyaWJlcnMiLCJzdWJzY3JpcHRpb25fdXJsIjoiaHR0cHM6Ly9pbnRlcm5hbC1hcGkuc2VydmljZS5pYWQuZ2l0aHViLm5ldC9yZXBvcy9hd3MtcG93ZXJ0b29scy9wb3dlcnRvb2xzLWxhbWJkYS1weXRob24vc3Vic2NyaXB0aW9uIiwic3ZuX3VybCI6Imh0dHBzOi8vZ2l0aHViLmNvbS9hd3MtcG93ZXJ0b29scy9wb3dlcnRvb2xzLWxhbWJkYS1weXRob24iLCJ0YWdzX3VybCI6Imh0dHBzOi8vaW50ZXJuYWwtYXBpLnNlcnZpY2UuaWFkLmdpdGh1Yi5uZXQvcmVwb3MvYXdzLXBvd2VydG9vbHMvcG93ZXJ0b29scy1sYW1iZGEtcHl0aG9uL3RhZ3MiLCJ0ZWFtc191cmwiOiJodHRwczovL2ludGVybmFsLWFwaS5zZXJ2aWNlLmlhZC5naXRodWIubmV0L3JlcG9zL2F3cy1wb3dlcnRvb2xzL3Bvd2VydG9vbHMtbGFtYmRhLXB5dGhvbi90ZWFtcyIsInRvcGljcyI6WyJhd3MiLCJhd3MtbGFtYmRhIiwibGFtYmRhIiwicHl0aG9uIiwic2VydmVybGVzcyJdLCJ0cmVlc191cmwiOiJodHRwczovL2ludGVybmFsLWFwaS5zZXJ2aWNlLmlhZC5naXRodWIubmV0L3JlcG9zL2F3cy1wb3dlcnRvb2xzL3Bvd2VydG9vbHMtbGFtYmRhLXB5dGhvbi9naXQvdHJlZXN7L3NoYX0iLCJ1cGRhdGVkX2F0IjoiMjAyNS0wOC0yN1QxNjo0MDozMFoiLCJ1cmwiOiJodHRwczovL2ludGVybmFsLWFwaS5zZXJ2aWNlLmlhZC5naXRodWIubmV0L3JlcG9zL2F3cy1wb3dlcnRvb2xzL3Bvd2VydG9vbHMtbGFtYmRhLXB5dGhvbiIsInZpc2liaWxpdHkiOiJwdWJsaWMiLCJ3YXRjaGVycyI6MzEzMCwid2F0Y2hlcnNfY291bnQiOjMxMzAsIndlYl9jb21taXRfc2lnbm9mZl9yZXF1aXJlZCI6dHJ1ZX0sInNjaGVkdWxlIjoiMCA4ICogKiAxLTUiLCJ3b3JrZmxvdyI6Ii5naXRodWIvd29ya2Zsb3dzL3ByZS1yZWxlYXNlLnltbCJ9LCJnaXRodWJfaGVhZF9yZWYiOiIiLCJnaXRodWJfcmVmIjoicmVmcy9oZWFkcy9kZXZlbG9wIiwiZ2l0aHViX3JlZl90eXBlIjoiYnJhbmNoIiwiZ2l0aHViX3JlcG9zaXRvcnlfaWQiOiIyMjE5MTkzNzkiLCJnaXRodWJfcmVwb3NpdG9yeV9vd25lciI6ImF3cy1wb3dlcnRvb2xzIiwiZ2l0aHViX3JlcG9zaXRvcnlfb3duZXJfaWQiOiIxMjkxMjc2MzgiLCJnaXRodWJfcnVuX2F0dGVtcHQiOiIxIiwiZ2l0aHViX3J1bl9pZCI6IjE3Mjg5NjY5NzU3IiwiZ2l0aHViX3J1bl9udW1iZXIiOiIzMTYiLCJnaXRodWJfc2hhMSI6ImI0ZjQ1ZTNhMjViNGQ5ZDU2MjQzMDE3MjMyYTMwYWIwMGIxZTViNWMifX0sIm1ldGFkYXRhIjp7ImJ1aWxkSW52b2NhdGlvbklEIjoiMTcyODk2Njk3NTctMSIsImNvbXBsZXRlbmVzcyI6eyJwYXJhbWV0ZXJzIjp0cnVlLCJlbnZpcm9ubWVudCI6ZmFsc2UsIm1hdGVyaWFscyI6ZmFsc2V9LCJyZXByb2R1Y2libGUiOmZhbHNlfSwibWF0ZXJpYWxzIjpbeyJ1cmkiOiJnaXQraHR0cHM6Ly9naXRodWIuY29tL2F3cy1wb3dlcnRvb2xzL3Bvd2VydG9vbHMtbGFtYmRhLXB5dGhvbkByZWZzL2hlYWRzL2RldmVsb3AiLCJkaWdlc3QiOnsic2hhMSI6ImI0ZjQ1ZTNhMjViNGQ5ZDU2MjQzMDE3MjMyYTMwYWIwMGIxZTViNWMifX1dfX0=", "payloadType":"application/vnd.in-toto+json", "signatures":[{"sig":"MEYCIQCKTcbcdaBS2bj13sHoOMi3ulzXf4n2XV66gS6h/dJlKAIhANcuMRiIRpJTKwDM8ndNd7N9qK4vDs44dXtLjpX9b2/S"}]}} \ No newline at end of file diff --git a/provenance/3.19.1a11/multiple.intoto.jsonl b/provenance/3.19.1a11/multiple.intoto.jsonl new file mode 100644 index 00000000000..5a51ca8be38 --- /dev/null +++ b/provenance/3.19.1a11/multiple.intoto.jsonl @@ -0,0 +1 @@ +{"mediaType":"application/vnd.dev.sigstore.bundle.v0.3+json", "verificationMaterial":{"certificate":{"rawBytes":"MIIHZjCCBuugAwIBAgIUedvYFj3eOkdXKKpp/5nE88JRzIUwCgYIKoZIzj0EAwMwNzEVMBMGA1UEChMMc2lnc3RvcmUuZGV2MR4wHAYDVQQDExVzaWdzdG9yZS1pbnRlcm1lZGlhdGUwHhcNMjUwODI5MDgwNzUyWhcNMjUwODI5MDgxNzUyWjAAMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAERma89gp3JfLO6ffxFtfEu7IkwwRgwl9nfHC1xhshMhYaiRA5CQU+p2LFUwq91/EeKG4sF2qaEvJ+1bS7R98jbqOCBgowggYGMA4GA1UdDwEB/wQEAwIHgDATBgNVHSUEDDAKBggrBgEFBQcDAzAdBgNVHQ4EFgQUGxOgAHt0QzA0dGWzGtxLc8qVO8swHwYDVR0jBBgwFoAU39Ppz1YkEZb5qNjpKFWixi4YZD8wgYQGA1UdEQEB/wR6MHiGdmh0dHBzOi8vZ2l0aHViLmNvbS9zbHNhLWZyYW1ld29yay9zbHNhLWdpdGh1Yi1nZW5lcmF0b3IvLmdpdGh1Yi93b3JrZmxvd3MvZ2VuZXJhdG9yX2dlbmVyaWNfc2xzYTMueW1sQHJlZnMvdGFncy92Mi4xLjAwOQYKKwYBBAGDvzABAQQraHR0cHM6Ly90b2tlbi5hY3Rpb25zLmdpdGh1YnVzZXJjb250ZW50LmNvbTAWBgorBgEEAYO/MAECBAhzY2hlZHVsZTA2BgorBgEEAYO/MAEDBChhZmFjZTA5MTFmZWE2YWFlN2M2ZThmYTM2Mzk3ZTA4ZGQxY2QxYjcxMBkGCisGAQQBg78wAQQEC1ByZS1SZWxlYXNlMDUGCisGAQQBg78wAQUEJ2F3cy1wb3dlcnRvb2xzL3Bvd2VydG9vbHMtbGFtYmRhLXB5dGhvbjAgBgorBgEEAYO/MAEGBBJyZWZzL2hlYWRzL2RldmVsb3AwOwYKKwYBBAGDvzABCAQtDCtodHRwczovL3Rva2VuLmFjdGlvbnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tMIGGBgorBgEEAYO/MAEJBHgMdmh0dHBzOi8vZ2l0aHViLmNvbS9zbHNhLWZyYW1ld29yay9zbHNhLWdpdGh1Yi1nZW5lcmF0b3IvLmdpdGh1Yi93b3JrZmxvd3MvZ2VuZXJhdG9yX2dlbmVyaWNfc2xzYTMueW1sQHJlZnMvdGFncy92Mi4xLjAwOAYKKwYBBAGDvzABCgQqDChmN2RkOGM1NGMyMDY3YmFmYzEyY2E3YTU1NTk1ZDVlZTliNzUyMDRhMB0GCisGAQQBg78wAQsEDwwNZ2l0aHViLWhvc3RlZDBKBgorBgEEAYO/MAEMBDwMOmh0dHBzOi8vZ2l0aHViLmNvbS9hd3MtcG93ZXJ0b29scy9wb3dlcnRvb2xzLWxhbWJkYS1weXRob24wOAYKKwYBBAGDvzABDQQqDChhZmFjZTA5MTFmZWE2YWFlN2M2ZThmYTM2Mzk3ZTA4ZGQxY2QxYjcxMCIGCisGAQQBg78wAQ4EFAwScmVmcy9oZWFkcy9kZXZlbG9wMBkGCisGAQQBg78wAQ8ECwwJMjIxOTE5Mzc5MDEGCisGAQQBg78wARAEIwwhaHR0cHM6Ly9naXRodWIuY29tL2F3cy1wb3dlcnRvb2xzMBkGCisGAQQBg78wAREECwwJMTI5MTI3NjM4MH8GCisGAQQBg78wARIEcQxvaHR0cHM6Ly9naXRodWIuY29tL2F3cy1wb3dlcnRvb2xzL3Bvd2VydG9vbHMtbGFtYmRhLXB5dGhvbi8uZ2l0aHViL3dvcmtmbG93cy9wcmUtcmVsZWFzZS55bWxAcmVmcy9oZWFkcy9kZXZlbG9wMDgGCisGAQQBg78wARMEKgwoYWZhY2UwOTExZmVhNmFhZTdjNmU4ZmEzNjM5N2UwOGRkMWNkMWI3MTAYBgorBgEEAYO/MAEUBAoMCHNjaGVkdWxlMG4GCisGAQQBg78wARUEYAxeaHR0cHM6Ly9naXRodWIuY29tL2F3cy1wb3dlcnRvb2xzL3Bvd2VydG9vbHMtbGFtYmRhLXB5dGhvbi9hY3Rpb25zL3J1bnMvMTczMTgyMzg0ODMvYXR0ZW1wdHMvMTAWBgorBgEEAYO/MAEWBAgMBnB1YmxpYzCBiQYKKwYBBAHWeQIEAgR7BHkAdwB1AN09MGrGxxEyYxkeHJlnNwKiSl643jyt/4eKcoAvKe6OAAABmPTeZOQAAAQDAEYwRAIgWedhrZNQlv+bdjCzBhlDbW4a1ljY2AwpXYoI7pQN/1QCIDOqo71m+X0cYJXvuejl3Aqu+6mtPMegw1naFtin+47DMAoGCCqGSM49BAMDA2kAMGYCMQCyGqm5rBNqSAtdfUqlDSO184ohs3jqoQdIKG8r91iyvdpnPHgL6f6YlbO8RHITIf0CMQCF+XNX+D2aTyMRdF+LSpmTmSS9PnQFrbHjSfDnJMdMJF5888ucYPOXHzQ27Bla+ho="}, "tlogEntries":[{"logIndex":"448346519", "logId":{"keyId":"wNI9atQGlz+VWfO6LRygH4QUfY/8W4RFwiT5i5WRgB0="}, "kindVersion":{"kind":"dsse", "version":"0.0.1"}, "integratedTime":"1756454872", "inclusionPromise":{"signedEntryTimestamp":"MEYCIQDi0O0/Zi+loBVjC9jAfrqjLGCQD+0jmm4X3RRwxBOQzAIhAIbUmb0LATjz4/9suRnPgZynVW8iauI+bKQab3G9qWj5"}, "inclusionProof":{"logIndex":"326442257", "rootHash":"RTllzVCAxeiake5CdPQClY1u9g5iZQTOJwSSSEg4kf8=", "treeSize":"326442261", "hashes":["PO6DLdKrJW4HtXmxByR8CSGpFw268E5Mlp1SqwVyD6o=", "uh7Xjvkee/TJafW2W1DIQvEj8aITgLp6xWa+hiod4w8=", "F8tWRSwF7tCnVBAZYVix0FDCD0AOAi2RgFQK9CUxPY8=", "SfOfrNai6EiY6HiyD/keZ1l8FRIvjLZAr15KwJraJhY=", "n50i/8/Nvy6vw34APj2aneYClun7JI/ZHoVVARCO61M=", "DR7fKjNLVc2cYdkIRHHxZhMvsyj4nNlMPlFvzov1uTw=", "EJukrLzR4/KKNKxBfPqE4hNXP1SI11QWYUYDt1OYAR0=", "n0U5nuVLUrLUNRxY/ZdznNxYlPdEEKi3vGtSUjd3Mkw=", "OkmfRMLQidxe5+6ezu/xmhREPXLdRdebOhgHOpNZe0M=", "BPe/9gGbgQV+4N70k/zkxC3244zq+CEwQRaatLI0emM=", "OGq32jFolHqhKnjQVxhtWtAhYS7Fw4VD1aEVBrHutWQ=", "MuAD35rdMVkw4TJGtho/hbe2CPk2TL/LDCOALUmelH8=", "cNtEcRl1wWf3CKJYHT0e0mP0fR6kyBYXrcpXys7j/NQ=", "IoDcrbPugLiY2kXaX5Pfyf58GYtyeWcCwB+9Qb7FVt4=", "wCCU7hO8zBe9mf+YE82KuXgzxyhnEK0FkeZe0lH3dZ4=", "vS7O4ozHIQZJWBiov+mkpI27GE8zAmVCEkRcP3NDyNE="], "checkpoint":{"envelope":"rekor.sigstore.dev - 1193050959916656506\n326442261\nRTllzVCAxeiake5CdPQClY1u9g5iZQTOJwSSSEg4kf8=\n\n— rekor.sigstore.dev wNI9ajBFAiB+ajbfRDvWiyRPYHHl+zZzeUKdJIlNZn+nfdI4s2/2/wIhAO1aNf4AaVcgw8Yg3wK/RJvDZxmXzB077KZJOi+CVhYu\n"}}, "canonicalizedBody":"eyJhcGlWZXJzaW9uIjoiMC4wLjEiLCJraW5kIjoiZHNzZSIsInNwZWMiOnsiZW52ZWxvcGVIYXNoIjp7ImFsZ29yaXRobSI6InNoYTI1NiIsInZhbHVlIjoiNmJlZWVlZGJkNTRiYjY4ZDMzMzNiNWExMWIwZGE2YTU4MjYwMzljZDgwMGY3YTI5ZWMyNTg0MWU1ZDFmN2Q0OCJ9LCJwYXlsb2FkSGFzaCI6eyJhbGdvcml0aG0iOiJzaGEyNTYiLCJ2YWx1ZSI6IjBjNzgwYmQzOTc2YmQyMjUzMDlmNzZhZTJhNzYwNzkyNjE1MjhiMmRjMWE1NWRmZDFjNTg0N2FhZGEwNmJmNjYifSwic2lnbmF0dXJlcyI6W3sic2lnbmF0dXJlIjoiTUVRQ0lBdUhtVjFoUVNCTXpTNWZ2VFNZbnE1dUh3cHlSRENtdlhzdFQ4ZFlTbmRYQWlCL01sMjdOb1ZIT1l5a2x6MWNtN2xINitrRE9ESnJEUmlJaXBlT2w2QkRZQT09IiwidmVyaWZpZXIiOiJMUzB0TFMxQ1JVZEpUaUJEUlZKVVNVWkpRMEZVUlMwdExTMHRDazFKU1VoYWFrTkRRblYxWjBGM1NVSkJaMGxWWldSMldVWnFNMlZQYTJSWVMwdHdjQzgxYmtVNE9FcFNla2xWZDBObldVbExiMXBKZW1vd1JVRjNUWGNLVG5wRlZrMUNUVWRCTVZWRlEyaE5UV015Ykc1ak0xSjJZMjFWZFZwSFZqSk5ValIzU0VGWlJGWlJVVVJGZUZaNllWZGtlbVJIT1hsYVV6RndZbTVTYkFwamJURnNXa2RzYUdSSFZYZElhR05PVFdwVmQwOUVTVFZOUkdkM1RucFZlVmRvWTA1TmFsVjNUMFJKTlUxRVozaE9lbFY1VjJwQlFVMUdhM2RGZDFsSUNrdHZXa2w2YWpCRFFWRlpTVXR2V2tsNmFqQkVRVkZqUkZGblFVVlNiV0U0T1dkd00wcG1URTgyWm1aNFJuUm1SWFUzU1d0M2QxSm5kMnc1Ym1aSVF6RUtlR2h6YUUxb1dXRnBVa0UxUTFGVkszQXlURVpWZDNFNU1TOUZaVXRITkhOR01uRmhSWFpLS3pGaVV6ZFNPVGhxWW5GUFEwSm5iM2RuWjFsSFRVRTBSd3BCTVZWa1JIZEZRaTkzVVVWQmQwbElaMFJCVkVKblRsWklVMVZGUkVSQlMwSm5aM0pDWjBWR1FsRmpSRUY2UVdSQ1owNVdTRkUwUlVablVWVkhlRTluQ2tGSWREQlJla0V3WkVkWGVrZDBlRXhqT0hGV1R6aHpkMGgzV1VSV1VqQnFRa0puZDBadlFWVXpPVkJ3ZWpGWmEwVmFZalZ4VG1wd1MwWlhhWGhwTkZrS1drUTRkMmRaVVVkQk1WVmtSVkZGUWk5M1VqWk5TR2xIWkcxb01HUklRbnBQYVRoMldqSnNNR0ZJVm1sTWJVNTJZbE01ZW1KSVRtaE1WMXA1V1ZjeGJBcGtNamw1WVhrNWVtSklUbWhNVjJSd1pFZG9NVmxwTVc1YVZ6VnNZMjFHTUdJelNYWk1iV1J3WkVkb01WbHBPVE5pTTBweVdtMTRkbVF6VFhaYU1sWjFDbHBZU21oa1J6bDVXREprYkdKdFZubGhWMDVtWXpKNGVsbFVUWFZsVnpGelVVaEtiRnB1VFhaa1IwWnVZM2s1TWsxcE5IaE1ha0YzVDFGWlMwdDNXVUlLUWtGSFJIWjZRVUpCVVZGeVlVaFNNR05JVFRaTWVUa3dZakowYkdKcE5XaFpNMUp3WWpJMWVreHRaSEJrUjJneFdXNVdlbHBZU21waU1qVXdXbGMxTUFwTWJVNTJZbFJCVjBKbmIzSkNaMFZGUVZsUEwwMUJSVU5DUVdoNldUSm9iRnBJVm5OYVZFRXlRbWR2Y2tKblJVVkJXVTh2VFVGRlJFSkRhR2hhYlVacUNscFVRVFZOVkVadFdsZEZNbGxYUm14T01rMHlXbFJvYlZsVVRUSk5lbXN6V2xSQk5GcEhVWGhaTWxGNFdXcGplRTFDYTBkRGFYTkhRVkZSUW1jM09IY0tRVkZSUlVNeFFubGFVekZUV2xkNGJGbFlUbXhOUkZWSFEybHpSMEZSVVVKbk56aDNRVkZWUlVveVJqTmplVEYzWWpOa2JHTnVVblppTW5oNlRETkNkZ3BrTWxaNVpFYzVkbUpJVFhSaVIwWjBXVzFTYUV4WVFqVmtSMmgyWW1wQlowSm5iM0pDWjBWRlFWbFBMMDFCUlVkQ1FrcDVXbGRhZWt3eWFHeFpWMUo2Q2t3eVVteGtiVlp6WWpOQmQwOTNXVXRMZDFsQ1FrRkhSSFo2UVVKRFFWRjBSRU4wYjJSSVVuZGplbTkyVEROU2RtRXlWblZNYlVacVpFZHNkbUp1VFhVS1dqSnNNR0ZJVm1sa1dFNXNZMjFPZG1KdVVteGlibEYxV1RJNWRFMUpSMGRDWjI5eVFtZEZSVUZaVHk5TlFVVktRa2huVFdSdGFEQmtTRUo2VDJrNGRncGFNbXd3WVVoV2FVeHRUblppVXpsNllraE9hRXhYV25sWlZ6RnNaREk1ZVdGNU9YcGlTRTVvVEZka2NHUkhhREZaYVRGdVdsYzFiR050UmpCaU0wbDJDa3h0WkhCa1IyZ3hXV2s1TTJJelNuSmFiWGgyWkROTmRsb3lWblZhV0Vwb1pFYzVlVmd5Wkd4aWJWWjVZVmRPWm1NeWVIcFpWRTExWlZjeGMxRklTbXdLV201TmRtUkhSbTVqZVRreVRXazBlRXhxUVhkUFFWbExTM2RaUWtKQlIwUjJla0ZDUTJkUmNVUkRhRzFPTWxKclQwZE5NVTVIVFhsTlJGa3pXVzFHYlFwWmVrVjVXVEpGTTFsVVZURk9WR3N4V2tSV2JGcFViR2xPZWxWNVRVUlNhRTFDTUVkRGFYTkhRVkZSUW1jM09IZEJVWE5GUkhkM1Rsb3liREJoU0ZacENreFhhSFpqTTFKc1drUkNTMEpuYjNKQ1owVkZRVmxQTDAxQlJVMUNSSGROVDIxb01HUklRbnBQYVRoMldqSnNNR0ZJVm1sTWJVNTJZbE01YUdRelRYUUtZMGM1TTFwWVNqQmlNamx6WTNrNWQySXpaR3hqYmxKMllqSjRla3hYZUdoaVYwcHJXVk14ZDJWWVVtOWlNalIzVDBGWlMwdDNXVUpDUVVkRWRucEJRZ3BFVVZGeFJFTm9hRnB0Um1wYVZFRTFUVlJHYlZwWFJUSlpWMFpzVGpKTk1scFVhRzFaVkUweVRYcHJNMXBVUVRSYVIxRjRXVEpSZUZscVkzaE5RMGxIQ2tOcGMwZEJVVkZDWnpjNGQwRlJORVZHUVhkVFkyMVdiV041T1c5YVYwWnJZM2s1YTFwWVdteGlSemwzVFVKclIwTnBjMGRCVVZGQ1p6YzRkMEZST0VVS1EzZDNTazFxU1hoUFZFVTFUWHBqTlUxRVJVZERhWE5IUVZGUlFtYzNPSGRCVWtGRlNYZDNhR0ZJVWpCalNFMDJUSGs1Ym1GWVVtOWtWMGwxV1RJNWRBcE1Na1l6WTNreGQySXpaR3hqYmxKMllqSjRlazFDYTBkRGFYTkhRVkZSUW1jM09IZEJVa1ZGUTNkM1NrMVVTVFZOVkVrelRtcE5ORTFJT0VkRGFYTkhDa0ZSVVVKbk56aDNRVkpKUldOUmVIWmhTRkl3WTBoTk5reDVPVzVoV0ZKdlpGZEpkVmt5T1hSTU1rWXpZM2t4ZDJJelpHeGpibEoyWWpKNGVrd3pRbllLWkRKV2VXUkhPWFppU0UxMFlrZEdkRmx0VW1oTVdFSTFaRWRvZG1KcE9IVmFNbXd3WVVoV2FVd3paSFpqYlhSdFlrYzVNMk41T1hkamJWVjBZMjFXY3dwYVYwWjZXbE0xTldKWGVFRmpiVlp0WTNrNWIxcFhSbXRqZVRscldsaGFiR0pIT1hkTlJHZEhRMmx6UjBGUlVVSm5OemgzUVZKTlJVdG5kMjlaVjFwb0Nsa3lWWGRQVkVWNFdtMVdhRTV0Um1oYVZHUnFUbTFWTkZwdFJYcE9hazAxVGpKVmQwOUhVbXROVjA1clRWZEpNMDFVUVZsQ1oyOXlRbWRGUlVGWlR5OEtUVUZGVlVKQmIwMURTRTVxWVVkV2EyUlhlR3hOUnpSSFEybHpSMEZSVVVKbk56aDNRVkpWUlZsQmVHVmhTRkl3WTBoTk5reDVPVzVoV0ZKdlpGZEpkUXBaTWpsMFRESkdNMk41TVhkaU0yUnNZMjVTZG1JeWVIcE1NMEoyWkRKV2VXUkhPWFppU0UxMFlrZEdkRmx0VW1oTVdFSTFaRWRvZG1KcE9XaFpNMUp3Q21JeU5YcE1NMG94WW01TmRrMVVZM3BOVkdkNVRYcG5NRTlFVFhaWldGSXdXbGN4ZDJSSVRYWk5WRUZYUW1kdmNrSm5SVVZCV1U4dlRVRkZWMEpCWjAwS1FtNUNNVmx0ZUhCWmVrTkNhVkZaUzB0M1dVSkNRVWhYWlZGSlJVRm5VamRDU0d0QlpIZENNVUZPTURsTlIzSkhlSGhGZVZsNGEyVklTbXh1VG5kTGFRcFRiRFkwTTJwNWRDODBaVXRqYjBGMlMyVTJUMEZCUVVKdFVGUmxXazlSUVVGQlVVUkJSVmwzVWtGSloxZGxaR2h5V2s1UmJIWXJZbVJxUTNwQ2FHeEVDbUpYTkdFeGJHcFpNa0YzY0ZoWmIwazNjRkZPTHpGUlEwbEVUM0Z2TnpGdEsxZ3dZMWxLV0haMVpXcHNNMEZ4ZFNzMmJYUlFUV1ZuZHpGdVlVWjBhVzRLS3pRM1JFMUJiMGREUTNGSFUwMDBPVUpCVFVSQk1tdEJUVWRaUTAxUlEzbEhjVzAxY2tKT2NWTkJkR1JtVlhGc1JGTlBNVGcwYjJoek0ycHhiMUZrU1FwTFJ6aHlPVEZwZVhaa2NHNVFTR2RNTm1ZMldXeGlUemhTU0VsVVNXWXdRMDFSUTBZcldFNVlLMFF5WVZSNVRWSmtSaXRNVTNCdFZHMVRVemxRYmxGR0NuSmlTR3BUWmtSdVNrMWtUVXBHTlRnNE9IVmpXVkJQV0VoNlVUSTNRbXhoSzJodlBRb3RMUzB0TFVWT1JDQkRSVkpVU1VaSlEwRlVSUzB0TFMwdENnPT0ifV19fQ=="}]}, "dsseEnvelope":{"payload":"eyJfdHlwZSI6Imh0dHBzOi8vaW4tdG90by5pby9TdGF0ZW1lbnQvdjAuMSIsInByZWRpY2F0ZVR5cGUiOiJodHRwczovL3Nsc2EuZGV2L3Byb3ZlbmFuY2UvdjAuMiIsInN1YmplY3QiOlt7Im5hbWUiOiIuL2F3c19sYW1iZGFfcG93ZXJ0b29scy0zLjE5LjFhMTEtcHkzLW5vbmUtYW55LndobCIsImRpZ2VzdCI6eyJzaGEyNTYiOiJhOGNhZTgxYTRkY2IzZDRhYTZmNjViYWZkODgxYzVhNjljNjM1ZGE5ZjMxNjNlZDI3MzJiMzU3ZWU0ODNiMDA1In19LHsibmFtZSI6Ii4vYXdzX2xhbWJkYV9wb3dlcnRvb2xzLTMuMTkuMWExMS50YXIuZ3oiLCJkaWdlc3QiOnsic2hhMjU2IjoiM2VhYjllNzEwYWE1MTRhMWVjNGZiMzA5NjA5MTkzMTU0NDI0YWVkYjQ0ODIxZDhiNjk2YmMxZTlmZjZhZGQ1MyJ9fV0sInByZWRpY2F0ZSI6eyJidWlsZGVyIjp7ImlkIjoiaHR0cHM6Ly9naXRodWIuY29tL3Nsc2EtZnJhbWV3b3JrL3Nsc2EtZ2l0aHViLWdlbmVyYXRvci8uZ2l0aHViL3dvcmtmbG93cy9nZW5lcmF0b3JfZ2VuZXJpY19zbHNhMy55bWxAcmVmcy90YWdzL3YyLjEuMCJ9LCJidWlsZFR5cGUiOiJodHRwczovL2dpdGh1Yi5jb20vc2xzYS1mcmFtZXdvcmsvc2xzYS1naXRodWItZ2VuZXJhdG9yL2dlbmVyaWNAdjEiLCJpbnZvY2F0aW9uIjp7ImNvbmZpZ1NvdXJjZSI6eyJ1cmkiOiJnaXQraHR0cHM6Ly9naXRodWIuY29tL2F3cy1wb3dlcnRvb2xzL3Bvd2VydG9vbHMtbGFtYmRhLXB5dGhvbkByZWZzL2hlYWRzL2RldmVsb3AiLCJkaWdlc3QiOnsic2hhMSI6ImFmYWNlMDkxMWZlYTZhYWU3YzZlOGZhMzYzOTdlMDhkZDFjZDFiNzEifSwiZW50cnlQb2ludCI6Ii5naXRodWIvd29ya2Zsb3dzL3ByZS1yZWxlYXNlLnltbCJ9LCJwYXJhbWV0ZXJzIjp7InZhcnMiOnt9fSwiZW52aXJvbm1lbnQiOnsiZ2l0aHViX2FjdG9yIjoibGVhbmRyb2RhbWFzY2VuYSIsImdpdGh1Yl9hY3Rvcl9pZCI6IjQyOTUxNzMiLCJnaXRodWJfYmFzZV9yZWYiOiIiLCJnaXRodWJfZXZlbnRfbmFtZSI6InNjaGVkdWxlIiwiZ2l0aHViX2V2ZW50X3BheWxvYWQiOnsiZW50ZXJwcmlzZSI6eyJhdmF0YXJfdXJsIjoiaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS9iLzEyOTA/dj00IiwiY3JlYXRlZF9hdCI6IjIwMTktMTEtMTNUMTg6MDU6NDFaIiwiZGVzY3JpcHRpb24iOiIiLCJodG1sX3VybCI6Imh0dHBzOi8vZ2l0aHViLmNvbS9lbnRlcnByaXNlcy9hbWF6b24iLCJpZCI6MTI5MCwibmFtZSI6IkFtYXpvbiIsIm5vZGVfaWQiOiJNREV3T2tWdWRHVnljSEpwYzJVeE1qa3ciLCJzbHVnIjoiYW1hem9uIiwidXBkYXRlZF9hdCI6IjIwMjUtMDgtMTJUMjA6NTk6MTRaIiwid2Vic2l0ZV91cmwiOiJodHRwczovL3d3dy5hbWF6b24uY29tLyJ9LCJvcmdhbml6YXRpb24iOnsiYXZhdGFyX3VybCI6Imh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xMjkxMjc2Mzg/dj00IiwiZGVzY3JpcHRpb24iOiIiLCJldmVudHNfdXJsIjoiaHR0cHM6Ly9pbnRlcm5hbC1hcGkuc2VydmljZS5pYWQuZ2l0aHViLm5ldC9vcmdzL2F3cy1wb3dlcnRvb2xzL2V2ZW50cyIsImhvb2tzX3VybCI6Imh0dHBzOi8vaW50ZXJuYWwtYXBpLnNlcnZpY2UuaWFkLmdpdGh1Yi5uZXQvb3Jncy9hd3MtcG93ZXJ0b29scy9ob29rcyIsImlkIjoxMjkxMjc2MzgsImlzc3Vlc191cmwiOiJodHRwczovL2ludGVybmFsLWFwaS5zZXJ2aWNlLmlhZC5naXRodWIubmV0L29yZ3MvYXdzLXBvd2VydG9vbHMvaXNzdWVzIiwibG9naW4iOiJhd3MtcG93ZXJ0b29scyIsIm1lbWJlcnNfdXJsIjoiaHR0cHM6Ly9pbnRlcm5hbC1hcGkuc2VydmljZS5pYWQuZ2l0aHViLm5ldC9vcmdzL2F3cy1wb3dlcnRvb2xzL21lbWJlcnN7L21lbWJlcn0iLCJub2RlX2lkIjoiT19rZ0RPQjdKVTFnIiwicHVibGljX21lbWJlcnNfdXJsIjoiaHR0cHM6Ly9pbnRlcm5hbC1hcGkuc2VydmljZS5pYWQuZ2l0aHViLm5ldC9vcmdzL2F3cy1wb3dlcnRvb2xzL3B1YmxpY19tZW1iZXJzey9tZW1iZXJ9IiwicmVwb3NfdXJsIjoiaHR0cHM6Ly9pbnRlcm5hbC1hcGkuc2VydmljZS5pYWQuZ2l0aHViLm5ldC9vcmdzL2F3cy1wb3dlcnRvb2xzL3JlcG9zIiwidXJsIjoiaHR0cHM6Ly9pbnRlcm5hbC1hcGkuc2VydmljZS5pYWQuZ2l0aHViLm5ldC9vcmdzL2F3cy1wb3dlcnRvb2xzIn0sInJlcG9zaXRvcnkiOnsiYWxsb3dfZm9ya2luZyI6dHJ1ZSwiYXJjaGl2ZV91cmwiOiJodHRwczovL2ludGVybmFsLWFwaS5zZXJ2aWNlLmlhZC5naXRodWIubmV0L3JlcG9zL2F3cy1wb3dlcnRvb2xzL3Bvd2VydG9vbHMtbGFtYmRhLXB5dGhvbi97YXJjaGl2ZV9mb3JtYXR9ey9yZWZ9IiwiYXJjaGl2ZWQiOmZhbHNlLCJhc3NpZ25lZXNfdXJsIjoiaHR0cHM6Ly9pbnRlcm5hbC1hcGkuc2VydmljZS5pYWQuZ2l0aHViLm5ldC9yZXBvcy9hd3MtcG93ZXJ0b29scy9wb3dlcnRvb2xzLWxhbWJkYS1weXRob24vYXNzaWduZWVzey91c2VyfSIsImJsb2JzX3VybCI6Imh0dHBzOi8vaW50ZXJuYWwtYXBpLnNlcnZpY2UuaWFkLmdpdGh1Yi5uZXQvcmVwb3MvYXdzLXBvd2VydG9vbHMvcG93ZXJ0b29scy1sYW1iZGEtcHl0aG9uL2dpdC9ibG9ic3svc2hhfSIsImJyYW5jaGVzX3VybCI6Imh0dHBzOi8vaW50ZXJuYWwtYXBpLnNlcnZpY2UuaWFkLmdpdGh1Yi5uZXQvcmVwb3MvYXdzLXBvd2VydG9vbHMvcG93ZXJ0b29scy1sYW1iZGEtcHl0aG9uL2JyYW5jaGVzey9icmFuY2h9IiwiY2xvbmVfdXJsIjoiaHR0cHM6Ly9naXRodWIuY29tL2F3cy1wb3dlcnRvb2xzL3Bvd2VydG9vbHMtbGFtYmRhLXB5dGhvbi5naXQiLCJjb2xsYWJvcmF0b3JzX3VybCI6Imh0dHBzOi8vaW50ZXJuYWwtYXBpLnNlcnZpY2UuaWFkLmdpdGh1Yi5uZXQvcmVwb3MvYXdzLXBvd2VydG9vbHMvcG93ZXJ0b29scy1sYW1iZGEtcHl0aG9uL2NvbGxhYm9yYXRvcnN7L2NvbGxhYm9yYXRvcn0iLCJjb21tZW50c191cmwiOiJodHRwczovL2ludGVybmFsLWFwaS5zZXJ2aWNlLmlhZC5naXRodWIubmV0L3JlcG9zL2F3cy1wb3dlcnRvb2xzL3Bvd2VydG9vbHMtbGFtYmRhLXB5dGhvbi9jb21tZW50c3svbnVtYmVyfSIsImNvbW1pdHNfdXJsIjoiaHR0cHM6Ly9pbnRlcm5hbC1hcGkuc2VydmljZS5pYWQuZ2l0aHViLm5ldC9yZXBvcy9hd3MtcG93ZXJ0b29scy9wb3dlcnRvb2xzLWxhbWJkYS1weXRob24vY29tbWl0c3svc2hhfSIsImNvbXBhcmVfdXJsIjoiaHR0cHM6Ly9pbnRlcm5hbC1hcGkuc2VydmljZS5pYWQuZ2l0aHViLm5ldC9yZXBvcy9hd3MtcG93ZXJ0b29scy9wb3dlcnRvb2xzLWxhbWJkYS1weXRob24vY29tcGFyZS97YmFzZX0uLi57aGVhZH0iLCJjb250ZW50c191cmwiOiJodHRwczovL2ludGVybmFsLWFwaS5zZXJ2aWNlLmlhZC5naXRodWIubmV0L3JlcG9zL2F3cy1wb3dlcnRvb2xzL3Bvd2VydG9vbHMtbGFtYmRhLXB5dGhvbi9jb250ZW50cy97K3BhdGh9IiwiY29udHJpYnV0b3JzX3VybCI6Imh0dHBzOi8vaW50ZXJuYWwtYXBpLnNlcnZpY2UuaWFkLmdpdGh1Yi5uZXQvcmVwb3MvYXdzLXBvd2VydG9vbHMvcG93ZXJ0b29scy1sYW1iZGEtcHl0aG9uL2NvbnRyaWJ1dG9ycyIsImNyZWF0ZWRfYXQiOiIyMDE5LTExLTE1VDEyOjI2OjEyWiIsImN1c3RvbV9wcm9wZXJ0aWVzIjp7InN0YWdpbmciOiJmYWxzZSIsInZpc2liaWxpdHktYWxsb3ctaW50ZXJuYWwiOiJmYWxzZSIsInZpc2liaWxpdHktYWxsb3ctcHJpdmF0ZSI6ImZhbHNlIiwidmlzaWJpbGl0eS1hbGxvdy1wdWJsaWMiOiJ0cnVlIn0sImRlZmF1bHRfYnJhbmNoIjoiZGV2ZWxvcCIsImRlcGxveW1lbnRzX3VybCI6Imh0dHBzOi8vaW50ZXJuYWwtYXBpLnNlcnZpY2UuaWFkLmdpdGh1Yi5uZXQvcmVwb3MvYXdzLXBvd2VydG9vbHMvcG93ZXJ0b29scy1sYW1iZGEtcHl0aG9uL2RlcGxveW1lbnRzIiwiZGVzY3JpcHRpb24iOiJBIGRldmVsb3BlciB0b29sa2l0IHRvIGltcGxlbWVudCBTZXJ2ZXJsZXNzIGJlc3QgcHJhY3RpY2VzIGFuZCBpbmNyZWFzZSBkZXZlbG9wZXIgdmVsb2NpdHkuIiwiZGlzYWJsZWQiOmZhbHNlLCJkb3dubG9hZHNfdXJsIjoiaHR0cHM6Ly9pbnRlcm5hbC1hcGkuc2VydmljZS5pYWQuZ2l0aHViLm5ldC9yZXBvcy9hd3MtcG93ZXJ0b29scy9wb3dlcnRvb2xzLWxhbWJkYS1weXRob24vZG93bmxvYWRzIiwiZXZlbnRzX3VybCI6Imh0dHBzOi8vaW50ZXJuYWwtYXBpLnNlcnZpY2UuaWFkLmdpdGh1Yi5uZXQvcmVwb3MvYXdzLXBvd2VydG9vbHMvcG93ZXJ0b29scy1sYW1iZGEtcHl0aG9uL2V2ZW50cyIsImZvcmsiOmZhbHNlLCJmb3JrcyI6NDQ5LCJmb3Jrc19jb3VudCI6NDQ5LCJmb3Jrc191cmwiOiJodHRwczovL2ludGVybmFsLWFwaS5zZXJ2aWNlLmlhZC5naXRodWIubmV0L3JlcG9zL2F3cy1wb3dlcnRvb2xzL3Bvd2VydG9vbHMtbGFtYmRhLXB5dGhvbi9mb3JrcyIsImZ1bGxfbmFtZSI6ImF3cy1wb3dlcnRvb2xzL3Bvd2VydG9vbHMtbGFtYmRhLXB5dGhvbiIsImdpdF9jb21taXRzX3VybCI6Imh0dHBzOi8vaW50ZXJuYWwtYXBpLnNlcnZpY2UuaWFkLmdpdGh1Yi5uZXQvcmVwb3MvYXdzLXBvd2VydG9vbHMvcG93ZXJ0b29scy1sYW1iZGEtcHl0aG9uL2dpdC9jb21taXRzey9zaGF9IiwiZ2l0X3JlZnNfdXJsIjoiaHR0cHM6Ly9pbnRlcm5hbC1hcGkuc2VydmljZS5pYWQuZ2l0aHViLm5ldC9yZXBvcy9hd3MtcG93ZXJ0b29scy9wb3dlcnRvb2xzLWxhbWJkYS1weXRob24vZ2l0L3JlZnN7L3NoYX0iLCJnaXRfdGFnc191cmwiOiJodHRwczovL2ludGVybmFsLWFwaS5zZXJ2aWNlLmlhZC5naXRodWIubmV0L3JlcG9zL2F3cy1wb3dlcnRvb2xzL3Bvd2VydG9vbHMtbGFtYmRhLXB5dGhvbi9naXQvdGFnc3svc2hhfSIsImdpdF91cmwiOiJnaXQ6Ly9naXRodWIuY29tL2F3cy1wb3dlcnRvb2xzL3Bvd2VydG9vbHMtbGFtYmRhLXB5dGhvbi5naXQiLCJoYXNfZGlzY3Vzc2lvbnMiOnRydWUsImhhc19kb3dubG9hZHMiOnRydWUsImhhc19pc3N1ZXMiOnRydWUsImhhc19wYWdlcyI6ZmFsc2UsImhhc19wcm9qZWN0cyI6dHJ1ZSwiaGFzX3dpa2kiOmZhbHNlLCJob21lcGFnZSI6Imh0dHBzOi8vZG9jcy5wb3dlcnRvb2xzLmF3cy5kZXYvbGFtYmRhL3B5dGhvbi9sYXRlc3QvIiwiaG9va3NfdXJsIjoiaHR0cHM6Ly9pbnRlcm5hbC1hcGkuc2VydmljZS5pYWQuZ2l0aHViLm5ldC9yZXBvcy9hd3MtcG93ZXJ0b29scy9wb3dlcnRvb2xzLWxhbWJkYS1weXRob24vaG9va3MiLCJodG1sX3VybCI6Imh0dHBzOi8vZ2l0aHViLmNvbS9hd3MtcG93ZXJ0b29scy9wb3dlcnRvb2xzLWxhbWJkYS1weXRob24iLCJpZCI6MjIxOTE5Mzc5LCJpc190ZW1wbGF0ZSI6ZmFsc2UsImlzc3VlX2NvbW1lbnRfdXJsIjoiaHR0cHM6Ly9pbnRlcm5hbC1hcGkuc2VydmljZS5pYWQuZ2l0aHViLm5ldC9yZXBvcy9hd3MtcG93ZXJ0b29scy9wb3dlcnRvb2xzLWxhbWJkYS1weXRob24vaXNzdWVzL2NvbW1lbnRzey9udW1iZXJ9IiwiaXNzdWVfZXZlbnRzX3VybCI6Imh0dHBzOi8vaW50ZXJuYWwtYXBpLnNlcnZpY2UuaWFkLmdpdGh1Yi5uZXQvcmVwb3MvYXdzLXBvd2VydG9vbHMvcG93ZXJ0b29scy1sYW1iZGEtcHl0aG9uL2lzc3Vlcy9ldmVudHN7L251bWJlcn0iLCJpc3N1ZXNfdXJsIjoiaHR0cHM6Ly9pbnRlcm5hbC1hcGkuc2VydmljZS5pYWQuZ2l0aHViLm5ldC9yZXBvcy9hd3MtcG93ZXJ0b29scy9wb3dlcnRvb2xzLWxhbWJkYS1weXRob24vaXNzdWVzey9udW1iZXJ9Iiwia2V5c191cmwiOiJodHRwczovL2ludGVybmFsLWFwaS5zZXJ2aWNlLmlhZC5naXRodWIubmV0L3JlcG9zL2F3cy1wb3dlcnRvb2xzL3Bvd2VydG9vbHMtbGFtYmRhLXB5dGhvbi9rZXlzey9rZXlfaWR9IiwibGFiZWxzX3VybCI6Imh0dHBzOi8vaW50ZXJuYWwtYXBpLnNlcnZpY2UuaWFkLmdpdGh1Yi5uZXQvcmVwb3MvYXdzLXBvd2VydG9vbHMvcG93ZXJ0b29scy1sYW1iZGEtcHl0aG9uL2xhYmVsc3svbmFtZX0iLCJsYW5ndWFnZSI6IlB5dGhvbiIsImxhbmd1YWdlc191cmwiOiJodHRwczovL2ludGVybmFsLWFwaS5zZXJ2aWNlLmlhZC5naXRodWIubmV0L3JlcG9zL2F3cy1wb3dlcnRvb2xzL3Bvd2VydG9vbHMtbGFtYmRhLXB5dGhvbi9sYW5ndWFnZXMiLCJsaWNlbnNlIjp7ImtleSI6Im1pdC0wIiwibmFtZSI6Ik1JVCBObyBBdHRyaWJ1dGlvbiIsIm5vZGVfaWQiOiJNRGM2VEdsalpXNXpaVFF4Iiwic3BkeF9pZCI6Ik1JVC0wIiwidXJsIjoiaHR0cHM6Ly9pbnRlcm5hbC1hcGkuc2VydmljZS5pYWQuZ2l0aHViLm5ldC9saWNlbnNlcy9taXQtMCJ9LCJtZXJnZXNfdXJsIjoiaHR0cHM6Ly9pbnRlcm5hbC1hcGkuc2VydmljZS5pYWQuZ2l0aHViLm5ldC9yZXBvcy9hd3MtcG93ZXJ0b29scy9wb3dlcnRvb2xzLWxhbWJkYS1weXRob24vbWVyZ2VzIiwibWlsZXN0b25lc191cmwiOiJodHRwczovL2ludGVybmFsLWFwaS5zZXJ2aWNlLmlhZC5naXRodWIubmV0L3JlcG9zL2F3cy1wb3dlcnRvb2xzL3Bvd2VydG9vbHMtbGFtYmRhLXB5dGhvbi9taWxlc3RvbmVzey9udW1iZXJ9IiwibWlycm9yX3VybCI6bnVsbCwibmFtZSI6InBvd2VydG9vbHMtbGFtYmRhLXB5dGhvbiIsIm5vZGVfaWQiOiJNREV3T2xKbGNHOXphWFJ2Y25reU1qRTVNVGt6TnprPSIsIm5vdGlmaWNhdGlvbnNfdXJsIjoiaHR0cHM6Ly9pbnRlcm5hbC1hcGkuc2VydmljZS5pYWQuZ2l0aHViLm5ldC9yZXBvcy9hd3MtcG93ZXJ0b29scy9wb3dlcnRvb2xzLWxhbWJkYS1weXRob24vbm90aWZpY2F0aW9uc3s/c2luY2UsYWxsLHBhcnRpY2lwYXRpbmd9Iiwib3Blbl9pc3N1ZXMiOjU5LCJvcGVuX2lzc3Vlc19jb3VudCI6NTksIm93bmVyIjp7ImF2YXRhcl91cmwiOiJodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTI5MTI3NjM4P3Y9NCIsImV2ZW50c191cmwiOiJodHRwczovL2ludGVybmFsLWFwaS5zZXJ2aWNlLmlhZC5naXRodWIubmV0L3VzZXJzL2F3cy1wb3dlcnRvb2xzL2V2ZW50c3svcHJpdmFjeX0iLCJmb2xsb3dlcnNfdXJsIjoiaHR0cHM6Ly9pbnRlcm5hbC1hcGkuc2VydmljZS5pYWQuZ2l0aHViLm5ldC91c2Vycy9hd3MtcG93ZXJ0b29scy9mb2xsb3dlcnMiLCJmb2xsb3dpbmdfdXJsIjoiaHR0cHM6Ly9pbnRlcm5hbC1hcGkuc2VydmljZS5pYWQuZ2l0aHViLm5ldC91c2Vycy9hd3MtcG93ZXJ0b29scy9mb2xsb3dpbmd7L290aGVyX3VzZXJ9IiwiZ2lzdHNfdXJsIjoiaHR0cHM6Ly9pbnRlcm5hbC1hcGkuc2VydmljZS5pYWQuZ2l0aHViLm5ldC91c2Vycy9hd3MtcG93ZXJ0b29scy9naXN0c3svZ2lzdF9pZH0iLCJncmF2YXRhcl9pZCI6IiIsImh0bWxfdXJsIjoiaHR0cHM6Ly9naXRodWIuY29tL2F3cy1wb3dlcnRvb2xzIiwiaWQiOjEyOTEyNzYzOCwibG9naW4iOiJhd3MtcG93ZXJ0b29scyIsIm5vZGVfaWQiOiJPX2tnRE9CN0pVMWciLCJvcmdhbml6YXRpb25zX3VybCI6Imh0dHBzOi8vaW50ZXJuYWwtYXBpLnNlcnZpY2UuaWFkLmdpdGh1Yi5uZXQvdXNlcnMvYXdzLXBvd2VydG9vbHMvb3JncyIsInJlY2VpdmVkX2V2ZW50c191cmwiOiJodHRwczovL2ludGVybmFsLWFwaS5zZXJ2aWNlLmlhZC5naXRodWIubmV0L3VzZXJzL2F3cy1wb3dlcnRvb2xzL3JlY2VpdmVkX2V2ZW50cyIsInJlcG9zX3VybCI6Imh0dHBzOi8vaW50ZXJuYWwtYXBpLnNlcnZpY2UuaWFkLmdpdGh1Yi5uZXQvdXNlcnMvYXdzLXBvd2VydG9vbHMvcmVwb3MiLCJzaXRlX2FkbWluIjpmYWxzZSwic3RhcnJlZF91cmwiOiJodHRwczovL2ludGVybmFsLWFwaS5zZXJ2aWNlLmlhZC5naXRodWIubmV0L3VzZXJzL2F3cy1wb3dlcnRvb2xzL3N0YXJyZWR7L293bmVyfXsvcmVwb30iLCJzdWJzY3JpcHRpb25zX3VybCI6Imh0dHBzOi8vaW50ZXJuYWwtYXBpLnNlcnZpY2UuaWFkLmdpdGh1Yi5uZXQvdXNlcnMvYXdzLXBvd2VydG9vbHMvc3Vic2NyaXB0aW9ucyIsInR5cGUiOiJPcmdhbml6YXRpb24iLCJ1cmwiOiJodHRwczovL2ludGVybmFsLWFwaS5zZXJ2aWNlLmlhZC5naXRodWIubmV0L3VzZXJzL2F3cy1wb3dlcnRvb2xzIiwidXNlcl92aWV3X3R5cGUiOiJwdWJsaWMifSwicHJpdmF0ZSI6ZmFsc2UsInB1bGxzX3VybCI6Imh0dHBzOi8vaW50ZXJuYWwtYXBpLnNlcnZpY2UuaWFkLmdpdGh1Yi5uZXQvcmVwb3MvYXdzLXBvd2VydG9vbHMvcG93ZXJ0b29scy1sYW1iZGEtcHl0aG9uL3B1bGxzey9udW1iZXJ9IiwicHVzaGVkX2F0IjoiMjAyNS0wOC0yOFQyMDozMTo0OFoiLCJyZWxlYXNlc191cmwiOiJodHRwczovL2ludGVybmFsLWFwaS5zZXJ2aWNlLmlhZC5naXRodWIubmV0L3JlcG9zL2F3cy1wb3dlcnRvb2xzL3Bvd2VydG9vbHMtbGFtYmRhLXB5dGhvbi9yZWxlYXNlc3svaWR9Iiwic2l6ZSI6MTMxMzk3LCJzc2hfdXJsIjoiZ2l0QGdpdGh1Yi5jb206YXdzLXBvd2VydG9vbHMvcG93ZXJ0b29scy1sYW1iZGEtcHl0aG9uLmdpdCIsInN0YXJnYXplcnNfY291bnQiOjMxMzAsInN0YXJnYXplcnNfdXJsIjoiaHR0cHM6Ly9pbnRlcm5hbC1hcGkuc2VydmljZS5pYWQuZ2l0aHViLm5ldC9yZXBvcy9hd3MtcG93ZXJ0b29scy9wb3dlcnRvb2xzLWxhbWJkYS1weXRob24vc3RhcmdhemVycyIsInN0YXR1c2VzX3VybCI6Imh0dHBzOi8vaW50ZXJuYWwtYXBpLnNlcnZpY2UuaWFkLmdpdGh1Yi5uZXQvcmVwb3MvYXdzLXBvd2VydG9vbHMvcG93ZXJ0b29scy1sYW1iZGEtcHl0aG9uL3N0YXR1c2VzL3tzaGF9Iiwic3Vic2NyaWJlcnNfdXJsIjoiaHR0cHM6Ly9pbnRlcm5hbC1hcGkuc2VydmljZS5pYWQuZ2l0aHViLm5ldC9yZXBvcy9hd3MtcG93ZXJ0b29scy9wb3dlcnRvb2xzLWxhbWJkYS1weXRob24vc3Vic2NyaWJlcnMiLCJzdWJzY3JpcHRpb25fdXJsIjoiaHR0cHM6Ly9pbnRlcm5hbC1hcGkuc2VydmljZS5pYWQuZ2l0aHViLm5ldC9yZXBvcy9hd3MtcG93ZXJ0b29scy9wb3dlcnRvb2xzLWxhbWJkYS1weXRob24vc3Vic2NyaXB0aW9uIiwic3ZuX3VybCI6Imh0dHBzOi8vZ2l0aHViLmNvbS9hd3MtcG93ZXJ0b29scy9wb3dlcnRvb2xzLWxhbWJkYS1weXRob24iLCJ0YWdzX3VybCI6Imh0dHBzOi8vaW50ZXJuYWwtYXBpLnNlcnZpY2UuaWFkLmdpdGh1Yi5uZXQvcmVwb3MvYXdzLXBvd2VydG9vbHMvcG93ZXJ0b29scy1sYW1iZGEtcHl0aG9uL3RhZ3MiLCJ0ZWFtc191cmwiOiJodHRwczovL2ludGVybmFsLWFwaS5zZXJ2aWNlLmlhZC5naXRodWIubmV0L3JlcG9zL2F3cy1wb3dlcnRvb2xzL3Bvd2VydG9vbHMtbGFtYmRhLXB5dGhvbi90ZWFtcyIsInRvcGljcyI6WyJhd3MiLCJhd3MtbGFtYmRhIiwibGFtYmRhIiwicHl0aG9uIiwic2VydmVybGVzcyJdLCJ0cmVlc191cmwiOiJodHRwczovL2ludGVybmFsLWFwaS5zZXJ2aWNlLmlhZC5naXRodWIubmV0L3JlcG9zL2F3cy1wb3dlcnRvb2xzL3Bvd2VydG9vbHMtbGFtYmRhLXB5dGhvbi9naXQvdHJlZXN7L3NoYX0iLCJ1cGRhdGVkX2F0IjoiMjAyNS0wOC0yOFQxNTo1Mjo1MloiLCJ1cmwiOiJodHRwczovL2ludGVybmFsLWFwaS5zZXJ2aWNlLmlhZC5naXRodWIubmV0L3JlcG9zL2F3cy1wb3dlcnRvb2xzL3Bvd2VydG9vbHMtbGFtYmRhLXB5dGhvbiIsInZpc2liaWxpdHkiOiJwdWJsaWMiLCJ3YXRjaGVycyI6MzEzMCwid2F0Y2hlcnNfY291bnQiOjMxMzAsIndlYl9jb21taXRfc2lnbm9mZl9yZXF1aXJlZCI6dHJ1ZX0sInNjaGVkdWxlIjoiMCA4ICogKiAxLTUiLCJ3b3JrZmxvdyI6Ii5naXRodWIvd29ya2Zsb3dzL3ByZS1yZWxlYXNlLnltbCJ9LCJnaXRodWJfaGVhZF9yZWYiOiIiLCJnaXRodWJfcmVmIjoicmVmcy9oZWFkcy9kZXZlbG9wIiwiZ2l0aHViX3JlZl90eXBlIjoiYnJhbmNoIiwiZ2l0aHViX3JlcG9zaXRvcnlfaWQiOiIyMjE5MTkzNzkiLCJnaXRodWJfcmVwb3NpdG9yeV9vd25lciI6ImF3cy1wb3dlcnRvb2xzIiwiZ2l0aHViX3JlcG9zaXRvcnlfb3duZXJfaWQiOiIxMjkxMjc2MzgiLCJnaXRodWJfcnVuX2F0dGVtcHQiOiIxIiwiZ2l0aHViX3J1bl9pZCI6IjE3MzE4MjM4NDgzIiwiZ2l0aHViX3J1bl9udW1iZXIiOiIzMTciLCJnaXRodWJfc2hhMSI6ImFmYWNlMDkxMWZlYTZhYWU3YzZlOGZhMzYzOTdlMDhkZDFjZDFiNzEifX0sIm1ldGFkYXRhIjp7ImJ1aWxkSW52b2NhdGlvbklEIjoiMTczMTgyMzg0ODMtMSIsImNvbXBsZXRlbmVzcyI6eyJwYXJhbWV0ZXJzIjp0cnVlLCJlbnZpcm9ubWVudCI6ZmFsc2UsIm1hdGVyaWFscyI6ZmFsc2V9LCJyZXByb2R1Y2libGUiOmZhbHNlfSwibWF0ZXJpYWxzIjpbeyJ1cmkiOiJnaXQraHR0cHM6Ly9naXRodWIuY29tL2F3cy1wb3dlcnRvb2xzL3Bvd2VydG9vbHMtbGFtYmRhLXB5dGhvbkByZWZzL2hlYWRzL2RldmVsb3AiLCJkaWdlc3QiOnsic2hhMSI6ImFmYWNlMDkxMWZlYTZhYWU3YzZlOGZhMzYzOTdlMDhkZDFjZDFiNzEifX1dfX0=", "payloadType":"application/vnd.in-toto+json", "signatures":[{"sig":"MEQCIAuHmV1hQSBMzS5fvTSYnq5uHwpyRDCmvXstT8dYSndXAiB/Ml27NoVHOYyklz1cm7lH6+kDODJrDRiIipeOl6BDYA=="}]}} \ No newline at end of file diff --git a/provenance/3.19.1a12/multiple.intoto.jsonl b/provenance/3.19.1a12/multiple.intoto.jsonl new file mode 100644 index 00000000000..f4dd3cc38ff --- /dev/null +++ b/provenance/3.19.1a12/multiple.intoto.jsonl @@ -0,0 +1 @@ +{"mediaType":"application/vnd.dev.sigstore.bundle.v0.3+json", "verificationMaterial":{"certificate":{"rawBytes":"MIIHaDCCBu2gAwIBAgIUYZUM/3tX6jg3SyUS8UZrCO4ye2cwCgYIKoZIzj0EAwMwNzEVMBMGA1UEChMMc2lnc3RvcmUuZGV2MR4wHAYDVQQDExVzaWdzdG9yZS1pbnRlcm1lZGlhdGUwHhcNMjUwOTAxMDgwNzE2WhcNMjUwOTAxMDgxNzE2WjAAMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEf56NmGaGx1VFnKVqlfFd/FEWUCyg51CDwo41UdMd/Vp+nj26fMH/E9VDjSwjIHgAKl/6oC7o+Vyclw+C2I0RGaOCBgwwggYIMA4GA1UdDwEB/wQEAwIHgDATBgNVHSUEDDAKBggrBgEFBQcDAzAdBgNVHQ4EFgQUAiCwgq3kX2EWKhUDpUawz5FsSLkwHwYDVR0jBBgwFoAU39Ppz1YkEZb5qNjpKFWixi4YZD8wgYQGA1UdEQEB/wR6MHiGdmh0dHBzOi8vZ2l0aHViLmNvbS9zbHNhLWZyYW1ld29yay9zbHNhLWdpdGh1Yi1nZW5lcmF0b3IvLmdpdGh1Yi93b3JrZmxvd3MvZ2VuZXJhdG9yX2dlbmVyaWNfc2xzYTMueW1sQHJlZnMvdGFncy92Mi4xLjAwOQYKKwYBBAGDvzABAQQraHR0cHM6Ly90b2tlbi5hY3Rpb25zLmdpdGh1YnVzZXJjb250ZW50LmNvbTAWBgorBgEEAYO/MAECBAhzY2hlZHVsZTA2BgorBgEEAYO/MAEDBChiYjNjMTNlNWQ4ZGY2YTkxZTkxNDBmOGRmMWZkMzZmYTliMDE4MTUzMBkGCisGAQQBg78wAQQEC1ByZS1SZWxlYXNlMDUGCisGAQQBg78wAQUEJ2F3cy1wb3dlcnRvb2xzL3Bvd2VydG9vbHMtbGFtYmRhLXB5dGhvbjAgBgorBgEEAYO/MAEGBBJyZWZzL2hlYWRzL2RldmVsb3AwOwYKKwYBBAGDvzABCAQtDCtodHRwczovL3Rva2VuLmFjdGlvbnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tMIGGBgorBgEEAYO/MAEJBHgMdmh0dHBzOi8vZ2l0aHViLmNvbS9zbHNhLWZyYW1ld29yay9zbHNhLWdpdGh1Yi1nZW5lcmF0b3IvLmdpdGh1Yi93b3JrZmxvd3MvZ2VuZXJhdG9yX2dlbmVyaWNfc2xzYTMueW1sQHJlZnMvdGFncy92Mi4xLjAwOAYKKwYBBAGDvzABCgQqDChmN2RkOGM1NGMyMDY3YmFmYzEyY2E3YTU1NTk1ZDVlZTliNzUyMDRhMB0GCisGAQQBg78wAQsEDwwNZ2l0aHViLWhvc3RlZDBKBgorBgEEAYO/MAEMBDwMOmh0dHBzOi8vZ2l0aHViLmNvbS9hd3MtcG93ZXJ0b29scy9wb3dlcnRvb2xzLWxhbWJkYS1weXRob24wOAYKKwYBBAGDvzABDQQqDChiYjNjMTNlNWQ4ZGY2YTkxZTkxNDBmOGRmMWZkMzZmYTliMDE4MTUzMCIGCisGAQQBg78wAQ4EFAwScmVmcy9oZWFkcy9kZXZlbG9wMBkGCisGAQQBg78wAQ8ECwwJMjIxOTE5Mzc5MDEGCisGAQQBg78wARAEIwwhaHR0cHM6Ly9naXRodWIuY29tL2F3cy1wb3dlcnRvb2xzMBkGCisGAQQBg78wAREECwwJMTI5MTI3NjM4MH8GCisGAQQBg78wARIEcQxvaHR0cHM6Ly9naXRodWIuY29tL2F3cy1wb3dlcnRvb2xzL3Bvd2VydG9vbHMtbGFtYmRhLXB5dGhvbi8uZ2l0aHViL3dvcmtmbG93cy9wcmUtcmVsZWFzZS55bWxAcmVmcy9oZWFkcy9kZXZlbG9wMDgGCisGAQQBg78wARMEKgwoYmIzYzEzZTVkOGRmNmE5MWU5MTQwZjhkZjFmZDM2ZmE5YjAxODE1MzAYBgorBgEEAYO/MAEUBAoMCHNjaGVkdWxlMG4GCisGAQQBg78wARUEYAxeaHR0cHM6Ly9naXRodWIuY29tL2F3cy1wb3dlcnRvb2xzL3Bvd2VydG9vbHMtbGFtYmRhLXB5dGhvbi9hY3Rpb25zL3J1bnMvMTczNzE0NjMzODkvYXR0ZW1wdHMvMTAWBgorBgEEAYO/MAEWBAgMBnB1YmxpYzCBiwYKKwYBBAHWeQIEAgR9BHsAeQB3AN09MGrGxxEyYxkeHJlnNwKiSl643jyt/4eKcoAvKe6OAAABmQRQ7SEAAAQDAEgwRgIhALF+MbPHmfp5UQfbhHqp2R3PvCfnTCDkhvnFfRPJJUGwAiEAso3mrdyNMF7iqJvznH5/7JKC0rnSz2/Q53P5eO79WWowCgYIKoZIzj0EAwMDaQAwZgIxAP7AWy/LqrGbXrVtySemVkf9k1AqkQ/mpgDgytvLXbLWe8BKi0f1W0Nj7AqFdwlVBwIxALAf4hZIDBTGRjm5qHB9LG8mndH3MZAX68u/BbRVeMRqb6dqqjLrYr42kP/lv3JcUA=="}, "tlogEntries":[{"logIndex":"455616260", "logId":{"keyId":"wNI9atQGlz+VWfO6LRygH4QUfY/8W4RFwiT5i5WRgB0="}, "kindVersion":{"kind":"dsse", "version":"0.0.1"}, "integratedTime":"1756714036", "inclusionPromise":{"signedEntryTimestamp":"MEYCIQCzqvhs4ApMHorImBjehULITBTTzK/8iTPQr/M0Y7sWGQIhALJb3vZ0Audi//FljKdb1r3uYmvcGeO+FJgBci/SZQw9"}, "inclusionProof":{"logIndex":"333711998", "rootHash":"0ogWkROGyfLq4ZZjBhtkZtGBer6lli2i79+hknVl5JA=", "treeSize":"333712006", "hashes":["Jm8brmUaOnehHxnWYHBE9PCWyClxJNxzCeUuwgmFlFY=", "t6Ho8+1YgL+2KBU/Z8GcIlhSLBel63QdjsjpdzNi8bU=", "SDZMha59yYqWuOlT0Tbqv/fCdLGT871LwuvKwcTqxto=", "DW05LvXa4IiiELK99yyv2Z3ZAf4WgJTtnPsxFUDbJCY=", "lkpGPECNC8SxS9fu9sjBpwdRU8qrmSMT6KAdEU/wTLU=", "BLih2t/9vgoNq8WPuPw5xcO6lLudsaOjKzBxcDFOtbU=", "xE8cdNSHSm4KzA5nak4MOvTTqks/fO5a1YcOIG/ZQoQ=", "g8ScEobUb7wiB4VuAGx8ihFhmIRZn/+28kbxN8DQuHs=", "fcEh3HSi/7aR2A2lB6NeSms4jOOZuUp7yLm+aP60Skk=", "s1aIC4YqtFQXkfQmnLQfViqpThP0jU7OB+bZCDWKoB4=", "ZdgL2DMD9iVyXYCKx8Nr8rh7k6V7qoSH8IsT1AmVVxA=", "mXPcDUxX4p6sPXAWGyqcsaJk+ZGz5fADzJYuxniDG+s=", "3l6qOVMu1b/IkIjvfxLkQbZf2ZVzlHweR6UBEN4ahUk=", "wmh+PHumyUJ3KiTd13tIgOhiyGt76ARdf13mzipd1nA=", "IoDcrbPugLiY2kXaX5Pfyf58GYtyeWcCwB+9Qb7FVt4=", "wCCU7hO8zBe9mf+YE82KuXgzxyhnEK0FkeZe0lH3dZ4=", "vS7O4ozHIQZJWBiov+mkpI27GE8zAmVCEkRcP3NDyNE="], "checkpoint":{"envelope":"rekor.sigstore.dev - 1193050959916656506\n333712006\n0ogWkROGyfLq4ZZjBhtkZtGBer6lli2i79+hknVl5JA=\n\n— rekor.sigstore.dev wNI9ajBGAiEA071qdxrIX+Udw5wX9guRbHC4UjZhCK3gNExotx3MbzoCIQDqZxg8XXpLei4oYEBIS+ZAdjJ1+sbOblN92CCm2EWkag==\n"}}, "canonicalizedBody":"eyJhcGlWZXJzaW9uIjoiMC4wLjEiLCJraW5kIjoiZHNzZSIsInNwZWMiOnsiZW52ZWxvcGVIYXNoIjp7ImFsZ29yaXRobSI6InNoYTI1NiIsInZhbHVlIjoiMDJjYmM4OTQ1MGQ5NTRlNWU0NWExM2NlZTMxY2MxZTMxNmQyYzhhNTgxYmM4OTVlYmU5YTQyYzE5YThkN2U4NiJ9LCJwYXlsb2FkSGFzaCI6eyJhbGdvcml0aG0iOiJzaGEyNTYiLCJ2YWx1ZSI6IjczYTkwNjQ0ZTU2YzM0NGFhMjI3ZWRiYjA1OTc0YWRkY2JkOTFmYWVlN2EzZGM4NDdkYjM2NmVmNWI1ODEzNjUifSwic2lnbmF0dXJlcyI6W3sic2lnbmF0dXJlIjoiTUVRQ0lGZldnMnNhWGErRUZLWEFoWHNVTmY4d1I3a3VzMzE1cjJBQkV5V2Y4OFVNQWlBMmcySVVUSFlneWxrVmxFSzF4WWIrS2UveDBybFltMSs0a1ErN0JtZDNrdz09IiwidmVyaWZpZXIiOiJMUzB0TFMxQ1JVZEpUaUJEUlZKVVNVWkpRMEZVUlMwdExTMHRDazFKU1VoaFJFTkRRblV5WjBGM1NVSkJaMGxWV1ZwVlRTOHpkRmcyYW1jelUzbFZVemhWV25KRFR6UjVaVEpqZDBObldVbExiMXBKZW1vd1JVRjNUWGNLVG5wRlZrMUNUVWRCTVZWRlEyaE5UV015Ykc1ak0xSjJZMjFWZFZwSFZqSk5ValIzU0VGWlJGWlJVVVJGZUZaNllWZGtlbVJIT1hsYVV6RndZbTVTYkFwamJURnNXa2RzYUdSSFZYZElhR05PVFdwVmQwOVVRWGhOUkdkM1RucEZNbGRvWTA1TmFsVjNUMVJCZUUxRVozaE9la1V5VjJwQlFVMUdhM2RGZDFsSUNrdHZXa2w2YWpCRFFWRlpTVXR2V2tsNmFqQkVRVkZqUkZGblFVVm1OVFpPYlVkaFIzZ3hWa1p1UzFaeGJHWkdaQzlHUlZkVlEzbG5OVEZEUkhkdk5ERUtWV1JOWkM5V2NDdHVhakkyWmsxSUwwVTVWa1JxVTNkcVNVaG5RVXRzTHpadlF6ZHZLMVo1WTJ4M0swTXlTVEJTUjJGUFEwSm5kM2RuWjFsSlRVRTBSd3BCTVZWa1JIZEZRaTkzVVVWQmQwbElaMFJCVkVKblRsWklVMVZGUkVSQlMwSm5aM0pDWjBWR1FsRmpSRUY2UVdSQ1owNVdTRkUwUlVablVWVkJhVU4zQ21keE0ydFlNa1ZYUzJoVlJIQlZZWGQ2TlVaelUweHJkMGgzV1VSV1VqQnFRa0puZDBadlFWVXpPVkJ3ZWpGWmEwVmFZalZ4VG1wd1MwWlhhWGhwTkZrS1drUTRkMmRaVVVkQk1WVmtSVkZGUWk5M1VqWk5TR2xIWkcxb01HUklRbnBQYVRoMldqSnNNR0ZJVm1sTWJVNTJZbE01ZW1KSVRtaE1WMXA1V1ZjeGJBcGtNamw1WVhrNWVtSklUbWhNVjJSd1pFZG9NVmxwTVc1YVZ6VnNZMjFHTUdJelNYWk1iV1J3WkVkb01WbHBPVE5pTTBweVdtMTRkbVF6VFhaYU1sWjFDbHBZU21oa1J6bDVXREprYkdKdFZubGhWMDVtWXpKNGVsbFVUWFZsVnpGelVVaEtiRnB1VFhaa1IwWnVZM2s1TWsxcE5IaE1ha0YzVDFGWlMwdDNXVUlLUWtGSFJIWjZRVUpCVVZGeVlVaFNNR05JVFRaTWVUa3dZakowYkdKcE5XaFpNMUp3WWpJMWVreHRaSEJrUjJneFdXNVdlbHBZU21waU1qVXdXbGMxTUFwTWJVNTJZbFJCVjBKbmIzSkNaMFZGUVZsUEwwMUJSVU5DUVdoNldUSm9iRnBJVm5OYVZFRXlRbWR2Y2tKblJVVkJXVTh2VFVGRlJFSkRhR2xaYWs1cUNrMVVUbXhPVjFFMFdrZFpNbGxVYTNoYVZHdDRUa1JDYlU5SFVtMU5WMXByVFhwYWJWbFViR2xOUkVVMFRWUlZlazFDYTBkRGFYTkhRVkZSUW1jM09IY0tRVkZSUlVNeFFubGFVekZUV2xkNGJGbFlUbXhOUkZWSFEybHpSMEZSVVVKbk56aDNRVkZWUlVveVJqTmplVEYzWWpOa2JHTnVVblppTW5oNlRETkNkZ3BrTWxaNVpFYzVkbUpJVFhSaVIwWjBXVzFTYUV4WVFqVmtSMmgyWW1wQlowSm5iM0pDWjBWRlFWbFBMMDFCUlVkQ1FrcDVXbGRhZWt3eWFHeFpWMUo2Q2t3eVVteGtiVlp6WWpOQmQwOTNXVXRMZDFsQ1FrRkhSSFo2UVVKRFFWRjBSRU4wYjJSSVVuZGplbTkyVEROU2RtRXlWblZNYlVacVpFZHNkbUp1VFhVS1dqSnNNR0ZJVm1sa1dFNXNZMjFPZG1KdVVteGlibEYxV1RJNWRFMUpSMGRDWjI5eVFtZEZSVUZaVHk5TlFVVktRa2huVFdSdGFEQmtTRUo2VDJrNGRncGFNbXd3WVVoV2FVeHRUblppVXpsNllraE9hRXhYV25sWlZ6RnNaREk1ZVdGNU9YcGlTRTVvVEZka2NHUkhhREZaYVRGdVdsYzFiR050UmpCaU0wbDJDa3h0WkhCa1IyZ3hXV2s1TTJJelNuSmFiWGgyWkROTmRsb3lWblZhV0Vwb1pFYzVlVmd5Wkd4aWJWWjVZVmRPWm1NeWVIcFpWRTExWlZjeGMxRklTbXdLV201TmRtUkhSbTVqZVRreVRXazBlRXhxUVhkUFFWbExTM2RaUWtKQlIwUjJla0ZDUTJkUmNVUkRhRzFPTWxKclQwZE5NVTVIVFhsTlJGa3pXVzFHYlFwWmVrVjVXVEpGTTFsVVZURk9WR3N4V2tSV2JGcFViR2xPZWxWNVRVUlNhRTFDTUVkRGFYTkhRVkZSUW1jM09IZEJVWE5GUkhkM1Rsb3liREJoU0ZacENreFhhSFpqTTFKc1drUkNTMEpuYjNKQ1owVkZRVmxQTDAxQlJVMUNSSGROVDIxb01HUklRbnBQYVRoMldqSnNNR0ZJVm1sTWJVNTJZbE01YUdRelRYUUtZMGM1TTFwWVNqQmlNamx6WTNrNWQySXpaR3hqYmxKMllqSjRla3hYZUdoaVYwcHJXVk14ZDJWWVVtOWlNalIzVDBGWlMwdDNXVUpDUVVkRWRucEJRZ3BFVVZGeFJFTm9hVmxxVG1wTlZFNXNUbGRSTkZwSFdUSlpWR3Q0V2xScmVFNUVRbTFQUjFKdFRWZGFhMDE2V20xWlZHeHBUVVJGTkUxVVZYcE5RMGxIQ2tOcGMwZEJVVkZDWnpjNGQwRlJORVZHUVhkVFkyMVdiV041T1c5YVYwWnJZM2s1YTFwWVdteGlSemwzVFVKclIwTnBjMGRCVVZGQ1p6YzRkMEZST0VVS1EzZDNTazFxU1hoUFZFVTFUWHBqTlUxRVJVZERhWE5IUVZGUlFtYzNPSGRCVWtGRlNYZDNhR0ZJVWpCalNFMDJUSGs1Ym1GWVVtOWtWMGwxV1RJNWRBcE1Na1l6WTNreGQySXpaR3hqYmxKMllqSjRlazFDYTBkRGFYTkhRVkZSUW1jM09IZEJVa1ZGUTNkM1NrMVVTVFZOVkVrelRtcE5ORTFJT0VkRGFYTkhDa0ZSVVVKbk56aDNRVkpKUldOUmVIWmhTRkl3WTBoTk5reDVPVzVoV0ZKdlpGZEpkVmt5T1hSTU1rWXpZM2t4ZDJJelpHeGpibEoyWWpKNGVrd3pRbllLWkRKV2VXUkhPWFppU0UxMFlrZEdkRmx0VW1oTVdFSTFaRWRvZG1KcE9IVmFNbXd3WVVoV2FVd3paSFpqYlhSdFlrYzVNMk41T1hkamJWVjBZMjFXY3dwYVYwWjZXbE0xTldKWGVFRmpiVlp0WTNrNWIxcFhSbXRqZVRscldsaGFiR0pIT1hkTlJHZEhRMmx6UjBGUlVVSm5OemgzUVZKTlJVdG5kMjlaYlVsNkNsbDZSWHBhVkZaclQwZFNiVTV0UlRWTlYxVTFUVlJSZDFwcWFHdGFha1p0V2tSTk1scHRSVFZaYWtGNFQwUkZNVTE2UVZsQ1oyOXlRbWRGUlVGWlR5OEtUVUZGVlVKQmIwMURTRTVxWVVkV2EyUlhlR3hOUnpSSFEybHpSMEZSVVVKbk56aDNRVkpWUlZsQmVHVmhTRkl3WTBoTk5reDVPVzVoV0ZKdlpGZEpkUXBaTWpsMFRESkdNMk41TVhkaU0yUnNZMjVTZG1JeWVIcE1NMEoyWkRKV2VXUkhPWFppU0UxMFlrZEdkRmx0VW1oTVdFSTFaRWRvZG1KcE9XaFpNMUp3Q21JeU5YcE1NMG94WW01TmRrMVVZM3BPZWtVd1RtcE5lazlFYTNaWldGSXdXbGN4ZDJSSVRYWk5WRUZYUW1kdmNrSm5SVVZCV1U4dlRVRkZWMEpCWjAwS1FtNUNNVmx0ZUhCWmVrTkNhWGRaUzB0M1dVSkNRVWhYWlZGSlJVRm5VamxDU0hOQlpWRkNNMEZPTURsTlIzSkhlSGhGZVZsNGEyVklTbXh1VG5kTGFRcFRiRFkwTTJwNWRDODBaVXRqYjBGMlMyVTJUMEZCUVVKdFVWSlJOMU5GUVVGQlVVUkJSV2QzVW1kSmFFRk1SaXROWWxCSWJXWndOVlZSWm1Kb1NIRndDakpTTTFCMlEyWnVWRU5FYTJoMmJrWm1VbEJLU2xWSGQwRnBSVUZ6YnpOdGNtUjVUazFHTjJseFNuWjZia2cxTHpkS1MwTXdjbTVUZWpJdlVUVXpVRFVLWlU4M09WZFhiM2REWjFsSlMyOWFTWHBxTUVWQmQwMUVZVkZCZDFwblNYaEJVRGRCVjNrdlRIRnlSMkpZY2xaMGVWTmxiVlpyWmpsck1VRnhhMUV2YlFwd1owUm5lWFIyVEZoaVRGZGxPRUpMYVRCbU1WY3dUbW8zUVhGR1pIZHNWa0ozU1hoQlRFRm1OR2hhU1VSQ1ZFZFNhbTAxY1VoQ09VeEhPRzF1WkVnekNrMWFRVmcyT0hVdlFtSlNWbVZOVW5GaU5tUnhjV3BNY2xseU5ESnJVQzlzZGpOS1kxVkJQVDBLTFMwdExTMUZUa1FnUTBWU1ZFbEdTVU5CVkVVdExTMHRMUW89In1dfX0="}]}, "dsseEnvelope":{"payload":"eyJfdHlwZSI6Imh0dHBzOi8vaW4tdG90by5pby9TdGF0ZW1lbnQvdjAuMSIsInByZWRpY2F0ZVR5cGUiOiJodHRwczovL3Nsc2EuZGV2L3Byb3ZlbmFuY2UvdjAuMiIsInN1YmplY3QiOlt7Im5hbWUiOiIuL2F3c19sYW1iZGFfcG93ZXJ0b29scy0zLjE5LjFhMTItcHkzLW5vbmUtYW55LndobCIsImRpZ2VzdCI6eyJzaGEyNTYiOiI3MTUwNDc2MDhmZGZiYTYzNWM3ZGJmNGZiY2Q1NTk4Y2M3YzNhNjM3YjIwMzVjNmFiM2E5M2E5MWZjZTM0YWUwIn19LHsibmFtZSI6Ii4vYXdzX2xhbWJkYV9wb3dlcnRvb2xzLTMuMTkuMWExMi50YXIuZ3oiLCJkaWdlc3QiOnsic2hhMjU2IjoiY2IwNmM2NDhhMmJhNDlhNDA1MmZhNDhkNzU3ZWM0YzFiMGY0MDQxYmRhODZlYTUwN2MwMjkyZGIwNTU1Njk0MyJ9fV0sInByZWRpY2F0ZSI6eyJidWlsZGVyIjp7ImlkIjoiaHR0cHM6Ly9naXRodWIuY29tL3Nsc2EtZnJhbWV3b3JrL3Nsc2EtZ2l0aHViLWdlbmVyYXRvci8uZ2l0aHViL3dvcmtmbG93cy9nZW5lcmF0b3JfZ2VuZXJpY19zbHNhMy55bWxAcmVmcy90YWdzL3YyLjEuMCJ9LCJidWlsZFR5cGUiOiJodHRwczovL2dpdGh1Yi5jb20vc2xzYS1mcmFtZXdvcmsvc2xzYS1naXRodWItZ2VuZXJhdG9yL2dlbmVyaWNAdjEiLCJpbnZvY2F0aW9uIjp7ImNvbmZpZ1NvdXJjZSI6eyJ1cmkiOiJnaXQraHR0cHM6Ly9naXRodWIuY29tL2F3cy1wb3dlcnRvb2xzL3Bvd2VydG9vbHMtbGFtYmRhLXB5dGhvbkByZWZzL2hlYWRzL2RldmVsb3AiLCJkaWdlc3QiOnsic2hhMSI6ImJiM2MxM2U1ZDhkZjZhOTFlOTE0MGY4ZGYxZmQzNmZhOWIwMTgxNTMifSwiZW50cnlQb2ludCI6Ii5naXRodWIvd29ya2Zsb3dzL3ByZS1yZWxlYXNlLnltbCJ9LCJwYXJhbWV0ZXJzIjp7InZhcnMiOnt9fSwiZW52aXJvbm1lbnQiOnsiZ2l0aHViX2FjdG9yIjoibGVhbmRyb2RhbWFzY2VuYSIsImdpdGh1Yl9hY3Rvcl9pZCI6IjQyOTUxNzMiLCJnaXRodWJfYmFzZV9yZWYiOiIiLCJnaXRodWJfZXZlbnRfbmFtZSI6InNjaGVkdWxlIiwiZ2l0aHViX2V2ZW50X3BheWxvYWQiOnsiZW50ZXJwcmlzZSI6eyJhdmF0YXJfdXJsIjoiaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS9iLzEyOTA/dj00IiwiY3JlYXRlZF9hdCI6IjIwMTktMTEtMTNUMTg6MDU6NDFaIiwiZGVzY3JpcHRpb24iOiIiLCJodG1sX3VybCI6Imh0dHBzOi8vZ2l0aHViLmNvbS9lbnRlcnByaXNlcy9hbWF6b24iLCJpZCI6MTI5MCwibmFtZSI6IkFtYXpvbiIsIm5vZGVfaWQiOiJNREV3T2tWdWRHVnljSEpwYzJVeE1qa3ciLCJzbHVnIjoiYW1hem9uIiwidXBkYXRlZF9hdCI6IjIwMjUtMDgtMTJUMjA6NTk6MTRaIiwid2Vic2l0ZV91cmwiOiJodHRwczovL3d3dy5hbWF6b24uY29tLyJ9LCJvcmdhbml6YXRpb24iOnsiYXZhdGFyX3VybCI6Imh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xMjkxMjc2Mzg/dj00IiwiZGVzY3JpcHRpb24iOiIiLCJldmVudHNfdXJsIjoiaHR0cHM6Ly9pbnRlcm5hbC1hcGkuc2VydmljZS5pYWQuZ2l0aHViLm5ldC9vcmdzL2F3cy1wb3dlcnRvb2xzL2V2ZW50cyIsImhvb2tzX3VybCI6Imh0dHBzOi8vaW50ZXJuYWwtYXBpLnNlcnZpY2UuaWFkLmdpdGh1Yi5uZXQvb3Jncy9hd3MtcG93ZXJ0b29scy9ob29rcyIsImlkIjoxMjkxMjc2MzgsImlzc3Vlc191cmwiOiJodHRwczovL2ludGVybmFsLWFwaS5zZXJ2aWNlLmlhZC5naXRodWIubmV0L29yZ3MvYXdzLXBvd2VydG9vbHMvaXNzdWVzIiwibG9naW4iOiJhd3MtcG93ZXJ0b29scyIsIm1lbWJlcnNfdXJsIjoiaHR0cHM6Ly9pbnRlcm5hbC1hcGkuc2VydmljZS5pYWQuZ2l0aHViLm5ldC9vcmdzL2F3cy1wb3dlcnRvb2xzL21lbWJlcnN7L21lbWJlcn0iLCJub2RlX2lkIjoiT19rZ0RPQjdKVTFnIiwicHVibGljX21lbWJlcnNfdXJsIjoiaHR0cHM6Ly9pbnRlcm5hbC1hcGkuc2VydmljZS5pYWQuZ2l0aHViLm5ldC9vcmdzL2F3cy1wb3dlcnRvb2xzL3B1YmxpY19tZW1iZXJzey9tZW1iZXJ9IiwicmVwb3NfdXJsIjoiaHR0cHM6Ly9pbnRlcm5hbC1hcGkuc2VydmljZS5pYWQuZ2l0aHViLm5ldC9vcmdzL2F3cy1wb3dlcnRvb2xzL3JlcG9zIiwidXJsIjoiaHR0cHM6Ly9pbnRlcm5hbC1hcGkuc2VydmljZS5pYWQuZ2l0aHViLm5ldC9vcmdzL2F3cy1wb3dlcnRvb2xzIn0sInJlcG9zaXRvcnkiOnsiYWxsb3dfZm9ya2luZyI6dHJ1ZSwiYXJjaGl2ZV91cmwiOiJodHRwczovL2ludGVybmFsLWFwaS5zZXJ2aWNlLmlhZC5naXRodWIubmV0L3JlcG9zL2F3cy1wb3dlcnRvb2xzL3Bvd2VydG9vbHMtbGFtYmRhLXB5dGhvbi97YXJjaGl2ZV9mb3JtYXR9ey9yZWZ9IiwiYXJjaGl2ZWQiOmZhbHNlLCJhc3NpZ25lZXNfdXJsIjoiaHR0cHM6Ly9pbnRlcm5hbC1hcGkuc2VydmljZS5pYWQuZ2l0aHViLm5ldC9yZXBvcy9hd3MtcG93ZXJ0b29scy9wb3dlcnRvb2xzLWxhbWJkYS1weXRob24vYXNzaWduZWVzey91c2VyfSIsImJsb2JzX3VybCI6Imh0dHBzOi8vaW50ZXJuYWwtYXBpLnNlcnZpY2UuaWFkLmdpdGh1Yi5uZXQvcmVwb3MvYXdzLXBvd2VydG9vbHMvcG93ZXJ0b29scy1sYW1iZGEtcHl0aG9uL2dpdC9ibG9ic3svc2hhfSIsImJyYW5jaGVzX3VybCI6Imh0dHBzOi8vaW50ZXJuYWwtYXBpLnNlcnZpY2UuaWFkLmdpdGh1Yi5uZXQvcmVwb3MvYXdzLXBvd2VydG9vbHMvcG93ZXJ0b29scy1sYW1iZGEtcHl0aG9uL2JyYW5jaGVzey9icmFuY2h9IiwiY2xvbmVfdXJsIjoiaHR0cHM6Ly9naXRodWIuY29tL2F3cy1wb3dlcnRvb2xzL3Bvd2VydG9vbHMtbGFtYmRhLXB5dGhvbi5naXQiLCJjb2xsYWJvcmF0b3JzX3VybCI6Imh0dHBzOi8vaW50ZXJuYWwtYXBpLnNlcnZpY2UuaWFkLmdpdGh1Yi5uZXQvcmVwb3MvYXdzLXBvd2VydG9vbHMvcG93ZXJ0b29scy1sYW1iZGEtcHl0aG9uL2NvbGxhYm9yYXRvcnN7L2NvbGxhYm9yYXRvcn0iLCJjb21tZW50c191cmwiOiJodHRwczovL2ludGVybmFsLWFwaS5zZXJ2aWNlLmlhZC5naXRodWIubmV0L3JlcG9zL2F3cy1wb3dlcnRvb2xzL3Bvd2VydG9vbHMtbGFtYmRhLXB5dGhvbi9jb21tZW50c3svbnVtYmVyfSIsImNvbW1pdHNfdXJsIjoiaHR0cHM6Ly9pbnRlcm5hbC1hcGkuc2VydmljZS5pYWQuZ2l0aHViLm5ldC9yZXBvcy9hd3MtcG93ZXJ0b29scy9wb3dlcnRvb2xzLWxhbWJkYS1weXRob24vY29tbWl0c3svc2hhfSIsImNvbXBhcmVfdXJsIjoiaHR0cHM6Ly9pbnRlcm5hbC1hcGkuc2VydmljZS5pYWQuZ2l0aHViLm5ldC9yZXBvcy9hd3MtcG93ZXJ0b29scy9wb3dlcnRvb2xzLWxhbWJkYS1weXRob24vY29tcGFyZS97YmFzZX0uLi57aGVhZH0iLCJjb250ZW50c191cmwiOiJodHRwczovL2ludGVybmFsLWFwaS5zZXJ2aWNlLmlhZC5naXRodWIubmV0L3JlcG9zL2F3cy1wb3dlcnRvb2xzL3Bvd2VydG9vbHMtbGFtYmRhLXB5dGhvbi9jb250ZW50cy97K3BhdGh9IiwiY29udHJpYnV0b3JzX3VybCI6Imh0dHBzOi8vaW50ZXJuYWwtYXBpLnNlcnZpY2UuaWFkLmdpdGh1Yi5uZXQvcmVwb3MvYXdzLXBvd2VydG9vbHMvcG93ZXJ0b29scy1sYW1iZGEtcHl0aG9uL2NvbnRyaWJ1dG9ycyIsImNyZWF0ZWRfYXQiOiIyMDE5LTExLTE1VDEyOjI2OjEyWiIsImN1c3RvbV9wcm9wZXJ0aWVzIjp7InN0YWdpbmciOiJmYWxzZSIsInZpc2liaWxpdHktYWxsb3ctaW50ZXJuYWwiOiJmYWxzZSIsInZpc2liaWxpdHktYWxsb3ctcHJpdmF0ZSI6ImZhbHNlIiwidmlzaWJpbGl0eS1hbGxvdy1wdWJsaWMiOiJ0cnVlIn0sImRlZmF1bHRfYnJhbmNoIjoiZGV2ZWxvcCIsImRlcGxveW1lbnRzX3VybCI6Imh0dHBzOi8vaW50ZXJuYWwtYXBpLnNlcnZpY2UuaWFkLmdpdGh1Yi5uZXQvcmVwb3MvYXdzLXBvd2VydG9vbHMvcG93ZXJ0b29scy1sYW1iZGEtcHl0aG9uL2RlcGxveW1lbnRzIiwiZGVzY3JpcHRpb24iOiJBIGRldmVsb3BlciB0b29sa2l0IHRvIGltcGxlbWVudCBTZXJ2ZXJsZXNzIGJlc3QgcHJhY3RpY2VzIGFuZCBpbmNyZWFzZSBkZXZlbG9wZXIgdmVsb2NpdHkuIiwiZGlzYWJsZWQiOmZhbHNlLCJkb3dubG9hZHNfdXJsIjoiaHR0cHM6Ly9pbnRlcm5hbC1hcGkuc2VydmljZS5pYWQuZ2l0aHViLm5ldC9yZXBvcy9hd3MtcG93ZXJ0b29scy9wb3dlcnRvb2xzLWxhbWJkYS1weXRob24vZG93bmxvYWRzIiwiZXZlbnRzX3VybCI6Imh0dHBzOi8vaW50ZXJuYWwtYXBpLnNlcnZpY2UuaWFkLmdpdGh1Yi5uZXQvcmVwb3MvYXdzLXBvd2VydG9vbHMvcG93ZXJ0b29scy1sYW1iZGEtcHl0aG9uL2V2ZW50cyIsImZvcmsiOmZhbHNlLCJmb3JrcyI6NDUwLCJmb3Jrc19jb3VudCI6NDUwLCJmb3Jrc191cmwiOiJodHRwczovL2ludGVybmFsLWFwaS5zZXJ2aWNlLmlhZC5naXRodWIubmV0L3JlcG9zL2F3cy1wb3dlcnRvb2xzL3Bvd2VydG9vbHMtbGFtYmRhLXB5dGhvbi9mb3JrcyIsImZ1bGxfbmFtZSI6ImF3cy1wb3dlcnRvb2xzL3Bvd2VydG9vbHMtbGFtYmRhLXB5dGhvbiIsImdpdF9jb21taXRzX3VybCI6Imh0dHBzOi8vaW50ZXJuYWwtYXBpLnNlcnZpY2UuaWFkLmdpdGh1Yi5uZXQvcmVwb3MvYXdzLXBvd2VydG9vbHMvcG93ZXJ0b29scy1sYW1iZGEtcHl0aG9uL2dpdC9jb21taXRzey9zaGF9IiwiZ2l0X3JlZnNfdXJsIjoiaHR0cHM6Ly9pbnRlcm5hbC1hcGkuc2VydmljZS5pYWQuZ2l0aHViLm5ldC9yZXBvcy9hd3MtcG93ZXJ0b29scy9wb3dlcnRvb2xzLWxhbWJkYS1weXRob24vZ2l0L3JlZnN7L3NoYX0iLCJnaXRfdGFnc191cmwiOiJodHRwczovL2ludGVybmFsLWFwaS5zZXJ2aWNlLmlhZC5naXRodWIubmV0L3JlcG9zL2F3cy1wb3dlcnRvb2xzL3Bvd2VydG9vbHMtbGFtYmRhLXB5dGhvbi9naXQvdGFnc3svc2hhfSIsImdpdF91cmwiOiJnaXQ6Ly9naXRodWIuY29tL2F3cy1wb3dlcnRvb2xzL3Bvd2VydG9vbHMtbGFtYmRhLXB5dGhvbi5naXQiLCJoYXNfZGlzY3Vzc2lvbnMiOnRydWUsImhhc19kb3dubG9hZHMiOnRydWUsImhhc19pc3N1ZXMiOnRydWUsImhhc19wYWdlcyI6ZmFsc2UsImhhc19wcm9qZWN0cyI6dHJ1ZSwiaGFzX3dpa2kiOmZhbHNlLCJob21lcGFnZSI6Imh0dHBzOi8vZG9jcy5wb3dlcnRvb2xzLmF3cy5kZXYvbGFtYmRhL3B5dGhvbi9sYXRlc3QvIiwiaG9va3NfdXJsIjoiaHR0cHM6Ly9pbnRlcm5hbC1hcGkuc2VydmljZS5pYWQuZ2l0aHViLm5ldC9yZXBvcy9hd3MtcG93ZXJ0b29scy9wb3dlcnRvb2xzLWxhbWJkYS1weXRob24vaG9va3MiLCJodG1sX3VybCI6Imh0dHBzOi8vZ2l0aHViLmNvbS9hd3MtcG93ZXJ0b29scy9wb3dlcnRvb2xzLWxhbWJkYS1weXRob24iLCJpZCI6MjIxOTE5Mzc5LCJpc190ZW1wbGF0ZSI6ZmFsc2UsImlzc3VlX2NvbW1lbnRfdXJsIjoiaHR0cHM6Ly9pbnRlcm5hbC1hcGkuc2VydmljZS5pYWQuZ2l0aHViLm5ldC9yZXBvcy9hd3MtcG93ZXJ0b29scy9wb3dlcnRvb2xzLWxhbWJkYS1weXRob24vaXNzdWVzL2NvbW1lbnRzey9udW1iZXJ9IiwiaXNzdWVfZXZlbnRzX3VybCI6Imh0dHBzOi8vaW50ZXJuYWwtYXBpLnNlcnZpY2UuaWFkLmdpdGh1Yi5uZXQvcmVwb3MvYXdzLXBvd2VydG9vbHMvcG93ZXJ0b29scy1sYW1iZGEtcHl0aG9uL2lzc3Vlcy9ldmVudHN7L251bWJlcn0iLCJpc3N1ZXNfdXJsIjoiaHR0cHM6Ly9pbnRlcm5hbC1hcGkuc2VydmljZS5pYWQuZ2l0aHViLm5ldC9yZXBvcy9hd3MtcG93ZXJ0b29scy9wb3dlcnRvb2xzLWxhbWJkYS1weXRob24vaXNzdWVzey9udW1iZXJ9Iiwia2V5c191cmwiOiJodHRwczovL2ludGVybmFsLWFwaS5zZXJ2aWNlLmlhZC5naXRodWIubmV0L3JlcG9zL2F3cy1wb3dlcnRvb2xzL3Bvd2VydG9vbHMtbGFtYmRhLXB5dGhvbi9rZXlzey9rZXlfaWR9IiwibGFiZWxzX3VybCI6Imh0dHBzOi8vaW50ZXJuYWwtYXBpLnNlcnZpY2UuaWFkLmdpdGh1Yi5uZXQvcmVwb3MvYXdzLXBvd2VydG9vbHMvcG93ZXJ0b29scy1sYW1iZGEtcHl0aG9uL2xhYmVsc3svbmFtZX0iLCJsYW5ndWFnZSI6IlB5dGhvbiIsImxhbmd1YWdlc191cmwiOiJodHRwczovL2ludGVybmFsLWFwaS5zZXJ2aWNlLmlhZC5naXRodWIubmV0L3JlcG9zL2F3cy1wb3dlcnRvb2xzL3Bvd2VydG9vbHMtbGFtYmRhLXB5dGhvbi9sYW5ndWFnZXMiLCJsaWNlbnNlIjp7ImtleSI6Im1pdC0wIiwibmFtZSI6Ik1JVCBObyBBdHRyaWJ1dGlvbiIsIm5vZGVfaWQiOiJNRGM2VEdsalpXNXpaVFF4Iiwic3BkeF9pZCI6Ik1JVC0wIiwidXJsIjoiaHR0cHM6Ly9pbnRlcm5hbC1hcGkuc2VydmljZS5pYWQuZ2l0aHViLm5ldC9saWNlbnNlcy9taXQtMCJ9LCJtZXJnZXNfdXJsIjoiaHR0cHM6Ly9pbnRlcm5hbC1hcGkuc2VydmljZS5pYWQuZ2l0aHViLm5ldC9yZXBvcy9hd3MtcG93ZXJ0b29scy9wb3dlcnRvb2xzLWxhbWJkYS1weXRob24vbWVyZ2VzIiwibWlsZXN0b25lc191cmwiOiJodHRwczovL2ludGVybmFsLWFwaS5zZXJ2aWNlLmlhZC5naXRodWIubmV0L3JlcG9zL2F3cy1wb3dlcnRvb2xzL3Bvd2VydG9vbHMtbGFtYmRhLXB5dGhvbi9taWxlc3RvbmVzey9udW1iZXJ9IiwibWlycm9yX3VybCI6bnVsbCwibmFtZSI6InBvd2VydG9vbHMtbGFtYmRhLXB5dGhvbiIsIm5vZGVfaWQiOiJNREV3T2xKbGNHOXphWFJ2Y25reU1qRTVNVGt6TnprPSIsIm5vdGlmaWNhdGlvbnNfdXJsIjoiaHR0cHM6Ly9pbnRlcm5hbC1hcGkuc2VydmljZS5pYWQuZ2l0aHViLm5ldC9yZXBvcy9hd3MtcG93ZXJ0b29scy9wb3dlcnRvb2xzLWxhbWJkYS1weXRob24vbm90aWZpY2F0aW9uc3s/c2luY2UsYWxsLHBhcnRpY2lwYXRpbmd9Iiwib3Blbl9pc3N1ZXMiOjYyLCJvcGVuX2lzc3Vlc19jb3VudCI6NjIsIm93bmVyIjp7ImF2YXRhcl91cmwiOiJodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTI5MTI3NjM4P3Y9NCIsImV2ZW50c191cmwiOiJodHRwczovL2ludGVybmFsLWFwaS5zZXJ2aWNlLmlhZC5naXRodWIubmV0L3VzZXJzL2F3cy1wb3dlcnRvb2xzL2V2ZW50c3svcHJpdmFjeX0iLCJmb2xsb3dlcnNfdXJsIjoiaHR0cHM6Ly9pbnRlcm5hbC1hcGkuc2VydmljZS5pYWQuZ2l0aHViLm5ldC91c2Vycy9hd3MtcG93ZXJ0b29scy9mb2xsb3dlcnMiLCJmb2xsb3dpbmdfdXJsIjoiaHR0cHM6Ly9pbnRlcm5hbC1hcGkuc2VydmljZS5pYWQuZ2l0aHViLm5ldC91c2Vycy9hd3MtcG93ZXJ0b29scy9mb2xsb3dpbmd7L290aGVyX3VzZXJ9IiwiZ2lzdHNfdXJsIjoiaHR0cHM6Ly9pbnRlcm5hbC1hcGkuc2VydmljZS5pYWQuZ2l0aHViLm5ldC91c2Vycy9hd3MtcG93ZXJ0b29scy9naXN0c3svZ2lzdF9pZH0iLCJncmF2YXRhcl9pZCI6IiIsImh0bWxfdXJsIjoiaHR0cHM6Ly9naXRodWIuY29tL2F3cy1wb3dlcnRvb2xzIiwiaWQiOjEyOTEyNzYzOCwibG9naW4iOiJhd3MtcG93ZXJ0b29scyIsIm5vZGVfaWQiOiJPX2tnRE9CN0pVMWciLCJvcmdhbml6YXRpb25zX3VybCI6Imh0dHBzOi8vaW50ZXJuYWwtYXBpLnNlcnZpY2UuaWFkLmdpdGh1Yi5uZXQvdXNlcnMvYXdzLXBvd2VydG9vbHMvb3JncyIsInJlY2VpdmVkX2V2ZW50c191cmwiOiJodHRwczovL2ludGVybmFsLWFwaS5zZXJ2aWNlLmlhZC5naXRodWIubmV0L3VzZXJzL2F3cy1wb3dlcnRvb2xzL3JlY2VpdmVkX2V2ZW50cyIsInJlcG9zX3VybCI6Imh0dHBzOi8vaW50ZXJuYWwtYXBpLnNlcnZpY2UuaWFkLmdpdGh1Yi5uZXQvdXNlcnMvYXdzLXBvd2VydG9vbHMvcmVwb3MiLCJzaXRlX2FkbWluIjpmYWxzZSwic3RhcnJlZF91cmwiOiJodHRwczovL2ludGVybmFsLWFwaS5zZXJ2aWNlLmlhZC5naXRodWIubmV0L3VzZXJzL2F3cy1wb3dlcnRvb2xzL3N0YXJyZWR7L293bmVyfXsvcmVwb30iLCJzdWJzY3JpcHRpb25zX3VybCI6Imh0dHBzOi8vaW50ZXJuYWwtYXBpLnNlcnZpY2UuaWFkLmdpdGh1Yi5uZXQvdXNlcnMvYXdzLXBvd2VydG9vbHMvc3Vic2NyaXB0aW9ucyIsInR5cGUiOiJPcmdhbml6YXRpb24iLCJ1cmwiOiJodHRwczovL2ludGVybmFsLWFwaS5zZXJ2aWNlLmlhZC5naXRodWIubmV0L3VzZXJzL2F3cy1wb3dlcnRvb2xzIiwidXNlcl92aWV3X3R5cGUiOiJwdWJsaWMifSwicHJpdmF0ZSI6ZmFsc2UsInB1bGxzX3VybCI6Imh0dHBzOi8vaW50ZXJuYWwtYXBpLnNlcnZpY2UuaWFkLmdpdGh1Yi5uZXQvcmVwb3MvYXdzLXBvd2VydG9vbHMvcG93ZXJ0b29scy1sYW1iZGEtcHl0aG9uL3B1bGxzey9udW1iZXJ9IiwicHVzaGVkX2F0IjoiMjAyNS0wOC0zMVQxMDowMzo1NFoiLCJyZWxlYXNlc191cmwiOiJodHRwczovL2ludGVybmFsLWFwaS5zZXJ2aWNlLmlhZC5naXRodWIubmV0L3JlcG9zL2F3cy1wb3dlcnRvb2xzL3Bvd2VydG9vbHMtbGFtYmRhLXB5dGhvbi9yZWxlYXNlc3svaWR9Iiwic2l6ZSI6MTMwODI4LCJzc2hfdXJsIjoiZ2l0QGdpdGh1Yi5jb206YXdzLXBvd2VydG9vbHMvcG93ZXJ0b29scy1sYW1iZGEtcHl0aG9uLmdpdCIsInN0YXJnYXplcnNfY291bnQiOjMxMzAsInN0YXJnYXplcnNfdXJsIjoiaHR0cHM6Ly9pbnRlcm5hbC1hcGkuc2VydmljZS5pYWQuZ2l0aHViLm5ldC9yZXBvcy9hd3MtcG93ZXJ0b29scy9wb3dlcnRvb2xzLWxhbWJkYS1weXRob24vc3RhcmdhemVycyIsInN0YXR1c2VzX3VybCI6Imh0dHBzOi8vaW50ZXJuYWwtYXBpLnNlcnZpY2UuaWFkLmdpdGh1Yi5uZXQvcmVwb3MvYXdzLXBvd2VydG9vbHMvcG93ZXJ0b29scy1sYW1iZGEtcHl0aG9uL3N0YXR1c2VzL3tzaGF9Iiwic3Vic2NyaWJlcnNfdXJsIjoiaHR0cHM6Ly9pbnRlcm5hbC1hcGkuc2VydmljZS5pYWQuZ2l0aHViLm5ldC9yZXBvcy9hd3MtcG93ZXJ0b29scy9wb3dlcnRvb2xzLWxhbWJkYS1weXRob24vc3Vic2NyaWJlcnMiLCJzdWJzY3JpcHRpb25fdXJsIjoiaHR0cHM6Ly9pbnRlcm5hbC1hcGkuc2VydmljZS5pYWQuZ2l0aHViLm5ldC9yZXBvcy9hd3MtcG93ZXJ0b29scy9wb3dlcnRvb2xzLWxhbWJkYS1weXRob24vc3Vic2NyaXB0aW9uIiwic3ZuX3VybCI6Imh0dHBzOi8vZ2l0aHViLmNvbS9hd3MtcG93ZXJ0b29scy9wb3dlcnRvb2xzLWxhbWJkYS1weXRob24iLCJ0YWdzX3VybCI6Imh0dHBzOi8vaW50ZXJuYWwtYXBpLnNlcnZpY2UuaWFkLmdpdGh1Yi5uZXQvcmVwb3MvYXdzLXBvd2VydG9vbHMvcG93ZXJ0b29scy1sYW1iZGEtcHl0aG9uL3RhZ3MiLCJ0ZWFtc191cmwiOiJodHRwczovL2ludGVybmFsLWFwaS5zZXJ2aWNlLmlhZC5naXRodWIubmV0L3JlcG9zL2F3cy1wb3dlcnRvb2xzL3Bvd2VydG9vbHMtbGFtYmRhLXB5dGhvbi90ZWFtcyIsInRvcGljcyI6WyJhd3MiLCJhd3MtbGFtYmRhIiwibGFtYmRhIiwicHl0aG9uIiwic2VydmVybGVzcyJdLCJ0cmVlc191cmwiOiJodHRwczovL2ludGVybmFsLWFwaS5zZXJ2aWNlLmlhZC5naXRodWIubmV0L3JlcG9zL2F3cy1wb3dlcnRvb2xzL3Bvd2VydG9vbHMtbGFtYmRhLXB5dGhvbi9naXQvdHJlZXN7L3NoYX0iLCJ1cGRhdGVkX2F0IjoiMjAyNS0wOC0zMVQxODozOTo0NVoiLCJ1cmwiOiJodHRwczovL2ludGVybmFsLWFwaS5zZXJ2aWNlLmlhZC5naXRodWIubmV0L3JlcG9zL2F3cy1wb3dlcnRvb2xzL3Bvd2VydG9vbHMtbGFtYmRhLXB5dGhvbiIsInZpc2liaWxpdHkiOiJwdWJsaWMiLCJ3YXRjaGVycyI6MzEzMCwid2F0Y2hlcnNfY291bnQiOjMxMzAsIndlYl9jb21taXRfc2lnbm9mZl9yZXF1aXJlZCI6dHJ1ZX0sInNjaGVkdWxlIjoiMCA4ICogKiAxLTUiLCJ3b3JrZmxvdyI6Ii5naXRodWIvd29ya2Zsb3dzL3ByZS1yZWxlYXNlLnltbCJ9LCJnaXRodWJfaGVhZF9yZWYiOiIiLCJnaXRodWJfcmVmIjoicmVmcy9oZWFkcy9kZXZlbG9wIiwiZ2l0aHViX3JlZl90eXBlIjoiYnJhbmNoIiwiZ2l0aHViX3JlcG9zaXRvcnlfaWQiOiIyMjE5MTkzNzkiLCJnaXRodWJfcmVwb3NpdG9yeV9vd25lciI6ImF3cy1wb3dlcnRvb2xzIiwiZ2l0aHViX3JlcG9zaXRvcnlfb3duZXJfaWQiOiIxMjkxMjc2MzgiLCJnaXRodWJfcnVuX2F0dGVtcHQiOiIxIiwiZ2l0aHViX3J1bl9pZCI6IjE3MzcxNDYzMzg5IiwiZ2l0aHViX3J1bl9udW1iZXIiOiIzMTgiLCJnaXRodWJfc2hhMSI6ImJiM2MxM2U1ZDhkZjZhOTFlOTE0MGY4ZGYxZmQzNmZhOWIwMTgxNTMifX0sIm1ldGFkYXRhIjp7ImJ1aWxkSW52b2NhdGlvbklEIjoiMTczNzE0NjMzODktMSIsImNvbXBsZXRlbmVzcyI6eyJwYXJhbWV0ZXJzIjp0cnVlLCJlbnZpcm9ubWVudCI6ZmFsc2UsIm1hdGVyaWFscyI6ZmFsc2V9LCJyZXByb2R1Y2libGUiOmZhbHNlfSwibWF0ZXJpYWxzIjpbeyJ1cmkiOiJnaXQraHR0cHM6Ly9naXRodWIuY29tL2F3cy1wb3dlcnRvb2xzL3Bvd2VydG9vbHMtbGFtYmRhLXB5dGhvbkByZWZzL2hlYWRzL2RldmVsb3AiLCJkaWdlc3QiOnsic2hhMSI6ImJiM2MxM2U1ZDhkZjZhOTFlOTE0MGY4ZGYxZmQzNmZhOWIwMTgxNTMifX1dfX0=", "payloadType":"application/vnd.in-toto+json", "signatures":[{"sig":"MEQCIFfWg2saXa+EFKXAhXsUNf8wR7kus315r2ABEyWf88UMAiA2g2IUTHYgylkVlEK1xYb+Ke/x0rlYm1+4kQ+7Bmd3kw=="}]}} \ No newline at end of file diff --git a/provenance/3.19.1a13/multiple.intoto.jsonl b/provenance/3.19.1a13/multiple.intoto.jsonl new file mode 100644 index 00000000000..1c2142915f3 --- /dev/null +++ b/provenance/3.19.1a13/multiple.intoto.jsonl @@ -0,0 +1 @@ +{"mediaType":"application/vnd.dev.sigstore.bundle.v0.3+json", "verificationMaterial":{"certificate":{"rawBytes":"MIIHZzCCBu2gAwIBAgIURVeTS/XG3Shif9StN7PsxQ9aOFgwCgYIKoZIzj0EAwMwNzEVMBMGA1UEChMMc2lnc3RvcmUuZGV2MR4wHAYDVQQDExVzaWdzdG9yZS1pbnRlcm1lZGlhdGUwHhcNMjUwOTAyMDgwNzQxWhcNMjUwOTAyMDgxNzQxWjAAMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAERqC9NWaUs6IF7bdZxamQzP3Hmv8+NKahgsWjEnj1XbvB7MBPAiZrcf6yVFgHDP6YEEAoiCQ1u+xdThmz0twH4qOCBgwwggYIMA4GA1UdDwEB/wQEAwIHgDATBgNVHSUEDDAKBggrBgEFBQcDAzAdBgNVHQ4EFgQU2GdD49f7wRkFNk27ZSU1dvR0RbMwHwYDVR0jBBgwFoAU39Ppz1YkEZb5qNjpKFWixi4YZD8wgYQGA1UdEQEB/wR6MHiGdmh0dHBzOi8vZ2l0aHViLmNvbS9zbHNhLWZyYW1ld29yay9zbHNhLWdpdGh1Yi1nZW5lcmF0b3IvLmdpdGh1Yi93b3JrZmxvd3MvZ2VuZXJhdG9yX2dlbmVyaWNfc2xzYTMueW1sQHJlZnMvdGFncy92Mi4xLjAwOQYKKwYBBAGDvzABAQQraHR0cHM6Ly90b2tlbi5hY3Rpb25zLmdpdGh1YnVzZXJjb250ZW50LmNvbTAWBgorBgEEAYO/MAECBAhzY2hlZHVsZTA2BgorBgEEAYO/MAEDBChmZTI4YjlhNTc2M2FiNWFlYjAzYTdhZmQ0YzczM2IxOGMzMTQwNDY2MBkGCisGAQQBg78wAQQEC1ByZS1SZWxlYXNlMDUGCisGAQQBg78wAQUEJ2F3cy1wb3dlcnRvb2xzL3Bvd2VydG9vbHMtbGFtYmRhLXB5dGhvbjAgBgorBgEEAYO/MAEGBBJyZWZzL2hlYWRzL2RldmVsb3AwOwYKKwYBBAGDvzABCAQtDCtodHRwczovL3Rva2VuLmFjdGlvbnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tMIGGBgorBgEEAYO/MAEJBHgMdmh0dHBzOi8vZ2l0aHViLmNvbS9zbHNhLWZyYW1ld29yay9zbHNhLWdpdGh1Yi1nZW5lcmF0b3IvLmdpdGh1Yi93b3JrZmxvd3MvZ2VuZXJhdG9yX2dlbmVyaWNfc2xzYTMueW1sQHJlZnMvdGFncy92Mi4xLjAwOAYKKwYBBAGDvzABCgQqDChmN2RkOGM1NGMyMDY3YmFmYzEyY2E3YTU1NTk1ZDVlZTliNzUyMDRhMB0GCisGAQQBg78wAQsEDwwNZ2l0aHViLWhvc3RlZDBKBgorBgEEAYO/MAEMBDwMOmh0dHBzOi8vZ2l0aHViLmNvbS9hd3MtcG93ZXJ0b29scy9wb3dlcnRvb2xzLWxhbWJkYS1weXRob24wOAYKKwYBBAGDvzABDQQqDChmZTI4YjlhNTc2M2FiNWFlYjAzYTdhZmQ0YzczM2IxOGMzMTQwNDY2MCIGCisGAQQBg78wAQ4EFAwScmVmcy9oZWFkcy9kZXZlbG9wMBkGCisGAQQBg78wAQ8ECwwJMjIxOTE5Mzc5MDEGCisGAQQBg78wARAEIwwhaHR0cHM6Ly9naXRodWIuY29tL2F3cy1wb3dlcnRvb2xzMBkGCisGAQQBg78wAREECwwJMTI5MTI3NjM4MH8GCisGAQQBg78wARIEcQxvaHR0cHM6Ly9naXRodWIuY29tL2F3cy1wb3dlcnRvb2xzL3Bvd2VydG9vbHMtbGFtYmRhLXB5dGhvbi8uZ2l0aHViL3dvcmtmbG93cy9wcmUtcmVsZWFzZS55bWxAcmVmcy9oZWFkcy9kZXZlbG9wMDgGCisGAQQBg78wARMEKgwoZmUyOGI5YTU3NjNhYjVhZWIwM2E3YWZkNGM3MzNiMThjMzE0MDQ2NjAYBgorBgEEAYO/MAEUBAoMCHNjaGVkdWxlMG4GCisGAQQBg78wARUEYAxeaHR0cHM6Ly9naXRodWIuY29tL2F3cy1wb3dlcnRvb2xzL3Bvd2VydG9vbHMtbGFtYmRhLXB5dGhvbi9hY3Rpb25zL3J1bnMvMTczOTcxOTAwOTUvYXR0ZW1wdHMvMTAWBgorBgEEAYO/MAEWBAgMBnB1YmxpYzCBiwYKKwYBBAHWeQIEAgR9BHsAeQB3AN09MGrGxxEyYxkeHJlnNwKiSl643jyt/4eKcoAvKe6OAAABmQl3rLAAAAQDAEgwRgIhAOZ6ZouWhWxJmmyrGdMLM8wMaD2fhbYRgp3Q1JMjyRc9AiEAjU5ksWPG0XyRr8uizoDYNvpny01TA+o97XzF7r0HEYcwCgYIKoZIzj0EAwMDaAAwZQIxAJNBanl6ffuPgPkTiqR0vfmtJr0xoPWOgzeB2P1AGvSmcqrqqEeFVm1aGke22LwA7AIwNLe9Drr7DGE4Xh5fnB1ixbdgYOkx5Cg2Luzsp3SMsdF35Ap0qJ4ACs/9VCs1NECc"}, "tlogEntries":[{"logIndex":"458350378", "logId":{"keyId":"wNI9atQGlz+VWfO6LRygH4QUfY/8W4RFwiT5i5WRgB0="}, "kindVersion":{"kind":"dsse", "version":"0.0.1"}, "integratedTime":"1756800462", "inclusionPromise":{"signedEntryTimestamp":"MEUCIBleH+BmnVDU7lChdjHJw9ymUM0IhLZ4qQ7qszfpfpJvAiEA4uV0HzHLehJW2MUiex7UkjfTjLYlR0k2XzCe0rjIn60="}, "inclusionProof":{"logIndex":"336446116", "rootHash":"Zaff21+G+iAEajspf8FWWBTeG4cvEfC/V7xIOsmSLUs=", "treeSize":"336446118", "hashes":["SY/He7igLeL+zhY025IJ6/dcRm/kVRnb41T5REdfR1c=", "CZwM7jA8ujNLzrAbdXRiUT90hcroA6bd0OD94x+YyGM=", "Q9TJoa5N5EeiGOKt504xDxYtROS5tvcAOPqxkO85D5I=", "WiI7rXGikOFzX1yjIduwHsQu9CjsW7iwYD8f4Dx8Qoc=", "apoJBx0tCW4M94EaSIfyPC+2EiQZjlpzcFRt8k+/eak=", "zbJT2wIgBQAFYyPpCnNFG5aq4rziOb9rusuz0v9NtU0=", "ewucac/JL0bnrAF8WYJjSZlUa/MOcpWasJauXIRxp2w=", "FkE7Wf7FI/YVme09X6yWtqvHZS3OlFN5dPBajAoKf/A=", "wBSkaQYhxT8RDs6YQQCG1sT52fDySIlhqi6QVXZq1vw=", "tbawTuo/7ZUiaV+0sxf/Gkm4F1o9VfAzF7jy358lCZk=", "W3IiKW68YOnP+4fVNmVlNAsfIw7jK5FP2HCyHAcVD9o=", "vS7O4ozHIQZJWBiov+mkpI27GE8zAmVCEkRcP3NDyNE="], "checkpoint":{"envelope":"rekor.sigstore.dev - 1193050959916656506\n336446118\nZaff21+G+iAEajspf8FWWBTeG4cvEfC/V7xIOsmSLUs=\n\n— rekor.sigstore.dev wNI9ajBEAiBHzL9d5szqqcze7OShBKIPKdgkOxy4AUHV1qffiWl+6AIgJiipdkdoG97ueNd8xtcRm7c6ZuIewM0zPXeiK1Yd4HI=\n"}}, "canonicalizedBody":"eyJhcGlWZXJzaW9uIjoiMC4wLjEiLCJraW5kIjoiZHNzZSIsInNwZWMiOnsiZW52ZWxvcGVIYXNoIjp7ImFsZ29yaXRobSI6InNoYTI1NiIsInZhbHVlIjoiNzI4NTllYzQ2MzZhMzc1OTljNTlhMTg3NjNiMTJlZDFlNTJiOTc2M2YyYzE5ODMxMjVjZTE1YTg1NDNlZDdkMyJ9LCJwYXlsb2FkSGFzaCI6eyJhbGdvcml0aG0iOiJzaGEyNTYiLCJ2YWx1ZSI6IjQzZGE5MTIwMDYxODAwNTg4YTIzNGRlZTMzODJkMzhkY2M4ZDY2OWE5ZWVkZGM5MmE1NzNjMDE0MzMwMzNjOGMifSwic2lnbmF0dXJlcyI6W3sic2lnbmF0dXJlIjoiTUVZQ0lRQzhuazcwRkU5RlRNbzIzQ0dpMkg4RDBQVzFkMzlvYUVyYXhFT3FNRGNFU0FJaEFJZFRKcm9DaGJFOTh6TDdvT3EyRTFNajFFcjhuUG9XOHNvblJteWJZdEM5IiwidmVyaWZpZXIiOiJMUzB0TFMxQ1JVZEpUaUJEUlZKVVNVWkpRMEZVUlMwdExTMHRDazFKU1VoYWVrTkRRblV5WjBGM1NVSkJaMGxWVWxabFZGTXZXRWN6VTJocFpqbFRkRTQzVUhONFVUbGhUMFpuZDBObldVbExiMXBKZW1vd1JVRjNUWGNLVG5wRlZrMUNUVWRCTVZWRlEyaE5UV015Ykc1ak0xSjJZMjFWZFZwSFZqSk5ValIzU0VGWlJGWlJVVVJGZUZaNllWZGtlbVJIT1hsYVV6RndZbTVTYkFwamJURnNXa2RzYUdSSFZYZElhR05PVFdwVmQwOVVRWGxOUkdkM1RucFJlRmRvWTA1TmFsVjNUMVJCZVUxRVozaE9lbEY0VjJwQlFVMUdhM2RGZDFsSUNrdHZXa2w2YWpCRFFWRlpTVXR2V2tsNmFqQkVRVkZqUkZGblFVVlNjVU01VGxkaFZYTTJTVVkzWW1SYWVHRnRVWHBRTTBodGRqZ3JUa3RoYUdkelYyb0tSVzVxTVZoaWRrSTNUVUpRUVdsYWNtTm1ObmxXUm1kSVJGQTJXVVZGUVc5cFExRXhkU3Q0WkZSb2JYb3dkSGRJTkhGUFEwSm5kM2RuWjFsSlRVRTBSd3BCTVZWa1JIZEZRaTkzVVVWQmQwbElaMFJCVkVKblRsWklVMVZGUkVSQlMwSm5aM0pDWjBWR1FsRmpSRUY2UVdSQ1owNVdTRkUwUlVablVWVXlSMlJFQ2pRNVpqZDNVbXRHVG1zeU4xcFRWVEZrZGxJd1VtSk5kMGgzV1VSV1VqQnFRa0puZDBadlFWVXpPVkJ3ZWpGWmEwVmFZalZ4VG1wd1MwWlhhWGhwTkZrS1drUTRkMmRaVVVkQk1WVmtSVkZGUWk5M1VqWk5TR2xIWkcxb01HUklRbnBQYVRoMldqSnNNR0ZJVm1sTWJVNTJZbE01ZW1KSVRtaE1WMXA1V1ZjeGJBcGtNamw1WVhrNWVtSklUbWhNVjJSd1pFZG9NVmxwTVc1YVZ6VnNZMjFHTUdJelNYWk1iV1J3WkVkb01WbHBPVE5pTTBweVdtMTRkbVF6VFhaYU1sWjFDbHBZU21oa1J6bDVXREprYkdKdFZubGhWMDVtWXpKNGVsbFVUWFZsVnpGelVVaEtiRnB1VFhaa1IwWnVZM2s1TWsxcE5IaE1ha0YzVDFGWlMwdDNXVUlLUWtGSFJIWjZRVUpCVVZGeVlVaFNNR05JVFRaTWVUa3dZakowYkdKcE5XaFpNMUp3WWpJMWVreHRaSEJrUjJneFdXNVdlbHBZU21waU1qVXdXbGMxTUFwTWJVNTJZbFJCVjBKbmIzSkNaMFZGUVZsUEwwMUJSVU5DUVdoNldUSm9iRnBJVm5OYVZFRXlRbWR2Y2tKblJVVkJXVTh2VFVGRlJFSkRhRzFhVkVrMENsbHFiR2hPVkdNeVRUSkdhVTVYUm14WmFrRjZXVlJrYUZwdFVUQlplbU42VFRKSmVFOUhUWHBOVkZGM1RrUlpNazFDYTBkRGFYTkhRVkZSUW1jM09IY0tRVkZSUlVNeFFubGFVekZUV2xkNGJGbFlUbXhOUkZWSFEybHpSMEZSVVVKbk56aDNRVkZWUlVveVJqTmplVEYzWWpOa2JHTnVVblppTW5oNlRETkNkZ3BrTWxaNVpFYzVkbUpJVFhSaVIwWjBXVzFTYUV4WVFqVmtSMmgyWW1wQlowSm5iM0pDWjBWRlFWbFBMMDFCUlVkQ1FrcDVXbGRhZWt3eWFHeFpWMUo2Q2t3eVVteGtiVlp6WWpOQmQwOTNXVXRMZDFsQ1FrRkhSSFo2UVVKRFFWRjBSRU4wYjJSSVVuZGplbTkyVEROU2RtRXlWblZNYlVacVpFZHNkbUp1VFhVS1dqSnNNR0ZJVm1sa1dFNXNZMjFPZG1KdVVteGlibEYxV1RJNWRFMUpSMGRDWjI5eVFtZEZSVUZaVHk5TlFVVktRa2huVFdSdGFEQmtTRUo2VDJrNGRncGFNbXd3WVVoV2FVeHRUblppVXpsNllraE9hRXhYV25sWlZ6RnNaREk1ZVdGNU9YcGlTRTVvVEZka2NHUkhhREZaYVRGdVdsYzFiR050UmpCaU0wbDJDa3h0WkhCa1IyZ3hXV2s1TTJJelNuSmFiWGgyWkROTmRsb3lWblZhV0Vwb1pFYzVlVmd5Wkd4aWJWWjVZVmRPWm1NeWVIcFpWRTExWlZjeGMxRklTbXdLV201TmRtUkhSbTVqZVRreVRXazBlRXhxUVhkUFFWbExTM2RaUWtKQlIwUjJla0ZDUTJkUmNVUkRhRzFPTWxKclQwZE5NVTVIVFhsTlJGa3pXVzFHYlFwWmVrVjVXVEpGTTFsVVZURk9WR3N4V2tSV2JGcFViR2xPZWxWNVRVUlNhRTFDTUVkRGFYTkhRVkZSUW1jM09IZEJVWE5GUkhkM1Rsb3liREJoU0ZacENreFhhSFpqTTFKc1drUkNTMEpuYjNKQ1owVkZRVmxQTDAxQlJVMUNSSGROVDIxb01HUklRbnBQYVRoMldqSnNNR0ZJVm1sTWJVNTJZbE01YUdRelRYUUtZMGM1TTFwWVNqQmlNamx6WTNrNWQySXpaR3hqYmxKMllqSjRla3hYZUdoaVYwcHJXVk14ZDJWWVVtOWlNalIzVDBGWlMwdDNXVUpDUVVkRWRucEJRZ3BFVVZGeFJFTm9iVnBVU1RSWmFteG9UbFJqTWsweVJtbE9WMFpzV1dwQmVsbFVaR2hhYlZFd1dYcGplazB5U1hoUFIwMTZUVlJSZDA1RVdUSk5RMGxIQ2tOcGMwZEJVVkZDWnpjNGQwRlJORVZHUVhkVFkyMVdiV041T1c5YVYwWnJZM2s1YTFwWVdteGlSemwzVFVKclIwTnBjMGRCVVZGQ1p6YzRkMEZST0VVS1EzZDNTazFxU1hoUFZFVTFUWHBqTlUxRVJVZERhWE5IUVZGUlFtYzNPSGRCVWtGRlNYZDNhR0ZJVWpCalNFMDJUSGs1Ym1GWVVtOWtWMGwxV1RJNWRBcE1Na1l6WTNreGQySXpaR3hqYmxKMllqSjRlazFDYTBkRGFYTkhRVkZSUW1jM09IZEJVa1ZGUTNkM1NrMVVTVFZOVkVrelRtcE5ORTFJT0VkRGFYTkhDa0ZSVVVKbk56aDNRVkpKUldOUmVIWmhTRkl3WTBoTk5reDVPVzVoV0ZKdlpGZEpkVmt5T1hSTU1rWXpZM2t4ZDJJelpHeGpibEoyWWpKNGVrd3pRbllLWkRKV2VXUkhPWFppU0UxMFlrZEdkRmx0VW1oTVdFSTFaRWRvZG1KcE9IVmFNbXd3WVVoV2FVd3paSFpqYlhSdFlrYzVNMk41T1hkamJWVjBZMjFXY3dwYVYwWjZXbE0xTldKWGVFRmpiVlp0WTNrNWIxcFhSbXRqZVRscldsaGFiR0pIT1hkTlJHZEhRMmx6UjBGUlVVSm5OemgzUVZKTlJVdG5kMjlhYlZWNUNrOUhTVFZaVkZVelRtcE9hRmxxVm1oYVYwbDNUVEpGTTFsWFdtdE9SMDB6VFhwT2FVMVVhR3BOZWtVd1RVUlJNazVxUVZsQ1oyOXlRbWRGUlVGWlR5OEtUVUZGVlVKQmIwMURTRTVxWVVkV2EyUlhlR3hOUnpSSFEybHpSMEZSVVVKbk56aDNRVkpWUlZsQmVHVmhTRkl3WTBoTk5reDVPVzVoV0ZKdlpGZEpkUXBaTWpsMFRESkdNMk41TVhkaU0yUnNZMjVTZG1JeWVIcE1NMEoyWkRKV2VXUkhPWFppU0UxMFlrZEdkRmx0VW1oTVdFSTFaRWRvZG1KcE9XaFpNMUp3Q21JeU5YcE1NMG94WW01TmRrMVVZM3BQVkdONFQxUkJkMDlVVlhaWldGSXdXbGN4ZDJSSVRYWk5WRUZYUW1kdmNrSm5SVVZCV1U4dlRVRkZWMEpCWjAwS1FtNUNNVmx0ZUhCWmVrTkNhWGRaUzB0M1dVSkNRVWhYWlZGSlJVRm5VamxDU0hOQlpWRkNNMEZPTURsTlIzSkhlSGhGZVZsNGEyVklTbXh1VG5kTGFRcFRiRFkwTTJwNWRDODBaVXRqYjBGMlMyVTJUMEZCUVVKdFVXd3pja3hCUVVGQlVVUkJSV2QzVW1kSmFFRlBXalphYjNWWGFGZDRTbTF0ZVhKSFpFMU1DazA0ZDAxaFJESm1hR0paVW1kd00xRXhTazFxZVZKak9VRnBSVUZxVlRWcmMxZFFSekJZZVZKeU9IVnBlbTlFV1U1MmNHNTVNREZVUVN0dk9UZFlla1lLTjNJd1NFVlpZM2REWjFsSlMyOWFTWHBxTUVWQmQwMUVZVUZCZDFwUlNYaEJTazVDWVc1c05tWm1kVkJuVUd0VWFYRlNNSFptYlhSS2NqQjRiMUJYVHdwbmVtVkNNbEF4UVVkMlUyMWpjWEp4Y1VWbFJsWnRNV0ZIYTJVeU1reDNRVGRCU1hkT1RHVTVSSEp5TjBSSFJUUllhRFZtYmtJeGFYaGlaR2RaVDJ0NENqVkRaekpNZFhwemNETlRUWE5rUmpNMVFYQXdjVW8wUVVOekx6bFdRM014VGtWRFl3b3RMUzB0TFVWT1JDQkRSVkpVU1VaSlEwRlVSUzB0TFMwdENnPT0ifV19fQ=="}]}, "dsseEnvelope":{"payload":"eyJfdHlwZSI6Imh0dHBzOi8vaW4tdG90by5pby9TdGF0ZW1lbnQvdjAuMSIsInByZWRpY2F0ZVR5cGUiOiJodHRwczovL3Nsc2EuZGV2L3Byb3ZlbmFuY2UvdjAuMiIsInN1YmplY3QiOlt7Im5hbWUiOiIuL2F3c19sYW1iZGFfcG93ZXJ0b29scy0zLjE5LjFhMTMtcHkzLW5vbmUtYW55LndobCIsImRpZ2VzdCI6eyJzaGEyNTYiOiIzOGFmYzJjNDJjMDgwZDRiYWYwOWQ3YzcxNTZiOTFiMTljMDZmNTA1NTA4OWJkZTMwNjgwODFjNzBkMDgwMWFiIn19LHsibmFtZSI6Ii4vYXdzX2xhbWJkYV9wb3dlcnRvb2xzLTMuMTkuMWExMy50YXIuZ3oiLCJkaWdlc3QiOnsic2hhMjU2IjoiYTJiZDkzMjdhMTQwOGVjZGUzNjVlMDU4NzgzZjdjNzlkOWI5NmFhN2Q5N2FiZTNjNDRmZDMxYzI1Mzc1MjEyNSJ9fV0sInByZWRpY2F0ZSI6eyJidWlsZGVyIjp7ImlkIjoiaHR0cHM6Ly9naXRodWIuY29tL3Nsc2EtZnJhbWV3b3JrL3Nsc2EtZ2l0aHViLWdlbmVyYXRvci8uZ2l0aHViL3dvcmtmbG93cy9nZW5lcmF0b3JfZ2VuZXJpY19zbHNhMy55bWxAcmVmcy90YWdzL3YyLjEuMCJ9LCJidWlsZFR5cGUiOiJodHRwczovL2dpdGh1Yi5jb20vc2xzYS1mcmFtZXdvcmsvc2xzYS1naXRodWItZ2VuZXJhdG9yL2dlbmVyaWNAdjEiLCJpbnZvY2F0aW9uIjp7ImNvbmZpZ1NvdXJjZSI6eyJ1cmkiOiJnaXQraHR0cHM6Ly9naXRodWIuY29tL2F3cy1wb3dlcnRvb2xzL3Bvd2VydG9vbHMtbGFtYmRhLXB5dGhvbkByZWZzL2hlYWRzL2RldmVsb3AiLCJkaWdlc3QiOnsic2hhMSI6ImZlMjhiOWE1NzYzYWI1YWViMDNhN2FmZDRjNzMzYjE4YzMxNDA0NjYifSwiZW50cnlQb2ludCI6Ii5naXRodWIvd29ya2Zsb3dzL3ByZS1yZWxlYXNlLnltbCJ9LCJwYXJhbWV0ZXJzIjp7InZhcnMiOnt9fSwiZW52aXJvbm1lbnQiOnsiZ2l0aHViX2FjdG9yIjoibGVhbmRyb2RhbWFzY2VuYSIsImdpdGh1Yl9hY3Rvcl9pZCI6IjQyOTUxNzMiLCJnaXRodWJfYmFzZV9yZWYiOiIiLCJnaXRodWJfZXZlbnRfbmFtZSI6InNjaGVkdWxlIiwiZ2l0aHViX2V2ZW50X3BheWxvYWQiOnsiZW50ZXJwcmlzZSI6eyJhdmF0YXJfdXJsIjoiaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS9iLzEyOTA/dj00IiwiY3JlYXRlZF9hdCI6IjIwMTktMTEtMTNUMTg6MDU6NDFaIiwiZGVzY3JpcHRpb24iOiIiLCJodG1sX3VybCI6Imh0dHBzOi8vZ2l0aHViLmNvbS9lbnRlcnByaXNlcy9hbWF6b24iLCJpZCI6MTI5MCwibmFtZSI6IkFtYXpvbiIsIm5vZGVfaWQiOiJNREV3T2tWdWRHVnljSEpwYzJVeE1qa3ciLCJzbHVnIjoiYW1hem9uIiwidXBkYXRlZF9hdCI6IjIwMjUtMDgtMTJUMjA6NTk6MTRaIiwid2Vic2l0ZV91cmwiOiJodHRwczovL3d3dy5hbWF6b24uY29tLyJ9LCJvcmdhbml6YXRpb24iOnsiYXZhdGFyX3VybCI6Imh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xMjkxMjc2Mzg/dj00IiwiZGVzY3JpcHRpb24iOiIiLCJldmVudHNfdXJsIjoiaHR0cHM6Ly9pbnRlcm5hbC1hcGkuc2VydmljZS5pYWQuZ2l0aHViLm5ldC9vcmdzL2F3cy1wb3dlcnRvb2xzL2V2ZW50cyIsImhvb2tzX3VybCI6Imh0dHBzOi8vaW50ZXJuYWwtYXBpLnNlcnZpY2UuaWFkLmdpdGh1Yi5uZXQvb3Jncy9hd3MtcG93ZXJ0b29scy9ob29rcyIsImlkIjoxMjkxMjc2MzgsImlzc3Vlc191cmwiOiJodHRwczovL2ludGVybmFsLWFwaS5zZXJ2aWNlLmlhZC5naXRodWIubmV0L29yZ3MvYXdzLXBvd2VydG9vbHMvaXNzdWVzIiwibG9naW4iOiJhd3MtcG93ZXJ0b29scyIsIm1lbWJlcnNfdXJsIjoiaHR0cHM6Ly9pbnRlcm5hbC1hcGkuc2VydmljZS5pYWQuZ2l0aHViLm5ldC9vcmdzL2F3cy1wb3dlcnRvb2xzL21lbWJlcnN7L21lbWJlcn0iLCJub2RlX2lkIjoiT19rZ0RPQjdKVTFnIiwicHVibGljX21lbWJlcnNfdXJsIjoiaHR0cHM6Ly9pbnRlcm5hbC1hcGkuc2VydmljZS5pYWQuZ2l0aHViLm5ldC9vcmdzL2F3cy1wb3dlcnRvb2xzL3B1YmxpY19tZW1iZXJzey9tZW1iZXJ9IiwicmVwb3NfdXJsIjoiaHR0cHM6Ly9pbnRlcm5hbC1hcGkuc2VydmljZS5pYWQuZ2l0aHViLm5ldC9vcmdzL2F3cy1wb3dlcnRvb2xzL3JlcG9zIiwidXJsIjoiaHR0cHM6Ly9pbnRlcm5hbC1hcGkuc2VydmljZS5pYWQuZ2l0aHViLm5ldC9vcmdzL2F3cy1wb3dlcnRvb2xzIn0sInJlcG9zaXRvcnkiOnsiYWxsb3dfZm9ya2luZyI6dHJ1ZSwiYXJjaGl2ZV91cmwiOiJodHRwczovL2ludGVybmFsLWFwaS5zZXJ2aWNlLmlhZC5naXRodWIubmV0L3JlcG9zL2F3cy1wb3dlcnRvb2xzL3Bvd2VydG9vbHMtbGFtYmRhLXB5dGhvbi97YXJjaGl2ZV9mb3JtYXR9ey9yZWZ9IiwiYXJjaGl2ZWQiOmZhbHNlLCJhc3NpZ25lZXNfdXJsIjoiaHR0cHM6Ly9pbnRlcm5hbC1hcGkuc2VydmljZS5pYWQuZ2l0aHViLm5ldC9yZXBvcy9hd3MtcG93ZXJ0b29scy9wb3dlcnRvb2xzLWxhbWJkYS1weXRob24vYXNzaWduZWVzey91c2VyfSIsImJsb2JzX3VybCI6Imh0dHBzOi8vaW50ZXJuYWwtYXBpLnNlcnZpY2UuaWFkLmdpdGh1Yi5uZXQvcmVwb3MvYXdzLXBvd2VydG9vbHMvcG93ZXJ0b29scy1sYW1iZGEtcHl0aG9uL2dpdC9ibG9ic3svc2hhfSIsImJyYW5jaGVzX3VybCI6Imh0dHBzOi8vaW50ZXJuYWwtYXBpLnNlcnZpY2UuaWFkLmdpdGh1Yi5uZXQvcmVwb3MvYXdzLXBvd2VydG9vbHMvcG93ZXJ0b29scy1sYW1iZGEtcHl0aG9uL2JyYW5jaGVzey9icmFuY2h9IiwiY2xvbmVfdXJsIjoiaHR0cHM6Ly9naXRodWIuY29tL2F3cy1wb3dlcnRvb2xzL3Bvd2VydG9vbHMtbGFtYmRhLXB5dGhvbi5naXQiLCJjb2xsYWJvcmF0b3JzX3VybCI6Imh0dHBzOi8vaW50ZXJuYWwtYXBpLnNlcnZpY2UuaWFkLmdpdGh1Yi5uZXQvcmVwb3MvYXdzLXBvd2VydG9vbHMvcG93ZXJ0b29scy1sYW1iZGEtcHl0aG9uL2NvbGxhYm9yYXRvcnN7L2NvbGxhYm9yYXRvcn0iLCJjb21tZW50c191cmwiOiJodHRwczovL2ludGVybmFsLWFwaS5zZXJ2aWNlLmlhZC5naXRodWIubmV0L3JlcG9zL2F3cy1wb3dlcnRvb2xzL3Bvd2VydG9vbHMtbGFtYmRhLXB5dGhvbi9jb21tZW50c3svbnVtYmVyfSIsImNvbW1pdHNfdXJsIjoiaHR0cHM6Ly9pbnRlcm5hbC1hcGkuc2VydmljZS5pYWQuZ2l0aHViLm5ldC9yZXBvcy9hd3MtcG93ZXJ0b29scy9wb3dlcnRvb2xzLWxhbWJkYS1weXRob24vY29tbWl0c3svc2hhfSIsImNvbXBhcmVfdXJsIjoiaHR0cHM6Ly9pbnRlcm5hbC1hcGkuc2VydmljZS5pYWQuZ2l0aHViLm5ldC9yZXBvcy9hd3MtcG93ZXJ0b29scy9wb3dlcnRvb2xzLWxhbWJkYS1weXRob24vY29tcGFyZS97YmFzZX0uLi57aGVhZH0iLCJjb250ZW50c191cmwiOiJodHRwczovL2ludGVybmFsLWFwaS5zZXJ2aWNlLmlhZC5naXRodWIubmV0L3JlcG9zL2F3cy1wb3dlcnRvb2xzL3Bvd2VydG9vbHMtbGFtYmRhLXB5dGhvbi9jb250ZW50cy97K3BhdGh9IiwiY29udHJpYnV0b3JzX3VybCI6Imh0dHBzOi8vaW50ZXJuYWwtYXBpLnNlcnZpY2UuaWFkLmdpdGh1Yi5uZXQvcmVwb3MvYXdzLXBvd2VydG9vbHMvcG93ZXJ0b29scy1sYW1iZGEtcHl0aG9uL2NvbnRyaWJ1dG9ycyIsImNyZWF0ZWRfYXQiOiIyMDE5LTExLTE1VDEyOjI2OjEyWiIsImN1c3RvbV9wcm9wZXJ0aWVzIjp7InN0YWdpbmciOiJmYWxzZSIsInZpc2liaWxpdHktYWxsb3ctaW50ZXJuYWwiOiJmYWxzZSIsInZpc2liaWxpdHktYWxsb3ctcHJpdmF0ZSI6ImZhbHNlIiwidmlzaWJpbGl0eS1hbGxvdy1wdWJsaWMiOiJ0cnVlIn0sImRlZmF1bHRfYnJhbmNoIjoiZGV2ZWxvcCIsImRlcGxveW1lbnRzX3VybCI6Imh0dHBzOi8vaW50ZXJuYWwtYXBpLnNlcnZpY2UuaWFkLmdpdGh1Yi5uZXQvcmVwb3MvYXdzLXBvd2VydG9vbHMvcG93ZXJ0b29scy1sYW1iZGEtcHl0aG9uL2RlcGxveW1lbnRzIiwiZGVzY3JpcHRpb24iOiJBIGRldmVsb3BlciB0b29sa2l0IHRvIGltcGxlbWVudCBTZXJ2ZXJsZXNzIGJlc3QgcHJhY3RpY2VzIGFuZCBpbmNyZWFzZSBkZXZlbG9wZXIgdmVsb2NpdHkuIiwiZGlzYWJsZWQiOmZhbHNlLCJkb3dubG9hZHNfdXJsIjoiaHR0cHM6Ly9pbnRlcm5hbC1hcGkuc2VydmljZS5pYWQuZ2l0aHViLm5ldC9yZXBvcy9hd3MtcG93ZXJ0b29scy9wb3dlcnRvb2xzLWxhbWJkYS1weXRob24vZG93bmxvYWRzIiwiZXZlbnRzX3VybCI6Imh0dHBzOi8vaW50ZXJuYWwtYXBpLnNlcnZpY2UuaWFkLmdpdGh1Yi5uZXQvcmVwb3MvYXdzLXBvd2VydG9vbHMvcG93ZXJ0b29scy1sYW1iZGEtcHl0aG9uL2V2ZW50cyIsImZvcmsiOmZhbHNlLCJmb3JrcyI6NDUwLCJmb3Jrc19jb3VudCI6NDUwLCJmb3Jrc191cmwiOiJodHRwczovL2ludGVybmFsLWFwaS5zZXJ2aWNlLmlhZC5naXRodWIubmV0L3JlcG9zL2F3cy1wb3dlcnRvb2xzL3Bvd2VydG9vbHMtbGFtYmRhLXB5dGhvbi9mb3JrcyIsImZ1bGxfbmFtZSI6ImF3cy1wb3dlcnRvb2xzL3Bvd2VydG9vbHMtbGFtYmRhLXB5dGhvbiIsImdpdF9jb21taXRzX3VybCI6Imh0dHBzOi8vaW50ZXJuYWwtYXBpLnNlcnZpY2UuaWFkLmdpdGh1Yi5uZXQvcmVwb3MvYXdzLXBvd2VydG9vbHMvcG93ZXJ0b29scy1sYW1iZGEtcHl0aG9uL2dpdC9jb21taXRzey9zaGF9IiwiZ2l0X3JlZnNfdXJsIjoiaHR0cHM6Ly9pbnRlcm5hbC1hcGkuc2VydmljZS5pYWQuZ2l0aHViLm5ldC9yZXBvcy9hd3MtcG93ZXJ0b29scy9wb3dlcnRvb2xzLWxhbWJkYS1weXRob24vZ2l0L3JlZnN7L3NoYX0iLCJnaXRfdGFnc191cmwiOiJodHRwczovL2ludGVybmFsLWFwaS5zZXJ2aWNlLmlhZC5naXRodWIubmV0L3JlcG9zL2F3cy1wb3dlcnRvb2xzL3Bvd2VydG9vbHMtbGFtYmRhLXB5dGhvbi9naXQvdGFnc3svc2hhfSIsImdpdF91cmwiOiJnaXQ6Ly9naXRodWIuY29tL2F3cy1wb3dlcnRvb2xzL3Bvd2VydG9vbHMtbGFtYmRhLXB5dGhvbi5naXQiLCJoYXNfZGlzY3Vzc2lvbnMiOnRydWUsImhhc19kb3dubG9hZHMiOnRydWUsImhhc19pc3N1ZXMiOnRydWUsImhhc19wYWdlcyI6ZmFsc2UsImhhc19wcm9qZWN0cyI6dHJ1ZSwiaGFzX3dpa2kiOmZhbHNlLCJob21lcGFnZSI6Imh0dHBzOi8vZG9jcy5wb3dlcnRvb2xzLmF3cy5kZXYvbGFtYmRhL3B5dGhvbi9sYXRlc3QvIiwiaG9va3NfdXJsIjoiaHR0cHM6Ly9pbnRlcm5hbC1hcGkuc2VydmljZS5pYWQuZ2l0aHViLm5ldC9yZXBvcy9hd3MtcG93ZXJ0b29scy9wb3dlcnRvb2xzLWxhbWJkYS1weXRob24vaG9va3MiLCJodG1sX3VybCI6Imh0dHBzOi8vZ2l0aHViLmNvbS9hd3MtcG93ZXJ0b29scy9wb3dlcnRvb2xzLWxhbWJkYS1weXRob24iLCJpZCI6MjIxOTE5Mzc5LCJpc190ZW1wbGF0ZSI6ZmFsc2UsImlzc3VlX2NvbW1lbnRfdXJsIjoiaHR0cHM6Ly9pbnRlcm5hbC1hcGkuc2VydmljZS5pYWQuZ2l0aHViLm5ldC9yZXBvcy9hd3MtcG93ZXJ0b29scy9wb3dlcnRvb2xzLWxhbWJkYS1weXRob24vaXNzdWVzL2NvbW1lbnRzey9udW1iZXJ9IiwiaXNzdWVfZXZlbnRzX3VybCI6Imh0dHBzOi8vaW50ZXJuYWwtYXBpLnNlcnZpY2UuaWFkLmdpdGh1Yi5uZXQvcmVwb3MvYXdzLXBvd2VydG9vbHMvcG93ZXJ0b29scy1sYW1iZGEtcHl0aG9uL2lzc3Vlcy9ldmVudHN7L251bWJlcn0iLCJpc3N1ZXNfdXJsIjoiaHR0cHM6Ly9pbnRlcm5hbC1hcGkuc2VydmljZS5pYWQuZ2l0aHViLm5ldC9yZXBvcy9hd3MtcG93ZXJ0b29scy9wb3dlcnRvb2xzLWxhbWJkYS1weXRob24vaXNzdWVzey9udW1iZXJ9Iiwia2V5c191cmwiOiJodHRwczovL2ludGVybmFsLWFwaS5zZXJ2aWNlLmlhZC5naXRodWIubmV0L3JlcG9zL2F3cy1wb3dlcnRvb2xzL3Bvd2VydG9vbHMtbGFtYmRhLXB5dGhvbi9rZXlzey9rZXlfaWR9IiwibGFiZWxzX3VybCI6Imh0dHBzOi8vaW50ZXJuYWwtYXBpLnNlcnZpY2UuaWFkLmdpdGh1Yi5uZXQvcmVwb3MvYXdzLXBvd2VydG9vbHMvcG93ZXJ0b29scy1sYW1iZGEtcHl0aG9uL2xhYmVsc3svbmFtZX0iLCJsYW5ndWFnZSI6IlB5dGhvbiIsImxhbmd1YWdlc191cmwiOiJodHRwczovL2ludGVybmFsLWFwaS5zZXJ2aWNlLmlhZC5naXRodWIubmV0L3JlcG9zL2F3cy1wb3dlcnRvb2xzL3Bvd2VydG9vbHMtbGFtYmRhLXB5dGhvbi9sYW5ndWFnZXMiLCJsaWNlbnNlIjp7ImtleSI6Im1pdC0wIiwibmFtZSI6Ik1JVCBObyBBdHRyaWJ1dGlvbiIsIm5vZGVfaWQiOiJNRGM2VEdsalpXNXpaVFF4Iiwic3BkeF9pZCI6Ik1JVC0wIiwidXJsIjoiaHR0cHM6Ly9pbnRlcm5hbC1hcGkuc2VydmljZS5pYWQuZ2l0aHViLm5ldC9saWNlbnNlcy9taXQtMCJ9LCJtZXJnZXNfdXJsIjoiaHR0cHM6Ly9pbnRlcm5hbC1hcGkuc2VydmljZS5pYWQuZ2l0aHViLm5ldC9yZXBvcy9hd3MtcG93ZXJ0b29scy9wb3dlcnRvb2xzLWxhbWJkYS1weXRob24vbWVyZ2VzIiwibWlsZXN0b25lc191cmwiOiJodHRwczovL2ludGVybmFsLWFwaS5zZXJ2aWNlLmlhZC5naXRodWIubmV0L3JlcG9zL2F3cy1wb3dlcnRvb2xzL3Bvd2VydG9vbHMtbGFtYmRhLXB5dGhvbi9taWxlc3RvbmVzey9udW1iZXJ9IiwibWlycm9yX3VybCI6bnVsbCwibmFtZSI6InBvd2VydG9vbHMtbGFtYmRhLXB5dGhvbiIsIm5vZGVfaWQiOiJNREV3T2xKbGNHOXphWFJ2Y25reU1qRTVNVGt6TnprPSIsIm5vdGlmaWNhdGlvbnNfdXJsIjoiaHR0cHM6Ly9pbnRlcm5hbC1hcGkuc2VydmljZS5pYWQuZ2l0aHViLm5ldC9yZXBvcy9hd3MtcG93ZXJ0b29scy9wb3dlcnRvb2xzLWxhbWJkYS1weXRob24vbm90aWZpY2F0aW9uc3s/c2luY2UsYWxsLHBhcnRpY2lwYXRpbmd9Iiwib3Blbl9pc3N1ZXMiOjUyLCJvcGVuX2lzc3Vlc19jb3VudCI6NTIsIm93bmVyIjp7ImF2YXRhcl91cmwiOiJodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTI5MTI3NjM4P3Y9NCIsImV2ZW50c191cmwiOiJodHRwczovL2ludGVybmFsLWFwaS5zZXJ2aWNlLmlhZC5naXRodWIubmV0L3VzZXJzL2F3cy1wb3dlcnRvb2xzL2V2ZW50c3svcHJpdmFjeX0iLCJmb2xsb3dlcnNfdXJsIjoiaHR0cHM6Ly9pbnRlcm5hbC1hcGkuc2VydmljZS5pYWQuZ2l0aHViLm5ldC91c2Vycy9hd3MtcG93ZXJ0b29scy9mb2xsb3dlcnMiLCJmb2xsb3dpbmdfdXJsIjoiaHR0cHM6Ly9pbnRlcm5hbC1hcGkuc2VydmljZS5pYWQuZ2l0aHViLm5ldC91c2Vycy9hd3MtcG93ZXJ0b29scy9mb2xsb3dpbmd7L290aGVyX3VzZXJ9IiwiZ2lzdHNfdXJsIjoiaHR0cHM6Ly9pbnRlcm5hbC1hcGkuc2VydmljZS5pYWQuZ2l0aHViLm5ldC91c2Vycy9hd3MtcG93ZXJ0b29scy9naXN0c3svZ2lzdF9pZH0iLCJncmF2YXRhcl9pZCI6IiIsImh0bWxfdXJsIjoiaHR0cHM6Ly9naXRodWIuY29tL2F3cy1wb3dlcnRvb2xzIiwiaWQiOjEyOTEyNzYzOCwibG9naW4iOiJhd3MtcG93ZXJ0b29scyIsIm5vZGVfaWQiOiJPX2tnRE9CN0pVMWciLCJvcmdhbml6YXRpb25zX3VybCI6Imh0dHBzOi8vaW50ZXJuYWwtYXBpLnNlcnZpY2UuaWFkLmdpdGh1Yi5uZXQvdXNlcnMvYXdzLXBvd2VydG9vbHMvb3JncyIsInJlY2VpdmVkX2V2ZW50c191cmwiOiJodHRwczovL2ludGVybmFsLWFwaS5zZXJ2aWNlLmlhZC5naXRodWIubmV0L3VzZXJzL2F3cy1wb3dlcnRvb2xzL3JlY2VpdmVkX2V2ZW50cyIsInJlcG9zX3VybCI6Imh0dHBzOi8vaW50ZXJuYWwtYXBpLnNlcnZpY2UuaWFkLmdpdGh1Yi5uZXQvdXNlcnMvYXdzLXBvd2VydG9vbHMvcmVwb3MiLCJzaXRlX2FkbWluIjpmYWxzZSwic3RhcnJlZF91cmwiOiJodHRwczovL2ludGVybmFsLWFwaS5zZXJ2aWNlLmlhZC5naXRodWIubmV0L3VzZXJzL2F3cy1wb3dlcnRvb2xzL3N0YXJyZWR7L293bmVyfXsvcmVwb30iLCJzdWJzY3JpcHRpb25zX3VybCI6Imh0dHBzOi8vaW50ZXJuYWwtYXBpLnNlcnZpY2UuaWFkLmdpdGh1Yi5uZXQvdXNlcnMvYXdzLXBvd2VydG9vbHMvc3Vic2NyaXB0aW9ucyIsInR5cGUiOiJPcmdhbml6YXRpb24iLCJ1cmwiOiJodHRwczovL2ludGVybmFsLWFwaS5zZXJ2aWNlLmlhZC5naXRodWIubmV0L3VzZXJzL2F3cy1wb3dlcnRvb2xzIiwidXNlcl92aWV3X3R5cGUiOiJwdWJsaWMifSwicHJpdmF0ZSI6ZmFsc2UsInB1bGxzX3VybCI6Imh0dHBzOi8vaW50ZXJuYWwtYXBpLnNlcnZpY2UuaWFkLmdpdGh1Yi5uZXQvcmVwb3MvYXdzLXBvd2VydG9vbHMvcG93ZXJ0b29scy1sYW1iZGEtcHl0aG9uL3B1bGxzey9udW1iZXJ9IiwicHVzaGVkX2F0IjoiMjAyNS0wOS0wMlQwNzo1OTozM1oiLCJyZWxlYXNlc191cmwiOiJodHRwczovL2ludGVybmFsLWFwaS5zZXJ2aWNlLmlhZC5naXRodWIubmV0L3JlcG9zL2F3cy1wb3dlcnRvb2xzL3Bvd2VydG9vbHMtbGFtYmRhLXB5dGhvbi9yZWxlYXNlc3svaWR9Iiwic2l6ZSI6MTMwOTY0LCJzc2hfdXJsIjoiZ2l0QGdpdGh1Yi5jb206YXdzLXBvd2VydG9vbHMvcG93ZXJ0b29scy1sYW1iZGEtcHl0aG9uLmdpdCIsInN0YXJnYXplcnNfY291bnQiOjMxMzQsInN0YXJnYXplcnNfdXJsIjoiaHR0cHM6Ly9pbnRlcm5hbC1hcGkuc2VydmljZS5pYWQuZ2l0aHViLm5ldC9yZXBvcy9hd3MtcG93ZXJ0b29scy9wb3dlcnRvb2xzLWxhbWJkYS1weXRob24vc3RhcmdhemVycyIsInN0YXR1c2VzX3VybCI6Imh0dHBzOi8vaW50ZXJuYWwtYXBpLnNlcnZpY2UuaWFkLmdpdGh1Yi5uZXQvcmVwb3MvYXdzLXBvd2VydG9vbHMvcG93ZXJ0b29scy1sYW1iZGEtcHl0aG9uL3N0YXR1c2VzL3tzaGF9Iiwic3Vic2NyaWJlcnNfdXJsIjoiaHR0cHM6Ly9pbnRlcm5hbC1hcGkuc2VydmljZS5pYWQuZ2l0aHViLm5ldC9yZXBvcy9hd3MtcG93ZXJ0b29scy9wb3dlcnRvb2xzLWxhbWJkYS1weXRob24vc3Vic2NyaWJlcnMiLCJzdWJzY3JpcHRpb25fdXJsIjoiaHR0cHM6Ly9pbnRlcm5hbC1hcGkuc2VydmljZS5pYWQuZ2l0aHViLm5ldC9yZXBvcy9hd3MtcG93ZXJ0b29scy9wb3dlcnRvb2xzLWxhbWJkYS1weXRob24vc3Vic2NyaXB0aW9uIiwic3ZuX3VybCI6Imh0dHBzOi8vZ2l0aHViLmNvbS9hd3MtcG93ZXJ0b29scy9wb3dlcnRvb2xzLWxhbWJkYS1weXRob24iLCJ0YWdzX3VybCI6Imh0dHBzOi8vaW50ZXJuYWwtYXBpLnNlcnZpY2UuaWFkLmdpdGh1Yi5uZXQvcmVwb3MvYXdzLXBvd2VydG9vbHMvcG93ZXJ0b29scy1sYW1iZGEtcHl0aG9uL3RhZ3MiLCJ0ZWFtc191cmwiOiJodHRwczovL2ludGVybmFsLWFwaS5zZXJ2aWNlLmlhZC5naXRodWIubmV0L3JlcG9zL2F3cy1wb3dlcnRvb2xzL3Bvd2VydG9vbHMtbGFtYmRhLXB5dGhvbi90ZWFtcyIsInRvcGljcyI6WyJhd3MiLCJhd3MtbGFtYmRhIiwibGFtYmRhIiwicHl0aG9uIiwic2VydmVybGVzcyJdLCJ0cmVlc191cmwiOiJodHRwczovL2ludGVybmFsLWFwaS5zZXJ2aWNlLmlhZC5naXRodWIubmV0L3JlcG9zL2F3cy1wb3dlcnRvb2xzL3Bvd2VydG9vbHMtbGFtYmRhLXB5dGhvbi9naXQvdHJlZXN7L3NoYX0iLCJ1cGRhdGVkX2F0IjoiMjAyNS0wOS0wMlQwNzo1OTozN1oiLCJ1cmwiOiJodHRwczovL2ludGVybmFsLWFwaS5zZXJ2aWNlLmlhZC5naXRodWIubmV0L3JlcG9zL2F3cy1wb3dlcnRvb2xzL3Bvd2VydG9vbHMtbGFtYmRhLXB5dGhvbiIsInZpc2liaWxpdHkiOiJwdWJsaWMiLCJ3YXRjaGVycyI6MzEzNCwid2F0Y2hlcnNfY291bnQiOjMxMzQsIndlYl9jb21taXRfc2lnbm9mZl9yZXF1aXJlZCI6dHJ1ZX0sInNjaGVkdWxlIjoiMCA4ICogKiAxLTUiLCJ3b3JrZmxvdyI6Ii5naXRodWIvd29ya2Zsb3dzL3ByZS1yZWxlYXNlLnltbCJ9LCJnaXRodWJfaGVhZF9yZWYiOiIiLCJnaXRodWJfcmVmIjoicmVmcy9oZWFkcy9kZXZlbG9wIiwiZ2l0aHViX3JlZl90eXBlIjoiYnJhbmNoIiwiZ2l0aHViX3JlcG9zaXRvcnlfaWQiOiIyMjE5MTkzNzkiLCJnaXRodWJfcmVwb3NpdG9yeV9vd25lciI6ImF3cy1wb3dlcnRvb2xzIiwiZ2l0aHViX3JlcG9zaXRvcnlfb3duZXJfaWQiOiIxMjkxMjc2MzgiLCJnaXRodWJfcnVuX2F0dGVtcHQiOiIxIiwiZ2l0aHViX3J1bl9pZCI6IjE3Mzk3MTkwMDk1IiwiZ2l0aHViX3J1bl9udW1iZXIiOiIzMTkiLCJnaXRodWJfc2hhMSI6ImZlMjhiOWE1NzYzYWI1YWViMDNhN2FmZDRjNzMzYjE4YzMxNDA0NjYifX0sIm1ldGFkYXRhIjp7ImJ1aWxkSW52b2NhdGlvbklEIjoiMTczOTcxOTAwOTUtMSIsImNvbXBsZXRlbmVzcyI6eyJwYXJhbWV0ZXJzIjp0cnVlLCJlbnZpcm9ubWVudCI6ZmFsc2UsIm1hdGVyaWFscyI6ZmFsc2V9LCJyZXByb2R1Y2libGUiOmZhbHNlfSwibWF0ZXJpYWxzIjpbeyJ1cmkiOiJnaXQraHR0cHM6Ly9naXRodWIuY29tL2F3cy1wb3dlcnRvb2xzL3Bvd2VydG9vbHMtbGFtYmRhLXB5dGhvbkByZWZzL2hlYWRzL2RldmVsb3AiLCJkaWdlc3QiOnsic2hhMSI6ImZlMjhiOWE1NzYzYWI1YWViMDNhN2FmZDRjNzMzYjE4YzMxNDA0NjYifX1dfX0=", "payloadType":"application/vnd.in-toto+json", "signatures":[{"sig":"MEYCIQC8nk70FE9FTMo23CGi2H8D0PW1d39oaEraxEOqMDcESAIhAIdTJroChbE98zL7oOq2E1Mj1Er8nPoW8sonRmybYtC9"}]}} \ No newline at end of file diff --git a/provenance/3.19.1a14/multiple.intoto.jsonl b/provenance/3.19.1a14/multiple.intoto.jsonl new file mode 100644 index 00000000000..75bd9da02aa --- /dev/null +++ b/provenance/3.19.1a14/multiple.intoto.jsonl @@ -0,0 +1 @@ +{"mediaType":"application/vnd.dev.sigstore.bundle.v0.3+json", "verificationMaterial":{"certificate":{"rawBytes":"MIIHZTCCBuugAwIBAgIUIjQ9CTGbY0pR4xX/cN6TmTm56XwwCgYIKoZIzj0EAwMwNzEVMBMGA1UEChMMc2lnc3RvcmUuZGV2MR4wHAYDVQQDExVzaWdzdG9yZS1pbnRlcm1lZGlhdGUwHhcNMjUwOTA0MDgwNzU1WhcNMjUwOTA0MDgxNzU1WjAAMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEdCwaqZz2HmSm8GZMSordBbHbWuEJN7u7t87oL3EKtpK1fDroTb9sLVVXg3riMQsKJ5lIKrV3fwUiddU9VQNWUaOCBgowggYGMA4GA1UdDwEB/wQEAwIHgDATBgNVHSUEDDAKBggrBgEFBQcDAzAdBgNVHQ4EFgQUsXgz5v4CAQVaW1poI+bM4YaER6EwHwYDVR0jBBgwFoAU39Ppz1YkEZb5qNjpKFWixi4YZD8wgYQGA1UdEQEB/wR6MHiGdmh0dHBzOi8vZ2l0aHViLmNvbS9zbHNhLWZyYW1ld29yay9zbHNhLWdpdGh1Yi1nZW5lcmF0b3IvLmdpdGh1Yi93b3JrZmxvd3MvZ2VuZXJhdG9yX2dlbmVyaWNfc2xzYTMueW1sQHJlZnMvdGFncy92Mi4xLjAwOQYKKwYBBAGDvzABAQQraHR0cHM6Ly90b2tlbi5hY3Rpb25zLmdpdGh1YnVzZXJjb250ZW50LmNvbTAWBgorBgEEAYO/MAECBAhzY2hlZHVsZTA2BgorBgEEAYO/MAEDBCgzNmIwMmVmY2NiYTFmZTNlYjk2ZjYxM2VmMmIzNzZhZTdmODlhNzNjMBkGCisGAQQBg78wAQQEC1ByZS1SZWxlYXNlMDUGCisGAQQBg78wAQUEJ2F3cy1wb3dlcnRvb2xzL3Bvd2VydG9vbHMtbGFtYmRhLXB5dGhvbjAgBgorBgEEAYO/MAEGBBJyZWZzL2hlYWRzL2RldmVsb3AwOwYKKwYBBAGDvzABCAQtDCtodHRwczovL3Rva2VuLmFjdGlvbnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tMIGGBgorBgEEAYO/MAEJBHgMdmh0dHBzOi8vZ2l0aHViLmNvbS9zbHNhLWZyYW1ld29yay9zbHNhLWdpdGh1Yi1nZW5lcmF0b3IvLmdpdGh1Yi93b3JrZmxvd3MvZ2VuZXJhdG9yX2dlbmVyaWNfc2xzYTMueW1sQHJlZnMvdGFncy92Mi4xLjAwOAYKKwYBBAGDvzABCgQqDChmN2RkOGM1NGMyMDY3YmFmYzEyY2E3YTU1NTk1ZDVlZTliNzUyMDRhMB0GCisGAQQBg78wAQsEDwwNZ2l0aHViLWhvc3RlZDBKBgorBgEEAYO/MAEMBDwMOmh0dHBzOi8vZ2l0aHViLmNvbS9hd3MtcG93ZXJ0b29scy9wb3dlcnRvb2xzLWxhbWJkYS1weXRob24wOAYKKwYBBAGDvzABDQQqDCgzNmIwMmVmY2NiYTFmZTNlYjk2ZjYxM2VmMmIzNzZhZTdmODlhNzNjMCIGCisGAQQBg78wAQ4EFAwScmVmcy9oZWFkcy9kZXZlbG9wMBkGCisGAQQBg78wAQ8ECwwJMjIxOTE5Mzc5MDEGCisGAQQBg78wARAEIwwhaHR0cHM6Ly9naXRodWIuY29tL2F3cy1wb3dlcnRvb2xzMBkGCisGAQQBg78wAREECwwJMTI5MTI3NjM4MH8GCisGAQQBg78wARIEcQxvaHR0cHM6Ly9naXRodWIuY29tL2F3cy1wb3dlcnRvb2xzL3Bvd2VydG9vbHMtbGFtYmRhLXB5dGhvbi8uZ2l0aHViL3dvcmtmbG93cy9wcmUtcmVsZWFzZS55bWxAcmVmcy9oZWFkcy9kZXZlbG9wMDgGCisGAQQBg78wARMEKgwoMzZiMDJlZmNjYmExZmUzZWI5NmY2MTNlZjJiMzc2YWU3Zjg5YTczYzAYBgorBgEEAYO/MAEUBAoMCHNjaGVkdWxlMG4GCisGAQQBg78wARUEYAxeaHR0cHM6Ly9naXRodWIuY29tL2F3cy1wb3dlcnRvb2xzL3Bvd2VydG9vbHMtbGFtYmRhLXB5dGhvbi9hY3Rpb25zL3J1bnMvMTc0NTczNDU2MzAvYXR0ZW1wdHMvMTAWBgorBgEEAYO/MAEWBAgMBnB1YmxpYzCBiQYKKwYBBAHWeQIEAgR7BHkAdwB1AN09MGrGxxEyYxkeHJlnNwKiSl643jyt/4eKcoAvKe6OAAABmRPEmfIAAAQDAEYwRAIgBgTP37QyMxO3PDYT7+BBxVUp7BlGdXWyYXmrhrijXHACIGoE9mmxjh2gFqpck3W47/7ZQNwRklVSlo5mibPQZqi+MAoGCCqGSM49BAMDA2gAMGUCMQDSYVE9MTPo6qqFWpthg9qEpAqX8i9C2S7BTi+cCwxu9cKKb3YmQuNDXjZJ8iwKlVwCMEv8qlR0z7cF173hgf/mZfm++hgjIEpSo3FEOCfaWzCpZlkdrAqgnZVsTmtqt/3IPg=="}, "tlogEntries":[{"logIndex":"468753790", "logId":{"keyId":"wNI9atQGlz+VWfO6LRygH4QUfY/8W4RFwiT5i5WRgB0="}, "kindVersion":{"kind":"dsse", "version":"0.0.1"}, "integratedTime":"1756973275", "inclusionPromise":{"signedEntryTimestamp":"MEQCIHmrdk0a8MPWxTvW2p8LP3zoRUUObRhe8C0bSb1b83luAiA8vla6H4JEFokJQfKIMWLjQ6n/HeFeXZE4UgTF+mTzMA=="}, "inclusionProof":{"logIndex":"346849528", "rootHash":"2Ql2O+JAHXxAsFPLBxNfgNySwMRtUyxic/yNeRcaHJQ=", "treeSize":"346849529", "hashes":["XmooPVaAEswPuZ9Ro+QwntC+XIXPQBTLAkWZXbl/XMk=", "VH45DaeqHrs4dQUUYU2IAINei8yt6zoh4XIIjkhkAeY=", "rZM5OkYNyGgNQdRfyU8MiBduw29G5GiSFeGgZh9AFI8=", "LQrf9QTdwyi2JK/WnHdby/8nSzajO1qVGZR4CG9lbDw=", "s2fBHtqLQRc4RN2gGc1lafOYoi9jNbcvEfNhUocz0KQ=", "4eLJ4uYD0Tj93iMQKlolYPLVCwOvI5MWIcPc6A/VL9w=", "yhct4zU98AMvFxPgY7AhPcDQg6pZsX8Fq8QyLz+adaQ=", "4BE0tVMsu0I5ut2Jpc93SyFGC412TQIIt+oAhbLrqG8=", "kV949K/TRAK9BrkE2qElmPzoohGOTCK9cw7gQJWBM6Q=", "iJtB8Jxv7RyH42UyE2qNwuEktIuICJR9iPvzCzXowvE=", "W3IiKW68YOnP+4fVNmVlNAsfIw7jK5FP2HCyHAcVD9o=", "vS7O4ozHIQZJWBiov+mkpI27GE8zAmVCEkRcP3NDyNE="], "checkpoint":{"envelope":"rekor.sigstore.dev - 1193050959916656506\n346849529\n2Ql2O+JAHXxAsFPLBxNfgNySwMRtUyxic/yNeRcaHJQ=\n\n— rekor.sigstore.dev wNI9ajBFAiEA8b8/NkAY6vI2SkgY4Yh3uyYy8d56eoEy7ZtA0fCyZ84CICdY8Lt123rmM1eHDmVTbPtzksr+7NnEqEapr/hGVXoO\n"}}, "canonicalizedBody":"eyJhcGlWZXJzaW9uIjoiMC4wLjEiLCJraW5kIjoiZHNzZSIsInNwZWMiOnsiZW52ZWxvcGVIYXNoIjp7ImFsZ29yaXRobSI6InNoYTI1NiIsInZhbHVlIjoiM2UzODgzMTI2ZmM2OGI4ODVkN2U5YmU0Yzk2NTljMDY1MTJiZjMyNTAyZThhYTZlMTIyOWMzMWQ2ZGYwNmQ3MyJ9LCJwYXlsb2FkSGFzaCI6eyJhbGdvcml0aG0iOiJzaGEyNTYiLCJ2YWx1ZSI6IjBjZTY2MWRhODQwYmI5ZWExMzQ4NTI1NTg4NTEwNDZlZTA0YzY5NWU2Y2ExNTM0NTAzOTc2YTZhNjNiOWFiYTEifSwic2lnbmF0dXJlcyI6W3sic2lnbmF0dXJlIjoiTUVVQ0lRRGR1VFE1c3hpNWM1aXFBaDdkVUtScnhlSnNLMUJjOEUzY0FRdEJVOFA2b0FJZ0plMFd4anEzQ3ZKQWNaK1J6S1ZjTWdlZlRLZkx6OHlLNG50ZDR6Z3lTRFU9IiwidmVyaWZpZXIiOiJMUzB0TFMxQ1JVZEpUaUJEUlZKVVNVWkpRMEZVUlMwdExTMHRDazFKU1VoYVZFTkRRblYxWjBGM1NVSkJaMGxWU1dwUk9VTlVSMkpaTUhCU05IaFlMMk5PTmxSdFZHMDFObGgzZDBObldVbExiMXBKZW1vd1JVRjNUWGNLVG5wRlZrMUNUVWRCTVZWRlEyaE5UV015Ykc1ak0xSjJZMjFWZFZwSFZqSk5ValIzU0VGWlJGWlJVVVJGZUZaNllWZGtlbVJIT1hsYVV6RndZbTVTYkFwamJURnNXa2RzYUdSSFZYZElhR05PVFdwVmQwOVVRVEJOUkdkM1RucFZNVmRvWTA1TmFsVjNUMVJCTUUxRVozaE9lbFV4VjJwQlFVMUdhM2RGZDFsSUNrdHZXa2w2YWpCRFFWRlpTVXR2V2tsNmFqQkVRVkZqUkZGblFVVmtRM2RoY1ZwNk1raHRVMjA0UjFwTlUyOXlaRUppU0dKWGRVVktUamQxTjNRNE4yOEtURE5GUzNSd1N6Rm1SSEp2VkdJNWMweFdWbGhuTTNKcFRWRnpTMG8xYkVsTGNsWXpabmRWYVdSa1ZUbFdVVTVYVldGUFEwSm5iM2RuWjFsSFRVRTBSd3BCTVZWa1JIZEZRaTkzVVVWQmQwbElaMFJCVkVKblRsWklVMVZGUkVSQlMwSm5aM0pDWjBWR1FsRmpSRUY2UVdSQ1owNVdTRkUwUlVablVWVnpXR2Q2Q2pWMk5FTkJVVlpoVnpGd2Iwa3JZazAwV1dGRlVqWkZkMGgzV1VSV1VqQnFRa0puZDBadlFWVXpPVkJ3ZWpGWmEwVmFZalZ4VG1wd1MwWlhhWGhwTkZrS1drUTRkMmRaVVVkQk1WVmtSVkZGUWk5M1VqWk5TR2xIWkcxb01HUklRbnBQYVRoMldqSnNNR0ZJVm1sTWJVNTJZbE01ZW1KSVRtaE1WMXA1V1ZjeGJBcGtNamw1WVhrNWVtSklUbWhNVjJSd1pFZG9NVmxwTVc1YVZ6VnNZMjFHTUdJelNYWk1iV1J3WkVkb01WbHBPVE5pTTBweVdtMTRkbVF6VFhaYU1sWjFDbHBZU21oa1J6bDVXREprYkdKdFZubGhWMDVtWXpKNGVsbFVUWFZsVnpGelVVaEtiRnB1VFhaa1IwWnVZM2s1TWsxcE5IaE1ha0YzVDFGWlMwdDNXVUlLUWtGSFJIWjZRVUpCVVZGeVlVaFNNR05JVFRaTWVUa3dZakowYkdKcE5XaFpNMUp3WWpJMWVreHRaSEJrUjJneFdXNVdlbHBZU21waU1qVXdXbGMxTUFwTWJVNTJZbFJCVjBKbmIzSkNaMFZGUVZsUEwwMUJSVU5DUVdoNldUSm9iRnBJVm5OYVZFRXlRbWR2Y2tKblJVVkJXVTh2VFVGRlJFSkRaM3BPYlVsM0NrMXRWbTFaTWs1cFdWUkdiVnBVVG14WmFtc3lXbXBaZUUweVZtMU5iVWw2VG5wYWFGcFVaRzFQUkd4b1RucE9hazFDYTBkRGFYTkhRVkZSUW1jM09IY0tRVkZSUlVNeFFubGFVekZUV2xkNGJGbFlUbXhOUkZWSFEybHpSMEZSVVVKbk56aDNRVkZWUlVveVJqTmplVEYzWWpOa2JHTnVVblppTW5oNlRETkNkZ3BrTWxaNVpFYzVkbUpJVFhSaVIwWjBXVzFTYUV4WVFqVmtSMmgyWW1wQlowSm5iM0pDWjBWRlFWbFBMMDFCUlVkQ1FrcDVXbGRhZWt3eWFHeFpWMUo2Q2t3eVVteGtiVlp6WWpOQmQwOTNXVXRMZDFsQ1FrRkhSSFo2UVVKRFFWRjBSRU4wYjJSSVVuZGplbTkyVEROU2RtRXlWblZNYlVacVpFZHNkbUp1VFhVS1dqSnNNR0ZJVm1sa1dFNXNZMjFPZG1KdVVteGlibEYxV1RJNWRFMUpSMGRDWjI5eVFtZEZSVUZaVHk5TlFVVktRa2huVFdSdGFEQmtTRUo2VDJrNGRncGFNbXd3WVVoV2FVeHRUblppVXpsNllraE9hRXhYV25sWlZ6RnNaREk1ZVdGNU9YcGlTRTVvVEZka2NHUkhhREZaYVRGdVdsYzFiR050UmpCaU0wbDJDa3h0WkhCa1IyZ3hXV2s1TTJJelNuSmFiWGgyWkROTmRsb3lWblZhV0Vwb1pFYzVlVmd5Wkd4aWJWWjVZVmRPWm1NeWVIcFpWRTExWlZjeGMxRklTbXdLV201TmRtUkhSbTVqZVRreVRXazBlRXhxUVhkUFFWbExTM2RaUWtKQlIwUjJla0ZDUTJkUmNVUkRhRzFPTWxKclQwZE5NVTVIVFhsTlJGa3pXVzFHYlFwWmVrVjVXVEpGTTFsVVZURk9WR3N4V2tSV2JGcFViR2xPZWxWNVRVUlNhRTFDTUVkRGFYTkhRVkZSUW1jM09IZEJVWE5GUkhkM1Rsb3liREJoU0ZacENreFhhSFpqTTFKc1drUkNTMEpuYjNKQ1owVkZRVmxQTDAxQlJVMUNSSGROVDIxb01HUklRbnBQYVRoMldqSnNNR0ZJVm1sTWJVNTJZbE01YUdRelRYUUtZMGM1TTFwWVNqQmlNamx6WTNrNWQySXpaR3hqYmxKMllqSjRla3hYZUdoaVYwcHJXVk14ZDJWWVVtOWlNalIzVDBGWlMwdDNXVUpDUVVkRWRucEJRZ3BFVVZGeFJFTm5lazV0U1hkTmJWWnRXVEpPYVZsVVJtMWFWRTVzV1dwck1scHFXWGhOTWxadFRXMUplazU2V21oYVZHUnRUMFJzYUU1NlRtcE5RMGxIQ2tOcGMwZEJVVkZDWnpjNGQwRlJORVZHUVhkVFkyMVdiV041T1c5YVYwWnJZM2s1YTFwWVdteGlSemwzVFVKclIwTnBjMGRCVVZGQ1p6YzRkMEZST0VVS1EzZDNTazFxU1hoUFZFVTFUWHBqTlUxRVJVZERhWE5IUVZGUlFtYzNPSGRCVWtGRlNYZDNhR0ZJVWpCalNFMDJUSGs1Ym1GWVVtOWtWMGwxV1RJNWRBcE1Na1l6WTNreGQySXpaR3hqYmxKMllqSjRlazFDYTBkRGFYTkhRVkZSUW1jM09IZEJVa1ZGUTNkM1NrMVVTVFZOVkVrelRtcE5ORTFJT0VkRGFYTkhDa0ZSVVVKbk56aDNRVkpKUldOUmVIWmhTRkl3WTBoTk5reDVPVzVoV0ZKdlpGZEpkVmt5T1hSTU1rWXpZM2t4ZDJJelpHeGpibEoyWWpKNGVrd3pRbllLWkRKV2VXUkhPWFppU0UxMFlrZEdkRmx0VW1oTVdFSTFaRWRvZG1KcE9IVmFNbXd3WVVoV2FVd3paSFpqYlhSdFlrYzVNMk41T1hkamJWVjBZMjFXY3dwYVYwWjZXbE0xTldKWGVFRmpiVlp0WTNrNWIxcFhSbXRqZVRscldsaGFiR0pIT1hkTlJHZEhRMmx6UjBGUlVVSm5OemgzUVZKTlJVdG5kMjlOZWxwcENrMUVTbXhhYlU1cVdXMUZlRnB0VlhwYVYwazFUbTFaTWsxVVRteGFha3BwVFhwak1sbFhWVE5hYW1jMVdWUmplbGw2UVZsQ1oyOXlRbWRGUlVGWlR5OEtUVUZGVlVKQmIwMURTRTVxWVVkV2EyUlhlR3hOUnpSSFEybHpSMEZSVVVKbk56aDNRVkpWUlZsQmVHVmhTRkl3WTBoTk5reDVPVzVoV0ZKdlpGZEpkUXBaTWpsMFRESkdNMk41TVhkaU0yUnNZMjVTZG1JeWVIcE1NMEoyWkRKV2VXUkhPWFppU0UxMFlrZEdkRmx0VW1oTVdFSTFaRWRvZG1KcE9XaFpNMUp3Q21JeU5YcE1NMG94WW01TmRrMVVZekJPVkdONlRrUlZNazE2UVhaWldGSXdXbGN4ZDJSSVRYWk5WRUZYUW1kdmNrSm5SVVZCV1U4dlRVRkZWMEpCWjAwS1FtNUNNVmx0ZUhCWmVrTkNhVkZaUzB0M1dVSkNRVWhYWlZGSlJVRm5VamRDU0d0QlpIZENNVUZPTURsTlIzSkhlSGhGZVZsNGEyVklTbXh1VG5kTGFRcFRiRFkwTTJwNWRDODBaVXRqYjBGMlMyVTJUMEZCUVVKdFVsQkZiV1pKUVVGQlVVUkJSVmwzVWtGSlowSm5WRkF6TjFGNVRYaFBNMUJFV1ZRM0swSkNDbmhXVlhBM1FteEhaRmhYZVZsWWJYSm9jbWxxV0VoQlEwbEhiMFU1YlcxNGFtZ3laMFp4Y0dOck0xYzBOeTgzV2xGT2QxSnJiRlpUYkc4MWJXbGlVRkVLV25GcEswMUJiMGREUTNGSFUwMDBPVUpCVFVSQk1tZEJUVWRWUTAxUlJGTlpWa1U1VFZSUWJ6WnhjVVpYY0hSb1p6bHhSWEJCY1ZnNGFUbERNbE0zUWdwVWFTdGpRM2Q0ZFRsalMwdGlNMWx0VVhWT1JGaHFXa280YVhkTGJGWjNRMDFGZGpoeGJGSXdlamRqUmpFM00yaG5aaTl0V21adEt5dG9aMnBKUlhCVENtOHpSa1ZQUTJaaFYzcERjRnBzYTJSeVFYRm5ibHBXYzFSdGRIRjBMek5KVUdjOVBRb3RMUzB0TFVWT1JDQkRSVkpVU1VaSlEwRlVSUzB0TFMwdENnPT0ifV19fQ=="}]}, "dsseEnvelope":{"payload":"eyJfdHlwZSI6Imh0dHBzOi8vaW4tdG90by5pby9TdGF0ZW1lbnQvdjAuMSIsInByZWRpY2F0ZVR5cGUiOiJodHRwczovL3Nsc2EuZGV2L3Byb3ZlbmFuY2UvdjAuMiIsInN1YmplY3QiOlt7Im5hbWUiOiIuL2F3c19sYW1iZGFfcG93ZXJ0b29scy0zLjE5LjFhMTQtcHkzLW5vbmUtYW55LndobCIsImRpZ2VzdCI6eyJzaGEyNTYiOiJkODI1ZDVmYjhmMWIyMzFlNzJjMjczMjk0OTBhY2JhY2NiNmRjY2M0YWM0OWY0YTczMTdmNzM5OTg2ZTZjYWQxIn19LHsibmFtZSI6Ii4vYXdzX2xhbWJkYV9wb3dlcnRvb2xzLTMuMTkuMWExNC50YXIuZ3oiLCJkaWdlc3QiOnsic2hhMjU2IjoiMzgwNjRmZTgxMzdiNzczZTU3YzkxMWY1YmQzNWQxN2FhZDVkZjQ4MWFmYTNkOTgxNzBjNjc0NjNjOWMwMWM0OCJ9fV0sInByZWRpY2F0ZSI6eyJidWlsZGVyIjp7ImlkIjoiaHR0cHM6Ly9naXRodWIuY29tL3Nsc2EtZnJhbWV3b3JrL3Nsc2EtZ2l0aHViLWdlbmVyYXRvci8uZ2l0aHViL3dvcmtmbG93cy9nZW5lcmF0b3JfZ2VuZXJpY19zbHNhMy55bWxAcmVmcy90YWdzL3YyLjEuMCJ9LCJidWlsZFR5cGUiOiJodHRwczovL2dpdGh1Yi5jb20vc2xzYS1mcmFtZXdvcmsvc2xzYS1naXRodWItZ2VuZXJhdG9yL2dlbmVyaWNAdjEiLCJpbnZvY2F0aW9uIjp7ImNvbmZpZ1NvdXJjZSI6eyJ1cmkiOiJnaXQraHR0cHM6Ly9naXRodWIuY29tL2F3cy1wb3dlcnRvb2xzL3Bvd2VydG9vbHMtbGFtYmRhLXB5dGhvbkByZWZzL2hlYWRzL2RldmVsb3AiLCJkaWdlc3QiOnsic2hhMSI6IjM2YjAyZWZjY2JhMWZlM2ViOTZmNjEzZWYyYjM3NmFlN2Y4OWE3M2MifSwiZW50cnlQb2ludCI6Ii5naXRodWIvd29ya2Zsb3dzL3ByZS1yZWxlYXNlLnltbCJ9LCJwYXJhbWV0ZXJzIjp7InZhcnMiOnt9fSwiZW52aXJvbm1lbnQiOnsiZ2l0aHViX2FjdG9yIjoibGVhbmRyb2RhbWFzY2VuYSIsImdpdGh1Yl9hY3Rvcl9pZCI6IjQyOTUxNzMiLCJnaXRodWJfYmFzZV9yZWYiOiIiLCJnaXRodWJfZXZlbnRfbmFtZSI6InNjaGVkdWxlIiwiZ2l0aHViX2V2ZW50X3BheWxvYWQiOnsiZW50ZXJwcmlzZSI6eyJhdmF0YXJfdXJsIjoiaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS9iLzEyOTA/dj00IiwiY3JlYXRlZF9hdCI6IjIwMTktMTEtMTNUMTg6MDU6NDFaIiwiZGVzY3JpcHRpb24iOiIiLCJodG1sX3VybCI6Imh0dHBzOi8vZ2l0aHViLmNvbS9lbnRlcnByaXNlcy9hbWF6b24iLCJpZCI6MTI5MCwibmFtZSI6IkFtYXpvbiIsIm5vZGVfaWQiOiJNREV3T2tWdWRHVnljSEpwYzJVeE1qa3ciLCJzbHVnIjoiYW1hem9uIiwidXBkYXRlZF9hdCI6IjIwMjUtMDgtMTJUMjA6NTk6MTRaIiwid2Vic2l0ZV91cmwiOiJodHRwczovL3d3dy5hbWF6b24uY29tLyJ9LCJvcmdhbml6YXRpb24iOnsiYXZhdGFyX3VybCI6Imh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xMjkxMjc2Mzg/dj00IiwiZGVzY3JpcHRpb24iOiIiLCJldmVudHNfdXJsIjoiaHR0cHM6Ly9pbnRlcm5hbC1hcGkuc2VydmljZS5pYWQuZ2l0aHViLm5ldC9vcmdzL2F3cy1wb3dlcnRvb2xzL2V2ZW50cyIsImhvb2tzX3VybCI6Imh0dHBzOi8vaW50ZXJuYWwtYXBpLnNlcnZpY2UuaWFkLmdpdGh1Yi5uZXQvb3Jncy9hd3MtcG93ZXJ0b29scy9ob29rcyIsImlkIjoxMjkxMjc2MzgsImlzc3Vlc191cmwiOiJodHRwczovL2ludGVybmFsLWFwaS5zZXJ2aWNlLmlhZC5naXRodWIubmV0L29yZ3MvYXdzLXBvd2VydG9vbHMvaXNzdWVzIiwibG9naW4iOiJhd3MtcG93ZXJ0b29scyIsIm1lbWJlcnNfdXJsIjoiaHR0cHM6Ly9pbnRlcm5hbC1hcGkuc2VydmljZS5pYWQuZ2l0aHViLm5ldC9vcmdzL2F3cy1wb3dlcnRvb2xzL21lbWJlcnN7L21lbWJlcn0iLCJub2RlX2lkIjoiT19rZ0RPQjdKVTFnIiwicHVibGljX21lbWJlcnNfdXJsIjoiaHR0cHM6Ly9pbnRlcm5hbC1hcGkuc2VydmljZS5pYWQuZ2l0aHViLm5ldC9vcmdzL2F3cy1wb3dlcnRvb2xzL3B1YmxpY19tZW1iZXJzey9tZW1iZXJ9IiwicmVwb3NfdXJsIjoiaHR0cHM6Ly9pbnRlcm5hbC1hcGkuc2VydmljZS5pYWQuZ2l0aHViLm5ldC9vcmdzL2F3cy1wb3dlcnRvb2xzL3JlcG9zIiwidXJsIjoiaHR0cHM6Ly9pbnRlcm5hbC1hcGkuc2VydmljZS5pYWQuZ2l0aHViLm5ldC9vcmdzL2F3cy1wb3dlcnRvb2xzIn0sInJlcG9zaXRvcnkiOnsiYWxsb3dfZm9ya2luZyI6dHJ1ZSwiYXJjaGl2ZV91cmwiOiJodHRwczovL2ludGVybmFsLWFwaS5zZXJ2aWNlLmlhZC5naXRodWIubmV0L3JlcG9zL2F3cy1wb3dlcnRvb2xzL3Bvd2VydG9vbHMtbGFtYmRhLXB5dGhvbi97YXJjaGl2ZV9mb3JtYXR9ey9yZWZ9IiwiYXJjaGl2ZWQiOmZhbHNlLCJhc3NpZ25lZXNfdXJsIjoiaHR0cHM6Ly9pbnRlcm5hbC1hcGkuc2VydmljZS5pYWQuZ2l0aHViLm5ldC9yZXBvcy9hd3MtcG93ZXJ0b29scy9wb3dlcnRvb2xzLWxhbWJkYS1weXRob24vYXNzaWduZWVzey91c2VyfSIsImJsb2JzX3VybCI6Imh0dHBzOi8vaW50ZXJuYWwtYXBpLnNlcnZpY2UuaWFkLmdpdGh1Yi5uZXQvcmVwb3MvYXdzLXBvd2VydG9vbHMvcG93ZXJ0b29scy1sYW1iZGEtcHl0aG9uL2dpdC9ibG9ic3svc2hhfSIsImJyYW5jaGVzX3VybCI6Imh0dHBzOi8vaW50ZXJuYWwtYXBpLnNlcnZpY2UuaWFkLmdpdGh1Yi5uZXQvcmVwb3MvYXdzLXBvd2VydG9vbHMvcG93ZXJ0b29scy1sYW1iZGEtcHl0aG9uL2JyYW5jaGVzey9icmFuY2h9IiwiY2xvbmVfdXJsIjoiaHR0cHM6Ly9naXRodWIuY29tL2F3cy1wb3dlcnRvb2xzL3Bvd2VydG9vbHMtbGFtYmRhLXB5dGhvbi5naXQiLCJjb2xsYWJvcmF0b3JzX3VybCI6Imh0dHBzOi8vaW50ZXJuYWwtYXBpLnNlcnZpY2UuaWFkLmdpdGh1Yi5uZXQvcmVwb3MvYXdzLXBvd2VydG9vbHMvcG93ZXJ0b29scy1sYW1iZGEtcHl0aG9uL2NvbGxhYm9yYXRvcnN7L2NvbGxhYm9yYXRvcn0iLCJjb21tZW50c191cmwiOiJodHRwczovL2ludGVybmFsLWFwaS5zZXJ2aWNlLmlhZC5naXRodWIubmV0L3JlcG9zL2F3cy1wb3dlcnRvb2xzL3Bvd2VydG9vbHMtbGFtYmRhLXB5dGhvbi9jb21tZW50c3svbnVtYmVyfSIsImNvbW1pdHNfdXJsIjoiaHR0cHM6Ly9pbnRlcm5hbC1hcGkuc2VydmljZS5pYWQuZ2l0aHViLm5ldC9yZXBvcy9hd3MtcG93ZXJ0b29scy9wb3dlcnRvb2xzLWxhbWJkYS1weXRob24vY29tbWl0c3svc2hhfSIsImNvbXBhcmVfdXJsIjoiaHR0cHM6Ly9pbnRlcm5hbC1hcGkuc2VydmljZS5pYWQuZ2l0aHViLm5ldC9yZXBvcy9hd3MtcG93ZXJ0b29scy9wb3dlcnRvb2xzLWxhbWJkYS1weXRob24vY29tcGFyZS97YmFzZX0uLi57aGVhZH0iLCJjb250ZW50c191cmwiOiJodHRwczovL2ludGVybmFsLWFwaS5zZXJ2aWNlLmlhZC5naXRodWIubmV0L3JlcG9zL2F3cy1wb3dlcnRvb2xzL3Bvd2VydG9vbHMtbGFtYmRhLXB5dGhvbi9jb250ZW50cy97K3BhdGh9IiwiY29udHJpYnV0b3JzX3VybCI6Imh0dHBzOi8vaW50ZXJuYWwtYXBpLnNlcnZpY2UuaWFkLmdpdGh1Yi5uZXQvcmVwb3MvYXdzLXBvd2VydG9vbHMvcG93ZXJ0b29scy1sYW1iZGEtcHl0aG9uL2NvbnRyaWJ1dG9ycyIsImNyZWF0ZWRfYXQiOiIyMDE5LTExLTE1VDEyOjI2OjEyWiIsImN1c3RvbV9wcm9wZXJ0aWVzIjp7InN0YWdpbmciOiJmYWxzZSIsInZpc2liaWxpdHktYWxsb3ctaW50ZXJuYWwiOiJmYWxzZSIsInZpc2liaWxpdHktYWxsb3ctcHJpdmF0ZSI6ImZhbHNlIiwidmlzaWJpbGl0eS1hbGxvdy1wdWJsaWMiOiJ0cnVlIn0sImRlZmF1bHRfYnJhbmNoIjoiZGV2ZWxvcCIsImRlcGxveW1lbnRzX3VybCI6Imh0dHBzOi8vaW50ZXJuYWwtYXBpLnNlcnZpY2UuaWFkLmdpdGh1Yi5uZXQvcmVwb3MvYXdzLXBvd2VydG9vbHMvcG93ZXJ0b29scy1sYW1iZGEtcHl0aG9uL2RlcGxveW1lbnRzIiwiZGVzY3JpcHRpb24iOiJBIGRldmVsb3BlciB0b29sa2l0IHRvIGltcGxlbWVudCBTZXJ2ZXJsZXNzIGJlc3QgcHJhY3RpY2VzIGFuZCBpbmNyZWFzZSBkZXZlbG9wZXIgdmVsb2NpdHkuIiwiZGlzYWJsZWQiOmZhbHNlLCJkb3dubG9hZHNfdXJsIjoiaHR0cHM6Ly9pbnRlcm5hbC1hcGkuc2VydmljZS5pYWQuZ2l0aHViLm5ldC9yZXBvcy9hd3MtcG93ZXJ0b29scy9wb3dlcnRvb2xzLWxhbWJkYS1weXRob24vZG93bmxvYWRzIiwiZXZlbnRzX3VybCI6Imh0dHBzOi8vaW50ZXJuYWwtYXBpLnNlcnZpY2UuaWFkLmdpdGh1Yi5uZXQvcmVwb3MvYXdzLXBvd2VydG9vbHMvcG93ZXJ0b29scy1sYW1iZGEtcHl0aG9uL2V2ZW50cyIsImZvcmsiOmZhbHNlLCJmb3JrcyI6NDUwLCJmb3Jrc19jb3VudCI6NDUwLCJmb3Jrc191cmwiOiJodHRwczovL2ludGVybmFsLWFwaS5zZXJ2aWNlLmlhZC5naXRodWIubmV0L3JlcG9zL2F3cy1wb3dlcnRvb2xzL3Bvd2VydG9vbHMtbGFtYmRhLXB5dGhvbi9mb3JrcyIsImZ1bGxfbmFtZSI6ImF3cy1wb3dlcnRvb2xzL3Bvd2VydG9vbHMtbGFtYmRhLXB5dGhvbiIsImdpdF9jb21taXRzX3VybCI6Imh0dHBzOi8vaW50ZXJuYWwtYXBpLnNlcnZpY2UuaWFkLmdpdGh1Yi5uZXQvcmVwb3MvYXdzLXBvd2VydG9vbHMvcG93ZXJ0b29scy1sYW1iZGEtcHl0aG9uL2dpdC9jb21taXRzey9zaGF9IiwiZ2l0X3JlZnNfdXJsIjoiaHR0cHM6Ly9pbnRlcm5hbC1hcGkuc2VydmljZS5pYWQuZ2l0aHViLm5ldC9yZXBvcy9hd3MtcG93ZXJ0b29scy9wb3dlcnRvb2xzLWxhbWJkYS1weXRob24vZ2l0L3JlZnN7L3NoYX0iLCJnaXRfdGFnc191cmwiOiJodHRwczovL2ludGVybmFsLWFwaS5zZXJ2aWNlLmlhZC5naXRodWIubmV0L3JlcG9zL2F3cy1wb3dlcnRvb2xzL3Bvd2VydG9vbHMtbGFtYmRhLXB5dGhvbi9naXQvdGFnc3svc2hhfSIsImdpdF91cmwiOiJnaXQ6Ly9naXRodWIuY29tL2F3cy1wb3dlcnRvb2xzL3Bvd2VydG9vbHMtbGFtYmRhLXB5dGhvbi5naXQiLCJoYXNfZGlzY3Vzc2lvbnMiOnRydWUsImhhc19kb3dubG9hZHMiOnRydWUsImhhc19pc3N1ZXMiOnRydWUsImhhc19wYWdlcyI6ZmFsc2UsImhhc19wcm9qZWN0cyI6dHJ1ZSwiaGFzX3dpa2kiOmZhbHNlLCJob21lcGFnZSI6Imh0dHBzOi8vZG9jcy5wb3dlcnRvb2xzLmF3cy5kZXYvbGFtYmRhL3B5dGhvbi9sYXRlc3QvIiwiaG9va3NfdXJsIjoiaHR0cHM6Ly9pbnRlcm5hbC1hcGkuc2VydmljZS5pYWQuZ2l0aHViLm5ldC9yZXBvcy9hd3MtcG93ZXJ0b29scy9wb3dlcnRvb2xzLWxhbWJkYS1weXRob24vaG9va3MiLCJodG1sX3VybCI6Imh0dHBzOi8vZ2l0aHViLmNvbS9hd3MtcG93ZXJ0b29scy9wb3dlcnRvb2xzLWxhbWJkYS1weXRob24iLCJpZCI6MjIxOTE5Mzc5LCJpc190ZW1wbGF0ZSI6ZmFsc2UsImlzc3VlX2NvbW1lbnRfdXJsIjoiaHR0cHM6Ly9pbnRlcm5hbC1hcGkuc2VydmljZS5pYWQuZ2l0aHViLm5ldC9yZXBvcy9hd3MtcG93ZXJ0b29scy9wb3dlcnRvb2xzLWxhbWJkYS1weXRob24vaXNzdWVzL2NvbW1lbnRzey9udW1iZXJ9IiwiaXNzdWVfZXZlbnRzX3VybCI6Imh0dHBzOi8vaW50ZXJuYWwtYXBpLnNlcnZpY2UuaWFkLmdpdGh1Yi5uZXQvcmVwb3MvYXdzLXBvd2VydG9vbHMvcG93ZXJ0b29scy1sYW1iZGEtcHl0aG9uL2lzc3Vlcy9ldmVudHN7L251bWJlcn0iLCJpc3N1ZXNfdXJsIjoiaHR0cHM6Ly9pbnRlcm5hbC1hcGkuc2VydmljZS5pYWQuZ2l0aHViLm5ldC9yZXBvcy9hd3MtcG93ZXJ0b29scy9wb3dlcnRvb2xzLWxhbWJkYS1weXRob24vaXNzdWVzey9udW1iZXJ9Iiwia2V5c191cmwiOiJodHRwczovL2ludGVybmFsLWFwaS5zZXJ2aWNlLmlhZC5naXRodWIubmV0L3JlcG9zL2F3cy1wb3dlcnRvb2xzL3Bvd2VydG9vbHMtbGFtYmRhLXB5dGhvbi9rZXlzey9rZXlfaWR9IiwibGFiZWxzX3VybCI6Imh0dHBzOi8vaW50ZXJuYWwtYXBpLnNlcnZpY2UuaWFkLmdpdGh1Yi5uZXQvcmVwb3MvYXdzLXBvd2VydG9vbHMvcG93ZXJ0b29scy1sYW1iZGEtcHl0aG9uL2xhYmVsc3svbmFtZX0iLCJsYW5ndWFnZSI6IlB5dGhvbiIsImxhbmd1YWdlc191cmwiOiJodHRwczovL2ludGVybmFsLWFwaS5zZXJ2aWNlLmlhZC5naXRodWIubmV0L3JlcG9zL2F3cy1wb3dlcnRvb2xzL3Bvd2VydG9vbHMtbGFtYmRhLXB5dGhvbi9sYW5ndWFnZXMiLCJsaWNlbnNlIjp7ImtleSI6Im1pdC0wIiwibmFtZSI6Ik1JVCBObyBBdHRyaWJ1dGlvbiIsIm5vZGVfaWQiOiJNRGM2VEdsalpXNXpaVFF4Iiwic3BkeF9pZCI6Ik1JVC0wIiwidXJsIjoiaHR0cHM6Ly9pbnRlcm5hbC1hcGkuc2VydmljZS5pYWQuZ2l0aHViLm5ldC9saWNlbnNlcy9taXQtMCJ9LCJtZXJnZXNfdXJsIjoiaHR0cHM6Ly9pbnRlcm5hbC1hcGkuc2VydmljZS5pYWQuZ2l0aHViLm5ldC9yZXBvcy9hd3MtcG93ZXJ0b29scy9wb3dlcnRvb2xzLWxhbWJkYS1weXRob24vbWVyZ2VzIiwibWlsZXN0b25lc191cmwiOiJodHRwczovL2ludGVybmFsLWFwaS5zZXJ2aWNlLmlhZC5naXRodWIubmV0L3JlcG9zL2F3cy1wb3dlcnRvb2xzL3Bvd2VydG9vbHMtbGFtYmRhLXB5dGhvbi9taWxlc3RvbmVzey9udW1iZXJ9IiwibWlycm9yX3VybCI6bnVsbCwibmFtZSI6InBvd2VydG9vbHMtbGFtYmRhLXB5dGhvbiIsIm5vZGVfaWQiOiJNREV3T2xKbGNHOXphWFJ2Y25reU1qRTVNVGt6TnprPSIsIm5vdGlmaWNhdGlvbnNfdXJsIjoiaHR0cHM6Ly9pbnRlcm5hbC1hcGkuc2VydmljZS5pYWQuZ2l0aHViLm5ldC9yZXBvcy9hd3MtcG93ZXJ0b29scy9wb3dlcnRvb2xzLWxhbWJkYS1weXRob24vbm90aWZpY2F0aW9uc3s/c2luY2UsYWxsLHBhcnRpY2lwYXRpbmd9Iiwib3Blbl9pc3N1ZXMiOjYwLCJvcGVuX2lzc3Vlc19jb3VudCI6NjAsIm93bmVyIjp7ImF2YXRhcl91cmwiOiJodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTI5MTI3NjM4P3Y9NCIsImV2ZW50c191cmwiOiJodHRwczovL2ludGVybmFsLWFwaS5zZXJ2aWNlLmlhZC5naXRodWIubmV0L3VzZXJzL2F3cy1wb3dlcnRvb2xzL2V2ZW50c3svcHJpdmFjeX0iLCJmb2xsb3dlcnNfdXJsIjoiaHR0cHM6Ly9pbnRlcm5hbC1hcGkuc2VydmljZS5pYWQuZ2l0aHViLm5ldC91c2Vycy9hd3MtcG93ZXJ0b29scy9mb2xsb3dlcnMiLCJmb2xsb3dpbmdfdXJsIjoiaHR0cHM6Ly9pbnRlcm5hbC1hcGkuc2VydmljZS5pYWQuZ2l0aHViLm5ldC91c2Vycy9hd3MtcG93ZXJ0b29scy9mb2xsb3dpbmd7L290aGVyX3VzZXJ9IiwiZ2lzdHNfdXJsIjoiaHR0cHM6Ly9pbnRlcm5hbC1hcGkuc2VydmljZS5pYWQuZ2l0aHViLm5ldC91c2Vycy9hd3MtcG93ZXJ0b29scy9naXN0c3svZ2lzdF9pZH0iLCJncmF2YXRhcl9pZCI6IiIsImh0bWxfdXJsIjoiaHR0cHM6Ly9naXRodWIuY29tL2F3cy1wb3dlcnRvb2xzIiwiaWQiOjEyOTEyNzYzOCwibG9naW4iOiJhd3MtcG93ZXJ0b29scyIsIm5vZGVfaWQiOiJPX2tnRE9CN0pVMWciLCJvcmdhbml6YXRpb25zX3VybCI6Imh0dHBzOi8vaW50ZXJuYWwtYXBpLnNlcnZpY2UuaWFkLmdpdGh1Yi5uZXQvdXNlcnMvYXdzLXBvd2VydG9vbHMvb3JncyIsInJlY2VpdmVkX2V2ZW50c191cmwiOiJodHRwczovL2ludGVybmFsLWFwaS5zZXJ2aWNlLmlhZC5naXRodWIubmV0L3VzZXJzL2F3cy1wb3dlcnRvb2xzL3JlY2VpdmVkX2V2ZW50cyIsInJlcG9zX3VybCI6Imh0dHBzOi8vaW50ZXJuYWwtYXBpLnNlcnZpY2UuaWFkLmdpdGh1Yi5uZXQvdXNlcnMvYXdzLXBvd2VydG9vbHMvcmVwb3MiLCJzaXRlX2FkbWluIjpmYWxzZSwic3RhcnJlZF91cmwiOiJodHRwczovL2ludGVybmFsLWFwaS5zZXJ2aWNlLmlhZC5naXRodWIubmV0L3VzZXJzL2F3cy1wb3dlcnRvb2xzL3N0YXJyZWR7L293bmVyfXsvcmVwb30iLCJzdWJzY3JpcHRpb25zX3VybCI6Imh0dHBzOi8vaW50ZXJuYWwtYXBpLnNlcnZpY2UuaWFkLmdpdGh1Yi5uZXQvdXNlcnMvYXdzLXBvd2VydG9vbHMvc3Vic2NyaXB0aW9ucyIsInR5cGUiOiJPcmdhbml6YXRpb24iLCJ1cmwiOiJodHRwczovL2ludGVybmFsLWFwaS5zZXJ2aWNlLmlhZC5naXRodWIubmV0L3VzZXJzL2F3cy1wb3dlcnRvb2xzIiwidXNlcl92aWV3X3R5cGUiOiJwdWJsaWMifSwicHJpdmF0ZSI6ZmFsc2UsInB1bGxzX3VybCI6Imh0dHBzOi8vaW50ZXJuYWwtYXBpLnNlcnZpY2UuaWFkLmdpdGh1Yi5uZXQvcmVwb3MvYXdzLXBvd2VydG9vbHMvcG93ZXJ0b29scy1sYW1iZGEtcHl0aG9uL3B1bGxzey9udW1iZXJ9IiwicHVzaGVkX2F0IjoiMjAyNS0wOS0wNFQwMzo0MzoxM1oiLCJyZWxlYXNlc191cmwiOiJodHRwczovL2ludGVybmFsLWFwaS5zZXJ2aWNlLmlhZC5naXRodWIubmV0L3JlcG9zL2F3cy1wb3dlcnRvb2xzL3Bvd2VydG9vbHMtbGFtYmRhLXB5dGhvbi9yZWxlYXNlc3svaWR9Iiwic2l6ZSI6MTMxNTU5LCJzc2hfdXJsIjoiZ2l0QGdpdGh1Yi5jb206YXdzLXBvd2VydG9vbHMvcG93ZXJ0b29scy1sYW1iZGEtcHl0aG9uLmdpdCIsInN0YXJnYXplcnNfY291bnQiOjMxMzUsInN0YXJnYXplcnNfdXJsIjoiaHR0cHM6Ly9pbnRlcm5hbC1hcGkuc2VydmljZS5pYWQuZ2l0aHViLm5ldC9yZXBvcy9hd3MtcG93ZXJ0b29scy9wb3dlcnRvb2xzLWxhbWJkYS1weXRob24vc3RhcmdhemVycyIsInN0YXR1c2VzX3VybCI6Imh0dHBzOi8vaW50ZXJuYWwtYXBpLnNlcnZpY2UuaWFkLmdpdGh1Yi5uZXQvcmVwb3MvYXdzLXBvd2VydG9vbHMvcG93ZXJ0b29scy1sYW1iZGEtcHl0aG9uL3N0YXR1c2VzL3tzaGF9Iiwic3Vic2NyaWJlcnNfdXJsIjoiaHR0cHM6Ly9pbnRlcm5hbC1hcGkuc2VydmljZS5pYWQuZ2l0aHViLm5ldC9yZXBvcy9hd3MtcG93ZXJ0b29scy9wb3dlcnRvb2xzLWxhbWJkYS1weXRob24vc3Vic2NyaWJlcnMiLCJzdWJzY3JpcHRpb25fdXJsIjoiaHR0cHM6Ly9pbnRlcm5hbC1hcGkuc2VydmljZS5pYWQuZ2l0aHViLm5ldC9yZXBvcy9hd3MtcG93ZXJ0b29scy9wb3dlcnRvb2xzLWxhbWJkYS1weXRob24vc3Vic2NyaXB0aW9uIiwic3ZuX3VybCI6Imh0dHBzOi8vZ2l0aHViLmNvbS9hd3MtcG93ZXJ0b29scy9wb3dlcnRvb2xzLWxhbWJkYS1weXRob24iLCJ0YWdzX3VybCI6Imh0dHBzOi8vaW50ZXJuYWwtYXBpLnNlcnZpY2UuaWFkLmdpdGh1Yi5uZXQvcmVwb3MvYXdzLXBvd2VydG9vbHMvcG93ZXJ0b29scy1sYW1iZGEtcHl0aG9uL3RhZ3MiLCJ0ZWFtc191cmwiOiJodHRwczovL2ludGVybmFsLWFwaS5zZXJ2aWNlLmlhZC5naXRodWIubmV0L3JlcG9zL2F3cy1wb3dlcnRvb2xzL3Bvd2VydG9vbHMtbGFtYmRhLXB5dGhvbi90ZWFtcyIsInRvcGljcyI6WyJhd3MiLCJhd3MtbGFtYmRhIiwibGFtYmRhIiwicHl0aG9uIiwic2VydmVybGVzcyJdLCJ0cmVlc191cmwiOiJodHRwczovL2ludGVybmFsLWFwaS5zZXJ2aWNlLmlhZC5naXRodWIubmV0L3JlcG9zL2F3cy1wb3dlcnRvb2xzL3Bvd2VydG9vbHMtbGFtYmRhLXB5dGhvbi9naXQvdHJlZXN7L3NoYX0iLCJ1cGRhdGVkX2F0IjoiMjAyNS0wOS0wM1QwMjo0MzoyNloiLCJ1cmwiOiJodHRwczovL2ludGVybmFsLWFwaS5zZXJ2aWNlLmlhZC5naXRodWIubmV0L3JlcG9zL2F3cy1wb3dlcnRvb2xzL3Bvd2VydG9vbHMtbGFtYmRhLXB5dGhvbiIsInZpc2liaWxpdHkiOiJwdWJsaWMiLCJ3YXRjaGVycyI6MzEzNSwid2F0Y2hlcnNfY291bnQiOjMxMzUsIndlYl9jb21taXRfc2lnbm9mZl9yZXF1aXJlZCI6dHJ1ZX0sInNjaGVkdWxlIjoiMCA4ICogKiAxLTUiLCJ3b3JrZmxvdyI6Ii5naXRodWIvd29ya2Zsb3dzL3ByZS1yZWxlYXNlLnltbCJ9LCJnaXRodWJfaGVhZF9yZWYiOiIiLCJnaXRodWJfcmVmIjoicmVmcy9oZWFkcy9kZXZlbG9wIiwiZ2l0aHViX3JlZl90eXBlIjoiYnJhbmNoIiwiZ2l0aHViX3JlcG9zaXRvcnlfaWQiOiIyMjE5MTkzNzkiLCJnaXRodWJfcmVwb3NpdG9yeV9vd25lciI6ImF3cy1wb3dlcnRvb2xzIiwiZ2l0aHViX3JlcG9zaXRvcnlfb3duZXJfaWQiOiIxMjkxMjc2MzgiLCJnaXRodWJfcnVuX2F0dGVtcHQiOiIxIiwiZ2l0aHViX3J1bl9pZCI6IjE3NDU3MzQ1NjMwIiwiZ2l0aHViX3J1bl9udW1iZXIiOiIzMjEiLCJnaXRodWJfc2hhMSI6IjM2YjAyZWZjY2JhMWZlM2ViOTZmNjEzZWYyYjM3NmFlN2Y4OWE3M2MifX0sIm1ldGFkYXRhIjp7ImJ1aWxkSW52b2NhdGlvbklEIjoiMTc0NTczNDU2MzAtMSIsImNvbXBsZXRlbmVzcyI6eyJwYXJhbWV0ZXJzIjp0cnVlLCJlbnZpcm9ubWVudCI6ZmFsc2UsIm1hdGVyaWFscyI6ZmFsc2V9LCJyZXByb2R1Y2libGUiOmZhbHNlfSwibWF0ZXJpYWxzIjpbeyJ1cmkiOiJnaXQraHR0cHM6Ly9naXRodWIuY29tL2F3cy1wb3dlcnRvb2xzL3Bvd2VydG9vbHMtbGFtYmRhLXB5dGhvbkByZWZzL2hlYWRzL2RldmVsb3AiLCJkaWdlc3QiOnsic2hhMSI6IjM2YjAyZWZjY2JhMWZlM2ViOTZmNjEzZWYyYjM3NmFlN2Y4OWE3M2MifX1dfX0=", "payloadType":"application/vnd.in-toto+json", "signatures":[{"sig":"MEUCIQDduTQ5sxi5c5iqAh7dUKRrxeJsK1Bc8E3cAQtBU8P6oAIgJe0Wxjq3CvJAcZ+RzKVcMgefTKfLz8yK4ntd4zgySDU="}]}} \ No newline at end of file diff --git a/provenance/3.19.1a15/multiple.intoto.jsonl b/provenance/3.19.1a15/multiple.intoto.jsonl new file mode 100644 index 00000000000..1c9139f8d33 --- /dev/null +++ b/provenance/3.19.1a15/multiple.intoto.jsonl @@ -0,0 +1 @@ +{"mediaType":"application/vnd.dev.sigstore.bundle.v0.3+json", "verificationMaterial":{"certificate":{"rawBytes":"MIIHZzCCBuygAwIBAgIUVME4WkMgMFKC7ffoYCAQ9AWTaI0wCgYIKoZIzj0EAwMwNzEVMBMGA1UEChMMc2lnc3RvcmUuZGV2MR4wHAYDVQQDExVzaWdzdG9yZS1pbnRlcm1lZGlhdGUwHhcNMjUwOTA1MDgwODI0WhcNMjUwOTA1MDgxODI0WjAAMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEEeY+8mzSNaLnzKzqbFD4vajUDqsBTbGIyyw9c66VUIoVeERkRZWvvuC1dj7nrInwvoBSOJzERmTjMhfeCoZrGqOCBgswggYHMA4GA1UdDwEB/wQEAwIHgDATBgNVHSUEDDAKBggrBgEFBQcDAzAdBgNVHQ4EFgQU9sIB+RdLxMqX8gcFYkxtB84QBW8wHwYDVR0jBBgwFoAU39Ppz1YkEZb5qNjpKFWixi4YZD8wgYQGA1UdEQEB/wR6MHiGdmh0dHBzOi8vZ2l0aHViLmNvbS9zbHNhLWZyYW1ld29yay9zbHNhLWdpdGh1Yi1nZW5lcmF0b3IvLmdpdGh1Yi93b3JrZmxvd3MvZ2VuZXJhdG9yX2dlbmVyaWNfc2xzYTMueW1sQHJlZnMvdGFncy92Mi4xLjAwOQYKKwYBBAGDvzABAQQraHR0cHM6Ly90b2tlbi5hY3Rpb25zLmdpdGh1YnVzZXJjb250ZW50LmNvbTAWBgorBgEEAYO/MAECBAhzY2hlZHVsZTA2BgorBgEEAYO/MAEDBChkNGU5ODFmNjVjNGM5ODVmYjJjN2YyN2VkZGE0YmI5OGRmM2FlYTBhMBkGCisGAQQBg78wAQQEC1ByZS1SZWxlYXNlMDUGCisGAQQBg78wAQUEJ2F3cy1wb3dlcnRvb2xzL3Bvd2VydG9vbHMtbGFtYmRhLXB5dGhvbjAgBgorBgEEAYO/MAEGBBJyZWZzL2hlYWRzL2RldmVsb3AwOwYKKwYBBAGDvzABCAQtDCtodHRwczovL3Rva2VuLmFjdGlvbnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tMIGGBgorBgEEAYO/MAEJBHgMdmh0dHBzOi8vZ2l0aHViLmNvbS9zbHNhLWZyYW1ld29yay9zbHNhLWdpdGh1Yi1nZW5lcmF0b3IvLmdpdGh1Yi93b3JrZmxvd3MvZ2VuZXJhdG9yX2dlbmVyaWNfc2xzYTMueW1sQHJlZnMvdGFncy92Mi4xLjAwOAYKKwYBBAGDvzABCgQqDChmN2RkOGM1NGMyMDY3YmFmYzEyY2E3YTU1NTk1ZDVlZTliNzUyMDRhMB0GCisGAQQBg78wAQsEDwwNZ2l0aHViLWhvc3RlZDBKBgorBgEEAYO/MAEMBDwMOmh0dHBzOi8vZ2l0aHViLmNvbS9hd3MtcG93ZXJ0b29scy9wb3dlcnRvb2xzLWxhbWJkYS1weXRob24wOAYKKwYBBAGDvzABDQQqDChkNGU5ODFmNjVjNGM5ODVmYjJjN2YyN2VkZGE0YmI5OGRmM2FlYTBhMCIGCisGAQQBg78wAQ4EFAwScmVmcy9oZWFkcy9kZXZlbG9wMBkGCisGAQQBg78wAQ8ECwwJMjIxOTE5Mzc5MDEGCisGAQQBg78wARAEIwwhaHR0cHM6Ly9naXRodWIuY29tL2F3cy1wb3dlcnRvb2xzMBkGCisGAQQBg78wAREECwwJMTI5MTI3NjM4MH8GCisGAQQBg78wARIEcQxvaHR0cHM6Ly9naXRodWIuY29tL2F3cy1wb3dlcnRvb2xzL3Bvd2VydG9vbHMtbGFtYmRhLXB5dGhvbi8uZ2l0aHViL3dvcmtmbG93cy9wcmUtcmVsZWFzZS55bWxAcmVmcy9oZWFkcy9kZXZlbG9wMDgGCisGAQQBg78wARMEKgwoZDRlOTgxZjY1YzRjOTg1ZmIyYzdmMjdlZGRhNGJiOThkZjNhZWEwYTAYBgorBgEEAYO/MAEUBAoMCHNjaGVkdWxlMG4GCisGAQQBg78wARUEYAxeaHR0cHM6Ly9naXRodWIuY29tL2F3cy1wb3dlcnRvb2xzL3Bvd2VydG9vbHMtbGFtYmRhLXB5dGhvbi9hY3Rpb25zL3J1bnMvMTc0ODczNjc5MjAvYXR0ZW1wdHMvMTAWBgorBgEEAYO/MAEWBAgMBnB1YmxpYzCBigYKKwYBBAHWeQIEAgR8BHoAeAB2AN09MGrGxxEyYxkeHJlnNwKiSl643jyt/4eKcoAvKe6OAAABmRjrZckAAAQDAEcwRQIhAK3L3ofIKkOR3GbYnBUoE/FYJzum10vlnKEjugrEX5xCAiAtDSx/NZp48Po9YnStUqgSMLdV5knuYl94mKhfKu8ogzAKBggqhkjOPQQDAwNpADBmAjEA196kf7Cw4hLyKv3YMWGoxKW4So+1AMZeAYWYEsUwyysXtjaCIibzNjl7uhf1FkMVAjEArCSQO/RGTRrB6tAkSO8KcyBwZ+tBEKH4/xWxKATdQL/Yx7y22W6PVbl3w/szsk4K"}, "tlogEntries":[{"logIndex":"472986435", "logId":{"keyId":"wNI9atQGlz+VWfO6LRygH4QUfY/8W4RFwiT5i5WRgB0="}, "kindVersion":{"kind":"dsse", "version":"0.0.1"}, "integratedTime":"1757059704", "inclusionPromise":{"signedEntryTimestamp":"MEYCIQDIqCCBoC3ffoIOXzsyNNb1Nw6XLulNHN0hnqNR9sWSnwIhALaC5S6jmGweGh3CXOSubUcZwE/UdNK2pOVcAKY2bspD"}, "inclusionProof":{"logIndex":"351082173", "rootHash":"UPWiTkLc7SbFRzyQA+v22f2Z6zxJ596lmFlCDZ1lKpM=", "treeSize":"351082185", "hashes":["Iq7AIxmA0g795NUbr0uhkQdqusXlarfJGaV+stpkab8=", "g4AtLleu8QS62BKydXlIYFy+8d/2HSmd2Oe6/Q9/In8=", "fbLWsiY2sIG+qHUwD+yv2LMxQkGlxK38DtlJOTGrAHw=", "m2+/FOPnEKfiZLvuSrxINzp/T/DLE8CNRBkIf7UpRic=", "1lCyS+aaYBqMN3Tg+RcQ28XbzkWzUhP5B3L2YmmZreg=", "F6Q8372IyEMyWr7GodA521yNSJK+NdMIf+6qqa0B7QA=", "9VK4HJ7Kw4vYrLToINcA4S5gJJvPZecWV6oiKeFTV6c=", "xQGm/8yH8JfBgG1hJT+51v1pHeRQZfHvcU8bixJ9rw8=", "6CbwvKPPlgB2pH6FtTWZKfDrf7VGYRZfMsKt36CfKWA=", "MaCqtMLIFYQC6GOund/YdnJO/ruimh1yR0wrkjD1+T8=", "ubh3LgyC9poPf92yao0yT8JlkDx7OqHrMkc2vk8gIKg=", "dZylIu3gWPaUMtsWyiz3Xf20mpvX/ed+XDW32dmRl50=", "Ew+pd7I7ppBe4NbT/Ol8XIurw37fQCbbtgKlzO+TIJg=", "BpHGVqjQQqdvxmdyraVrtp6yTJR8GegGMdVb5nBxwWs=", "Pcb2whOzqmjRg8d5aFmbsKoGo3CMmrtThlxCYFKv6bQ=", "xHAXz6i7uPV+B2ySO04rdQtQg7DdfdIiv5jsPdChYmQ=", "iJtB8Jxv7RyH42UyE2qNwuEktIuICJR9iPvzCzXowvE=", "W3IiKW68YOnP+4fVNmVlNAsfIw7jK5FP2HCyHAcVD9o=", "vS7O4ozHIQZJWBiov+mkpI27GE8zAmVCEkRcP3NDyNE="], "checkpoint":{"envelope":"rekor.sigstore.dev - 1193050959916656506\n351082185\nUPWiTkLc7SbFRzyQA+v22f2Z6zxJ596lmFlCDZ1lKpM=\n\n— rekor.sigstore.dev wNI9ajBFAiEAmHShnNJzPpJMjH1jvlDJiuOGjYAVy38yDIzCeKfl6LkCIE3mK+kweAyh9yFeCieBZy+nzacqVz8NqzNzk2RjE0cU\n"}}, "canonicalizedBody":"eyJhcGlWZXJzaW9uIjoiMC4wLjEiLCJraW5kIjoiZHNzZSIsInNwZWMiOnsiZW52ZWxvcGVIYXNoIjp7ImFsZ29yaXRobSI6InNoYTI1NiIsInZhbHVlIjoiZDBkYzJlNjYwMjkwZjY2OGU1NzlmY2FkZjllYzEzYTUxNGQzZjQ5OTQzZmVhMWNkYmQ4MjliZDU5MGRhNjdkZCJ9LCJwYXlsb2FkSGFzaCI6eyJhbGdvcml0aG0iOiJzaGEyNTYiLCJ2YWx1ZSI6ImQyN2RkODdhM2M0YWVhYmIwNDM4ZDg5YTU4ODY3Yzc3MDU4MDM1NmNjMjliYmRkNmM3OWM5ODRlMTE3NWFiZjEifSwic2lnbmF0dXJlcyI6W3sic2lnbmF0dXJlIjoiTUVZQ0lRQ1U2dGhwcVJVM09PcGpLN3lNUUJhaWRWMU5ZT1lnWmR6NlVuSDR3NW5POVFJaEFPWFlHWmJYNDRHQ2ZGbkk2WEphWVY1bXViaGRrdGNLdVhIeTFDZTdVZ09BIiwidmVyaWZpZXIiOiJMUzB0TFMxQ1JVZEpUaUJEUlZKVVNVWkpRMEZVUlMwdExTMHRDazFKU1VoYWVrTkRRblY1WjBGM1NVSkJaMGxWVmsxRk5GZHJUV2ROUmt0RE4yWm1iMWxEUVZFNVFWZFVZVWt3ZDBObldVbExiMXBKZW1vd1JVRjNUWGNLVG5wRlZrMUNUVWRCTVZWRlEyaE5UV015Ykc1ak0xSjJZMjFWZFZwSFZqSk5ValIzU0VGWlJGWlJVVVJGZUZaNllWZGtlbVJIT1hsYVV6RndZbTVTYkFwamJURnNXa2RzYUdSSFZYZElhR05PVFdwVmQwOVVRVEZOUkdkM1QwUkpNRmRvWTA1TmFsVjNUMVJCTVUxRVozaFBSRWt3VjJwQlFVMUdhM2RGZDFsSUNrdHZXa2w2YWpCRFFWRlpTVXR2V2tsNmFqQkVRVkZqUkZGblFVVkZaVmtyT0cxNlUwNWhURzU2UzNweFlrWkVOSFpoYWxWRWNYTkNWR0pIU1hsNWR6a0tZelkyVmxWSmIxWmxSVkpyVWxwWGRuWjFRekZrYWpkdWNrbHVkM1p2UWxOUFNucEZVbTFVYWsxb1ptVkRiMXB5UjNGUFEwSm5jM2RuWjFsSVRVRTBSd3BCTVZWa1JIZEZRaTkzVVVWQmQwbElaMFJCVkVKblRsWklVMVZGUkVSQlMwSm5aM0pDWjBWR1FsRmpSRUY2UVdSQ1owNVdTRkUwUlVablVWVTVjMGxDQ2l0U1pFeDRUWEZZT0dkalJsbHJlSFJDT0RSUlFsYzRkMGgzV1VSV1VqQnFRa0puZDBadlFWVXpPVkJ3ZWpGWmEwVmFZalZ4VG1wd1MwWlhhWGhwTkZrS1drUTRkMmRaVVVkQk1WVmtSVkZGUWk5M1VqWk5TR2xIWkcxb01HUklRbnBQYVRoMldqSnNNR0ZJVm1sTWJVNTJZbE01ZW1KSVRtaE1WMXA1V1ZjeGJBcGtNamw1WVhrNWVtSklUbWhNVjJSd1pFZG9NVmxwTVc1YVZ6VnNZMjFHTUdJelNYWk1iV1J3WkVkb01WbHBPVE5pTTBweVdtMTRkbVF6VFhaYU1sWjFDbHBZU21oa1J6bDVXREprYkdKdFZubGhWMDVtWXpKNGVsbFVUWFZsVnpGelVVaEtiRnB1VFhaa1IwWnVZM2s1TWsxcE5IaE1ha0YzVDFGWlMwdDNXVUlLUWtGSFJIWjZRVUpCVVZGeVlVaFNNR05JVFRaTWVUa3dZakowYkdKcE5XaFpNMUp3WWpJMWVreHRaSEJrUjJneFdXNVdlbHBZU21waU1qVXdXbGMxTUFwTWJVNTJZbFJCVjBKbmIzSkNaMFZGUVZsUEwwMUJSVU5DUVdoNldUSm9iRnBJVm5OYVZFRXlRbWR2Y2tKblJVVkJXVTh2VFVGRlJFSkRhR3RPUjFVMUNrOUVSbTFPYWxacVRrZE5OVTlFVm0xWmFrcHFUakpaZVU0eVZtdGFSMFV3V1cxSk5VOUhVbTFOTWtac1dWUkNhRTFDYTBkRGFYTkhRVkZSUW1jM09IY0tRVkZSUlVNeFFubGFVekZUV2xkNGJGbFlUbXhOUkZWSFEybHpSMEZSVVVKbk56aDNRVkZWUlVveVJqTmplVEYzWWpOa2JHTnVVblppTW5oNlRETkNkZ3BrTWxaNVpFYzVkbUpJVFhSaVIwWjBXVzFTYUV4WVFqVmtSMmgyWW1wQlowSm5iM0pDWjBWRlFWbFBMMDFCUlVkQ1FrcDVXbGRhZWt3eWFHeFpWMUo2Q2t3eVVteGtiVlp6WWpOQmQwOTNXVXRMZDFsQ1FrRkhSSFo2UVVKRFFWRjBSRU4wYjJSSVVuZGplbTkyVEROU2RtRXlWblZNYlVacVpFZHNkbUp1VFhVS1dqSnNNR0ZJVm1sa1dFNXNZMjFPZG1KdVVteGlibEYxV1RJNWRFMUpSMGRDWjI5eVFtZEZSVUZaVHk5TlFVVktRa2huVFdSdGFEQmtTRUo2VDJrNGRncGFNbXd3WVVoV2FVeHRUblppVXpsNllraE9hRXhYV25sWlZ6RnNaREk1ZVdGNU9YcGlTRTVvVEZka2NHUkhhREZaYVRGdVdsYzFiR050UmpCaU0wbDJDa3h0WkhCa1IyZ3hXV2s1TTJJelNuSmFiWGgyWkROTmRsb3lWblZhV0Vwb1pFYzVlVmd5Wkd4aWJWWjVZVmRPWm1NeWVIcFpWRTExWlZjeGMxRklTbXdLV201TmRtUkhSbTVqZVRreVRXazBlRXhxUVhkUFFWbExTM2RaUWtKQlIwUjJla0ZDUTJkUmNVUkRhRzFPTWxKclQwZE5NVTVIVFhsTlJGa3pXVzFHYlFwWmVrVjVXVEpGTTFsVVZURk9WR3N4V2tSV2JGcFViR2xPZWxWNVRVUlNhRTFDTUVkRGFYTkhRVkZSUW1jM09IZEJVWE5GUkhkM1Rsb3liREJoU0ZacENreFhhSFpqTTFKc1drUkNTMEpuYjNKQ1owVkZRVmxQTDAxQlJVMUNSSGROVDIxb01HUklRbnBQYVRoMldqSnNNR0ZJVm1sTWJVNTJZbE01YUdRelRYUUtZMGM1TTFwWVNqQmlNamx6WTNrNWQySXpaR3hqYmxKMllqSjRla3hYZUdoaVYwcHJXVk14ZDJWWVVtOWlNalIzVDBGWlMwdDNXVUpDUVVkRWRucEJRZ3BFVVZGeFJFTm9hMDVIVlRWUFJFWnRUbXBXYWs1SFRUVlBSRlp0V1dwS2FrNHlXWGxPTWxacldrZEZNRmx0U1RWUFIxSnRUVEpHYkZsVVFtaE5RMGxIQ2tOcGMwZEJVVkZDWnpjNGQwRlJORVZHUVhkVFkyMVdiV041T1c5YVYwWnJZM2s1YTFwWVdteGlSemwzVFVKclIwTnBjMGRCVVZGQ1p6YzRkMEZST0VVS1EzZDNTazFxU1hoUFZFVTFUWHBqTlUxRVJVZERhWE5IUVZGUlFtYzNPSGRCVWtGRlNYZDNhR0ZJVWpCalNFMDJUSGs1Ym1GWVVtOWtWMGwxV1RJNWRBcE1Na1l6WTNreGQySXpaR3hqYmxKMllqSjRlazFDYTBkRGFYTkhRVkZSUW1jM09IZEJVa1ZGUTNkM1NrMVVTVFZOVkVrelRtcE5ORTFJT0VkRGFYTkhDa0ZSVVVKbk56aDNRVkpKUldOUmVIWmhTRkl3WTBoTk5reDVPVzVoV0ZKdlpGZEpkVmt5T1hSTU1rWXpZM2t4ZDJJelpHeGpibEoyWWpKNGVrd3pRbllLWkRKV2VXUkhPWFppU0UxMFlrZEdkRmx0VW1oTVdFSTFaRWRvZG1KcE9IVmFNbXd3WVVoV2FVd3paSFpqYlhSdFlrYzVNMk41T1hkamJWVjBZMjFXY3dwYVYwWjZXbE0xTldKWGVFRmpiVlp0WTNrNWIxcFhSbXRqZVRscldsaGFiR0pIT1hkTlJHZEhRMmx6UjBGUlVVSm5OemgzUVZKTlJVdG5kMjlhUkZKc0NrOVVaM2hhYWxreFdYcFNhazlVWnpGYWJVbDVXWHBrYlUxcVpHeGFSMUpvVGtkS2FVOVVhR3RhYWs1b1dsZEZkMWxVUVZsQ1oyOXlRbWRGUlVGWlR5OEtUVUZGVlVKQmIwMURTRTVxWVVkV2EyUlhlR3hOUnpSSFEybHpSMEZSVVVKbk56aDNRVkpWUlZsQmVHVmhTRkl3WTBoTk5reDVPVzVoV0ZKdlpGZEpkUXBaTWpsMFRESkdNMk41TVhkaU0yUnNZMjVTZG1JeWVIcE1NMEoyWkRKV2VXUkhPWFppU0UxMFlrZEdkRmx0VW1oTVdFSTFaRWRvZG1KcE9XaFpNMUp3Q21JeU5YcE1NMG94WW01TmRrMVVZekJQUkdONlRtcGpOVTFxUVhaWldGSXdXbGN4ZDJSSVRYWk5WRUZYUW1kdmNrSm5SVVZCV1U4dlRVRkZWMEpCWjAwS1FtNUNNVmx0ZUhCWmVrTkNhV2RaUzB0M1dVSkNRVWhYWlZGSlJVRm5VamhDU0c5QlpVRkNNa0ZPTURsTlIzSkhlSGhGZVZsNGEyVklTbXh1VG5kTGFRcFRiRFkwTTJwNWRDODBaVXRqYjBGMlMyVTJUMEZCUVVKdFVtcHlXbU5yUVVGQlVVUkJSV04zVWxGSmFFRkxNMHd6YjJaSlMydFBVak5IWWxsdVFsVnZDa1V2UmxsS2VuVnRNVEIyYkc1TFJXcDFaM0pGV0RWNFEwRnBRWFJFVTNndlRscHdORGhRYnpsWmJsTjBWWEZuVTAxTVpGWTFhMjUxV1d3NU5HMUxhR1lLUzNVNGIyZDZRVXRDWjJkeGFHdHFUMUJSVVVSQmQwNXdRVVJDYlVGcVJVRXhPVFpyWmpkRGR6Um9USGxMZGpOWlRWZEhiM2hMVnpSVGJ5c3hRVTFhWlFwQldWZFpSWE5WZDNsNWMxaDBhbUZEU1dsaWVrNXFiRGQxYUdZeFJtdE5Wa0ZxUlVGeVExTlJUeTlTUjFSU2NrSTJkRUZyVTA4NFMyTjVRbmRhSzNSQ0NrVkxTRFF2ZUZkNFMwRlVaRkZNTDFsNE4za3lNbGMyVUZaaWJETjNMM042YzJzMFN3b3RMUzB0TFVWT1JDQkRSVkpVU1VaSlEwRlVSUzB0TFMwdENnPT0ifV19fQ=="}]}, "dsseEnvelope":{"payload":"eyJfdHlwZSI6Imh0dHBzOi8vaW4tdG90by5pby9TdGF0ZW1lbnQvdjAuMSIsInByZWRpY2F0ZVR5cGUiOiJodHRwczovL3Nsc2EuZGV2L3Byb3ZlbmFuY2UvdjAuMiIsInN1YmplY3QiOlt7Im5hbWUiOiIuL2F3c19sYW1iZGFfcG93ZXJ0b29scy0zLjE5LjFhMTUtcHkzLW5vbmUtYW55LndobCIsImRpZ2VzdCI6eyJzaGEyNTYiOiI2YTlhYzUzMDY1MmI4MzU3ZDcxYWUyNmM0YjhlMzFmMDNhM2RlNzE5ZmNjYWE5MjQwNWI4MTQyNGZhMWU1ZTZhIn19LHsibmFtZSI6Ii4vYXdzX2xhbWJkYV9wb3dlcnRvb2xzLTMuMTkuMWExNS50YXIuZ3oiLCJkaWdlc3QiOnsic2hhMjU2IjoiNzA4NDRmYTE3ZWZmN2E4Y2MwNmQ1MzJmOWJlNWMyNTliNDZkMmM5MzZlMjc4ZWQ1YmFhMzVmMGNmZDdjYmI4ZiJ9fV0sInByZWRpY2F0ZSI6eyJidWlsZGVyIjp7ImlkIjoiaHR0cHM6Ly9naXRodWIuY29tL3Nsc2EtZnJhbWV3b3JrL3Nsc2EtZ2l0aHViLWdlbmVyYXRvci8uZ2l0aHViL3dvcmtmbG93cy9nZW5lcmF0b3JfZ2VuZXJpY19zbHNhMy55bWxAcmVmcy90YWdzL3YyLjEuMCJ9LCJidWlsZFR5cGUiOiJodHRwczovL2dpdGh1Yi5jb20vc2xzYS1mcmFtZXdvcmsvc2xzYS1naXRodWItZ2VuZXJhdG9yL2dlbmVyaWNAdjEiLCJpbnZvY2F0aW9uIjp7ImNvbmZpZ1NvdXJjZSI6eyJ1cmkiOiJnaXQraHR0cHM6Ly9naXRodWIuY29tL2F3cy1wb3dlcnRvb2xzL3Bvd2VydG9vbHMtbGFtYmRhLXB5dGhvbkByZWZzL2hlYWRzL2RldmVsb3AiLCJkaWdlc3QiOnsic2hhMSI6ImQ0ZTk4MWY2NWM0Yzk4NWZiMmM3ZjI3ZWRkYTRiYjk4ZGYzYWVhMGEifSwiZW50cnlQb2ludCI6Ii5naXRodWIvd29ya2Zsb3dzL3ByZS1yZWxlYXNlLnltbCJ9LCJwYXJhbWV0ZXJzIjp7InZhcnMiOnt9fSwiZW52aXJvbm1lbnQiOnsiZ2l0aHViX2FjdG9yIjoibGVhbmRyb2RhbWFzY2VuYSIsImdpdGh1Yl9hY3Rvcl9pZCI6IjQyOTUxNzMiLCJnaXRodWJfYmFzZV9yZWYiOiIiLCJnaXRodWJfZXZlbnRfbmFtZSI6InNjaGVkdWxlIiwiZ2l0aHViX2V2ZW50X3BheWxvYWQiOnsiZW50ZXJwcmlzZSI6eyJhdmF0YXJfdXJsIjoiaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS9iLzEyOTA/dj00IiwiY3JlYXRlZF9hdCI6IjIwMTktMTEtMTNUMTg6MDU6NDFaIiwiZGVzY3JpcHRpb24iOiIiLCJodG1sX3VybCI6Imh0dHBzOi8vZ2l0aHViLmNvbS9lbnRlcnByaXNlcy9hbWF6b24iLCJpZCI6MTI5MCwibmFtZSI6IkFtYXpvbiIsIm5vZGVfaWQiOiJNREV3T2tWdWRHVnljSEpwYzJVeE1qa3ciLCJzbHVnIjoiYW1hem9uIiwidXBkYXRlZF9hdCI6IjIwMjUtMDgtMTJUMjA6NTk6MTRaIiwid2Vic2l0ZV91cmwiOiJodHRwczovL3d3dy5hbWF6b24uY29tLyJ9LCJvcmdhbml6YXRpb24iOnsiYXZhdGFyX3VybCI6Imh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xMjkxMjc2Mzg/dj00IiwiZGVzY3JpcHRpb24iOiIiLCJldmVudHNfdXJsIjoiaHR0cHM6Ly9pbnRlcm5hbC1hcGkuc2VydmljZS5pYWQuZ2l0aHViLm5ldC9vcmdzL2F3cy1wb3dlcnRvb2xzL2V2ZW50cyIsImhvb2tzX3VybCI6Imh0dHBzOi8vaW50ZXJuYWwtYXBpLnNlcnZpY2UuaWFkLmdpdGh1Yi5uZXQvb3Jncy9hd3MtcG93ZXJ0b29scy9ob29rcyIsImlkIjoxMjkxMjc2MzgsImlzc3Vlc191cmwiOiJodHRwczovL2ludGVybmFsLWFwaS5zZXJ2aWNlLmlhZC5naXRodWIubmV0L29yZ3MvYXdzLXBvd2VydG9vbHMvaXNzdWVzIiwibG9naW4iOiJhd3MtcG93ZXJ0b29scyIsIm1lbWJlcnNfdXJsIjoiaHR0cHM6Ly9pbnRlcm5hbC1hcGkuc2VydmljZS5pYWQuZ2l0aHViLm5ldC9vcmdzL2F3cy1wb3dlcnRvb2xzL21lbWJlcnN7L21lbWJlcn0iLCJub2RlX2lkIjoiT19rZ0RPQjdKVTFnIiwicHVibGljX21lbWJlcnNfdXJsIjoiaHR0cHM6Ly9pbnRlcm5hbC1hcGkuc2VydmljZS5pYWQuZ2l0aHViLm5ldC9vcmdzL2F3cy1wb3dlcnRvb2xzL3B1YmxpY19tZW1iZXJzey9tZW1iZXJ9IiwicmVwb3NfdXJsIjoiaHR0cHM6Ly9pbnRlcm5hbC1hcGkuc2VydmljZS5pYWQuZ2l0aHViLm5ldC9vcmdzL2F3cy1wb3dlcnRvb2xzL3JlcG9zIiwidXJsIjoiaHR0cHM6Ly9pbnRlcm5hbC1hcGkuc2VydmljZS5pYWQuZ2l0aHViLm5ldC9vcmdzL2F3cy1wb3dlcnRvb2xzIn0sInJlcG9zaXRvcnkiOnsiYWxsb3dfZm9ya2luZyI6dHJ1ZSwiYXJjaGl2ZV91cmwiOiJodHRwczovL2ludGVybmFsLWFwaS5zZXJ2aWNlLmlhZC5naXRodWIubmV0L3JlcG9zL2F3cy1wb3dlcnRvb2xzL3Bvd2VydG9vbHMtbGFtYmRhLXB5dGhvbi97YXJjaGl2ZV9mb3JtYXR9ey9yZWZ9IiwiYXJjaGl2ZWQiOmZhbHNlLCJhc3NpZ25lZXNfdXJsIjoiaHR0cHM6Ly9pbnRlcm5hbC1hcGkuc2VydmljZS5pYWQuZ2l0aHViLm5ldC9yZXBvcy9hd3MtcG93ZXJ0b29scy9wb3dlcnRvb2xzLWxhbWJkYS1weXRob24vYXNzaWduZWVzey91c2VyfSIsImJsb2JzX3VybCI6Imh0dHBzOi8vaW50ZXJuYWwtYXBpLnNlcnZpY2UuaWFkLmdpdGh1Yi5uZXQvcmVwb3MvYXdzLXBvd2VydG9vbHMvcG93ZXJ0b29scy1sYW1iZGEtcHl0aG9uL2dpdC9ibG9ic3svc2hhfSIsImJyYW5jaGVzX3VybCI6Imh0dHBzOi8vaW50ZXJuYWwtYXBpLnNlcnZpY2UuaWFkLmdpdGh1Yi5uZXQvcmVwb3MvYXdzLXBvd2VydG9vbHMvcG93ZXJ0b29scy1sYW1iZGEtcHl0aG9uL2JyYW5jaGVzey9icmFuY2h9IiwiY2xvbmVfdXJsIjoiaHR0cHM6Ly9naXRodWIuY29tL2F3cy1wb3dlcnRvb2xzL3Bvd2VydG9vbHMtbGFtYmRhLXB5dGhvbi5naXQiLCJjb2xsYWJvcmF0b3JzX3VybCI6Imh0dHBzOi8vaW50ZXJuYWwtYXBpLnNlcnZpY2UuaWFkLmdpdGh1Yi5uZXQvcmVwb3MvYXdzLXBvd2VydG9vbHMvcG93ZXJ0b29scy1sYW1iZGEtcHl0aG9uL2NvbGxhYm9yYXRvcnN7L2NvbGxhYm9yYXRvcn0iLCJjb21tZW50c191cmwiOiJodHRwczovL2ludGVybmFsLWFwaS5zZXJ2aWNlLmlhZC5naXRodWIubmV0L3JlcG9zL2F3cy1wb3dlcnRvb2xzL3Bvd2VydG9vbHMtbGFtYmRhLXB5dGhvbi9jb21tZW50c3svbnVtYmVyfSIsImNvbW1pdHNfdXJsIjoiaHR0cHM6Ly9pbnRlcm5hbC1hcGkuc2VydmljZS5pYWQuZ2l0aHViLm5ldC9yZXBvcy9hd3MtcG93ZXJ0b29scy9wb3dlcnRvb2xzLWxhbWJkYS1weXRob24vY29tbWl0c3svc2hhfSIsImNvbXBhcmVfdXJsIjoiaHR0cHM6Ly9pbnRlcm5hbC1hcGkuc2VydmljZS5pYWQuZ2l0aHViLm5ldC9yZXBvcy9hd3MtcG93ZXJ0b29scy9wb3dlcnRvb2xzLWxhbWJkYS1weXRob24vY29tcGFyZS97YmFzZX0uLi57aGVhZH0iLCJjb250ZW50c191cmwiOiJodHRwczovL2ludGVybmFsLWFwaS5zZXJ2aWNlLmlhZC5naXRodWIubmV0L3JlcG9zL2F3cy1wb3dlcnRvb2xzL3Bvd2VydG9vbHMtbGFtYmRhLXB5dGhvbi9jb250ZW50cy97K3BhdGh9IiwiY29udHJpYnV0b3JzX3VybCI6Imh0dHBzOi8vaW50ZXJuYWwtYXBpLnNlcnZpY2UuaWFkLmdpdGh1Yi5uZXQvcmVwb3MvYXdzLXBvd2VydG9vbHMvcG93ZXJ0b29scy1sYW1iZGEtcHl0aG9uL2NvbnRyaWJ1dG9ycyIsImNyZWF0ZWRfYXQiOiIyMDE5LTExLTE1VDEyOjI2OjEyWiIsImN1c3RvbV9wcm9wZXJ0aWVzIjp7InN0YWdpbmciOiJmYWxzZSIsInZpc2liaWxpdHktYWxsb3ctaW50ZXJuYWwiOiJmYWxzZSIsInZpc2liaWxpdHktYWxsb3ctcHJpdmF0ZSI6ImZhbHNlIiwidmlzaWJpbGl0eS1hbGxvdy1wdWJsaWMiOiJ0cnVlIn0sImRlZmF1bHRfYnJhbmNoIjoiZGV2ZWxvcCIsImRlcGxveW1lbnRzX3VybCI6Imh0dHBzOi8vaW50ZXJuYWwtYXBpLnNlcnZpY2UuaWFkLmdpdGh1Yi5uZXQvcmVwb3MvYXdzLXBvd2VydG9vbHMvcG93ZXJ0b29scy1sYW1iZGEtcHl0aG9uL2RlcGxveW1lbnRzIiwiZGVzY3JpcHRpb24iOiJBIGRldmVsb3BlciB0b29sa2l0IHRvIGltcGxlbWVudCBTZXJ2ZXJsZXNzIGJlc3QgcHJhY3RpY2VzIGFuZCBpbmNyZWFzZSBkZXZlbG9wZXIgdmVsb2NpdHkuIiwiZGlzYWJsZWQiOmZhbHNlLCJkb3dubG9hZHNfdXJsIjoiaHR0cHM6Ly9pbnRlcm5hbC1hcGkuc2VydmljZS5pYWQuZ2l0aHViLm5ldC9yZXBvcy9hd3MtcG93ZXJ0b29scy9wb3dlcnRvb2xzLWxhbWJkYS1weXRob24vZG93bmxvYWRzIiwiZXZlbnRzX3VybCI6Imh0dHBzOi8vaW50ZXJuYWwtYXBpLnNlcnZpY2UuaWFkLmdpdGh1Yi5uZXQvcmVwb3MvYXdzLXBvd2VydG9vbHMvcG93ZXJ0b29scy1sYW1iZGEtcHl0aG9uL2V2ZW50cyIsImZvcmsiOmZhbHNlLCJmb3JrcyI6NDUxLCJmb3Jrc19jb3VudCI6NDUxLCJmb3Jrc191cmwiOiJodHRwczovL2ludGVybmFsLWFwaS5zZXJ2aWNlLmlhZC5naXRodWIubmV0L3JlcG9zL2F3cy1wb3dlcnRvb2xzL3Bvd2VydG9vbHMtbGFtYmRhLXB5dGhvbi9mb3JrcyIsImZ1bGxfbmFtZSI6ImF3cy1wb3dlcnRvb2xzL3Bvd2VydG9vbHMtbGFtYmRhLXB5dGhvbiIsImdpdF9jb21taXRzX3VybCI6Imh0dHBzOi8vaW50ZXJuYWwtYXBpLnNlcnZpY2UuaWFkLmdpdGh1Yi5uZXQvcmVwb3MvYXdzLXBvd2VydG9vbHMvcG93ZXJ0b29scy1sYW1iZGEtcHl0aG9uL2dpdC9jb21taXRzey9zaGF9IiwiZ2l0X3JlZnNfdXJsIjoiaHR0cHM6Ly9pbnRlcm5hbC1hcGkuc2VydmljZS5pYWQuZ2l0aHViLm5ldC9yZXBvcy9hd3MtcG93ZXJ0b29scy9wb3dlcnRvb2xzLWxhbWJkYS1weXRob24vZ2l0L3JlZnN7L3NoYX0iLCJnaXRfdGFnc191cmwiOiJodHRwczovL2ludGVybmFsLWFwaS5zZXJ2aWNlLmlhZC5naXRodWIubmV0L3JlcG9zL2F3cy1wb3dlcnRvb2xzL3Bvd2VydG9vbHMtbGFtYmRhLXB5dGhvbi9naXQvdGFnc3svc2hhfSIsImdpdF91cmwiOiJnaXQ6Ly9naXRodWIuY29tL2F3cy1wb3dlcnRvb2xzL3Bvd2VydG9vbHMtbGFtYmRhLXB5dGhvbi5naXQiLCJoYXNfZGlzY3Vzc2lvbnMiOnRydWUsImhhc19kb3dubG9hZHMiOnRydWUsImhhc19pc3N1ZXMiOnRydWUsImhhc19wYWdlcyI6ZmFsc2UsImhhc19wcm9qZWN0cyI6dHJ1ZSwiaGFzX3dpa2kiOmZhbHNlLCJob21lcGFnZSI6Imh0dHBzOi8vZG9jcy5wb3dlcnRvb2xzLmF3cy5kZXYvbGFtYmRhL3B5dGhvbi9sYXRlc3QvIiwiaG9va3NfdXJsIjoiaHR0cHM6Ly9pbnRlcm5hbC1hcGkuc2VydmljZS5pYWQuZ2l0aHViLm5ldC9yZXBvcy9hd3MtcG93ZXJ0b29scy9wb3dlcnRvb2xzLWxhbWJkYS1weXRob24vaG9va3MiLCJodG1sX3VybCI6Imh0dHBzOi8vZ2l0aHViLmNvbS9hd3MtcG93ZXJ0b29scy9wb3dlcnRvb2xzLWxhbWJkYS1weXRob24iLCJpZCI6MjIxOTE5Mzc5LCJpc190ZW1wbGF0ZSI6ZmFsc2UsImlzc3VlX2NvbW1lbnRfdXJsIjoiaHR0cHM6Ly9pbnRlcm5hbC1hcGkuc2VydmljZS5pYWQuZ2l0aHViLm5ldC9yZXBvcy9hd3MtcG93ZXJ0b29scy9wb3dlcnRvb2xzLWxhbWJkYS1weXRob24vaXNzdWVzL2NvbW1lbnRzey9udW1iZXJ9IiwiaXNzdWVfZXZlbnRzX3VybCI6Imh0dHBzOi8vaW50ZXJuYWwtYXBpLnNlcnZpY2UuaWFkLmdpdGh1Yi5uZXQvcmVwb3MvYXdzLXBvd2VydG9vbHMvcG93ZXJ0b29scy1sYW1iZGEtcHl0aG9uL2lzc3Vlcy9ldmVudHN7L251bWJlcn0iLCJpc3N1ZXNfdXJsIjoiaHR0cHM6Ly9pbnRlcm5hbC1hcGkuc2VydmljZS5pYWQuZ2l0aHViLm5ldC9yZXBvcy9hd3MtcG93ZXJ0b29scy9wb3dlcnRvb2xzLWxhbWJkYS1weXRob24vaXNzdWVzey9udW1iZXJ9Iiwia2V5c191cmwiOiJodHRwczovL2ludGVybmFsLWFwaS5zZXJ2aWNlLmlhZC5naXRodWIubmV0L3JlcG9zL2F3cy1wb3dlcnRvb2xzL3Bvd2VydG9vbHMtbGFtYmRhLXB5dGhvbi9rZXlzey9rZXlfaWR9IiwibGFiZWxzX3VybCI6Imh0dHBzOi8vaW50ZXJuYWwtYXBpLnNlcnZpY2UuaWFkLmdpdGh1Yi5uZXQvcmVwb3MvYXdzLXBvd2VydG9vbHMvcG93ZXJ0b29scy1sYW1iZGEtcHl0aG9uL2xhYmVsc3svbmFtZX0iLCJsYW5ndWFnZSI6IlB5dGhvbiIsImxhbmd1YWdlc191cmwiOiJodHRwczovL2ludGVybmFsLWFwaS5zZXJ2aWNlLmlhZC5naXRodWIubmV0L3JlcG9zL2F3cy1wb3dlcnRvb2xzL3Bvd2VydG9vbHMtbGFtYmRhLXB5dGhvbi9sYW5ndWFnZXMiLCJsaWNlbnNlIjp7ImtleSI6Im1pdC0wIiwibmFtZSI6Ik1JVCBObyBBdHRyaWJ1dGlvbiIsIm5vZGVfaWQiOiJNRGM2VEdsalpXNXpaVFF4Iiwic3BkeF9pZCI6Ik1JVC0wIiwidXJsIjoiaHR0cHM6Ly9pbnRlcm5hbC1hcGkuc2VydmljZS5pYWQuZ2l0aHViLm5ldC9saWNlbnNlcy9taXQtMCJ9LCJtZXJnZXNfdXJsIjoiaHR0cHM6Ly9pbnRlcm5hbC1hcGkuc2VydmljZS5pYWQuZ2l0aHViLm5ldC9yZXBvcy9hd3MtcG93ZXJ0b29scy9wb3dlcnRvb2xzLWxhbWJkYS1weXRob24vbWVyZ2VzIiwibWlsZXN0b25lc191cmwiOiJodHRwczovL2ludGVybmFsLWFwaS5zZXJ2aWNlLmlhZC5naXRodWIubmV0L3JlcG9zL2F3cy1wb3dlcnRvb2xzL3Bvd2VydG9vbHMtbGFtYmRhLXB5dGhvbi9taWxlc3RvbmVzey9udW1iZXJ9IiwibWlycm9yX3VybCI6bnVsbCwibmFtZSI6InBvd2VydG9vbHMtbGFtYmRhLXB5dGhvbiIsIm5vZGVfaWQiOiJNREV3T2xKbGNHOXphWFJ2Y25reU1qRTVNVGt6TnprPSIsIm5vdGlmaWNhdGlvbnNfdXJsIjoiaHR0cHM6Ly9pbnRlcm5hbC1hcGkuc2VydmljZS5pYWQuZ2l0aHViLm5ldC9yZXBvcy9hd3MtcG93ZXJ0b29scy9wb3dlcnRvb2xzLWxhbWJkYS1weXRob24vbm90aWZpY2F0aW9uc3s/c2luY2UsYWxsLHBhcnRpY2lwYXRpbmd9Iiwib3Blbl9pc3N1ZXMiOjU5LCJvcGVuX2lzc3Vlc19jb3VudCI6NTksIm93bmVyIjp7ImF2YXRhcl91cmwiOiJodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTI5MTI3NjM4P3Y9NCIsImV2ZW50c191cmwiOiJodHRwczovL2ludGVybmFsLWFwaS5zZXJ2aWNlLmlhZC5naXRodWIubmV0L3VzZXJzL2F3cy1wb3dlcnRvb2xzL2V2ZW50c3svcHJpdmFjeX0iLCJmb2xsb3dlcnNfdXJsIjoiaHR0cHM6Ly9pbnRlcm5hbC1hcGkuc2VydmljZS5pYWQuZ2l0aHViLm5ldC91c2Vycy9hd3MtcG93ZXJ0b29scy9mb2xsb3dlcnMiLCJmb2xsb3dpbmdfdXJsIjoiaHR0cHM6Ly9pbnRlcm5hbC1hcGkuc2VydmljZS5pYWQuZ2l0aHViLm5ldC91c2Vycy9hd3MtcG93ZXJ0b29scy9mb2xsb3dpbmd7L290aGVyX3VzZXJ9IiwiZ2lzdHNfdXJsIjoiaHR0cHM6Ly9pbnRlcm5hbC1hcGkuc2VydmljZS5pYWQuZ2l0aHViLm5ldC91c2Vycy9hd3MtcG93ZXJ0b29scy9naXN0c3svZ2lzdF9pZH0iLCJncmF2YXRhcl9pZCI6IiIsImh0bWxfdXJsIjoiaHR0cHM6Ly9naXRodWIuY29tL2F3cy1wb3dlcnRvb2xzIiwiaWQiOjEyOTEyNzYzOCwibG9naW4iOiJhd3MtcG93ZXJ0b29scyIsIm5vZGVfaWQiOiJPX2tnRE9CN0pVMWciLCJvcmdhbml6YXRpb25zX3VybCI6Imh0dHBzOi8vaW50ZXJuYWwtYXBpLnNlcnZpY2UuaWFkLmdpdGh1Yi5uZXQvdXNlcnMvYXdzLXBvd2VydG9vbHMvb3JncyIsInJlY2VpdmVkX2V2ZW50c191cmwiOiJodHRwczovL2ludGVybmFsLWFwaS5zZXJ2aWNlLmlhZC5naXRodWIubmV0L3VzZXJzL2F3cy1wb3dlcnRvb2xzL3JlY2VpdmVkX2V2ZW50cyIsInJlcG9zX3VybCI6Imh0dHBzOi8vaW50ZXJuYWwtYXBpLnNlcnZpY2UuaWFkLmdpdGh1Yi5uZXQvdXNlcnMvYXdzLXBvd2VydG9vbHMvcmVwb3MiLCJzaXRlX2FkbWluIjpmYWxzZSwic3RhcnJlZF91cmwiOiJodHRwczovL2ludGVybmFsLWFwaS5zZXJ2aWNlLmlhZC5naXRodWIubmV0L3VzZXJzL2F3cy1wb3dlcnRvb2xzL3N0YXJyZWR7L293bmVyfXsvcmVwb30iLCJzdWJzY3JpcHRpb25zX3VybCI6Imh0dHBzOi8vaW50ZXJuYWwtYXBpLnNlcnZpY2UuaWFkLmdpdGh1Yi5uZXQvdXNlcnMvYXdzLXBvd2VydG9vbHMvc3Vic2NyaXB0aW9ucyIsInR5cGUiOiJPcmdhbml6YXRpb24iLCJ1cmwiOiJodHRwczovL2ludGVybmFsLWFwaS5zZXJ2aWNlLmlhZC5naXRodWIubmV0L3VzZXJzL2F3cy1wb3dlcnRvb2xzIiwidXNlcl92aWV3X3R5cGUiOiJwdWJsaWMifSwicHJpdmF0ZSI6ZmFsc2UsInB1bGxzX3VybCI6Imh0dHBzOi8vaW50ZXJuYWwtYXBpLnNlcnZpY2UuaWFkLmdpdGh1Yi5uZXQvcmVwb3MvYXdzLXBvd2VydG9vbHMvcG93ZXJ0b29scy1sYW1iZGEtcHl0aG9uL3B1bGxzey9udW1iZXJ9IiwicHVzaGVkX2F0IjoiMjAyNS0wOS0wNFQyMDozODo0M1oiLCJyZWxlYXNlc191cmwiOiJodHRwczovL2ludGVybmFsLWFwaS5zZXJ2aWNlLmlhZC5naXRodWIubmV0L3JlcG9zL2F3cy1wb3dlcnRvb2xzL3Bvd2VydG9vbHMtbGFtYmRhLXB5dGhvbi9yZWxlYXNlc3svaWR9Iiwic2l6ZSI6MTMxNDE2LCJzc2hfdXJsIjoiZ2l0QGdpdGh1Yi5jb206YXdzLXBvd2VydG9vbHMvcG93ZXJ0b29scy1sYW1iZGEtcHl0aG9uLmdpdCIsInN0YXJnYXplcnNfY291bnQiOjMxMzUsInN0YXJnYXplcnNfdXJsIjoiaHR0cHM6Ly9pbnRlcm5hbC1hcGkuc2VydmljZS5pYWQuZ2l0aHViLm5ldC9yZXBvcy9hd3MtcG93ZXJ0b29scy9wb3dlcnRvb2xzLWxhbWJkYS1weXRob24vc3RhcmdhemVycyIsInN0YXR1c2VzX3VybCI6Imh0dHBzOi8vaW50ZXJuYWwtYXBpLnNlcnZpY2UuaWFkLmdpdGh1Yi5uZXQvcmVwb3MvYXdzLXBvd2VydG9vbHMvcG93ZXJ0b29scy1sYW1iZGEtcHl0aG9uL3N0YXR1c2VzL3tzaGF9Iiwic3Vic2NyaWJlcnNfdXJsIjoiaHR0cHM6Ly9pbnRlcm5hbC1hcGkuc2VydmljZS5pYWQuZ2l0aHViLm5ldC9yZXBvcy9hd3MtcG93ZXJ0b29scy9wb3dlcnRvb2xzLWxhbWJkYS1weXRob24vc3Vic2NyaWJlcnMiLCJzdWJzY3JpcHRpb25fdXJsIjoiaHR0cHM6Ly9pbnRlcm5hbC1hcGkuc2VydmljZS5pYWQuZ2l0aHViLm5ldC9yZXBvcy9hd3MtcG93ZXJ0b29scy9wb3dlcnRvb2xzLWxhbWJkYS1weXRob24vc3Vic2NyaXB0aW9uIiwic3ZuX3VybCI6Imh0dHBzOi8vZ2l0aHViLmNvbS9hd3MtcG93ZXJ0b29scy9wb3dlcnRvb2xzLWxhbWJkYS1weXRob24iLCJ0YWdzX3VybCI6Imh0dHBzOi8vaW50ZXJuYWwtYXBpLnNlcnZpY2UuaWFkLmdpdGh1Yi5uZXQvcmVwb3MvYXdzLXBvd2VydG9vbHMvcG93ZXJ0b29scy1sYW1iZGEtcHl0aG9uL3RhZ3MiLCJ0ZWFtc191cmwiOiJodHRwczovL2ludGVybmFsLWFwaS5zZXJ2aWNlLmlhZC5naXRodWIubmV0L3JlcG9zL2F3cy1wb3dlcnRvb2xzL3Bvd2VydG9vbHMtbGFtYmRhLXB5dGhvbi90ZWFtcyIsInRvcGljcyI6WyJhd3MiLCJhd3MtbGFtYmRhIiwibGFtYmRhIiwicHl0aG9uIiwic2VydmVybGVzcyJdLCJ0cmVlc191cmwiOiJodHRwczovL2ludGVybmFsLWFwaS5zZXJ2aWNlLmlhZC5naXRodWIubmV0L3JlcG9zL2F3cy1wb3dlcnRvb2xzL3Bvd2VydG9vbHMtbGFtYmRhLXB5dGhvbi9naXQvdHJlZXN7L3NoYX0iLCJ1cGRhdGVkX2F0IjoiMjAyNS0wOS0wNVQwNDo0OToyMVoiLCJ1cmwiOiJodHRwczovL2ludGVybmFsLWFwaS5zZXJ2aWNlLmlhZC5naXRodWIubmV0L3JlcG9zL2F3cy1wb3dlcnRvb2xzL3Bvd2VydG9vbHMtbGFtYmRhLXB5dGhvbiIsInZpc2liaWxpdHkiOiJwdWJsaWMiLCJ3YXRjaGVycyI6MzEzNSwid2F0Y2hlcnNfY291bnQiOjMxMzUsIndlYl9jb21taXRfc2lnbm9mZl9yZXF1aXJlZCI6dHJ1ZX0sInNjaGVkdWxlIjoiMCA4ICogKiAxLTUiLCJ3b3JrZmxvdyI6Ii5naXRodWIvd29ya2Zsb3dzL3ByZS1yZWxlYXNlLnltbCJ9LCJnaXRodWJfaGVhZF9yZWYiOiIiLCJnaXRodWJfcmVmIjoicmVmcy9oZWFkcy9kZXZlbG9wIiwiZ2l0aHViX3JlZl90eXBlIjoiYnJhbmNoIiwiZ2l0aHViX3JlcG9zaXRvcnlfaWQiOiIyMjE5MTkzNzkiLCJnaXRodWJfcmVwb3NpdG9yeV9vd25lciI6ImF3cy1wb3dlcnRvb2xzIiwiZ2l0aHViX3JlcG9zaXRvcnlfb3duZXJfaWQiOiIxMjkxMjc2MzgiLCJnaXRodWJfcnVuX2F0dGVtcHQiOiIxIiwiZ2l0aHViX3J1bl9pZCI6IjE3NDg3MzY3OTIwIiwiZ2l0aHViX3J1bl9udW1iZXIiOiIzMjIiLCJnaXRodWJfc2hhMSI6ImQ0ZTk4MWY2NWM0Yzk4NWZiMmM3ZjI3ZWRkYTRiYjk4ZGYzYWVhMGEifX0sIm1ldGFkYXRhIjp7ImJ1aWxkSW52b2NhdGlvbklEIjoiMTc0ODczNjc5MjAtMSIsImNvbXBsZXRlbmVzcyI6eyJwYXJhbWV0ZXJzIjp0cnVlLCJlbnZpcm9ubWVudCI6ZmFsc2UsIm1hdGVyaWFscyI6ZmFsc2V9LCJyZXByb2R1Y2libGUiOmZhbHNlfSwibWF0ZXJpYWxzIjpbeyJ1cmkiOiJnaXQraHR0cHM6Ly9naXRodWIuY29tL2F3cy1wb3dlcnRvb2xzL3Bvd2VydG9vbHMtbGFtYmRhLXB5dGhvbkByZWZzL2hlYWRzL2RldmVsb3AiLCJkaWdlc3QiOnsic2hhMSI6ImQ0ZTk4MWY2NWM0Yzk4NWZiMmM3ZjI3ZWRkYTRiYjk4ZGYzYWVhMGEifX1dfX0=", "payloadType":"application/vnd.in-toto+json", "signatures":[{"sig":"MEYCIQCU6thpqRU3OOpjK7yMQBaidV1NYOYgZdz6UnH4w5nO9QIhAOXYGZbX44GCfFnI6XJaYV5mubhdktcKuXHy1Ce7UgOA"}]}} \ No newline at end of file diff --git a/provenance/3.19.1a16/multiple.intoto.jsonl b/provenance/3.19.1a16/multiple.intoto.jsonl new file mode 100644 index 00000000000..5d5e09a98c9 --- /dev/null +++ b/provenance/3.19.1a16/multiple.intoto.jsonl @@ -0,0 +1 @@ +{"mediaType":"application/vnd.dev.sigstore.bundle.v0.3+json", "verificationMaterial":{"certificate":{"rawBytes":"MIIHZjCCBuugAwIBAgIUT5ecHJC5yyo2iEbhe5CfOvihQcEwCgYIKoZIzj0EAwMwNzEVMBMGA1UEChMMc2lnc3RvcmUuZGV2MR4wHAYDVQQDExVzaWdzdG9yZS1pbnRlcm1lZGlhdGUwHhcNMjUwOTA5MDgwNzQ2WhcNMjUwOTA5MDgxNzQ2WjAAMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAETIcpmmdZNTwRiQeimHj7FkYsivPyTDqyDTVEVrfYDBekmY7du6esstCVq6DEC6C7shyXlhGngKJg7mdRFWPDtaOCBgowggYGMA4GA1UdDwEB/wQEAwIHgDATBgNVHSUEDDAKBggrBgEFBQcDAzAdBgNVHQ4EFgQUpj+xtl1q0uieFYWj9W2yIJWEdAIwHwYDVR0jBBgwFoAU39Ppz1YkEZb5qNjpKFWixi4YZD8wgYQGA1UdEQEB/wR6MHiGdmh0dHBzOi8vZ2l0aHViLmNvbS9zbHNhLWZyYW1ld29yay9zbHNhLWdpdGh1Yi1nZW5lcmF0b3IvLmdpdGh1Yi93b3JrZmxvd3MvZ2VuZXJhdG9yX2dlbmVyaWNfc2xzYTMueW1sQHJlZnMvdGFncy92Mi4xLjAwOQYKKwYBBAGDvzABAQQraHR0cHM6Ly90b2tlbi5hY3Rpb25zLmdpdGh1YnVzZXJjb250ZW50LmNvbTAWBgorBgEEAYO/MAECBAhzY2hlZHVsZTA2BgorBgEEAYO/MAEDBCgxNGMwYWE4ZDBmMmU1YWI4N2I0NTVjZWJjMTIxMWIxOWZjMGIyN2M5MBkGCisGAQQBg78wAQQEC1ByZS1SZWxlYXNlMDUGCisGAQQBg78wAQUEJ2F3cy1wb3dlcnRvb2xzL3Bvd2VydG9vbHMtbGFtYmRhLXB5dGhvbjAgBgorBgEEAYO/MAEGBBJyZWZzL2hlYWRzL2RldmVsb3AwOwYKKwYBBAGDvzABCAQtDCtodHRwczovL3Rva2VuLmFjdGlvbnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tMIGGBgorBgEEAYO/MAEJBHgMdmh0dHBzOi8vZ2l0aHViLmNvbS9zbHNhLWZyYW1ld29yay9zbHNhLWdpdGh1Yi1nZW5lcmF0b3IvLmdpdGh1Yi93b3JrZmxvd3MvZ2VuZXJhdG9yX2dlbmVyaWNfc2xzYTMueW1sQHJlZnMvdGFncy92Mi4xLjAwOAYKKwYBBAGDvzABCgQqDChmN2RkOGM1NGMyMDY3YmFmYzEyY2E3YTU1NTk1ZDVlZTliNzUyMDRhMB0GCisGAQQBg78wAQsEDwwNZ2l0aHViLWhvc3RlZDBKBgorBgEEAYO/MAEMBDwMOmh0dHBzOi8vZ2l0aHViLmNvbS9hd3MtcG93ZXJ0b29scy9wb3dlcnRvb2xzLWxhbWJkYS1weXRob24wOAYKKwYBBAGDvzABDQQqDCgxNGMwYWE4ZDBmMmU1YWI4N2I0NTVjZWJjMTIxMWIxOWZjMGIyN2M5MCIGCisGAQQBg78wAQ4EFAwScmVmcy9oZWFkcy9kZXZlbG9wMBkGCisGAQQBg78wAQ8ECwwJMjIxOTE5Mzc5MDEGCisGAQQBg78wARAEIwwhaHR0cHM6Ly9naXRodWIuY29tL2F3cy1wb3dlcnRvb2xzMBkGCisGAQQBg78wAREECwwJMTI5MTI3NjM4MH8GCisGAQQBg78wARIEcQxvaHR0cHM6Ly9naXRodWIuY29tL2F3cy1wb3dlcnRvb2xzL3Bvd2VydG9vbHMtbGFtYmRhLXB5dGhvbi8uZ2l0aHViL3dvcmtmbG93cy9wcmUtcmVsZWFzZS55bWxAcmVmcy9oZWFkcy9kZXZlbG9wMDgGCisGAQQBg78wARMEKgwoMTRjMGFhOGQwZjJlNWFiODdiNDU1Y2ViYzEyMTFiMTlmYzBiMjdjOTAYBgorBgEEAYO/MAEUBAoMCHNjaGVkdWxlMG4GCisGAQQBg78wARUEYAxeaHR0cHM6Ly9naXRodWIuY29tL2F3cy1wb3dlcnRvb2xzL3Bvd2VydG9vbHMtbGFtYmRhLXB5dGhvbi9hY3Rpb25zL3J1bnMvMTc1NzU5MjgyNzcvYXR0ZW1wdHMvMTAWBgorBgEEAYO/MAEWBAgMBnB1YmxpYzCBiQYKKwYBBAHWeQIEAgR7BHkAdwB1AN09MGrGxxEyYxkeHJlnNwKiSl643jyt/4eKcoAvKe6OAAABmS2EQq4AAAQDAEYwRAIgYzP+Ygg3E5G0irgIVS0vq4Qm/lG5Nmp0uscKoCOywiECICiSvNX83pT76bIdf5Kv3jm9jYYkFxuSPeRy/jFGzTVCMAoGCCqGSM49BAMDA2kAMGYCMQDbMHT0Mdb1Lqt/Qzg7wlxK+ExOFYqtzxkGP0A/uutdL6Zre462Kmp2wXi9OCiHu1cCMQC0Q346uDnVZIgjKkG/aC+F1eB9vRXPveYKkscsA3x+IsaXu483iFb5koqxDcKS0mc="}, "tlogEntries":[{"logIndex":"487360690", "logId":{"keyId":"wNI9atQGlz+VWfO6LRygH4QUfY/8W4RFwiT5i5WRgB0="}, "kindVersion":{"kind":"dsse", "version":"0.0.1"}, "integratedTime":"1757405266", "inclusionPromise":{"signedEntryTimestamp":"MEUCIGEf/v01GAG4Lv2qVBLiLhl3tXe9eQK+/Hcp+6OKXL/CAiEA2vjehG6ZguN7xSv46BYIbAHM5RjFgNHGT/jIsfkQtwc="}, "inclusionProof":{"logIndex":"365456428", "rootHash":"A7XtLdERzYgKSypgU4AyOsAxnfD/wsoMyJfiUbJxp38=", "treeSize":"365456429", "hashes":["LMnyb5QX0zZHAAcc74ujnMFgkCzuwAVITpl/3jURe50=", "SaS0I+9vbvTpR/e2fHwfEcrIL7f6goRxaHsU4bmdv5M=", "ovXeVX8HGcED/sMGDC/TcuvFu1Lj0gHk0ZeOf/DCDF4=", "lKLp4qbK6vcANntljA+DQ2zfaQVy0riuHXcfiZdQnu0=", "MAD1PpRES2Odbk/jow0Jm0Ew/Ze2aN28WiKtHwwFPbE=", "Tl8lMOBX2UlCVfaHb6ZuTV3qXtk6CGc3YHUvsiird2w=", "QERfzH29Z7hM8kEVLMcumEZ3Hx3/HgzMFRFkZnucvno=", "P45vU+FLVU16JsWLjDo2a3FBPAE9fHuvDjWgAL7NikM=", "eOZoYOKwgYxL1Je6vOIzFLPAV1BKnd4Gtb38ZsC3UuE=", "tYs1RrxIen6EcWU20n9Djqu/MxyCn4dP2IzRarUXkbg=", "iVjLqaDpIzuSv6cYkYu/MdcVS83OTuLTxp/tOi7+v+w=", "W3IiKW68YOnP+4fVNmVlNAsfIw7jK5FP2HCyHAcVD9o=", "vS7O4ozHIQZJWBiov+mkpI27GE8zAmVCEkRcP3NDyNE="], "checkpoint":{"envelope":"rekor.sigstore.dev - 1193050959916656506\n365456429\nA7XtLdERzYgKSypgU4AyOsAxnfD/wsoMyJfiUbJxp38=\n\n— rekor.sigstore.dev wNI9ajBFAiAlO7VABGloZJkmo+QchJr6IjtyxeFcgD59P4q9v7IlTQIhAPooKM8p4sAzvZi2xTMQvteNp1vPAqsAcdV92+9QXeaq\n"}}, "canonicalizedBody":"eyJhcGlWZXJzaW9uIjoiMC4wLjEiLCJraW5kIjoiZHNzZSIsInNwZWMiOnsiZW52ZWxvcGVIYXNoIjp7ImFsZ29yaXRobSI6InNoYTI1NiIsInZhbHVlIjoiNTRlMmMzZjhmMDU4MGFjYTU4MTVjNDE0ZTE1YWQ0YjBjN2Y2YjI2OWQ2YmI1MDc4Y2Y3ZWIxNzgyNmI5NzFiYSJ9LCJwYXlsb2FkSGFzaCI6eyJhbGdvcml0aG0iOiJzaGEyNTYiLCJ2YWx1ZSI6IjQ4YjY3MjE1NGVmYzQ4ODU1ZmJiYmNkN2IzZDAxNDA2MmE4MTNhMGIyOWQzMWY1ZTgyOGE2YWY3Y2IxZGQzOGEifSwic2lnbmF0dXJlcyI6W3sic2lnbmF0dXJlIjoiTUVZQ0lRQ2FxZjliVTdDVEVvb25IMG9DY3BFNWYwYjJNWlMrQ3Nwdk1wMWc3Z0cyUXdJaEFLcFZxTXFpQ0hRNVh0c0JQaXBvQUo0ejdFL0prdEFQV0txRUVsRHJjd2FtIiwidmVyaWZpZXIiOiJMUzB0TFMxQ1JVZEpUaUJEUlZKVVNVWkpRMEZVUlMwdExTMHRDazFKU1VoYWFrTkRRblYxWjBGM1NVSkJaMGxWVkRWbFkwaEtRelY1ZVc4eWFVVmlhR1UxUTJaUGRtbG9VV05GZDBObldVbExiMXBKZW1vd1JVRjNUWGNLVG5wRlZrMUNUVWRCTVZWRlEyaE5UV015Ykc1ak0xSjJZMjFWZFZwSFZqSk5ValIzU0VGWlJGWlJVVVJGZUZaNllWZGtlbVJIT1hsYVV6RndZbTVTYkFwamJURnNXa2RzYUdSSFZYZElhR05PVFdwVmQwOVVRVFZOUkdkM1RucFJNbGRvWTA1TmFsVjNUMVJCTlUxRVozaE9lbEV5VjJwQlFVMUdhM2RGZDFsSUNrdHZXa2w2YWpCRFFWRlpTVXR2V2tsNmFqQkVRVkZqUkZGblFVVlVTV053Ylcxa1drNVVkMUpwVVdWcGJVaHFOMFpyV1hOcGRsQjVWRVJ4ZVVSVVZrVUtWbkptV1VSQ1pXdHRXVGRrZFRabGMzTjBRMVp4TmtSRlF6WkROM05vZVZoc2FFZHVaMHRLWnpkdFpGSkdWMUJFZEdGUFEwSm5iM2RuWjFsSFRVRTBSd3BCTVZWa1JIZEZRaTkzVVVWQmQwbElaMFJCVkVKblRsWklVMVZGUkVSQlMwSm5aM0pDWjBWR1FsRmpSRUY2UVdSQ1owNVdTRkUwUlVablVWVndhaXQ0Q25Sc01YRXdkV2xsUmxsWGFqbFhNbmxKU2xkRlpFRkpkMGgzV1VSV1VqQnFRa0puZDBadlFWVXpPVkJ3ZWpGWmEwVmFZalZ4VG1wd1MwWlhhWGhwTkZrS1drUTRkMmRaVVVkQk1WVmtSVkZGUWk5M1VqWk5TR2xIWkcxb01HUklRbnBQYVRoMldqSnNNR0ZJVm1sTWJVNTJZbE01ZW1KSVRtaE1WMXA1V1ZjeGJBcGtNamw1WVhrNWVtSklUbWhNVjJSd1pFZG9NVmxwTVc1YVZ6VnNZMjFHTUdJelNYWk1iV1J3WkVkb01WbHBPVE5pTTBweVdtMTRkbVF6VFhaYU1sWjFDbHBZU21oa1J6bDVXREprYkdKdFZubGhWMDVtWXpKNGVsbFVUWFZsVnpGelVVaEtiRnB1VFhaa1IwWnVZM2s1TWsxcE5IaE1ha0YzVDFGWlMwdDNXVUlLUWtGSFJIWjZRVUpCVVZGeVlVaFNNR05JVFRaTWVUa3dZakowYkdKcE5XaFpNMUp3WWpJMWVreHRaSEJrUjJneFdXNVdlbHBZU21waU1qVXdXbGMxTUFwTWJVNTJZbFJCVjBKbmIzSkNaMFZGUVZsUEwwMUJSVU5DUVdoNldUSm9iRnBJVm5OYVZFRXlRbWR2Y2tKblJVVkJXVTh2VFVGRlJFSkRaM2hPUjAxM0NsbFhSVFJhUkVKdFRXMVZNVmxYU1RST01ra3dUbFJXYWxwWFNtcE5WRWw0VFZkSmVFOVhXbXBOUjBsNVRqSk5OVTFDYTBkRGFYTkhRVkZSUW1jM09IY0tRVkZSUlVNeFFubGFVekZUV2xkNGJGbFlUbXhOUkZWSFEybHpSMEZSVVVKbk56aDNRVkZWUlVveVJqTmplVEYzWWpOa2JHTnVVblppTW5oNlRETkNkZ3BrTWxaNVpFYzVkbUpJVFhSaVIwWjBXVzFTYUV4WVFqVmtSMmgyWW1wQlowSm5iM0pDWjBWRlFWbFBMMDFCUlVkQ1FrcDVXbGRhZWt3eWFHeFpWMUo2Q2t3eVVteGtiVlp6WWpOQmQwOTNXVXRMZDFsQ1FrRkhSSFo2UVVKRFFWRjBSRU4wYjJSSVVuZGplbTkyVEROU2RtRXlWblZNYlVacVpFZHNkbUp1VFhVS1dqSnNNR0ZJVm1sa1dFNXNZMjFPZG1KdVVteGlibEYxV1RJNWRFMUpSMGRDWjI5eVFtZEZSVUZaVHk5TlFVVktRa2huVFdSdGFEQmtTRUo2VDJrNGRncGFNbXd3WVVoV2FVeHRUblppVXpsNllraE9hRXhYV25sWlZ6RnNaREk1ZVdGNU9YcGlTRTVvVEZka2NHUkhhREZaYVRGdVdsYzFiR050UmpCaU0wbDJDa3h0WkhCa1IyZ3hXV2s1TTJJelNuSmFiWGgyWkROTmRsb3lWblZhV0Vwb1pFYzVlVmd5Wkd4aWJWWjVZVmRPWm1NeWVIcFpWRTExWlZjeGMxRklTbXdLV201TmRtUkhSbTVqZVRreVRXazBlRXhxUVhkUFFWbExTM2RaUWtKQlIwUjJla0ZDUTJkUmNVUkRhRzFPTWxKclQwZE5NVTVIVFhsTlJGa3pXVzFHYlFwWmVrVjVXVEpGTTFsVVZURk9WR3N4V2tSV2JGcFViR2xPZWxWNVRVUlNhRTFDTUVkRGFYTkhRVkZSUW1jM09IZEJVWE5GUkhkM1Rsb3liREJoU0ZacENreFhhSFpqTTFKc1drUkNTMEpuYjNKQ1owVkZRVmxQTDAxQlJVMUNSSGROVDIxb01HUklRbnBQYVRoMldqSnNNR0ZJVm1sTWJVNTJZbE01YUdRelRYUUtZMGM1TTFwWVNqQmlNamx6WTNrNWQySXpaR3hqYmxKMllqSjRla3hYZUdoaVYwcHJXVk14ZDJWWVVtOWlNalIzVDBGWlMwdDNXVUpDUVVkRWRucEJRZ3BFVVZGeFJFTm5lRTVIVFhkWlYwVTBXa1JDYlUxdFZURlpWMGswVGpKSk1FNVVWbXBhVjBwcVRWUkplRTFYU1hoUFYxcHFUVWRKZVU0eVRUVk5RMGxIQ2tOcGMwZEJVVkZDWnpjNGQwRlJORVZHUVhkVFkyMVdiV041T1c5YVYwWnJZM2s1YTFwWVdteGlSemwzVFVKclIwTnBjMGRCVVZGQ1p6YzRkMEZST0VVS1EzZDNTazFxU1hoUFZFVTFUWHBqTlUxRVJVZERhWE5IUVZGUlFtYzNPSGRCVWtGRlNYZDNhR0ZJVWpCalNFMDJUSGs1Ym1GWVVtOWtWMGwxV1RJNWRBcE1Na1l6WTNreGQySXpaR3hqYmxKMllqSjRlazFDYTBkRGFYTkhRVkZSUW1jM09IZEJVa1ZGUTNkM1NrMVVTVFZOVkVrelRtcE5ORTFJT0VkRGFYTkhDa0ZSVVVKbk56aDNRVkpKUldOUmVIWmhTRkl3WTBoTk5reDVPVzVoV0ZKdlpGZEpkVmt5T1hSTU1rWXpZM2t4ZDJJelpHeGpibEoyWWpKNGVrd3pRbllLWkRKV2VXUkhPWFppU0UxMFlrZEdkRmx0VW1oTVdFSTFaRWRvZG1KcE9IVmFNbXd3WVVoV2FVd3paSFpqYlhSdFlrYzVNMk41T1hkamJWVjBZMjFXY3dwYVYwWjZXbE0xTldKWGVFRmpiVlp0WTNrNWIxcFhSbXRqZVRscldsaGFiR0pIT1hkTlJHZEhRMmx6UjBGUlVVSm5OemgzUVZKTlJVdG5kMjlOVkZKcUNrMUhSbWhQUjFGM1dtcEtiRTVYUm1sUFJHUnBUa1JWTVZreVZtbFpla1Y1VFZSR2FVMVViRzFaZWtKcFRXcGthazlVUVZsQ1oyOXlRbWRGUlVGWlR5OEtUVUZGVlVKQmIwMURTRTVxWVVkV2EyUlhlR3hOUnpSSFEybHpSMEZSVVVKbk56aDNRVkpWUlZsQmVHVmhTRkl3WTBoTk5reDVPVzVoV0ZKdlpGZEpkUXBaTWpsMFRESkdNMk41TVhkaU0yUnNZMjVTZG1JeWVIcE1NMEoyWkRKV2VXUkhPWFppU0UxMFlrZEdkRmx0VW1oTVdFSTFaRWRvZG1KcE9XaFpNMUp3Q21JeU5YcE1NMG94WW01TmRrMVVZekZPZWxVMVRXcG5lVTU2WTNaWldGSXdXbGN4ZDJSSVRYWk5WRUZYUW1kdmNrSm5SVVZCV1U4dlRVRkZWMEpCWjAwS1FtNUNNVmx0ZUhCWmVrTkNhVkZaUzB0M1dVSkNRVWhYWlZGSlJVRm5VamRDU0d0QlpIZENNVUZPTURsTlIzSkhlSGhGZVZsNGEyVklTbXh1VG5kTGFRcFRiRFkwTTJwNWRDODBaVXRqYjBGMlMyVTJUMEZCUVVKdFV6SkZVWEUwUVVGQlVVUkJSVmwzVWtGSloxbDZVQ3RaWjJjelJUVkhNR2x5WjBsV1V6QjJDbkUwVVcwdmJFYzFUbTF3TUhWelkwdHZRMDk1ZDJsRlEwbERhVk4yVGxnNE0zQlVOelppU1dSbU5VdDJNMnB0T1dwWldXdEdlSFZUVUdWU2VTOXFSa2NLZWxSV1EwMUJiMGREUTNGSFUwMDBPVUpCVFVSQk1tdEJUVWRaUTAxUlJHSk5TRlF3VFdSaU1VeHhkQzlSZW1jM2QyeDRTeXRGZUU5R1dYRjBlbmhyUndwUU1FRXZkWFYwWkV3MlduSmxORFl5UzIxd01uZFlhVGxQUTJsSWRURmpRMDFSUXpCUk16UTJkVVJ1VmxwSloycExhMGN2WVVNclJqRmxRamwyVWxoUUNuWmxXVXRyYzJOelFUTjRLMGx6WVZoMU5EZ3phVVppTld0dmNYaEVZMHRUTUcxalBRb3RMUzB0TFVWT1JDQkRSVkpVU1VaSlEwRlVSUzB0TFMwdENnPT0ifV19fQ=="}]}, "dsseEnvelope":{"payload":"eyJfdHlwZSI6Imh0dHBzOi8vaW4tdG90by5pby9TdGF0ZW1lbnQvdjAuMSIsInByZWRpY2F0ZVR5cGUiOiJodHRwczovL3Nsc2EuZGV2L3Byb3ZlbmFuY2UvdjAuMiIsInN1YmplY3QiOlt7Im5hbWUiOiIuL2F3c19sYW1iZGFfcG93ZXJ0b29scy0zLjE5LjFhMTYtcHkzLW5vbmUtYW55LndobCIsImRpZ2VzdCI6eyJzaGEyNTYiOiIwM2E0MTVhNWJkYTNjYzY3YjYyN2YwYjU0M2RhMGIxNDlhNmJhNmI5MWQzM2M5MzkzMjBkNDU5ZTA0ZGE0NmFlIn19LHsibmFtZSI6Ii4vYXdzX2xhbWJkYV9wb3dlcnRvb2xzLTMuMTkuMWExNi50YXIuZ3oiLCJkaWdlc3QiOnsic2hhMjU2IjoiYjlhNmQ4M2QwYzhhOTlmMDQ0YzU1YjY5ZjUzNzZmZjE5MjNkMGZkYWE0NzhjZTA5YjNmMzY2ZmE1NzI1OTViMiJ9fV0sInByZWRpY2F0ZSI6eyJidWlsZGVyIjp7ImlkIjoiaHR0cHM6Ly9naXRodWIuY29tL3Nsc2EtZnJhbWV3b3JrL3Nsc2EtZ2l0aHViLWdlbmVyYXRvci8uZ2l0aHViL3dvcmtmbG93cy9nZW5lcmF0b3JfZ2VuZXJpY19zbHNhMy55bWxAcmVmcy90YWdzL3YyLjEuMCJ9LCJidWlsZFR5cGUiOiJodHRwczovL2dpdGh1Yi5jb20vc2xzYS1mcmFtZXdvcmsvc2xzYS1naXRodWItZ2VuZXJhdG9yL2dlbmVyaWNAdjEiLCJpbnZvY2F0aW9uIjp7ImNvbmZpZ1NvdXJjZSI6eyJ1cmkiOiJnaXQraHR0cHM6Ly9naXRodWIuY29tL2F3cy1wb3dlcnRvb2xzL3Bvd2VydG9vbHMtbGFtYmRhLXB5dGhvbkByZWZzL2hlYWRzL2RldmVsb3AiLCJkaWdlc3QiOnsic2hhMSI6IjE0YzBhYThkMGYyZTVhYjg3YjQ1NWNlYmMxMjExYjE5ZmMwYjI3YzkifSwiZW50cnlQb2ludCI6Ii5naXRodWIvd29ya2Zsb3dzL3ByZS1yZWxlYXNlLnltbCJ9LCJwYXJhbWV0ZXJzIjp7InZhcnMiOnt9fSwiZW52aXJvbm1lbnQiOnsiZ2l0aHViX2FjdG9yIjoibGVhbmRyb2RhbWFzY2VuYSIsImdpdGh1Yl9hY3Rvcl9pZCI6IjQyOTUxNzMiLCJnaXRodWJfYmFzZV9yZWYiOiIiLCJnaXRodWJfZXZlbnRfbmFtZSI6InNjaGVkdWxlIiwiZ2l0aHViX2V2ZW50X3BheWxvYWQiOnsiZW50ZXJwcmlzZSI6eyJhdmF0YXJfdXJsIjoiaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS9iLzEyOTA/dj00IiwiY3JlYXRlZF9hdCI6IjIwMTktMTEtMTNUMTg6MDU6NDFaIiwiZGVzY3JpcHRpb24iOiIiLCJodG1sX3VybCI6Imh0dHBzOi8vZ2l0aHViLmNvbS9lbnRlcnByaXNlcy9hbWF6b24iLCJpZCI6MTI5MCwibmFtZSI6IkFtYXpvbiIsIm5vZGVfaWQiOiJNREV3T2tWdWRHVnljSEpwYzJVeE1qa3ciLCJzbHVnIjoiYW1hem9uIiwidXBkYXRlZF9hdCI6IjIwMjUtMDgtMTJUMjA6NTk6MTRaIiwid2Vic2l0ZV91cmwiOiJodHRwczovL3d3dy5hbWF6b24uY29tLyJ9LCJvcmdhbml6YXRpb24iOnsiYXZhdGFyX3VybCI6Imh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xMjkxMjc2Mzg/dj00IiwiZGVzY3JpcHRpb24iOiIiLCJldmVudHNfdXJsIjoiaHR0cHM6Ly9hcGkuZ2l0aHViLmNvbS9vcmdzL2F3cy1wb3dlcnRvb2xzL2V2ZW50cyIsImhvb2tzX3VybCI6Imh0dHBzOi8vYXBpLmdpdGh1Yi5jb20vb3Jncy9hd3MtcG93ZXJ0b29scy9ob29rcyIsImlkIjoxMjkxMjc2MzgsImlzc3Vlc191cmwiOiJodHRwczovL2FwaS5naXRodWIuY29tL29yZ3MvYXdzLXBvd2VydG9vbHMvaXNzdWVzIiwibG9naW4iOiJhd3MtcG93ZXJ0b29scyIsIm1lbWJlcnNfdXJsIjoiaHR0cHM6Ly9hcGkuZ2l0aHViLmNvbS9vcmdzL2F3cy1wb3dlcnRvb2xzL21lbWJlcnN7L21lbWJlcn0iLCJub2RlX2lkIjoiT19rZ0RPQjdKVTFnIiwicHVibGljX21lbWJlcnNfdXJsIjoiaHR0cHM6Ly9hcGkuZ2l0aHViLmNvbS9vcmdzL2F3cy1wb3dlcnRvb2xzL3B1YmxpY19tZW1iZXJzey9tZW1iZXJ9IiwicmVwb3NfdXJsIjoiaHR0cHM6Ly9hcGkuZ2l0aHViLmNvbS9vcmdzL2F3cy1wb3dlcnRvb2xzL3JlcG9zIiwidXJsIjoiaHR0cHM6Ly9hcGkuZ2l0aHViLmNvbS9vcmdzL2F3cy1wb3dlcnRvb2xzIn0sInJlcG9zaXRvcnkiOnsiYWxsb3dfZm9ya2luZyI6dHJ1ZSwiYXJjaGl2ZV91cmwiOiJodHRwczovL2FwaS5naXRodWIuY29tL3JlcG9zL2F3cy1wb3dlcnRvb2xzL3Bvd2VydG9vbHMtbGFtYmRhLXB5dGhvbi97YXJjaGl2ZV9mb3JtYXR9ey9yZWZ9IiwiYXJjaGl2ZWQiOmZhbHNlLCJhc3NpZ25lZXNfdXJsIjoiaHR0cHM6Ly9hcGkuZ2l0aHViLmNvbS9yZXBvcy9hd3MtcG93ZXJ0b29scy9wb3dlcnRvb2xzLWxhbWJkYS1weXRob24vYXNzaWduZWVzey91c2VyfSIsImJsb2JzX3VybCI6Imh0dHBzOi8vYXBpLmdpdGh1Yi5jb20vcmVwb3MvYXdzLXBvd2VydG9vbHMvcG93ZXJ0b29scy1sYW1iZGEtcHl0aG9uL2dpdC9ibG9ic3svc2hhfSIsImJyYW5jaGVzX3VybCI6Imh0dHBzOi8vYXBpLmdpdGh1Yi5jb20vcmVwb3MvYXdzLXBvd2VydG9vbHMvcG93ZXJ0b29scy1sYW1iZGEtcHl0aG9uL2JyYW5jaGVzey9icmFuY2h9IiwiY2xvbmVfdXJsIjoiaHR0cHM6Ly9naXRodWIuY29tL2F3cy1wb3dlcnRvb2xzL3Bvd2VydG9vbHMtbGFtYmRhLXB5dGhvbi5naXQiLCJjb2xsYWJvcmF0b3JzX3VybCI6Imh0dHBzOi8vYXBpLmdpdGh1Yi5jb20vcmVwb3MvYXdzLXBvd2VydG9vbHMvcG93ZXJ0b29scy1sYW1iZGEtcHl0aG9uL2NvbGxhYm9yYXRvcnN7L2NvbGxhYm9yYXRvcn0iLCJjb21tZW50c191cmwiOiJodHRwczovL2FwaS5naXRodWIuY29tL3JlcG9zL2F3cy1wb3dlcnRvb2xzL3Bvd2VydG9vbHMtbGFtYmRhLXB5dGhvbi9jb21tZW50c3svbnVtYmVyfSIsImNvbW1pdHNfdXJsIjoiaHR0cHM6Ly9hcGkuZ2l0aHViLmNvbS9yZXBvcy9hd3MtcG93ZXJ0b29scy9wb3dlcnRvb2xzLWxhbWJkYS1weXRob24vY29tbWl0c3svc2hhfSIsImNvbXBhcmVfdXJsIjoiaHR0cHM6Ly9hcGkuZ2l0aHViLmNvbS9yZXBvcy9hd3MtcG93ZXJ0b29scy9wb3dlcnRvb2xzLWxhbWJkYS1weXRob24vY29tcGFyZS97YmFzZX0uLi57aGVhZH0iLCJjb250ZW50c191cmwiOiJodHRwczovL2FwaS5naXRodWIuY29tL3JlcG9zL2F3cy1wb3dlcnRvb2xzL3Bvd2VydG9vbHMtbGFtYmRhLXB5dGhvbi9jb250ZW50cy97K3BhdGh9IiwiY29udHJpYnV0b3JzX3VybCI6Imh0dHBzOi8vYXBpLmdpdGh1Yi5jb20vcmVwb3MvYXdzLXBvd2VydG9vbHMvcG93ZXJ0b29scy1sYW1iZGEtcHl0aG9uL2NvbnRyaWJ1dG9ycyIsImNyZWF0ZWRfYXQiOiIyMDE5LTExLTE1VDEyOjI2OjEyWiIsImN1c3RvbV9wcm9wZXJ0aWVzIjp7InN0YWdpbmciOiJmYWxzZSIsInZpc2liaWxpdHktYWxsb3ctaW50ZXJuYWwiOiJmYWxzZSIsInZpc2liaWxpdHktYWxsb3ctcHJpdmF0ZSI6ImZhbHNlIiwidmlzaWJpbGl0eS1hbGxvdy1wdWJsaWMiOiJ0cnVlIn0sImRlZmF1bHRfYnJhbmNoIjoiZGV2ZWxvcCIsImRlcGxveW1lbnRzX3VybCI6Imh0dHBzOi8vYXBpLmdpdGh1Yi5jb20vcmVwb3MvYXdzLXBvd2VydG9vbHMvcG93ZXJ0b29scy1sYW1iZGEtcHl0aG9uL2RlcGxveW1lbnRzIiwiZGVzY3JpcHRpb24iOiJBIGRldmVsb3BlciB0b29sa2l0IHRvIGltcGxlbWVudCBTZXJ2ZXJsZXNzIGJlc3QgcHJhY3RpY2VzIGFuZCBpbmNyZWFzZSBkZXZlbG9wZXIgdmVsb2NpdHkuIiwiZGlzYWJsZWQiOmZhbHNlLCJkb3dubG9hZHNfdXJsIjoiaHR0cHM6Ly9hcGkuZ2l0aHViLmNvbS9yZXBvcy9hd3MtcG93ZXJ0b29scy9wb3dlcnRvb2xzLWxhbWJkYS1weXRob24vZG93bmxvYWRzIiwiZXZlbnRzX3VybCI6Imh0dHBzOi8vYXBpLmdpdGh1Yi5jb20vcmVwb3MvYXdzLXBvd2VydG9vbHMvcG93ZXJ0b29scy1sYW1iZGEtcHl0aG9uL2V2ZW50cyIsImZvcmsiOmZhbHNlLCJmb3JrcyI6NDUxLCJmb3Jrc19jb3VudCI6NDUxLCJmb3Jrc191cmwiOiJodHRwczovL2FwaS5naXRodWIuY29tL3JlcG9zL2F3cy1wb3dlcnRvb2xzL3Bvd2VydG9vbHMtbGFtYmRhLXB5dGhvbi9mb3JrcyIsImZ1bGxfbmFtZSI6ImF3cy1wb3dlcnRvb2xzL3Bvd2VydG9vbHMtbGFtYmRhLXB5dGhvbiIsImdpdF9jb21taXRzX3VybCI6Imh0dHBzOi8vYXBpLmdpdGh1Yi5jb20vcmVwb3MvYXdzLXBvd2VydG9vbHMvcG93ZXJ0b29scy1sYW1iZGEtcHl0aG9uL2dpdC9jb21taXRzey9zaGF9IiwiZ2l0X3JlZnNfdXJsIjoiaHR0cHM6Ly9hcGkuZ2l0aHViLmNvbS9yZXBvcy9hd3MtcG93ZXJ0b29scy9wb3dlcnRvb2xzLWxhbWJkYS1weXRob24vZ2l0L3JlZnN7L3NoYX0iLCJnaXRfdGFnc191cmwiOiJodHRwczovL2FwaS5naXRodWIuY29tL3JlcG9zL2F3cy1wb3dlcnRvb2xzL3Bvd2VydG9vbHMtbGFtYmRhLXB5dGhvbi9naXQvdGFnc3svc2hhfSIsImdpdF91cmwiOiJnaXQ6Ly9naXRodWIuY29tL2F3cy1wb3dlcnRvb2xzL3Bvd2VydG9vbHMtbGFtYmRhLXB5dGhvbi5naXQiLCJoYXNfZGlzY3Vzc2lvbnMiOnRydWUsImhhc19kb3dubG9hZHMiOnRydWUsImhhc19pc3N1ZXMiOnRydWUsImhhc19wYWdlcyI6ZmFsc2UsImhhc19wcm9qZWN0cyI6dHJ1ZSwiaGFzX3dpa2kiOmZhbHNlLCJob21lcGFnZSI6Imh0dHBzOi8vZG9jcy5wb3dlcnRvb2xzLmF3cy5kZXYvbGFtYmRhL3B5dGhvbi9sYXRlc3QvIiwiaG9va3NfdXJsIjoiaHR0cHM6Ly9hcGkuZ2l0aHViLmNvbS9yZXBvcy9hd3MtcG93ZXJ0b29scy9wb3dlcnRvb2xzLWxhbWJkYS1weXRob24vaG9va3MiLCJodG1sX3VybCI6Imh0dHBzOi8vZ2l0aHViLmNvbS9hd3MtcG93ZXJ0b29scy9wb3dlcnRvb2xzLWxhbWJkYS1weXRob24iLCJpZCI6MjIxOTE5Mzc5LCJpc190ZW1wbGF0ZSI6ZmFsc2UsImlzc3VlX2NvbW1lbnRfdXJsIjoiaHR0cHM6Ly9hcGkuZ2l0aHViLmNvbS9yZXBvcy9hd3MtcG93ZXJ0b29scy9wb3dlcnRvb2xzLWxhbWJkYS1weXRob24vaXNzdWVzL2NvbW1lbnRzey9udW1iZXJ9IiwiaXNzdWVfZXZlbnRzX3VybCI6Imh0dHBzOi8vYXBpLmdpdGh1Yi5jb20vcmVwb3MvYXdzLXBvd2VydG9vbHMvcG93ZXJ0b29scy1sYW1iZGEtcHl0aG9uL2lzc3Vlcy9ldmVudHN7L251bWJlcn0iLCJpc3N1ZXNfdXJsIjoiaHR0cHM6Ly9hcGkuZ2l0aHViLmNvbS9yZXBvcy9hd3MtcG93ZXJ0b29scy9wb3dlcnRvb2xzLWxhbWJkYS1weXRob24vaXNzdWVzey9udW1iZXJ9Iiwia2V5c191cmwiOiJodHRwczovL2FwaS5naXRodWIuY29tL3JlcG9zL2F3cy1wb3dlcnRvb2xzL3Bvd2VydG9vbHMtbGFtYmRhLXB5dGhvbi9rZXlzey9rZXlfaWR9IiwibGFiZWxzX3VybCI6Imh0dHBzOi8vYXBpLmdpdGh1Yi5jb20vcmVwb3MvYXdzLXBvd2VydG9vbHMvcG93ZXJ0b29scy1sYW1iZGEtcHl0aG9uL2xhYmVsc3svbmFtZX0iLCJsYW5ndWFnZSI6IlB5dGhvbiIsImxhbmd1YWdlc191cmwiOiJodHRwczovL2FwaS5naXRodWIuY29tL3JlcG9zL2F3cy1wb3dlcnRvb2xzL3Bvd2VydG9vbHMtbGFtYmRhLXB5dGhvbi9sYW5ndWFnZXMiLCJsaWNlbnNlIjp7ImtleSI6Im1pdC0wIiwibmFtZSI6Ik1JVCBObyBBdHRyaWJ1dGlvbiIsIm5vZGVfaWQiOiJNRGM2VEdsalpXNXpaVFF4Iiwic3BkeF9pZCI6Ik1JVC0wIiwidXJsIjoiaHR0cHM6Ly9hcGkuZ2l0aHViLmNvbS9saWNlbnNlcy9taXQtMCJ9LCJtZXJnZXNfdXJsIjoiaHR0cHM6Ly9hcGkuZ2l0aHViLmNvbS9yZXBvcy9hd3MtcG93ZXJ0b29scy9wb3dlcnRvb2xzLWxhbWJkYS1weXRob24vbWVyZ2VzIiwibWlsZXN0b25lc191cmwiOiJodHRwczovL2FwaS5naXRodWIuY29tL3JlcG9zL2F3cy1wb3dlcnRvb2xzL3Bvd2VydG9vbHMtbGFtYmRhLXB5dGhvbi9taWxlc3RvbmVzey9udW1iZXJ9IiwibWlycm9yX3VybCI6bnVsbCwibmFtZSI6InBvd2VydG9vbHMtbGFtYmRhLXB5dGhvbiIsIm5vZGVfaWQiOiJNREV3T2xKbGNHOXphWFJ2Y25reU1qRTVNVGt6TnprPSIsIm5vdGlmaWNhdGlvbnNfdXJsIjoiaHR0cHM6Ly9hcGkuZ2l0aHViLmNvbS9yZXBvcy9hd3MtcG93ZXJ0b29scy9wb3dlcnRvb2xzLWxhbWJkYS1weXRob24vbm90aWZpY2F0aW9uc3s/c2luY2UsYWxsLHBhcnRpY2lwYXRpbmd9Iiwib3Blbl9pc3N1ZXMiOjU1LCJvcGVuX2lzc3Vlc19jb3VudCI6NTUsIm93bmVyIjp7ImF2YXRhcl91cmwiOiJodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTI5MTI3NjM4P3Y9NCIsImV2ZW50c191cmwiOiJodHRwczovL2FwaS5naXRodWIuY29tL3VzZXJzL2F3cy1wb3dlcnRvb2xzL2V2ZW50c3svcHJpdmFjeX0iLCJmb2xsb3dlcnNfdXJsIjoiaHR0cHM6Ly9hcGkuZ2l0aHViLmNvbS91c2Vycy9hd3MtcG93ZXJ0b29scy9mb2xsb3dlcnMiLCJmb2xsb3dpbmdfdXJsIjoiaHR0cHM6Ly9hcGkuZ2l0aHViLmNvbS91c2Vycy9hd3MtcG93ZXJ0b29scy9mb2xsb3dpbmd7L290aGVyX3VzZXJ9IiwiZ2lzdHNfdXJsIjoiaHR0cHM6Ly9hcGkuZ2l0aHViLmNvbS91c2Vycy9hd3MtcG93ZXJ0b29scy9naXN0c3svZ2lzdF9pZH0iLCJncmF2YXRhcl9pZCI6IiIsImh0bWxfdXJsIjoiaHR0cHM6Ly9naXRodWIuY29tL2F3cy1wb3dlcnRvb2xzIiwiaWQiOjEyOTEyNzYzOCwibG9naW4iOiJhd3MtcG93ZXJ0b29scyIsIm5vZGVfaWQiOiJPX2tnRE9CN0pVMWciLCJvcmdhbml6YXRpb25zX3VybCI6Imh0dHBzOi8vYXBpLmdpdGh1Yi5jb20vdXNlcnMvYXdzLXBvd2VydG9vbHMvb3JncyIsInJlY2VpdmVkX2V2ZW50c191cmwiOiJodHRwczovL2FwaS5naXRodWIuY29tL3VzZXJzL2F3cy1wb3dlcnRvb2xzL3JlY2VpdmVkX2V2ZW50cyIsInJlcG9zX3VybCI6Imh0dHBzOi8vYXBpLmdpdGh1Yi5jb20vdXNlcnMvYXdzLXBvd2VydG9vbHMvcmVwb3MiLCJzaXRlX2FkbWluIjpmYWxzZSwic3RhcnJlZF91cmwiOiJodHRwczovL2FwaS5naXRodWIuY29tL3VzZXJzL2F3cy1wb3dlcnRvb2xzL3N0YXJyZWR7L293bmVyfXsvcmVwb30iLCJzdWJzY3JpcHRpb25zX3VybCI6Imh0dHBzOi8vYXBpLmdpdGh1Yi5jb20vdXNlcnMvYXdzLXBvd2VydG9vbHMvc3Vic2NyaXB0aW9ucyIsInR5cGUiOiJPcmdhbml6YXRpb24iLCJ1cmwiOiJodHRwczovL2FwaS5naXRodWIuY29tL3VzZXJzL2F3cy1wb3dlcnRvb2xzIiwidXNlcl92aWV3X3R5cGUiOiJwdWJsaWMifSwicHJpdmF0ZSI6ZmFsc2UsInB1bGxzX3VybCI6Imh0dHBzOi8vYXBpLmdpdGh1Yi5jb20vcmVwb3MvYXdzLXBvd2VydG9vbHMvcG93ZXJ0b29scy1sYW1iZGEtcHl0aG9uL3B1bGxzey9udW1iZXJ9IiwicHVzaGVkX2F0IjoiMjAyNS0wOS0wOFQyMDo1Nzo1NFoiLCJyZWxlYXNlc191cmwiOiJodHRwczovL2FwaS5naXRodWIuY29tL3JlcG9zL2F3cy1wb3dlcnRvb2xzL3Bvd2VydG9vbHMtbGFtYmRhLXB5dGhvbi9yZWxlYXNlc3svaWR9Iiwic2l6ZSI6MTMxMTk4LCJzc2hfdXJsIjoiZ2l0QGdpdGh1Yi5jb206YXdzLXBvd2VydG9vbHMvcG93ZXJ0b29scy1sYW1iZGEtcHl0aG9uLmdpdCIsInN0YXJnYXplcnNfY291bnQiOjMxMzgsInN0YXJnYXplcnNfdXJsIjoiaHR0cHM6Ly9hcGkuZ2l0aHViLmNvbS9yZXBvcy9hd3MtcG93ZXJ0b29scy9wb3dlcnRvb2xzLWxhbWJkYS1weXRob24vc3RhcmdhemVycyIsInN0YXR1c2VzX3VybCI6Imh0dHBzOi8vYXBpLmdpdGh1Yi5jb20vcmVwb3MvYXdzLXBvd2VydG9vbHMvcG93ZXJ0b29scy1sYW1iZGEtcHl0aG9uL3N0YXR1c2VzL3tzaGF9Iiwic3Vic2NyaWJlcnNfdXJsIjoiaHR0cHM6Ly9hcGkuZ2l0aHViLmNvbS9yZXBvcy9hd3MtcG93ZXJ0b29scy9wb3dlcnRvb2xzLWxhbWJkYS1weXRob24vc3Vic2NyaWJlcnMiLCJzdWJzY3JpcHRpb25fdXJsIjoiaHR0cHM6Ly9hcGkuZ2l0aHViLmNvbS9yZXBvcy9hd3MtcG93ZXJ0b29scy9wb3dlcnRvb2xzLWxhbWJkYS1weXRob24vc3Vic2NyaXB0aW9uIiwic3ZuX3VybCI6Imh0dHBzOi8vZ2l0aHViLmNvbS9hd3MtcG93ZXJ0b29scy9wb3dlcnRvb2xzLWxhbWJkYS1weXRob24iLCJ0YWdzX3VybCI6Imh0dHBzOi8vYXBpLmdpdGh1Yi5jb20vcmVwb3MvYXdzLXBvd2VydG9vbHMvcG93ZXJ0b29scy1sYW1iZGEtcHl0aG9uL3RhZ3MiLCJ0ZWFtc191cmwiOiJodHRwczovL2FwaS5naXRodWIuY29tL3JlcG9zL2F3cy1wb3dlcnRvb2xzL3Bvd2VydG9vbHMtbGFtYmRhLXB5dGhvbi90ZWFtcyIsInRvcGljcyI6WyJhd3MiLCJhd3MtbGFtYmRhIiwibGFtYmRhIiwicHl0aG9uIiwic2VydmVybGVzcyJdLCJ0cmVlc191cmwiOiJodHRwczovL2FwaS5naXRodWIuY29tL3JlcG9zL2F3cy1wb3dlcnRvb2xzL3Bvd2VydG9vbHMtbGFtYmRhLXB5dGhvbi9naXQvdHJlZXN7L3NoYX0iLCJ1cGRhdGVkX2F0IjoiMjAyNS0wOS0wOFQxNjo1OTozMloiLCJ1cmwiOiJodHRwczovL2FwaS5naXRodWIuY29tL3JlcG9zL2F3cy1wb3dlcnRvb2xzL3Bvd2VydG9vbHMtbGFtYmRhLXB5dGhvbiIsInZpc2liaWxpdHkiOiJwdWJsaWMiLCJ3YXRjaGVycyI6MzEzOCwid2F0Y2hlcnNfY291bnQiOjMxMzgsIndlYl9jb21taXRfc2lnbm9mZl9yZXF1aXJlZCI6dHJ1ZX0sInNjaGVkdWxlIjoiMCA4ICogKiAxLTUiLCJ3b3JrZmxvdyI6Ii5naXRodWIvd29ya2Zsb3dzL3ByZS1yZWxlYXNlLnltbCJ9LCJnaXRodWJfaGVhZF9yZWYiOiIiLCJnaXRodWJfcmVmIjoicmVmcy9oZWFkcy9kZXZlbG9wIiwiZ2l0aHViX3JlZl90eXBlIjoiYnJhbmNoIiwiZ2l0aHViX3JlcG9zaXRvcnlfaWQiOiIyMjE5MTkzNzkiLCJnaXRodWJfcmVwb3NpdG9yeV9vd25lciI6ImF3cy1wb3dlcnRvb2xzIiwiZ2l0aHViX3JlcG9zaXRvcnlfb3duZXJfaWQiOiIxMjkxMjc2MzgiLCJnaXRodWJfcnVuX2F0dGVtcHQiOiIxIiwiZ2l0aHViX3J1bl9pZCI6IjE3NTc1OTI4Mjc3IiwiZ2l0aHViX3J1bl9udW1iZXIiOiIzMjQiLCJnaXRodWJfc2hhMSI6IjE0YzBhYThkMGYyZTVhYjg3YjQ1NWNlYmMxMjExYjE5ZmMwYjI3YzkifX0sIm1ldGFkYXRhIjp7ImJ1aWxkSW52b2NhdGlvbklEIjoiMTc1NzU5MjgyNzctMSIsImNvbXBsZXRlbmVzcyI6eyJwYXJhbWV0ZXJzIjp0cnVlLCJlbnZpcm9ubWVudCI6ZmFsc2UsIm1hdGVyaWFscyI6ZmFsc2V9LCJyZXByb2R1Y2libGUiOmZhbHNlfSwibWF0ZXJpYWxzIjpbeyJ1cmkiOiJnaXQraHR0cHM6Ly9naXRodWIuY29tL2F3cy1wb3dlcnRvb2xzL3Bvd2VydG9vbHMtbGFtYmRhLXB5dGhvbkByZWZzL2hlYWRzL2RldmVsb3AiLCJkaWdlc3QiOnsic2hhMSI6IjE0YzBhYThkMGYyZTVhYjg3YjQ1NWNlYmMxMjExYjE5ZmMwYjI3YzkifX1dfX0=", "payloadType":"application/vnd.in-toto+json", "signatures":[{"sig":"MEYCIQCaqf9bU7CTEoonH0oCcpE5f0b2MZS+CspvMp1g7gG2QwIhAKpVqMqiCHQ5XtsBPipoAJ4z7E/JktAPWKqEElDrcwam"}]}} \ No newline at end of file diff --git a/provenance/3.19.1a2/multiple.intoto.jsonl b/provenance/3.19.1a2/multiple.intoto.jsonl new file mode 100644 index 00000000000..ec1e7505fa0 --- /dev/null +++ b/provenance/3.19.1a2/multiple.intoto.jsonl @@ -0,0 +1 @@ +{"mediaType":"application/vnd.dev.sigstore.bundle.v0.3+json", "verificationMaterial":{"certificate":{"rawBytes":"MIIHZTCCBuugAwIBAgIUUbjnNcfJBwjT8d7nFabyOOk/HXAwCgYIKoZIzj0EAwMwNzEVMBMGA1UEChMMc2lnc3RvcmUuZGV2MR4wHAYDVQQDExVzaWdzdG9yZS1pbnRlcm1lZGlhdGUwHhcNMjUwODE4MDgwODIxWhcNMjUwODE4MDgxODIxWjAAMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEaCi5Jd7SMVQSDMgYYnJ/GhvWDW+F+fD9mNXWFrznJ7/yALoy77DyxBF+1UoklEwK3z/K4i1z77kLxkhtw46OJqOCBgowggYGMA4GA1UdDwEB/wQEAwIHgDATBgNVHSUEDDAKBggrBgEFBQcDAzAdBgNVHQ4EFgQUHTv0bn5MAiSoecCV+zM2w8wzNMowHwYDVR0jBBgwFoAU39Ppz1YkEZb5qNjpKFWixi4YZD8wgYQGA1UdEQEB/wR6MHiGdmh0dHBzOi8vZ2l0aHViLmNvbS9zbHNhLWZyYW1ld29yay9zbHNhLWdpdGh1Yi1nZW5lcmF0b3IvLmdpdGh1Yi93b3JrZmxvd3MvZ2VuZXJhdG9yX2dlbmVyaWNfc2xzYTMueW1sQHJlZnMvdGFncy92Mi4xLjAwOQYKKwYBBAGDvzABAQQraHR0cHM6Ly90b2tlbi5hY3Rpb25zLmdpdGh1YnVzZXJjb250ZW50LmNvbTAWBgorBgEEAYO/MAECBAhzY2hlZHVsZTA2BgorBgEEAYO/MAEDBCg1YTRiMmEwMzBlZmEwODI3NzdhNzRiOTEwZGUwYzQyZmM2Yzk0MDU5MBkGCisGAQQBg78wAQQEC1ByZS1SZWxlYXNlMDUGCisGAQQBg78wAQUEJ2F3cy1wb3dlcnRvb2xzL3Bvd2VydG9vbHMtbGFtYmRhLXB5dGhvbjAgBgorBgEEAYO/MAEGBBJyZWZzL2hlYWRzL2RldmVsb3AwOwYKKwYBBAGDvzABCAQtDCtodHRwczovL3Rva2VuLmFjdGlvbnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tMIGGBgorBgEEAYO/MAEJBHgMdmh0dHBzOi8vZ2l0aHViLmNvbS9zbHNhLWZyYW1ld29yay9zbHNhLWdpdGh1Yi1nZW5lcmF0b3IvLmdpdGh1Yi93b3JrZmxvd3MvZ2VuZXJhdG9yX2dlbmVyaWNfc2xzYTMueW1sQHJlZnMvdGFncy92Mi4xLjAwOAYKKwYBBAGDvzABCgQqDChmN2RkOGM1NGMyMDY3YmFmYzEyY2E3YTU1NTk1ZDVlZTliNzUyMDRhMB0GCisGAQQBg78wAQsEDwwNZ2l0aHViLWhvc3RlZDBKBgorBgEEAYO/MAEMBDwMOmh0dHBzOi8vZ2l0aHViLmNvbS9hd3MtcG93ZXJ0b29scy9wb3dlcnRvb2xzLWxhbWJkYS1weXRob24wOAYKKwYBBAGDvzABDQQqDCg1YTRiMmEwMzBlZmEwODI3NzdhNzRiOTEwZGUwYzQyZmM2Yzk0MDU5MCIGCisGAQQBg78wAQ4EFAwScmVmcy9oZWFkcy9kZXZlbG9wMBkGCisGAQQBg78wAQ8ECwwJMjIxOTE5Mzc5MDEGCisGAQQBg78wARAEIwwhaHR0cHM6Ly9naXRodWIuY29tL2F3cy1wb3dlcnRvb2xzMBkGCisGAQQBg78wAREECwwJMTI5MTI3NjM4MH8GCisGAQQBg78wARIEcQxvaHR0cHM6Ly9naXRodWIuY29tL2F3cy1wb3dlcnRvb2xzL3Bvd2VydG9vbHMtbGFtYmRhLXB5dGhvbi8uZ2l0aHViL3dvcmtmbG93cy9wcmUtcmVsZWFzZS55bWxAcmVmcy9oZWFkcy9kZXZlbG9wMDgGCisGAQQBg78wARMEKgwoNWE0YjJhMDMwZWZhMDgyNzc3YTc0YjkxMGRlMGM0MmZjNmM5NDA1OTAYBgorBgEEAYO/MAEUBAoMCHNjaGVkdWxlMG4GCisGAQQBg78wARUEYAxeaHR0cHM6Ly9naXRodWIuY29tL2F3cy1wb3dlcnRvb2xzL3Bvd2VydG9vbHMtbGFtYmRhLXB5dGhvbi9hY3Rpb25zL3J1bnMvMTcwMzQ3MDYyMDkvYXR0ZW1wdHMvMTAWBgorBgEEAYO/MAEWBAgMBnB1YmxpYzCBiQYKKwYBBAHWeQIEAgR7BHkAdwB1AN09MGrGxxEyYxkeHJlnNwKiSl643jyt/4eKcoAvKe6OAAABmLw44g4AAAQDAEYwRAIgGZmlzypYPmnnLItmMojNs2Ja7JKMkJgTcs1XWkvo+yoCIHO+CLDXHURtQtHp5DxWcgQPGxE21ttndJFT/PxcCaplMAoGCCqGSM49BAMDA2gAMGUCMGntyJGiZxeNIxn6CVY+cz8cOE5ehFx591DfpxzY+owMVxPr35SgjPbU/ae46BxUFgIxAP4QSy35Li55qKcqjuI7sz2v60PqCo0JXZ2Vffrsp54ikdtgIGE3vlC1ipZPPJD14Q=="}, "tlogEntries":[{"logIndex":"405787312", "logId":{"keyId":"wNI9atQGlz+VWfO6LRygH4QUfY/8W4RFwiT5i5WRgB0="}, "kindVersion":{"kind":"dsse", "version":"0.0.1"}, "integratedTime":"1755504501", "inclusionPromise":{"signedEntryTimestamp":"MEYCIQCgnhJUGxTn858Zjd/WFYJaori8V0CTzJJ1KmetaVTOKAIhANyjmK8GCgEl9ZQfmYtkzVDoxaIsnZv169PelmBRHdil"}, "inclusionProof":{"logIndex":"283883050", "rootHash":"H8ulrLNdkyLw3Ls1TiHTwUnLertKpIIKwisHxhP0M60=", "treeSize":"283883060", "hashes":["1Ztxu9Spo3M8/Y5luJp99ca1+EbOobh/FIALIPwW4M0=", "SEf4crwmGBEUuhIk9ees9drlYWHloY5d53oyUKZY+v0=", "Ri9hJJHOK0J2PaLKiF+LJ7xYC7rAyC9651NuSxgoD2A=", "UCDGHo7SJBrRff0ElYmkgmq/xA6dxr2QMtxrxcRR5gs=", "Ewyuujoz1cXaOQsBydsOk7f41JMYNLEfv9tugSMIHWM=", "iye5Qh8MfSwSM/oMQ9PeoBA96/ZTXiWuZytmELJoJew=", "TMNuvXohxo5/5IFk/j97mUbS+foM8DtebilKlKZyPF0=", "CcfXsGS3Nu+AltKDZNjuu3+vq4z+7M31EFyXoiMRkis=", "X2uN2r66+9mbXIZxqWoA7Qq3hLl5MGRxuyBfw+bqtn0=", "iDFmfliKg8sxJeDwWfQ9DQizTngUDN2q5qq9Z8N6Pk0=", "hhco2RsHrSeYiIg/ZNbjy/QcxbXD623Y6BYH+hsLrmw=", "Ze1fnkfrbfF9P1AmyoBJRh3wmX3STQlTNjN+Ccq3EhU=", "VGF/uNkKHs82K5Q7JgnFZO8lV7yENPgMqkXFJYwz0rA=", "ChDuCcrYwl3PpANUGGiUPCLIkSTQ0bX/dhRI0KEJcQw=", "G1uPcbMdJ7ywkHYrUGpR8ZkXilFE3XqUfvDku61F240=", "qH2A4VgQNr7EAj9kKnkGDZF8wecM7djS9oMS3WRmzWU=", "JcXtV/Vknnm/YFTjmAz4qSTKDxJd8SiZ3GQF+NqvYlA=", "vS7O4ozHIQZJWBiov+mkpI27GE8zAmVCEkRcP3NDyNE="], "checkpoint":{"envelope":"rekor.sigstore.dev - 1193050959916656506\n283883060\nH8ulrLNdkyLw3Ls1TiHTwUnLertKpIIKwisHxhP0M60=\n\n— rekor.sigstore.dev wNI9ajBGAiEA4i1nrAnR37WvowsWNlJvRFm2Hqk/6VBUxNdERZkUSmwCIQDPFPuqCzsnzTjKceFAEIXIjqmdQo0gLqQJR1eZKYIgQQ==\n"}}, "canonicalizedBody":"eyJhcGlWZXJzaW9uIjoiMC4wLjEiLCJraW5kIjoiZHNzZSIsInNwZWMiOnsiZW52ZWxvcGVIYXNoIjp7ImFsZ29yaXRobSI6InNoYTI1NiIsInZhbHVlIjoiMWUyOTI3YjJjZTM0NmYyZmUwMjEwZTI4YTZjMzc2YTk3MjI0NGQ2NDRjYWMxYzYwNmRkOWY5ZjFjZDIyZWVkZSJ9LCJwYXlsb2FkSGFzaCI6eyJhbGdvcml0aG0iOiJzaGEyNTYiLCJ2YWx1ZSI6IjcwYWRlYTU4Mzc2YTNiZmIzMDVmYTBiNWY2NWI3NGUwYWE1Y2RmZGIzNjI5NjA2MjdkOWFmYmUyNzljNTYyZWIifSwic2lnbmF0dXJlcyI6W3sic2lnbmF0dXJlIjoiTUVVQ0lGK2swYldwL2dLR3duOHJuTDI1QTZ4Q1BCV0lLd1ZmNHJwMFBQc3FaT2pqQWlFQXhxdWc1YkdLVXFXaTJXUVYvWW02dVR6MXMrZi9BQzBiU2ttODB3QnZUWU09IiwidmVyaWZpZXIiOiJMUzB0TFMxQ1JVZEpUaUJEUlZKVVNVWkpRMEZVUlMwdExTMHRDazFKU1VoYVZFTkRRblYxWjBGM1NVSkJaMGxWVldKcWJrNWpaa3BDZDJwVU9HUTNia1poWW5sUFQyc3ZTRmhCZDBObldVbExiMXBKZW1vd1JVRjNUWGNLVG5wRlZrMUNUVWRCTVZWRlEyaE5UV015Ykc1ak0xSjJZMjFWZFZwSFZqSk5ValIzU0VGWlJGWlJVVVJGZUZaNllWZGtlbVJIT1hsYVV6RndZbTVTYkFwamJURnNXa2RzYUdSSFZYZElhR05PVFdwVmQwOUVSVFJOUkdkM1QwUkplRmRvWTA1TmFsVjNUMFJGTkUxRVozaFBSRWw0VjJwQlFVMUdhM2RGZDFsSUNrdHZXa2w2YWpCRFFWRlpTVXR2V2tsNmFqQkVRVkZqUkZGblFVVmhRMmsxU21RM1UwMVdVVk5FVFdkWldXNUtMMGRvZGxkRVZ5dEdLMlpFT1cxT1dGY0tSbko2YmtvM0wzbEJURzk1TnpkRWVYaENSaXN4Vlc5cmJFVjNTek42TDBzMGFURjZOemRyVEhocmFIUjNORFpQU25GUFEwSm5iM2RuWjFsSFRVRTBSd3BCTVZWa1JIZEZRaTkzVVVWQmQwbElaMFJCVkVKblRsWklVMVZGUkVSQlMwSm5aM0pDWjBWR1FsRmpSRUY2UVdSQ1owNVdTRkUwUlVablVWVklWSFl3Q21KdU5VMUJhVk52WldORFZpdDZUVEozT0hkNlRrMXZkMGgzV1VSV1VqQnFRa0puZDBadlFWVXpPVkJ3ZWpGWmEwVmFZalZ4VG1wd1MwWlhhWGhwTkZrS1drUTRkMmRaVVVkQk1WVmtSVkZGUWk5M1VqWk5TR2xIWkcxb01HUklRbnBQYVRoMldqSnNNR0ZJVm1sTWJVNTJZbE01ZW1KSVRtaE1WMXA1V1ZjeGJBcGtNamw1WVhrNWVtSklUbWhNVjJSd1pFZG9NVmxwTVc1YVZ6VnNZMjFHTUdJelNYWk1iV1J3WkVkb01WbHBPVE5pTTBweVdtMTRkbVF6VFhaYU1sWjFDbHBZU21oa1J6bDVXREprYkdKdFZubGhWMDVtWXpKNGVsbFVUWFZsVnpGelVVaEtiRnB1VFhaa1IwWnVZM2s1TWsxcE5IaE1ha0YzVDFGWlMwdDNXVUlLUWtGSFJIWjZRVUpCVVZGeVlVaFNNR05JVFRaTWVUa3dZakowYkdKcE5XaFpNMUp3WWpJMWVreHRaSEJrUjJneFdXNVdlbHBZU21waU1qVXdXbGMxTUFwTWJVNTJZbFJCVjBKbmIzSkNaMFZGUVZsUEwwMUJSVU5DUVdoNldUSm9iRnBJVm5OYVZFRXlRbWR2Y2tKblJVVkJXVTh2VFVGRlJFSkRaekZaVkZKcENrMXRSWGROZWtKc1dtMUZkMDlFU1ROT2VtUm9UbnBTYVU5VVJYZGFSMVYzV1hwUmVWcHRUVEpaZW1zd1RVUlZOVTFDYTBkRGFYTkhRVkZSUW1jM09IY0tRVkZSUlVNeFFubGFVekZUV2xkNGJGbFlUbXhOUkZWSFEybHpSMEZSVVVKbk56aDNRVkZWUlVveVJqTmplVEYzWWpOa2JHTnVVblppTW5oNlRETkNkZ3BrTWxaNVpFYzVkbUpJVFhSaVIwWjBXVzFTYUV4WVFqVmtSMmgyWW1wQlowSm5iM0pDWjBWRlFWbFBMMDFCUlVkQ1FrcDVXbGRhZWt3eWFHeFpWMUo2Q2t3eVVteGtiVlp6WWpOQmQwOTNXVXRMZDFsQ1FrRkhSSFo2UVVKRFFWRjBSRU4wYjJSSVVuZGplbTkyVEROU2RtRXlWblZNYlVacVpFZHNkbUp1VFhVS1dqSnNNR0ZJVm1sa1dFNXNZMjFPZG1KdVVteGlibEYxV1RJNWRFMUpSMGRDWjI5eVFtZEZSVUZaVHk5TlFVVktRa2huVFdSdGFEQmtTRUo2VDJrNGRncGFNbXd3WVVoV2FVeHRUblppVXpsNllraE9hRXhYV25sWlZ6RnNaREk1ZVdGNU9YcGlTRTVvVEZka2NHUkhhREZaYVRGdVdsYzFiR050UmpCaU0wbDJDa3h0WkhCa1IyZ3hXV2s1TTJJelNuSmFiWGgyWkROTmRsb3lWblZhV0Vwb1pFYzVlVmd5Wkd4aWJWWjVZVmRPWm1NeWVIcFpWRTExWlZjeGMxRklTbXdLV201TmRtUkhSbTVqZVRreVRXazBlRXhxUVhkUFFWbExTM2RaUWtKQlIwUjJla0ZDUTJkUmNVUkRhRzFPTWxKclQwZE5NVTVIVFhsTlJGa3pXVzFHYlFwWmVrVjVXVEpGTTFsVVZURk9WR3N4V2tSV2JGcFViR2xPZWxWNVRVUlNhRTFDTUVkRGFYTkhRVkZSUW1jM09IZEJVWE5GUkhkM1Rsb3liREJoU0ZacENreFhhSFpqTTFKc1drUkNTMEpuYjNKQ1owVkZRVmxQTDAxQlJVMUNSSGROVDIxb01HUklRbnBQYVRoMldqSnNNR0ZJVm1sTWJVNTJZbE01YUdRelRYUUtZMGM1TTFwWVNqQmlNamx6WTNrNWQySXpaR3hqYmxKMllqSjRla3hYZUdoaVYwcHJXVk14ZDJWWVVtOWlNalIzVDBGWlMwdDNXVUpDUVVkRWRucEJRZ3BFVVZGeFJFTm5NVmxVVW1sTmJVVjNUWHBDYkZwdFJYZFBSRWt6VG5wa2FFNTZVbWxQVkVWM1drZFZkMWw2VVhsYWJVMHlXWHByTUUxRVZUVk5RMGxIQ2tOcGMwZEJVVkZDWnpjNGQwRlJORVZHUVhkVFkyMVdiV041T1c5YVYwWnJZM2s1YTFwWVdteGlSemwzVFVKclIwTnBjMGRCVVZGQ1p6YzRkMEZST0VVS1EzZDNTazFxU1hoUFZFVTFUWHBqTlUxRVJVZERhWE5IUVZGUlFtYzNPSGRCVWtGRlNYZDNhR0ZJVWpCalNFMDJUSGs1Ym1GWVVtOWtWMGwxV1RJNWRBcE1Na1l6WTNreGQySXpaR3hqYmxKMllqSjRlazFDYTBkRGFYTkhRVkZSUW1jM09IZEJVa1ZGUTNkM1NrMVVTVFZOVkVrelRtcE5ORTFJT0VkRGFYTkhDa0ZSVVVKbk56aDNRVkpKUldOUmVIWmhTRkl3WTBoTk5reDVPVzVoV0ZKdlpGZEpkVmt5T1hSTU1rWXpZM2t4ZDJJelpHeGpibEoyWWpKNGVrd3pRbllLWkRKV2VXUkhPWFppU0UxMFlrZEdkRmx0VW1oTVdFSTFaRWRvZG1KcE9IVmFNbXd3WVVoV2FVd3paSFpqYlhSdFlrYzVNMk41T1hkamJWVjBZMjFXY3dwYVYwWjZXbE0xTldKWGVFRmpiVlp0WTNrNWIxcFhSbXRqZVRscldsaGFiR0pIT1hkTlJHZEhRMmx6UjBGUlVVSm5OemgzUVZKTlJVdG5kMjlPVjBVd0NsbHFTbWhOUkUxM1dsZGFhRTFFWjNsT2VtTXpXVlJqTUZscWEzaE5SMUpzVFVkTk1FMXRXbXBPYlUwMVRrUkJNVTlVUVZsQ1oyOXlRbWRGUlVGWlR5OEtUVUZGVlVKQmIwMURTRTVxWVVkV2EyUlhlR3hOUnpSSFEybHpSMEZSVVVKbk56aDNRVkpWUlZsQmVHVmhTRkl3WTBoTk5reDVPVzVoV0ZKdlpGZEpkUXBaTWpsMFRESkdNMk41TVhkaU0yUnNZMjVTZG1JeWVIcE1NMEoyWkRKV2VXUkhPWFppU0UxMFlrZEdkRmx0VW1oTVdFSTFaRWRvZG1KcE9XaFpNMUp3Q21JeU5YcE1NMG94WW01TmRrMVVZM2ROZWxFelRVUlplVTFFYTNaWldGSXdXbGN4ZDJSSVRYWk5WRUZYUW1kdmNrSm5SVVZCV1U4dlRVRkZWMEpCWjAwS1FtNUNNVmx0ZUhCWmVrTkNhVkZaUzB0M1dVSkNRVWhYWlZGSlJVRm5VamRDU0d0QlpIZENNVUZPTURsTlIzSkhlSGhGZVZsNGEyVklTbXh1VG5kTGFRcFRiRFkwTTJwNWRDODBaVXRqYjBGMlMyVTJUMEZCUVVKdFRIYzBOR2MwUVVGQlVVUkJSVmwzVWtGSlowZGFiV3g2ZVhCWlVHMXVia3hKZEcxTmIycE9Dbk15U21FM1NrdE5hMHBuVkdOek1WaFhhM1p2SzNsdlEwbElUeXREVEVSWVNGVlNkRkYwU0hBMVJIaFhZMmRSVUVkNFJUSXhkSFJ1WkVwR1ZDOVFlR01LUTJGd2JFMUJiMGREUTNGSFUwMDBPVUpCVFVSQk1tZEJUVWRWUTAxSGJuUjVTa2RwV25obFRrbDRialpEVmxrclkzbzRZMDlGTldWb1JuZzFPVEZFWmdwd2VIcFpLMjkzVFZaNFVISXpOVk5uYWxCaVZTOWhaVFEyUW5oVlJtZEplRUZRTkZGVGVUTTFUR2sxTlhGTFkzRnFkVWszYzNveWRqWXdVSEZEYnpCS0NsaGFNbFptWm5KemNEVTBhV3RrZEdkSlIwVXpkbXhETVdsd1dsQlFTa1F4TkZFOVBRb3RMUzB0TFVWT1JDQkRSVkpVU1VaSlEwRlVSUzB0TFMwdENnPT0ifV19fQ=="}]}, "dsseEnvelope":{"payload":"eyJfdHlwZSI6Imh0dHBzOi8vaW4tdG90by5pby9TdGF0ZW1lbnQvdjAuMSIsInByZWRpY2F0ZVR5cGUiOiJodHRwczovL3Nsc2EuZGV2L3Byb3ZlbmFuY2UvdjAuMiIsInN1YmplY3QiOlt7Im5hbWUiOiIuL2F3c19sYW1iZGFfcG93ZXJ0b29scy0zLjE5LjFhMi1weTMtbm9uZS1hbnkud2hsIiwiZGlnZXN0Ijp7InNoYTI1NiI6ImRlY2ZiMmM4YjJlNGRmNDU5NTE2OWMxYWQ3MDE3NzA2ZGVmMDk3ZDA3ZjgxMGM5ZmU5MWZmNWVhMTUzM2Q5MjEifX0seyJuYW1lIjoiLi9hd3NfbGFtYmRhX3Bvd2VydG9vbHMtMy4xOS4xYTIudGFyLmd6IiwiZGlnZXN0Ijp7InNoYTI1NiI6IjVmODcxYjc3ZGI3YTFhMDQzZDM5OWIyNDYzODE0MDUzZDIwZTVmZTgyNGQ1YzIzMjBiNjc5ZDVjNzI3ZGIzNTcifX1dLCJwcmVkaWNhdGUiOnsiYnVpbGRlciI6eyJpZCI6Imh0dHBzOi8vZ2l0aHViLmNvbS9zbHNhLWZyYW1ld29yay9zbHNhLWdpdGh1Yi1nZW5lcmF0b3IvLmdpdGh1Yi93b3JrZmxvd3MvZ2VuZXJhdG9yX2dlbmVyaWNfc2xzYTMueW1sQHJlZnMvdGFncy92Mi4xLjAifSwiYnVpbGRUeXBlIjoiaHR0cHM6Ly9naXRodWIuY29tL3Nsc2EtZnJhbWV3b3JrL3Nsc2EtZ2l0aHViLWdlbmVyYXRvci9nZW5lcmljQHYxIiwiaW52b2NhdGlvbiI6eyJjb25maWdTb3VyY2UiOnsidXJpIjoiZ2l0K2h0dHBzOi8vZ2l0aHViLmNvbS9hd3MtcG93ZXJ0b29scy9wb3dlcnRvb2xzLWxhbWJkYS1weXRob25AcmVmcy9oZWFkcy9kZXZlbG9wIiwiZGlnZXN0Ijp7InNoYTEiOiI1YTRiMmEwMzBlZmEwODI3NzdhNzRiOTEwZGUwYzQyZmM2Yzk0MDU5In0sImVudHJ5UG9pbnQiOiIuZ2l0aHViL3dvcmtmbG93cy9wcmUtcmVsZWFzZS55bWwifSwicGFyYW1ldGVycyI6eyJ2YXJzIjp7fX0sImVudmlyb25tZW50Ijp7ImdpdGh1Yl9hY3RvciI6ImxlYW5kcm9kYW1hc2NlbmEiLCJnaXRodWJfYWN0b3JfaWQiOiI0Mjk1MTczIiwiZ2l0aHViX2Jhc2VfcmVmIjoiIiwiZ2l0aHViX2V2ZW50X25hbWUiOiJzY2hlZHVsZSIsImdpdGh1Yl9ldmVudF9wYXlsb2FkIjp7ImVudGVycHJpc2UiOnsiYXZhdGFyX3VybCI6Imh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vYi8xMjkwP3Y9NCIsImNyZWF0ZWRfYXQiOiIyMDE5LTExLTEzVDE4OjA1OjQxWiIsImRlc2NyaXB0aW9uIjoiIiwiaHRtbF91cmwiOiJodHRwczovL2dpdGh1Yi5jb20vZW50ZXJwcmlzZXMvYW1hem9uIiwiaWQiOjEyOTAsIm5hbWUiOiJBbWF6b24iLCJub2RlX2lkIjoiTURFd09rVnVkR1Z5Y0hKcGMyVXhNamt3Iiwic2x1ZyI6ImFtYXpvbiIsInVwZGF0ZWRfYXQiOiIyMDI1LTA4LTEyVDIwOjU5OjE0WiIsIndlYnNpdGVfdXJsIjoiaHR0cHM6Ly93d3cuYW1hem9uLmNvbS8ifSwib3JnYW5pemF0aW9uIjp7ImF2YXRhcl91cmwiOiJodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTI5MTI3NjM4P3Y9NCIsImRlc2NyaXB0aW9uIjoiIiwiZXZlbnRzX3VybCI6Imh0dHBzOi8vYXBpLmdpdGh1Yi5jb20vb3Jncy9hd3MtcG93ZXJ0b29scy9ldmVudHMiLCJob29rc191cmwiOiJodHRwczovL2FwaS5naXRodWIuY29tL29yZ3MvYXdzLXBvd2VydG9vbHMvaG9va3MiLCJpZCI6MTI5MTI3NjM4LCJpc3N1ZXNfdXJsIjoiaHR0cHM6Ly9hcGkuZ2l0aHViLmNvbS9vcmdzL2F3cy1wb3dlcnRvb2xzL2lzc3VlcyIsImxvZ2luIjoiYXdzLXBvd2VydG9vbHMiLCJtZW1iZXJzX3VybCI6Imh0dHBzOi8vYXBpLmdpdGh1Yi5jb20vb3Jncy9hd3MtcG93ZXJ0b29scy9tZW1iZXJzey9tZW1iZXJ9Iiwibm9kZV9pZCI6Ik9fa2dET0I3SlUxZyIsInB1YmxpY19tZW1iZXJzX3VybCI6Imh0dHBzOi8vYXBpLmdpdGh1Yi5jb20vb3Jncy9hd3MtcG93ZXJ0b29scy9wdWJsaWNfbWVtYmVyc3svbWVtYmVyfSIsInJlcG9zX3VybCI6Imh0dHBzOi8vYXBpLmdpdGh1Yi5jb20vb3Jncy9hd3MtcG93ZXJ0b29scy9yZXBvcyIsInVybCI6Imh0dHBzOi8vYXBpLmdpdGh1Yi5jb20vb3Jncy9hd3MtcG93ZXJ0b29scyJ9LCJyZXBvc2l0b3J5Ijp7ImFsbG93X2ZvcmtpbmciOnRydWUsImFyY2hpdmVfdXJsIjoiaHR0cHM6Ly9hcGkuZ2l0aHViLmNvbS9yZXBvcy9hd3MtcG93ZXJ0b29scy9wb3dlcnRvb2xzLWxhbWJkYS1weXRob24ve2FyY2hpdmVfZm9ybWF0fXsvcmVmfSIsImFyY2hpdmVkIjpmYWxzZSwiYXNzaWduZWVzX3VybCI6Imh0dHBzOi8vYXBpLmdpdGh1Yi5jb20vcmVwb3MvYXdzLXBvd2VydG9vbHMvcG93ZXJ0b29scy1sYW1iZGEtcHl0aG9uL2Fzc2lnbmVlc3svdXNlcn0iLCJibG9ic191cmwiOiJodHRwczovL2FwaS5naXRodWIuY29tL3JlcG9zL2F3cy1wb3dlcnRvb2xzL3Bvd2VydG9vbHMtbGFtYmRhLXB5dGhvbi9naXQvYmxvYnN7L3NoYX0iLCJicmFuY2hlc191cmwiOiJodHRwczovL2FwaS5naXRodWIuY29tL3JlcG9zL2F3cy1wb3dlcnRvb2xzL3Bvd2VydG9vbHMtbGFtYmRhLXB5dGhvbi9icmFuY2hlc3svYnJhbmNofSIsImNsb25lX3VybCI6Imh0dHBzOi8vZ2l0aHViLmNvbS9hd3MtcG93ZXJ0b29scy9wb3dlcnRvb2xzLWxhbWJkYS1weXRob24uZ2l0IiwiY29sbGFib3JhdG9yc191cmwiOiJodHRwczovL2FwaS5naXRodWIuY29tL3JlcG9zL2F3cy1wb3dlcnRvb2xzL3Bvd2VydG9vbHMtbGFtYmRhLXB5dGhvbi9jb2xsYWJvcmF0b3Jzey9jb2xsYWJvcmF0b3J9IiwiY29tbWVudHNfdXJsIjoiaHR0cHM6Ly9hcGkuZ2l0aHViLmNvbS9yZXBvcy9hd3MtcG93ZXJ0b29scy9wb3dlcnRvb2xzLWxhbWJkYS1weXRob24vY29tbWVudHN7L251bWJlcn0iLCJjb21taXRzX3VybCI6Imh0dHBzOi8vYXBpLmdpdGh1Yi5jb20vcmVwb3MvYXdzLXBvd2VydG9vbHMvcG93ZXJ0b29scy1sYW1iZGEtcHl0aG9uL2NvbW1pdHN7L3NoYX0iLCJjb21wYXJlX3VybCI6Imh0dHBzOi8vYXBpLmdpdGh1Yi5jb20vcmVwb3MvYXdzLXBvd2VydG9vbHMvcG93ZXJ0b29scy1sYW1iZGEtcHl0aG9uL2NvbXBhcmUve2Jhc2V9Li4ue2hlYWR9IiwiY29udGVudHNfdXJsIjoiaHR0cHM6Ly9hcGkuZ2l0aHViLmNvbS9yZXBvcy9hd3MtcG93ZXJ0b29scy9wb3dlcnRvb2xzLWxhbWJkYS1weXRob24vY29udGVudHMveytwYXRofSIsImNvbnRyaWJ1dG9yc191cmwiOiJodHRwczovL2FwaS5naXRodWIuY29tL3JlcG9zL2F3cy1wb3dlcnRvb2xzL3Bvd2VydG9vbHMtbGFtYmRhLXB5dGhvbi9jb250cmlidXRvcnMiLCJjcmVhdGVkX2F0IjoiMjAxOS0xMS0xNVQxMjoyNjoxMloiLCJjdXN0b21fcHJvcGVydGllcyI6eyJzdGFnaW5nIjoiZmFsc2UiLCJ2aXNpYmlsaXR5LWFsbG93LWludGVybmFsIjoiZmFsc2UiLCJ2aXNpYmlsaXR5LWFsbG93LXByaXZhdGUiOiJmYWxzZSIsInZpc2liaWxpdHktYWxsb3ctcHVibGljIjoidHJ1ZSJ9LCJkZWZhdWx0X2JyYW5jaCI6ImRldmVsb3AiLCJkZXBsb3ltZW50c191cmwiOiJodHRwczovL2FwaS5naXRodWIuY29tL3JlcG9zL2F3cy1wb3dlcnRvb2xzL3Bvd2VydG9vbHMtbGFtYmRhLXB5dGhvbi9kZXBsb3ltZW50cyIsImRlc2NyaXB0aW9uIjoiQSBkZXZlbG9wZXIgdG9vbGtpdCB0byBpbXBsZW1lbnQgU2VydmVybGVzcyBiZXN0IHByYWN0aWNlcyBhbmQgaW5jcmVhc2UgZGV2ZWxvcGVyIHZlbG9jaXR5LiIsImRpc2FibGVkIjpmYWxzZSwiZG93bmxvYWRzX3VybCI6Imh0dHBzOi8vYXBpLmdpdGh1Yi5jb20vcmVwb3MvYXdzLXBvd2VydG9vbHMvcG93ZXJ0b29scy1sYW1iZGEtcHl0aG9uL2Rvd25sb2FkcyIsImV2ZW50c191cmwiOiJodHRwczovL2FwaS5naXRodWIuY29tL3JlcG9zL2F3cy1wb3dlcnRvb2xzL3Bvd2VydG9vbHMtbGFtYmRhLXB5dGhvbi9ldmVudHMiLCJmb3JrIjpmYWxzZSwiZm9ya3MiOjQ0NCwiZm9ya3NfY291bnQiOjQ0NCwiZm9ya3NfdXJsIjoiaHR0cHM6Ly9hcGkuZ2l0aHViLmNvbS9yZXBvcy9hd3MtcG93ZXJ0b29scy9wb3dlcnRvb2xzLWxhbWJkYS1weXRob24vZm9ya3MiLCJmdWxsX25hbWUiOiJhd3MtcG93ZXJ0b29scy9wb3dlcnRvb2xzLWxhbWJkYS1weXRob24iLCJnaXRfY29tbWl0c191cmwiOiJodHRwczovL2FwaS5naXRodWIuY29tL3JlcG9zL2F3cy1wb3dlcnRvb2xzL3Bvd2VydG9vbHMtbGFtYmRhLXB5dGhvbi9naXQvY29tbWl0c3svc2hhfSIsImdpdF9yZWZzX3VybCI6Imh0dHBzOi8vYXBpLmdpdGh1Yi5jb20vcmVwb3MvYXdzLXBvd2VydG9vbHMvcG93ZXJ0b29scy1sYW1iZGEtcHl0aG9uL2dpdC9yZWZzey9zaGF9IiwiZ2l0X3RhZ3NfdXJsIjoiaHR0cHM6Ly9hcGkuZ2l0aHViLmNvbS9yZXBvcy9hd3MtcG93ZXJ0b29scy9wb3dlcnRvb2xzLWxhbWJkYS1weXRob24vZ2l0L3RhZ3N7L3NoYX0iLCJnaXRfdXJsIjoiZ2l0Oi8vZ2l0aHViLmNvbS9hd3MtcG93ZXJ0b29scy9wb3dlcnRvb2xzLWxhbWJkYS1weXRob24uZ2l0IiwiaGFzX2Rpc2N1c3Npb25zIjp0cnVlLCJoYXNfZG93bmxvYWRzIjp0cnVlLCJoYXNfaXNzdWVzIjp0cnVlLCJoYXNfcGFnZXMiOmZhbHNlLCJoYXNfcHJvamVjdHMiOnRydWUsImhhc193aWtpIjpmYWxzZSwiaG9tZXBhZ2UiOiJodHRwczovL2RvY3MucG93ZXJ0b29scy5hd3MuZGV2L2xhbWJkYS9weXRob24vbGF0ZXN0LyIsImhvb2tzX3VybCI6Imh0dHBzOi8vYXBpLmdpdGh1Yi5jb20vcmVwb3MvYXdzLXBvd2VydG9vbHMvcG93ZXJ0b29scy1sYW1iZGEtcHl0aG9uL2hvb2tzIiwiaHRtbF91cmwiOiJodHRwczovL2dpdGh1Yi5jb20vYXdzLXBvd2VydG9vbHMvcG93ZXJ0b29scy1sYW1iZGEtcHl0aG9uIiwiaWQiOjIyMTkxOTM3OSwiaXNfdGVtcGxhdGUiOmZhbHNlLCJpc3N1ZV9jb21tZW50X3VybCI6Imh0dHBzOi8vYXBpLmdpdGh1Yi5jb20vcmVwb3MvYXdzLXBvd2VydG9vbHMvcG93ZXJ0b29scy1sYW1iZGEtcHl0aG9uL2lzc3Vlcy9jb21tZW50c3svbnVtYmVyfSIsImlzc3VlX2V2ZW50c191cmwiOiJodHRwczovL2FwaS5naXRodWIuY29tL3JlcG9zL2F3cy1wb3dlcnRvb2xzL3Bvd2VydG9vbHMtbGFtYmRhLXB5dGhvbi9pc3N1ZXMvZXZlbnRzey9udW1iZXJ9IiwiaXNzdWVzX3VybCI6Imh0dHBzOi8vYXBpLmdpdGh1Yi5jb20vcmVwb3MvYXdzLXBvd2VydG9vbHMvcG93ZXJ0b29scy1sYW1iZGEtcHl0aG9uL2lzc3Vlc3svbnVtYmVyfSIsImtleXNfdXJsIjoiaHR0cHM6Ly9hcGkuZ2l0aHViLmNvbS9yZXBvcy9hd3MtcG93ZXJ0b29scy9wb3dlcnRvb2xzLWxhbWJkYS1weXRob24va2V5c3sva2V5X2lkfSIsImxhYmVsc191cmwiOiJodHRwczovL2FwaS5naXRodWIuY29tL3JlcG9zL2F3cy1wb3dlcnRvb2xzL3Bvd2VydG9vbHMtbGFtYmRhLXB5dGhvbi9sYWJlbHN7L25hbWV9IiwibGFuZ3VhZ2UiOiJQeXRob24iLCJsYW5ndWFnZXNfdXJsIjoiaHR0cHM6Ly9hcGkuZ2l0aHViLmNvbS9yZXBvcy9hd3MtcG93ZXJ0b29scy9wb3dlcnRvb2xzLWxhbWJkYS1weXRob24vbGFuZ3VhZ2VzIiwibGljZW5zZSI6eyJrZXkiOiJtaXQtMCIsIm5hbWUiOiJNSVQgTm8gQXR0cmlidXRpb24iLCJub2RlX2lkIjoiTURjNlRHbGpaVzV6WlRReCIsInNwZHhfaWQiOiJNSVQtMCIsInVybCI6Imh0dHBzOi8vYXBpLmdpdGh1Yi5jb20vbGljZW5zZXMvbWl0LTAifSwibWVyZ2VzX3VybCI6Imh0dHBzOi8vYXBpLmdpdGh1Yi5jb20vcmVwb3MvYXdzLXBvd2VydG9vbHMvcG93ZXJ0b29scy1sYW1iZGEtcHl0aG9uL21lcmdlcyIsIm1pbGVzdG9uZXNfdXJsIjoiaHR0cHM6Ly9hcGkuZ2l0aHViLmNvbS9yZXBvcy9hd3MtcG93ZXJ0b29scy9wb3dlcnRvb2xzLWxhbWJkYS1weXRob24vbWlsZXN0b25lc3svbnVtYmVyfSIsIm1pcnJvcl91cmwiOm51bGwsIm5hbWUiOiJwb3dlcnRvb2xzLWxhbWJkYS1weXRob24iLCJub2RlX2lkIjoiTURFd09sSmxjRzl6YVhSdmNua3lNakU1TVRrek56az0iLCJub3RpZmljYXRpb25zX3VybCI6Imh0dHBzOi8vYXBpLmdpdGh1Yi5jb20vcmVwb3MvYXdzLXBvd2VydG9vbHMvcG93ZXJ0b29scy1sYW1iZGEtcHl0aG9uL25vdGlmaWNhdGlvbnN7P3NpbmNlLGFsbCxwYXJ0aWNpcGF0aW5nfSIsIm9wZW5faXNzdWVzIjo2Nywib3Blbl9pc3N1ZXNfY291bnQiOjY3LCJvd25lciI6eyJhdmF0YXJfdXJsIjoiaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzEyOTEyNzYzOD92PTQiLCJldmVudHNfdXJsIjoiaHR0cHM6Ly9hcGkuZ2l0aHViLmNvbS91c2Vycy9hd3MtcG93ZXJ0b29scy9ldmVudHN7L3ByaXZhY3l9IiwiZm9sbG93ZXJzX3VybCI6Imh0dHBzOi8vYXBpLmdpdGh1Yi5jb20vdXNlcnMvYXdzLXBvd2VydG9vbHMvZm9sbG93ZXJzIiwiZm9sbG93aW5nX3VybCI6Imh0dHBzOi8vYXBpLmdpdGh1Yi5jb20vdXNlcnMvYXdzLXBvd2VydG9vbHMvZm9sbG93aW5ney9vdGhlcl91c2VyfSIsImdpc3RzX3VybCI6Imh0dHBzOi8vYXBpLmdpdGh1Yi5jb20vdXNlcnMvYXdzLXBvd2VydG9vbHMvZ2lzdHN7L2dpc3RfaWR9IiwiZ3JhdmF0YXJfaWQiOiIiLCJodG1sX3VybCI6Imh0dHBzOi8vZ2l0aHViLmNvbS9hd3MtcG93ZXJ0b29scyIsImlkIjoxMjkxMjc2MzgsImxvZ2luIjoiYXdzLXBvd2VydG9vbHMiLCJub2RlX2lkIjoiT19rZ0RPQjdKVTFnIiwib3JnYW5pemF0aW9uc191cmwiOiJodHRwczovL2FwaS5naXRodWIuY29tL3VzZXJzL2F3cy1wb3dlcnRvb2xzL29yZ3MiLCJyZWNlaXZlZF9ldmVudHNfdXJsIjoiaHR0cHM6Ly9hcGkuZ2l0aHViLmNvbS91c2Vycy9hd3MtcG93ZXJ0b29scy9yZWNlaXZlZF9ldmVudHMiLCJyZXBvc191cmwiOiJodHRwczovL2FwaS5naXRodWIuY29tL3VzZXJzL2F3cy1wb3dlcnRvb2xzL3JlcG9zIiwic2l0ZV9hZG1pbiI6ZmFsc2UsInN0YXJyZWRfdXJsIjoiaHR0cHM6Ly9hcGkuZ2l0aHViLmNvbS91c2Vycy9hd3MtcG93ZXJ0b29scy9zdGFycmVkey9vd25lcn17L3JlcG99Iiwic3Vic2NyaXB0aW9uc191cmwiOiJodHRwczovL2FwaS5naXRodWIuY29tL3VzZXJzL2F3cy1wb3dlcnRvb2xzL3N1YnNjcmlwdGlvbnMiLCJ0eXBlIjoiT3JnYW5pemF0aW9uIiwidXJsIjoiaHR0cHM6Ly9hcGkuZ2l0aHViLmNvbS91c2Vycy9hd3MtcG93ZXJ0b29scyIsInVzZXJfdmlld190eXBlIjoicHVibGljIn0sInByaXZhdGUiOmZhbHNlLCJwdWxsc191cmwiOiJodHRwczovL2FwaS5naXRodWIuY29tL3JlcG9zL2F3cy1wb3dlcnRvb2xzL3Bvd2VydG9vbHMtbGFtYmRhLXB5dGhvbi9wdWxsc3svbnVtYmVyfSIsInB1c2hlZF9hdCI6IjIwMjUtMDgtMTdUMTA6MDQ6MzdaIiwicmVsZWFzZXNfdXJsIjoiaHR0cHM6Ly9hcGkuZ2l0aHViLmNvbS9yZXBvcy9hd3MtcG93ZXJ0b29scy9wb3dlcnRvb2xzLWxhbWJkYS1weXRob24vcmVsZWFzZXN7L2lkfSIsInNpemUiOjEzMDk0NCwic3NoX3VybCI6ImdpdEBnaXRodWIuY29tOmF3cy1wb3dlcnRvb2xzL3Bvd2VydG9vbHMtbGFtYmRhLXB5dGhvbi5naXQiLCJzdGFyZ2F6ZXJzX2NvdW50IjozMTI0LCJzdGFyZ2F6ZXJzX3VybCI6Imh0dHBzOi8vYXBpLmdpdGh1Yi5jb20vcmVwb3MvYXdzLXBvd2VydG9vbHMvcG93ZXJ0b29scy1sYW1iZGEtcHl0aG9uL3N0YXJnYXplcnMiLCJzdGF0dXNlc191cmwiOiJodHRwczovL2FwaS5naXRodWIuY29tL3JlcG9zL2F3cy1wb3dlcnRvb2xzL3Bvd2VydG9vbHMtbGFtYmRhLXB5dGhvbi9zdGF0dXNlcy97c2hhfSIsInN1YnNjcmliZXJzX3VybCI6Imh0dHBzOi8vYXBpLmdpdGh1Yi5jb20vcmVwb3MvYXdzLXBvd2VydG9vbHMvcG93ZXJ0b29scy1sYW1iZGEtcHl0aG9uL3N1YnNjcmliZXJzIiwic3Vic2NyaXB0aW9uX3VybCI6Imh0dHBzOi8vYXBpLmdpdGh1Yi5jb20vcmVwb3MvYXdzLXBvd2VydG9vbHMvcG93ZXJ0b29scy1sYW1iZGEtcHl0aG9uL3N1YnNjcmlwdGlvbiIsInN2bl91cmwiOiJodHRwczovL2dpdGh1Yi5jb20vYXdzLXBvd2VydG9vbHMvcG93ZXJ0b29scy1sYW1iZGEtcHl0aG9uIiwidGFnc191cmwiOiJodHRwczovL2FwaS5naXRodWIuY29tL3JlcG9zL2F3cy1wb3dlcnRvb2xzL3Bvd2VydG9vbHMtbGFtYmRhLXB5dGhvbi90YWdzIiwidGVhbXNfdXJsIjoiaHR0cHM6Ly9hcGkuZ2l0aHViLmNvbS9yZXBvcy9hd3MtcG93ZXJ0b29scy9wb3dlcnRvb2xzLWxhbWJkYS1weXRob24vdGVhbXMiLCJ0b3BpY3MiOlsiYXdzIiwiYXdzLWxhbWJkYSIsImxhbWJkYSIsInB5dGhvbiIsInNlcnZlcmxlc3MiXSwidHJlZXNfdXJsIjoiaHR0cHM6Ly9hcGkuZ2l0aHViLmNvbS9yZXBvcy9hd3MtcG93ZXJ0b29scy9wb3dlcnRvb2xzLWxhbWJkYS1weXRob24vZ2l0L3RyZWVzey9zaGF9IiwidXBkYXRlZF9hdCI6IjIwMjUtMDgtMThUMDQ6MzE6MDdaIiwidXJsIjoiaHR0cHM6Ly9hcGkuZ2l0aHViLmNvbS9yZXBvcy9hd3MtcG93ZXJ0b29scy9wb3dlcnRvb2xzLWxhbWJkYS1weXRob24iLCJ2aXNpYmlsaXR5IjoicHVibGljIiwid2F0Y2hlcnMiOjMxMjQsIndhdGNoZXJzX2NvdW50IjozMTI0LCJ3ZWJfY29tbWl0X3NpZ25vZmZfcmVxdWlyZWQiOnRydWV9LCJzY2hlZHVsZSI6IjAgOCAqICogMS01Iiwid29ya2Zsb3ciOiIuZ2l0aHViL3dvcmtmbG93cy9wcmUtcmVsZWFzZS55bWwifSwiZ2l0aHViX2hlYWRfcmVmIjoiIiwiZ2l0aHViX3JlZiI6InJlZnMvaGVhZHMvZGV2ZWxvcCIsImdpdGh1Yl9yZWZfdHlwZSI6ImJyYW5jaCIsImdpdGh1Yl9yZXBvc2l0b3J5X2lkIjoiMjIxOTE5Mzc5IiwiZ2l0aHViX3JlcG9zaXRvcnlfb3duZXIiOiJhd3MtcG93ZXJ0b29scyIsImdpdGh1Yl9yZXBvc2l0b3J5X293bmVyX2lkIjoiMTI5MTI3NjM4IiwiZ2l0aHViX3J1bl9hdHRlbXB0IjoiMSIsImdpdGh1Yl9ydW5faWQiOiIxNzAzNDcwNjIwOSIsImdpdGh1Yl9ydW5fbnVtYmVyIjoiMzA4IiwiZ2l0aHViX3NoYTEiOiI1YTRiMmEwMzBlZmEwODI3NzdhNzRiOTEwZGUwYzQyZmM2Yzk0MDU5In19LCJtZXRhZGF0YSI6eyJidWlsZEludm9jYXRpb25JRCI6IjE3MDM0NzA2MjA5LTEiLCJjb21wbGV0ZW5lc3MiOnsicGFyYW1ldGVycyI6dHJ1ZSwiZW52aXJvbm1lbnQiOmZhbHNlLCJtYXRlcmlhbHMiOmZhbHNlfSwicmVwcm9kdWNpYmxlIjpmYWxzZX0sIm1hdGVyaWFscyI6W3sidXJpIjoiZ2l0K2h0dHBzOi8vZ2l0aHViLmNvbS9hd3MtcG93ZXJ0b29scy9wb3dlcnRvb2xzLWxhbWJkYS1weXRob25AcmVmcy9oZWFkcy9kZXZlbG9wIiwiZGlnZXN0Ijp7InNoYTEiOiI1YTRiMmEwMzBlZmEwODI3NzdhNzRiOTEwZGUwYzQyZmM2Yzk0MDU5In19XX19", "payloadType":"application/vnd.in-toto+json", "signatures":[{"sig":"MEUCIF+k0bWp/gKGwn8rnL25A6xCPBWIKwVf4rp0PPsqZOjjAiEAxqug5bGKUqWi2WQV/Ym6uTz1s+f/AC0bSkm80wBvTYM="}]}} \ No newline at end of file diff --git a/provenance/3.19.1a3/multiple.intoto.jsonl b/provenance/3.19.1a3/multiple.intoto.jsonl new file mode 100644 index 00000000000..b8ddd7a2cc2 --- /dev/null +++ b/provenance/3.19.1a3/multiple.intoto.jsonl @@ -0,0 +1 @@ +{"mediaType":"application/vnd.dev.sigstore.bundle.v0.3+json", "verificationMaterial":{"certificate":{"rawBytes":"MIIHZTCCBuygAwIBAgIURGyVVh4tKQm0DSdswu2uE7PZMBAwCgYIKoZIzj0EAwMwNzEVMBMGA1UEChMMc2lnc3RvcmUuZGV2MR4wHAYDVQQDExVzaWdzdG9yZS1pbnRlcm1lZGlhdGUwHhcNMjUwODE5MDgwNzM5WhcNMjUwODE5MDgxNzM5WjAAMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE7CKEGAcnR2aR/C7TIanoaXaUvj6w1yj6Lt+YjzYqyZM34Hn3VV8cO8DZhwnc2+nvC9U2EaeM2f57/oCLKpIYiqOCBgswggYHMA4GA1UdDwEB/wQEAwIHgDATBgNVHSUEDDAKBggrBgEFBQcDAzAdBgNVHQ4EFgQUvrh4+DSPigRpHH71HMF57+/p8ucwHwYDVR0jBBgwFoAU39Ppz1YkEZb5qNjpKFWixi4YZD8wgYQGA1UdEQEB/wR6MHiGdmh0dHBzOi8vZ2l0aHViLmNvbS9zbHNhLWZyYW1ld29yay9zbHNhLWdpdGh1Yi1nZW5lcmF0b3IvLmdpdGh1Yi93b3JrZmxvd3MvZ2VuZXJhdG9yX2dlbmVyaWNfc2xzYTMueW1sQHJlZnMvdGFncy92Mi4xLjAwOQYKKwYBBAGDvzABAQQraHR0cHM6Ly90b2tlbi5hY3Rpb25zLmdpdGh1YnVzZXJjb250ZW50LmNvbTAWBgorBgEEAYO/MAECBAhzY2hlZHVsZTA2BgorBgEEAYO/MAEDBChmN2QwYjUyZDU4MTI4YWZjYmRkMTE5ZTA3NGQ4ZGIzMTE0NzA3ODJiMBkGCisGAQQBg78wAQQEC1ByZS1SZWxlYXNlMDUGCisGAQQBg78wAQUEJ2F3cy1wb3dlcnRvb2xzL3Bvd2VydG9vbHMtbGFtYmRhLXB5dGhvbjAgBgorBgEEAYO/MAEGBBJyZWZzL2hlYWRzL2RldmVsb3AwOwYKKwYBBAGDvzABCAQtDCtodHRwczovL3Rva2VuLmFjdGlvbnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tMIGGBgorBgEEAYO/MAEJBHgMdmh0dHBzOi8vZ2l0aHViLmNvbS9zbHNhLWZyYW1ld29yay9zbHNhLWdpdGh1Yi1nZW5lcmF0b3IvLmdpdGh1Yi93b3JrZmxvd3MvZ2VuZXJhdG9yX2dlbmVyaWNfc2xzYTMueW1sQHJlZnMvdGFncy92Mi4xLjAwOAYKKwYBBAGDvzABCgQqDChmN2RkOGM1NGMyMDY3YmFmYzEyY2E3YTU1NTk1ZDVlZTliNzUyMDRhMB0GCisGAQQBg78wAQsEDwwNZ2l0aHViLWhvc3RlZDBKBgorBgEEAYO/MAEMBDwMOmh0dHBzOi8vZ2l0aHViLmNvbS9hd3MtcG93ZXJ0b29scy9wb3dlcnRvb2xzLWxhbWJkYS1weXRob24wOAYKKwYBBAGDvzABDQQqDChmN2QwYjUyZDU4MTI4YWZjYmRkMTE5ZTA3NGQ4ZGIzMTE0NzA3ODJiMCIGCisGAQQBg78wAQ4EFAwScmVmcy9oZWFkcy9kZXZlbG9wMBkGCisGAQQBg78wAQ8ECwwJMjIxOTE5Mzc5MDEGCisGAQQBg78wARAEIwwhaHR0cHM6Ly9naXRodWIuY29tL2F3cy1wb3dlcnRvb2xzMBkGCisGAQQBg78wAREECwwJMTI5MTI3NjM4MH8GCisGAQQBg78wARIEcQxvaHR0cHM6Ly9naXRodWIuY29tL2F3cy1wb3dlcnRvb2xzL3Bvd2VydG9vbHMtbGFtYmRhLXB5dGhvbi8uZ2l0aHViL3dvcmtmbG93cy9wcmUtcmVsZWFzZS55bWxAcmVmcy9oZWFkcy9kZXZlbG9wMDgGCisGAQQBg78wARMEKgwoZjdkMGI1MmQ1ODEyOGFmY2JkZDExOWUwNzRkOGRiMzExNDcwNzgyYjAYBgorBgEEAYO/MAEUBAoMCHNjaGVkdWxlMG4GCisGAQQBg78wARUEYAxeaHR0cHM6Ly9naXRodWIuY29tL2F3cy1wb3dlcnRvb2xzL3Bvd2VydG9vbHMtbGFtYmRhLXB5dGhvbi9hY3Rpb25zL3J1bnMvMTcwNjMzOTQzNjgvYXR0ZW1wdHMvMTAWBgorBgEEAYO/MAEWBAgMBnB1YmxpYzCBigYKKwYBBAHWeQIEAgR8BHoAeAB2AN09MGrGxxEyYxkeHJlnNwKiSl643jyt/4eKcoAvKe6OAAABmMFemccAAAQDAEcwRQIgBLZEwCX8lHr+7A9P7agvTswSGs7IuuVfvz+djcWq8sICIQD96TM2b33VdyScdRrIX8L9FHfVp/Kh9qEiDvuRqPOCKjAKBggqhkjOPQQDAwNnADBkAjA0vL4N97I22/WWA0XZFx4btrNLYeOtgX/hlOZh/Ips4cULxQ0QhdoXrtXxD5eBQ44CMDTR4pNCsCoSZzfFfYxZE/FKyd3vCG5enHg3Sza01bmhrlOuSNxmR8ly3WrkiBYhaw=="}, "tlogEntries":[{"logIndex":"409432155", "logId":{"keyId":"wNI9atQGlz+VWfO6LRygH4QUfY/8W4RFwiT5i5WRgB0="}, "kindVersion":{"kind":"dsse", "version":"0.0.1"}, "integratedTime":"1755590859", "inclusionPromise":{"signedEntryTimestamp":"MEYCIQDzlHfJngJBfQUiNTFWuMPTL8BrFLMHtlqB0d18bu1goAIhAJ4UDMIEUrkqO08IO308yVV+V83EcEHgJI5b+GVgveW+"}, "inclusionProof":{"logIndex":"287527893", "rootHash":"cDWZoy1ygVKQrCIRVR+1lt9/KftVXUCEwNuPqRDe+JE=", "treeSize":"287527895", "hashes":["lkKUeisxNi8fMwNNbEhHvnuhS2PI5lQMbs93QBZDSEA=", "F5NuScmiHm7ss3wCc5WzxzdFjCMJxAyLEkeGGmV62No=", "kff3nYR9pRCTqBXJ+H8T1sJwomA00kJUvcdZs4isQgQ=", "zdmkcOiuDaYCQLnI0z8DTTL9JGBZkBSY9FUVJ+P+qZk=", "zB9V1Fib97kkTPkEjXU39fBUskSDoltkt1zYHyYvV80=", "dMoRe8EBPZhF2joKFLP7H2mqyXmDwQpe8o1ku+xhKOo=", "gDh2f6HncqyDAcAOU8mCca9LZBNn6iBPCZArz9kg2D8=", "mlAhoVNudg9gj2DYbfpSQebvHdJQKKOSz9GtkA5CcdE=", "cMANJUkR8GphuQgB+YbqwExbnavI6IhO4PxF3PL/WhY=", "j1JCw4wBEhoCbykRIs5G5cXAWcNdpYcDc+cPFVC9DdQ=", "9JsB4KKg0gofRXYJ3VGNsa/DciN+gFnoXWnFBE7m/n8=", "8RLSzkHmhf/1WdZ6KJCLJwd6x72YVXtDOOipfBPYWbU=", "CvER8jmL+6sme6hqrp/waEC4zS2aqkvN+WdNdHTnUMw=", "mY/RW4xaHcEl4tg806MlgeKlHNQKRa1JOmEp9GuAcKY=", "vS7O4ozHIQZJWBiov+mkpI27GE8zAmVCEkRcP3NDyNE="], "checkpoint":{"envelope":"rekor.sigstore.dev - 1193050959916656506\n287527895\ncDWZoy1ygVKQrCIRVR+1lt9/KftVXUCEwNuPqRDe+JE=\n\n— rekor.sigstore.dev wNI9ajBGAiEA+Q4UPc/6PwpZVzttWP807jXNyzEGyJxxFS/lq1P2C9QCIQC0QArqCl3MlSMkGIy/Z4PyucBSmMntMxjSBSgBexx+hA==\n"}}, "canonicalizedBody":"eyJhcGlWZXJzaW9uIjoiMC4wLjEiLCJraW5kIjoiZHNzZSIsInNwZWMiOnsiZW52ZWxvcGVIYXNoIjp7ImFsZ29yaXRobSI6InNoYTI1NiIsInZhbHVlIjoiOGI1NzFiZTBhNDgxMGU0NGEzODYwYzdlZDBmZTVkZTBhM2NmNjFiYzlhMWI5NTc1YmY5ZWY4MTZiYjA3YmJlMiJ9LCJwYXlsb2FkSGFzaCI6eyJhbGdvcml0aG0iOiJzaGEyNTYiLCJ2YWx1ZSI6Ijk4MmViNGIwNTllM2RiOWRhYzE5ZDM4YWNmYjA5ZTViODQ0ZjA3ZDQwMTlhNzY2OTczMjFlNmI2YjM1Y2U5MGYifSwic2lnbmF0dXJlcyI6W3sic2lnbmF0dXJlIjoiTUVVQ0lRRFYxRWhnRUloeGR3emhKWUVLU1I3QzJGWHlaQ1N6TDk1bkJFRm5Sdy9NYUFJZ1dYNDJVZHdpK3E3dGZ2R2dLT09QR0lIMi8vNHdRK3FsRW9lL2FWdFFmSHM9IiwidmVyaWZpZXIiOiJMUzB0TFMxQ1JVZEpUaUJEUlZKVVNVWkpRMEZVUlMwdExTMHRDazFKU1VoYVZFTkRRblY1WjBGM1NVSkJaMGxWVWtkNVZsWm9OSFJMVVcwd1JGTmtjM2QxTW5WRk4xQmFUVUpCZDBObldVbExiMXBKZW1vd1JVRjNUWGNLVG5wRlZrMUNUVWRCTVZWRlEyaE5UV015Ykc1ak0xSjJZMjFWZFZwSFZqSk5ValIzU0VGWlJGWlJVVVJGZUZaNllWZGtlbVJIT1hsYVV6RndZbTVTYkFwamJURnNXa2RzYUdSSFZYZElhR05PVFdwVmQwOUVSVFZOUkdkM1RucE5OVmRvWTA1TmFsVjNUMFJGTlUxRVozaE9lazAxVjJwQlFVMUdhM2RGZDFsSUNrdHZXa2w2YWpCRFFWRlpTVXR2V2tsNmFqQkVRVkZqUkZGblFVVTNRMHRGUjBGamJsSXlZVkl2UXpkVVNXRnViMkZZWVZWMmFqWjNNWGxxTmt4MEsxa0thbnBaY1hsYVRUTTBTRzR6VmxZNFkwODRSRnBvZDI1ak1pdHVka001VlRKRllXVk5NbVkxTnk5dlEweExjRWxaYVhGUFEwSm5jM2RuWjFsSVRVRTBSd3BCTVZWa1JIZEZRaTkzVVVWQmQwbElaMFJCVkVKblRsWklVMVZGUkVSQlMwSm5aM0pDWjBWR1FsRmpSRUY2UVdSQ1owNVdTRkUwUlVablVWVjJjbWcwQ2l0RVUxQnBaMUp3U0VnM01VaE5SalUzS3k5d09IVmpkMGgzV1VSV1VqQnFRa0puZDBadlFWVXpPVkJ3ZWpGWmEwVmFZalZ4VG1wd1MwWlhhWGhwTkZrS1drUTRkMmRaVVVkQk1WVmtSVkZGUWk5M1VqWk5TR2xIWkcxb01HUklRbnBQYVRoMldqSnNNR0ZJVm1sTWJVNTJZbE01ZW1KSVRtaE1WMXA1V1ZjeGJBcGtNamw1WVhrNWVtSklUbWhNVjJSd1pFZG9NVmxwTVc1YVZ6VnNZMjFHTUdJelNYWk1iV1J3WkVkb01WbHBPVE5pTTBweVdtMTRkbVF6VFhaYU1sWjFDbHBZU21oa1J6bDVXREprYkdKdFZubGhWMDVtWXpKNGVsbFVUWFZsVnpGelVVaEtiRnB1VFhaa1IwWnVZM2s1TWsxcE5IaE1ha0YzVDFGWlMwdDNXVUlLUWtGSFJIWjZRVUpCVVZGeVlVaFNNR05JVFRaTWVUa3dZakowYkdKcE5XaFpNMUp3WWpJMWVreHRaSEJrUjJneFdXNVdlbHBZU21waU1qVXdXbGMxTUFwTWJVNTJZbFJCVjBKbmIzSkNaMFZGUVZsUEwwMUJSVU5DUVdoNldUSm9iRnBJVm5OYVZFRXlRbWR2Y2tKblJVVkJXVTh2VFVGRlJFSkRhRzFPTWxGM0NsbHFWWGxhUkZVMFRWUkpORmxYV21wWmJWSnJUVlJGTlZwVVFUTk9SMUUwV2tkSmVrMVVSVEJPZWtFelQwUkthVTFDYTBkRGFYTkhRVkZSUW1jM09IY0tRVkZSUlVNeFFubGFVekZUV2xkNGJGbFlUbXhOUkZWSFEybHpSMEZSVVVKbk56aDNRVkZWUlVveVJqTmplVEYzWWpOa2JHTnVVblppTW5oNlRETkNkZ3BrTWxaNVpFYzVkbUpJVFhSaVIwWjBXVzFTYUV4WVFqVmtSMmgyWW1wQlowSm5iM0pDWjBWRlFWbFBMMDFCUlVkQ1FrcDVXbGRhZWt3eWFHeFpWMUo2Q2t3eVVteGtiVlp6WWpOQmQwOTNXVXRMZDFsQ1FrRkhSSFo2UVVKRFFWRjBSRU4wYjJSSVVuZGplbTkyVEROU2RtRXlWblZNYlVacVpFZHNkbUp1VFhVS1dqSnNNR0ZJVm1sa1dFNXNZMjFPZG1KdVVteGlibEYxV1RJNWRFMUpSMGRDWjI5eVFtZEZSVUZaVHk5TlFVVktRa2huVFdSdGFEQmtTRUo2VDJrNGRncGFNbXd3WVVoV2FVeHRUblppVXpsNllraE9hRXhYV25sWlZ6RnNaREk1ZVdGNU9YcGlTRTVvVEZka2NHUkhhREZaYVRGdVdsYzFiR050UmpCaU0wbDJDa3h0WkhCa1IyZ3hXV2s1TTJJelNuSmFiWGgyWkROTmRsb3lWblZhV0Vwb1pFYzVlVmd5Wkd4aWJWWjVZVmRPWm1NeWVIcFpWRTExWlZjeGMxRklTbXdLV201TmRtUkhSbTVqZVRreVRXazBlRXhxUVhkUFFWbExTM2RaUWtKQlIwUjJla0ZDUTJkUmNVUkRhRzFPTWxKclQwZE5NVTVIVFhsTlJGa3pXVzFHYlFwWmVrVjVXVEpGTTFsVVZURk9WR3N4V2tSV2JGcFViR2xPZWxWNVRVUlNhRTFDTUVkRGFYTkhRVkZSUW1jM09IZEJVWE5GUkhkM1Rsb3liREJoU0ZacENreFhhSFpqTTFKc1drUkNTMEpuYjNKQ1owVkZRVmxQTDAxQlJVMUNSSGROVDIxb01HUklRbnBQYVRoMldqSnNNR0ZJVm1sTWJVNTJZbE01YUdRelRYUUtZMGM1TTFwWVNqQmlNamx6WTNrNWQySXpaR3hqYmxKMllqSjRla3hYZUdoaVYwcHJXVk14ZDJWWVVtOWlNalIzVDBGWlMwdDNXVUpDUVVkRWRucEJRZ3BFVVZGeFJFTm9iVTR5VVhkWmFsVjVXa1JWTkUxVVNUUlpWMXBxV1cxU2EwMVVSVFZhVkVFelRrZFJORnBIU1hwTlZFVXdUbnBCTTA5RVNtbE5RMGxIQ2tOcGMwZEJVVkZDWnpjNGQwRlJORVZHUVhkVFkyMVdiV041T1c5YVYwWnJZM2s1YTFwWVdteGlSemwzVFVKclIwTnBjMGRCVVZGQ1p6YzRkMEZST0VVS1EzZDNTazFxU1hoUFZFVTFUWHBqTlUxRVJVZERhWE5IUVZGUlFtYzNPSGRCVWtGRlNYZDNhR0ZJVWpCalNFMDJUSGs1Ym1GWVVtOWtWMGwxV1RJNWRBcE1Na1l6WTNreGQySXpaR3hqYmxKMllqSjRlazFDYTBkRGFYTkhRVkZSUW1jM09IZEJVa1ZGUTNkM1NrMVVTVFZOVkVrelRtcE5ORTFJT0VkRGFYTkhDa0ZSVVVKbk56aDNRVkpKUldOUmVIWmhTRkl3WTBoTk5reDVPVzVoV0ZKdlpGZEpkVmt5T1hSTU1rWXpZM2t4ZDJJelpHeGpibEoyWWpKNGVrd3pRbllLWkRKV2VXUkhPWFppU0UxMFlrZEdkRmx0VW1oTVdFSTFaRWRvZG1KcE9IVmFNbXd3WVVoV2FVd3paSFpqYlhSdFlrYzVNMk41T1hkamJWVjBZMjFXY3dwYVYwWjZXbE0xTldKWGVFRmpiVlp0WTNrNWIxcFhSbXRqZVRscldsaGFiR0pIT1hkTlJHZEhRMmx6UjBGUlVVSm5OemgzUVZKTlJVdG5kMjlhYW1SckNrMUhTVEZOYlZFeFQwUkZlVTlIUm0xWk1rcHJXa1JGZUU5WFZYZE9lbEpyVDBkU2FVMTZSWGhPUkdOM1RucG5lVmxxUVZsQ1oyOXlRbWRGUlVGWlR5OEtUVUZGVlVKQmIwMURTRTVxWVVkV2EyUlhlR3hOUnpSSFEybHpSMEZSVVVKbk56aDNRVkpWUlZsQmVHVmhTRkl3WTBoTk5reDVPVzVoV0ZKdlpGZEpkUXBaTWpsMFRESkdNMk41TVhkaU0yUnNZMjVTZG1JeWVIcE1NMEoyWkRKV2VXUkhPWFppU0UxMFlrZEdkRmx0VW1oTVdFSTFaRWRvZG1KcE9XaFpNMUp3Q21JeU5YcE1NMG94WW01TmRrMVVZM2RPYWsxNlQxUlJlazVxWjNaWldGSXdXbGN4ZDJSSVRYWk5WRUZYUW1kdmNrSm5SVVZCV1U4dlRVRkZWMEpCWjAwS1FtNUNNVmx0ZUhCWmVrTkNhV2RaUzB0M1dVSkNRVWhYWlZGSlJVRm5VamhDU0c5QlpVRkNNa0ZPTURsTlIzSkhlSGhGZVZsNGEyVklTbXh1VG5kTGFRcFRiRFkwTTJwNWRDODBaVXRqYjBGMlMyVTJUMEZCUVVKdFRVWmxiV05qUVVGQlVVUkJSV04zVWxGSlowSk1Xa1YzUTFnNGJFaHlLemRCT1ZBM1lXZDJDbFJ6ZDFOSGN6ZEpkWFZXWm5aNksyUnFZMWR4T0hOSlEwbFJSRGsyVkUweVlqTXpWbVI1VTJOa1VuSkpXRGhNT1VaSVpsWndMMHRvT1hGRmFVUjJkVklLY1ZCUFEwdHFRVXRDWjJkeGFHdHFUMUJSVVVSQmQwNXVRVVJDYTBGcVFUQjJURFJPT1RkSk1qSXZWMWRCTUZoYVJuZzBZblJ5VGt4WlpVOTBaMWd2YUFwc1QxcG9MMGx3Y3pSalZVeDRVVEJSYUdSdldISjBXSGhFTldWQ1VUUTBRMDFFVkZJMGNFNURjME52VTFwNlprWm1XWGhhUlM5R1MzbGtNM1pEUnpWbENtNUlaek5UZW1Fd01XSnRhSEpzVDNWVFRuaHRVamhzZVROWGNtdHBRbGxvWVhjOVBRb3RMUzB0TFVWT1JDQkRSVkpVU1VaSlEwRlVSUzB0TFMwdENnPT0ifV19fQ=="}]}, "dsseEnvelope":{"payload":"eyJfdHlwZSI6Imh0dHBzOi8vaW4tdG90by5pby9TdGF0ZW1lbnQvdjAuMSIsInByZWRpY2F0ZVR5cGUiOiJodHRwczovL3Nsc2EuZGV2L3Byb3ZlbmFuY2UvdjAuMiIsInN1YmplY3QiOlt7Im5hbWUiOiIuL2F3c19sYW1iZGFfcG93ZXJ0b29scy0zLjE5LjFhMy1weTMtbm9uZS1hbnkud2hsIiwiZGlnZXN0Ijp7InNoYTI1NiI6IjdmNThlMmUwZmViYTZkNGM1N2Y1Nzc2ZjlhNjViNzBkMDFlZTE5YmMzYTE5MmIzNzNkN2IxNDQwNDhkZDBlMzMifX0seyJuYW1lIjoiLi9hd3NfbGFtYmRhX3Bvd2VydG9vbHMtMy4xOS4xYTMudGFyLmd6IiwiZGlnZXN0Ijp7InNoYTI1NiI6IjFhNzBiZjBkYjM5NDZiZDIyZjJlNGJlMjFmOGNmYTgzODRiYzNhN2Y3MjczMzkwZGZjMWM4MmU0YTczNWUzODcifX1dLCJwcmVkaWNhdGUiOnsiYnVpbGRlciI6eyJpZCI6Imh0dHBzOi8vZ2l0aHViLmNvbS9zbHNhLWZyYW1ld29yay9zbHNhLWdpdGh1Yi1nZW5lcmF0b3IvLmdpdGh1Yi93b3JrZmxvd3MvZ2VuZXJhdG9yX2dlbmVyaWNfc2xzYTMueW1sQHJlZnMvdGFncy92Mi4xLjAifSwiYnVpbGRUeXBlIjoiaHR0cHM6Ly9naXRodWIuY29tL3Nsc2EtZnJhbWV3b3JrL3Nsc2EtZ2l0aHViLWdlbmVyYXRvci9nZW5lcmljQHYxIiwiaW52b2NhdGlvbiI6eyJjb25maWdTb3VyY2UiOnsidXJpIjoiZ2l0K2h0dHBzOi8vZ2l0aHViLmNvbS9hd3MtcG93ZXJ0b29scy9wb3dlcnRvb2xzLWxhbWJkYS1weXRob25AcmVmcy9oZWFkcy9kZXZlbG9wIiwiZGlnZXN0Ijp7InNoYTEiOiJmN2QwYjUyZDU4MTI4YWZjYmRkMTE5ZTA3NGQ4ZGIzMTE0NzA3ODJiIn0sImVudHJ5UG9pbnQiOiIuZ2l0aHViL3dvcmtmbG93cy9wcmUtcmVsZWFzZS55bWwifSwicGFyYW1ldGVycyI6eyJ2YXJzIjp7fX0sImVudmlyb25tZW50Ijp7ImdpdGh1Yl9hY3RvciI6ImxlYW5kcm9kYW1hc2NlbmEiLCJnaXRodWJfYWN0b3JfaWQiOiI0Mjk1MTczIiwiZ2l0aHViX2Jhc2VfcmVmIjoiIiwiZ2l0aHViX2V2ZW50X25hbWUiOiJzY2hlZHVsZSIsImdpdGh1Yl9ldmVudF9wYXlsb2FkIjp7ImVudGVycHJpc2UiOnsiYXZhdGFyX3VybCI6Imh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vYi8xMjkwP3Y9NCIsImNyZWF0ZWRfYXQiOiIyMDE5LTExLTEzVDE4OjA1OjQxWiIsImRlc2NyaXB0aW9uIjoiIiwiaHRtbF91cmwiOiJodHRwczovL2dpdGh1Yi5jb20vZW50ZXJwcmlzZXMvYW1hem9uIiwiaWQiOjEyOTAsIm5hbWUiOiJBbWF6b24iLCJub2RlX2lkIjoiTURFd09rVnVkR1Z5Y0hKcGMyVXhNamt3Iiwic2x1ZyI6ImFtYXpvbiIsInVwZGF0ZWRfYXQiOiIyMDI1LTA4LTEyVDIwOjU5OjE0WiIsIndlYnNpdGVfdXJsIjoiaHR0cHM6Ly93d3cuYW1hem9uLmNvbS8ifSwib3JnYW5pemF0aW9uIjp7ImF2YXRhcl91cmwiOiJodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTI5MTI3NjM4P3Y9NCIsImRlc2NyaXB0aW9uIjoiIiwiZXZlbnRzX3VybCI6Imh0dHBzOi8vYXBpLmdpdGh1Yi5jb20vb3Jncy9hd3MtcG93ZXJ0b29scy9ldmVudHMiLCJob29rc191cmwiOiJodHRwczovL2FwaS5naXRodWIuY29tL29yZ3MvYXdzLXBvd2VydG9vbHMvaG9va3MiLCJpZCI6MTI5MTI3NjM4LCJpc3N1ZXNfdXJsIjoiaHR0cHM6Ly9hcGkuZ2l0aHViLmNvbS9vcmdzL2F3cy1wb3dlcnRvb2xzL2lzc3VlcyIsImxvZ2luIjoiYXdzLXBvd2VydG9vbHMiLCJtZW1iZXJzX3VybCI6Imh0dHBzOi8vYXBpLmdpdGh1Yi5jb20vb3Jncy9hd3MtcG93ZXJ0b29scy9tZW1iZXJzey9tZW1iZXJ9Iiwibm9kZV9pZCI6Ik9fa2dET0I3SlUxZyIsInB1YmxpY19tZW1iZXJzX3VybCI6Imh0dHBzOi8vYXBpLmdpdGh1Yi5jb20vb3Jncy9hd3MtcG93ZXJ0b29scy9wdWJsaWNfbWVtYmVyc3svbWVtYmVyfSIsInJlcG9zX3VybCI6Imh0dHBzOi8vYXBpLmdpdGh1Yi5jb20vb3Jncy9hd3MtcG93ZXJ0b29scy9yZXBvcyIsInVybCI6Imh0dHBzOi8vYXBpLmdpdGh1Yi5jb20vb3Jncy9hd3MtcG93ZXJ0b29scyJ9LCJyZXBvc2l0b3J5Ijp7ImFsbG93X2ZvcmtpbmciOnRydWUsImFyY2hpdmVfdXJsIjoiaHR0cHM6Ly9hcGkuZ2l0aHViLmNvbS9yZXBvcy9hd3MtcG93ZXJ0b29scy9wb3dlcnRvb2xzLWxhbWJkYS1weXRob24ve2FyY2hpdmVfZm9ybWF0fXsvcmVmfSIsImFyY2hpdmVkIjpmYWxzZSwiYXNzaWduZWVzX3VybCI6Imh0dHBzOi8vYXBpLmdpdGh1Yi5jb20vcmVwb3MvYXdzLXBvd2VydG9vbHMvcG93ZXJ0b29scy1sYW1iZGEtcHl0aG9uL2Fzc2lnbmVlc3svdXNlcn0iLCJibG9ic191cmwiOiJodHRwczovL2FwaS5naXRodWIuY29tL3JlcG9zL2F3cy1wb3dlcnRvb2xzL3Bvd2VydG9vbHMtbGFtYmRhLXB5dGhvbi9naXQvYmxvYnN7L3NoYX0iLCJicmFuY2hlc191cmwiOiJodHRwczovL2FwaS5naXRodWIuY29tL3JlcG9zL2F3cy1wb3dlcnRvb2xzL3Bvd2VydG9vbHMtbGFtYmRhLXB5dGhvbi9icmFuY2hlc3svYnJhbmNofSIsImNsb25lX3VybCI6Imh0dHBzOi8vZ2l0aHViLmNvbS9hd3MtcG93ZXJ0b29scy9wb3dlcnRvb2xzLWxhbWJkYS1weXRob24uZ2l0IiwiY29sbGFib3JhdG9yc191cmwiOiJodHRwczovL2FwaS5naXRodWIuY29tL3JlcG9zL2F3cy1wb3dlcnRvb2xzL3Bvd2VydG9vbHMtbGFtYmRhLXB5dGhvbi9jb2xsYWJvcmF0b3Jzey9jb2xsYWJvcmF0b3J9IiwiY29tbWVudHNfdXJsIjoiaHR0cHM6Ly9hcGkuZ2l0aHViLmNvbS9yZXBvcy9hd3MtcG93ZXJ0b29scy9wb3dlcnRvb2xzLWxhbWJkYS1weXRob24vY29tbWVudHN7L251bWJlcn0iLCJjb21taXRzX3VybCI6Imh0dHBzOi8vYXBpLmdpdGh1Yi5jb20vcmVwb3MvYXdzLXBvd2VydG9vbHMvcG93ZXJ0b29scy1sYW1iZGEtcHl0aG9uL2NvbW1pdHN7L3NoYX0iLCJjb21wYXJlX3VybCI6Imh0dHBzOi8vYXBpLmdpdGh1Yi5jb20vcmVwb3MvYXdzLXBvd2VydG9vbHMvcG93ZXJ0b29scy1sYW1iZGEtcHl0aG9uL2NvbXBhcmUve2Jhc2V9Li4ue2hlYWR9IiwiY29udGVudHNfdXJsIjoiaHR0cHM6Ly9hcGkuZ2l0aHViLmNvbS9yZXBvcy9hd3MtcG93ZXJ0b29scy9wb3dlcnRvb2xzLWxhbWJkYS1weXRob24vY29udGVudHMveytwYXRofSIsImNvbnRyaWJ1dG9yc191cmwiOiJodHRwczovL2FwaS5naXRodWIuY29tL3JlcG9zL2F3cy1wb3dlcnRvb2xzL3Bvd2VydG9vbHMtbGFtYmRhLXB5dGhvbi9jb250cmlidXRvcnMiLCJjcmVhdGVkX2F0IjoiMjAxOS0xMS0xNVQxMjoyNjoxMloiLCJjdXN0b21fcHJvcGVydGllcyI6eyJzdGFnaW5nIjoiZmFsc2UiLCJ2aXNpYmlsaXR5LWFsbG93LWludGVybmFsIjoiZmFsc2UiLCJ2aXNpYmlsaXR5LWFsbG93LXByaXZhdGUiOiJmYWxzZSIsInZpc2liaWxpdHktYWxsb3ctcHVibGljIjoidHJ1ZSJ9LCJkZWZhdWx0X2JyYW5jaCI6ImRldmVsb3AiLCJkZXBsb3ltZW50c191cmwiOiJodHRwczovL2FwaS5naXRodWIuY29tL3JlcG9zL2F3cy1wb3dlcnRvb2xzL3Bvd2VydG9vbHMtbGFtYmRhLXB5dGhvbi9kZXBsb3ltZW50cyIsImRlc2NyaXB0aW9uIjoiQSBkZXZlbG9wZXIgdG9vbGtpdCB0byBpbXBsZW1lbnQgU2VydmVybGVzcyBiZXN0IHByYWN0aWNlcyBhbmQgaW5jcmVhc2UgZGV2ZWxvcGVyIHZlbG9jaXR5LiIsImRpc2FibGVkIjpmYWxzZSwiZG93bmxvYWRzX3VybCI6Imh0dHBzOi8vYXBpLmdpdGh1Yi5jb20vcmVwb3MvYXdzLXBvd2VydG9vbHMvcG93ZXJ0b29scy1sYW1iZGEtcHl0aG9uL2Rvd25sb2FkcyIsImV2ZW50c191cmwiOiJodHRwczovL2FwaS5naXRodWIuY29tL3JlcG9zL2F3cy1wb3dlcnRvb2xzL3Bvd2VydG9vbHMtbGFtYmRhLXB5dGhvbi9ldmVudHMiLCJmb3JrIjpmYWxzZSwiZm9ya3MiOjQ0NCwiZm9ya3NfY291bnQiOjQ0NCwiZm9ya3NfdXJsIjoiaHR0cHM6Ly9hcGkuZ2l0aHViLmNvbS9yZXBvcy9hd3MtcG93ZXJ0b29scy9wb3dlcnRvb2xzLWxhbWJkYS1weXRob24vZm9ya3MiLCJmdWxsX25hbWUiOiJhd3MtcG93ZXJ0b29scy9wb3dlcnRvb2xzLWxhbWJkYS1weXRob24iLCJnaXRfY29tbWl0c191cmwiOiJodHRwczovL2FwaS5naXRodWIuY29tL3JlcG9zL2F3cy1wb3dlcnRvb2xzL3Bvd2VydG9vbHMtbGFtYmRhLXB5dGhvbi9naXQvY29tbWl0c3svc2hhfSIsImdpdF9yZWZzX3VybCI6Imh0dHBzOi8vYXBpLmdpdGh1Yi5jb20vcmVwb3MvYXdzLXBvd2VydG9vbHMvcG93ZXJ0b29scy1sYW1iZGEtcHl0aG9uL2dpdC9yZWZzey9zaGF9IiwiZ2l0X3RhZ3NfdXJsIjoiaHR0cHM6Ly9hcGkuZ2l0aHViLmNvbS9yZXBvcy9hd3MtcG93ZXJ0b29scy9wb3dlcnRvb2xzLWxhbWJkYS1weXRob24vZ2l0L3RhZ3N7L3NoYX0iLCJnaXRfdXJsIjoiZ2l0Oi8vZ2l0aHViLmNvbS9hd3MtcG93ZXJ0b29scy9wb3dlcnRvb2xzLWxhbWJkYS1weXRob24uZ2l0IiwiaGFzX2Rpc2N1c3Npb25zIjp0cnVlLCJoYXNfZG93bmxvYWRzIjp0cnVlLCJoYXNfaXNzdWVzIjp0cnVlLCJoYXNfcGFnZXMiOmZhbHNlLCJoYXNfcHJvamVjdHMiOnRydWUsImhhc193aWtpIjpmYWxzZSwiaG9tZXBhZ2UiOiJodHRwczovL2RvY3MucG93ZXJ0b29scy5hd3MuZGV2L2xhbWJkYS9weXRob24vbGF0ZXN0LyIsImhvb2tzX3VybCI6Imh0dHBzOi8vYXBpLmdpdGh1Yi5jb20vcmVwb3MvYXdzLXBvd2VydG9vbHMvcG93ZXJ0b29scy1sYW1iZGEtcHl0aG9uL2hvb2tzIiwiaHRtbF91cmwiOiJodHRwczovL2dpdGh1Yi5jb20vYXdzLXBvd2VydG9vbHMvcG93ZXJ0b29scy1sYW1iZGEtcHl0aG9uIiwiaWQiOjIyMTkxOTM3OSwiaXNfdGVtcGxhdGUiOmZhbHNlLCJpc3N1ZV9jb21tZW50X3VybCI6Imh0dHBzOi8vYXBpLmdpdGh1Yi5jb20vcmVwb3MvYXdzLXBvd2VydG9vbHMvcG93ZXJ0b29scy1sYW1iZGEtcHl0aG9uL2lzc3Vlcy9jb21tZW50c3svbnVtYmVyfSIsImlzc3VlX2V2ZW50c191cmwiOiJodHRwczovL2FwaS5naXRodWIuY29tL3JlcG9zL2F3cy1wb3dlcnRvb2xzL3Bvd2VydG9vbHMtbGFtYmRhLXB5dGhvbi9pc3N1ZXMvZXZlbnRzey9udW1iZXJ9IiwiaXNzdWVzX3VybCI6Imh0dHBzOi8vYXBpLmdpdGh1Yi5jb20vcmVwb3MvYXdzLXBvd2VydG9vbHMvcG93ZXJ0b29scy1sYW1iZGEtcHl0aG9uL2lzc3Vlc3svbnVtYmVyfSIsImtleXNfdXJsIjoiaHR0cHM6Ly9hcGkuZ2l0aHViLmNvbS9yZXBvcy9hd3MtcG93ZXJ0b29scy9wb3dlcnRvb2xzLWxhbWJkYS1weXRob24va2V5c3sva2V5X2lkfSIsImxhYmVsc191cmwiOiJodHRwczovL2FwaS5naXRodWIuY29tL3JlcG9zL2F3cy1wb3dlcnRvb2xzL3Bvd2VydG9vbHMtbGFtYmRhLXB5dGhvbi9sYWJlbHN7L25hbWV9IiwibGFuZ3VhZ2UiOiJQeXRob24iLCJsYW5ndWFnZXNfdXJsIjoiaHR0cHM6Ly9hcGkuZ2l0aHViLmNvbS9yZXBvcy9hd3MtcG93ZXJ0b29scy9wb3dlcnRvb2xzLWxhbWJkYS1weXRob24vbGFuZ3VhZ2VzIiwibGljZW5zZSI6eyJrZXkiOiJtaXQtMCIsIm5hbWUiOiJNSVQgTm8gQXR0cmlidXRpb24iLCJub2RlX2lkIjoiTURjNlRHbGpaVzV6WlRReCIsInNwZHhfaWQiOiJNSVQtMCIsInVybCI6Imh0dHBzOi8vYXBpLmdpdGh1Yi5jb20vbGljZW5zZXMvbWl0LTAifSwibWVyZ2VzX3VybCI6Imh0dHBzOi8vYXBpLmdpdGh1Yi5jb20vcmVwb3MvYXdzLXBvd2VydG9vbHMvcG93ZXJ0b29scy1sYW1iZGEtcHl0aG9uL21lcmdlcyIsIm1pbGVzdG9uZXNfdXJsIjoiaHR0cHM6Ly9hcGkuZ2l0aHViLmNvbS9yZXBvcy9hd3MtcG93ZXJ0b29scy9wb3dlcnRvb2xzLWxhbWJkYS1weXRob24vbWlsZXN0b25lc3svbnVtYmVyfSIsIm1pcnJvcl91cmwiOm51bGwsIm5hbWUiOiJwb3dlcnRvb2xzLWxhbWJkYS1weXRob24iLCJub2RlX2lkIjoiTURFd09sSmxjRzl6YVhSdmNua3lNakU1TVRrek56az0iLCJub3RpZmljYXRpb25zX3VybCI6Imh0dHBzOi8vYXBpLmdpdGh1Yi5jb20vcmVwb3MvYXdzLXBvd2VydG9vbHMvcG93ZXJ0b29scy1sYW1iZGEtcHl0aG9uL25vdGlmaWNhdGlvbnN7P3NpbmNlLGFsbCxwYXJ0aWNpcGF0aW5nfSIsIm9wZW5faXNzdWVzIjo1OSwib3Blbl9pc3N1ZXNfY291bnQiOjU5LCJvd25lciI6eyJhdmF0YXJfdXJsIjoiaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzEyOTEyNzYzOD92PTQiLCJldmVudHNfdXJsIjoiaHR0cHM6Ly9hcGkuZ2l0aHViLmNvbS91c2Vycy9hd3MtcG93ZXJ0b29scy9ldmVudHN7L3ByaXZhY3l9IiwiZm9sbG93ZXJzX3VybCI6Imh0dHBzOi8vYXBpLmdpdGh1Yi5jb20vdXNlcnMvYXdzLXBvd2VydG9vbHMvZm9sbG93ZXJzIiwiZm9sbG93aW5nX3VybCI6Imh0dHBzOi8vYXBpLmdpdGh1Yi5jb20vdXNlcnMvYXdzLXBvd2VydG9vbHMvZm9sbG93aW5ney9vdGhlcl91c2VyfSIsImdpc3RzX3VybCI6Imh0dHBzOi8vYXBpLmdpdGh1Yi5jb20vdXNlcnMvYXdzLXBvd2VydG9vbHMvZ2lzdHN7L2dpc3RfaWR9IiwiZ3JhdmF0YXJfaWQiOiIiLCJodG1sX3VybCI6Imh0dHBzOi8vZ2l0aHViLmNvbS9hd3MtcG93ZXJ0b29scyIsImlkIjoxMjkxMjc2MzgsImxvZ2luIjoiYXdzLXBvd2VydG9vbHMiLCJub2RlX2lkIjoiT19rZ0RPQjdKVTFnIiwib3JnYW5pemF0aW9uc191cmwiOiJodHRwczovL2FwaS5naXRodWIuY29tL3VzZXJzL2F3cy1wb3dlcnRvb2xzL29yZ3MiLCJyZWNlaXZlZF9ldmVudHNfdXJsIjoiaHR0cHM6Ly9hcGkuZ2l0aHViLmNvbS91c2Vycy9hd3MtcG93ZXJ0b29scy9yZWNlaXZlZF9ldmVudHMiLCJyZXBvc191cmwiOiJodHRwczovL2FwaS5naXRodWIuY29tL3VzZXJzL2F3cy1wb3dlcnRvb2xzL3JlcG9zIiwic2l0ZV9hZG1pbiI6ZmFsc2UsInN0YXJyZWRfdXJsIjoiaHR0cHM6Ly9hcGkuZ2l0aHViLmNvbS91c2Vycy9hd3MtcG93ZXJ0b29scy9zdGFycmVkey9vd25lcn17L3JlcG99Iiwic3Vic2NyaXB0aW9uc191cmwiOiJodHRwczovL2FwaS5naXRodWIuY29tL3VzZXJzL2F3cy1wb3dlcnRvb2xzL3N1YnNjcmlwdGlvbnMiLCJ0eXBlIjoiT3JnYW5pemF0aW9uIiwidXJsIjoiaHR0cHM6Ly9hcGkuZ2l0aHViLmNvbS91c2Vycy9hd3MtcG93ZXJ0b29scyIsInVzZXJfdmlld190eXBlIjoicHVibGljIn0sInByaXZhdGUiOmZhbHNlLCJwdWxsc191cmwiOiJodHRwczovL2FwaS5naXRodWIuY29tL3JlcG9zL2F3cy1wb3dlcnRvb2xzL3Bvd2VydG9vbHMtbGFtYmRhLXB5dGhvbi9wdWxsc3svbnVtYmVyfSIsInB1c2hlZF9hdCI6IjIwMjUtMDgtMTlUMDc6MjY6MjJaIiwicmVsZWFzZXNfdXJsIjoiaHR0cHM6Ly9hcGkuZ2l0aHViLmNvbS9yZXBvcy9hd3MtcG93ZXJ0b29scy9wb3dlcnRvb2xzLWxhbWJkYS1weXRob24vcmVsZWFzZXN7L2lkfSIsInNpemUiOjEzMDkzNywic3NoX3VybCI6ImdpdEBnaXRodWIuY29tOmF3cy1wb3dlcnRvb2xzL3Bvd2VydG9vbHMtbGFtYmRhLXB5dGhvbi5naXQiLCJzdGFyZ2F6ZXJzX2NvdW50IjozMTI1LCJzdGFyZ2F6ZXJzX3VybCI6Imh0dHBzOi8vYXBpLmdpdGh1Yi5jb20vcmVwb3MvYXdzLXBvd2VydG9vbHMvcG93ZXJ0b29scy1sYW1iZGEtcHl0aG9uL3N0YXJnYXplcnMiLCJzdGF0dXNlc191cmwiOiJodHRwczovL2FwaS5naXRodWIuY29tL3JlcG9zL2F3cy1wb3dlcnRvb2xzL3Bvd2VydG9vbHMtbGFtYmRhLXB5dGhvbi9zdGF0dXNlcy97c2hhfSIsInN1YnNjcmliZXJzX3VybCI6Imh0dHBzOi8vYXBpLmdpdGh1Yi5jb20vcmVwb3MvYXdzLXBvd2VydG9vbHMvcG93ZXJ0b29scy1sYW1iZGEtcHl0aG9uL3N1YnNjcmliZXJzIiwic3Vic2NyaXB0aW9uX3VybCI6Imh0dHBzOi8vYXBpLmdpdGh1Yi5jb20vcmVwb3MvYXdzLXBvd2VydG9vbHMvcG93ZXJ0b29scy1sYW1iZGEtcHl0aG9uL3N1YnNjcmlwdGlvbiIsInN2bl91cmwiOiJodHRwczovL2dpdGh1Yi5jb20vYXdzLXBvd2VydG9vbHMvcG93ZXJ0b29scy1sYW1iZGEtcHl0aG9uIiwidGFnc191cmwiOiJodHRwczovL2FwaS5naXRodWIuY29tL3JlcG9zL2F3cy1wb3dlcnRvb2xzL3Bvd2VydG9vbHMtbGFtYmRhLXB5dGhvbi90YWdzIiwidGVhbXNfdXJsIjoiaHR0cHM6Ly9hcGkuZ2l0aHViLmNvbS9yZXBvcy9hd3MtcG93ZXJ0b29scy9wb3dlcnRvb2xzLWxhbWJkYS1weXRob24vdGVhbXMiLCJ0b3BpY3MiOlsiYXdzIiwiYXdzLWxhbWJkYSIsImxhbWJkYSIsInB5dGhvbiIsInNlcnZlcmxlc3MiXSwidHJlZXNfdXJsIjoiaHR0cHM6Ly9hcGkuZ2l0aHViLmNvbS9yZXBvcy9hd3MtcG93ZXJ0b29scy9wb3dlcnRvb2xzLWxhbWJkYS1weXRob24vZ2l0L3RyZWVzey9zaGF9IiwidXBkYXRlZF9hdCI6IjIwMjUtMDgtMThUMTU6NTg6NTlaIiwidXJsIjoiaHR0cHM6Ly9hcGkuZ2l0aHViLmNvbS9yZXBvcy9hd3MtcG93ZXJ0b29scy9wb3dlcnRvb2xzLWxhbWJkYS1weXRob24iLCJ2aXNpYmlsaXR5IjoicHVibGljIiwid2F0Y2hlcnMiOjMxMjUsIndhdGNoZXJzX2NvdW50IjozMTI1LCJ3ZWJfY29tbWl0X3NpZ25vZmZfcmVxdWlyZWQiOnRydWV9LCJzY2hlZHVsZSI6IjAgOCAqICogMS01Iiwid29ya2Zsb3ciOiIuZ2l0aHViL3dvcmtmbG93cy9wcmUtcmVsZWFzZS55bWwifSwiZ2l0aHViX2hlYWRfcmVmIjoiIiwiZ2l0aHViX3JlZiI6InJlZnMvaGVhZHMvZGV2ZWxvcCIsImdpdGh1Yl9yZWZfdHlwZSI6ImJyYW5jaCIsImdpdGh1Yl9yZXBvc2l0b3J5X2lkIjoiMjIxOTE5Mzc5IiwiZ2l0aHViX3JlcG9zaXRvcnlfb3duZXIiOiJhd3MtcG93ZXJ0b29scyIsImdpdGh1Yl9yZXBvc2l0b3J5X293bmVyX2lkIjoiMTI5MTI3NjM4IiwiZ2l0aHViX3J1bl9hdHRlbXB0IjoiMSIsImdpdGh1Yl9ydW5faWQiOiIxNzA2MzM5NDM2OCIsImdpdGh1Yl9ydW5fbnVtYmVyIjoiMzA5IiwiZ2l0aHViX3NoYTEiOiJmN2QwYjUyZDU4MTI4YWZjYmRkMTE5ZTA3NGQ4ZGIzMTE0NzA3ODJiIn19LCJtZXRhZGF0YSI6eyJidWlsZEludm9jYXRpb25JRCI6IjE3MDYzMzk0MzY4LTEiLCJjb21wbGV0ZW5lc3MiOnsicGFyYW1ldGVycyI6dHJ1ZSwiZW52aXJvbm1lbnQiOmZhbHNlLCJtYXRlcmlhbHMiOmZhbHNlfSwicmVwcm9kdWNpYmxlIjpmYWxzZX0sIm1hdGVyaWFscyI6W3sidXJpIjoiZ2l0K2h0dHBzOi8vZ2l0aHViLmNvbS9hd3MtcG93ZXJ0b29scy9wb3dlcnRvb2xzLWxhbWJkYS1weXRob25AcmVmcy9oZWFkcy9kZXZlbG9wIiwiZGlnZXN0Ijp7InNoYTEiOiJmN2QwYjUyZDU4MTI4YWZjYmRkMTE5ZTA3NGQ4ZGIzMTE0NzA3ODJiIn19XX19", "payloadType":"application/vnd.in-toto+json", "signatures":[{"sig":"MEUCIQDV1EhgEIhxdwzhJYEKSR7C2FXyZCSzL95nBEFnRw/MaAIgWX42Udwi+q7tfvGgKOOPGIH2//4wQ+qlEoe/aVtQfHs="}]}} \ No newline at end of file diff --git a/provenance/3.19.1a4/multiple.intoto.jsonl b/provenance/3.19.1a4/multiple.intoto.jsonl new file mode 100644 index 00000000000..e0ea7c58af6 --- /dev/null +++ b/provenance/3.19.1a4/multiple.intoto.jsonl @@ -0,0 +1 @@ +{"mediaType":"application/vnd.dev.sigstore.bundle.v0.3+json", "verificationMaterial":{"certificate":{"rawBytes":"MIIHZjCCBu2gAwIBAgIUB4ksukGJ/Ew0/+RC1CMCUG6qbDUwCgYIKoZIzj0EAwMwNzEVMBMGA1UEChMMc2lnc3RvcmUuZGV2MR4wHAYDVQQDExVzaWdzdG9yZS1pbnRlcm1lZGlhdGUwHhcNMjUwODIwMDgwNzMxWhcNMjUwODIwMDgxNzMxWjAAMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE0qkOdYVQFBUv4of6to1Yub/6PDAxrF+ZxPeH7rx4VPLXt6nx+q5YpbXwcpnO4ault9g3W1Df/gOfdT/YbZlQR6OCBgwwggYIMA4GA1UdDwEB/wQEAwIHgDATBgNVHSUEDDAKBggrBgEFBQcDAzAdBgNVHQ4EFgQUGcxlixxMbzBpFBj9G5uMMZ/jJQUwHwYDVR0jBBgwFoAU39Ppz1YkEZb5qNjpKFWixi4YZD8wgYQGA1UdEQEB/wR6MHiGdmh0dHBzOi8vZ2l0aHViLmNvbS9zbHNhLWZyYW1ld29yay9zbHNhLWdpdGh1Yi1nZW5lcmF0b3IvLmdpdGh1Yi93b3JrZmxvd3MvZ2VuZXJhdG9yX2dlbmVyaWNfc2xzYTMueW1sQHJlZnMvdGFncy92Mi4xLjAwOQYKKwYBBAGDvzABAQQraHR0cHM6Ly90b2tlbi5hY3Rpb25zLmdpdGh1YnVzZXJjb250ZW50LmNvbTAWBgorBgEEAYO/MAECBAhzY2hlZHVsZTA2BgorBgEEAYO/MAEDBCg5ZWQxNGRiYTdmZDkwNGMyMzJmZDRlOWM5MGEwZDIxNDM1MTk5MDA3MBkGCisGAQQBg78wAQQEC1ByZS1SZWxlYXNlMDUGCisGAQQBg78wAQUEJ2F3cy1wb3dlcnRvb2xzL3Bvd2VydG9vbHMtbGFtYmRhLXB5dGhvbjAgBgorBgEEAYO/MAEGBBJyZWZzL2hlYWRzL2RldmVsb3AwOwYKKwYBBAGDvzABCAQtDCtodHRwczovL3Rva2VuLmFjdGlvbnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tMIGGBgorBgEEAYO/MAEJBHgMdmh0dHBzOi8vZ2l0aHViLmNvbS9zbHNhLWZyYW1ld29yay9zbHNhLWdpdGh1Yi1nZW5lcmF0b3IvLmdpdGh1Yi93b3JrZmxvd3MvZ2VuZXJhdG9yX2dlbmVyaWNfc2xzYTMueW1sQHJlZnMvdGFncy92Mi4xLjAwOAYKKwYBBAGDvzABCgQqDChmN2RkOGM1NGMyMDY3YmFmYzEyY2E3YTU1NTk1ZDVlZTliNzUyMDRhMB0GCisGAQQBg78wAQsEDwwNZ2l0aHViLWhvc3RlZDBKBgorBgEEAYO/MAEMBDwMOmh0dHBzOi8vZ2l0aHViLmNvbS9hd3MtcG93ZXJ0b29scy9wb3dlcnRvb2xzLWxhbWJkYS1weXRob24wOAYKKwYBBAGDvzABDQQqDCg5ZWQxNGRiYTdmZDkwNGMyMzJmZDRlOWM5MGEwZDIxNDM1MTk5MDA3MCIGCisGAQQBg78wAQ4EFAwScmVmcy9oZWFkcy9kZXZlbG9wMBkGCisGAQQBg78wAQ8ECwwJMjIxOTE5Mzc5MDEGCisGAQQBg78wARAEIwwhaHR0cHM6Ly9naXRodWIuY29tL2F3cy1wb3dlcnRvb2xzMBkGCisGAQQBg78wAREECwwJMTI5MTI3NjM4MH8GCisGAQQBg78wARIEcQxvaHR0cHM6Ly9naXRodWIuY29tL2F3cy1wb3dlcnRvb2xzL3Bvd2VydG9vbHMtbGFtYmRhLXB5dGhvbi8uZ2l0aHViL3dvcmtmbG93cy9wcmUtcmVsZWFzZS55bWxAcmVmcy9oZWFkcy9kZXZlbG9wMDgGCisGAQQBg78wARMEKgwoOWVkMTRkYmE3ZmQ5MDRjMjMyZmQ0ZTljOTBhMGQyMTQzNTE5OTAwNzAYBgorBgEEAYO/MAEUBAoMCHNjaGVkdWxlMG4GCisGAQQBg78wARUEYAxeaHR0cHM6Ly9naXRodWIuY29tL2F3cy1wb3dlcnRvb2xzL3Bvd2VydG9vbHMtbGFtYmRhLXB5dGhvbi9hY3Rpb25zL3J1bnMvMTcwOTIzMjY5OTYvYXR0ZW1wdHMvMTAWBgorBgEEAYO/MAEWBAgMBnB1YmxpYzCBiwYKKwYBBAHWeQIEAgR9BHsAeQB3AN09MGrGxxEyYxkeHJlnNwKiSl643jyt/4eKcoAvKe6OAAABmMaE1yAAAAQDAEgwRgIhAJRD/BEg4lKGQEIfcwcnKb56vcGyGKYKjvSyB1sHTC/kAiEAthsq1fRu3ZNTt6hvTXAnardFllSPIUvuR3hm5yEn490wCgYIKoZIzj0EAwMDZwAwZAIwGof4agkAuioL6WgLDovlZsvU4fH1VZgeq5HGzgk6r+pUo5toHW0kYiJKpjib40SRAjAYPlw8axk7nVHfoOY0GPfx+M/82QrGthQ0JH1GC1J/mgHvJ4l2v+krFH7aZkKlCmU="}, "tlogEntries":[{"logIndex":"412300194", "logId":{"keyId":"wNI9atQGlz+VWfO6LRygH4QUfY/8W4RFwiT5i5WRgB0="}, "kindVersion":{"kind":"dsse", "version":"0.0.1"}, "integratedTime":"1755677251", "inclusionPromise":{"signedEntryTimestamp":"MEQCIF02arQtyuCqyvPYU1b+JjiyBPMmdjYBt4ig+CcZf/mQAiBrGitDXq4OefpKnppkJq+4HmQD5plNx9edMg2efJtIDA=="}, "inclusionProof":{"logIndex":"290395932", "rootHash":"/LebhrRXwSZu+NMtISdJL2J3K3piDPqd0ZJ4spkB5IY=", "treeSize":"290395938", "hashes":["d72r1Fp+ya4LqknVCbXec8XNrE9gIks34MWPhsSe1J4=", "c0zeudzXkQwE71FM0GEBgUy8WOIP2fg/uzK/i+s+fG4=", "8oegJC2LKdGeO1UKxWflWcoU5THVYm1M5tuXGqndSME=", "uCS6uVydaYOWyhNFSxkxQpADKujZhT2OoLli9zTZuIY=", "wohpOGSEc+5hLlm3tO5ZzAlaKO96sFIwXI/6VZPenko=", "3VwinQO9JeDgEHaCLRPNOko74n4NKntaHRRY2A/WsEc=", "K9b79ysmNnVsjWJxoR8ty1awTvPD2Xjk+fcOWBn84lQ=", "ZmUT8Xo5wkbu7uW58Y6mPLOVD/dV2s/HmF8ep/M1B5U=", "VnmSVXtajijGQpIzWR079J0633XxitVw+7yDYsedD/c=", "TxL2+JSA21x8C1hQ0HTSH4zJSMOvEFqoxNMfvJqGTAw=", "qTkTcgHlqecaeGmaLw/CYwmhovyy3dZkvBasnvNBOhI=", "TvT+OPPRqwE/nUzlEADnbeJ5R6X38pu6Z45nO3Uk1q0=", "fJzsGtfvPvU/nXUqVJQIAMevL6vQWPgk1MHbsY/ms4Q=", "JPrO6Ghudzl77YGeigUduahQIFkrZj/ArLEqsQAn0VI=", "mSczRxuNTuwK+4InPWfilcMir8iekGpLhBtbjsP7wXQ=", "mY/RW4xaHcEl4tg806MlgeKlHNQKRa1JOmEp9GuAcKY=", "vS7O4ozHIQZJWBiov+mkpI27GE8zAmVCEkRcP3NDyNE="], "checkpoint":{"envelope":"rekor.sigstore.dev - 1193050959916656506\n290395938\n/LebhrRXwSZu+NMtISdJL2J3K3piDPqd0ZJ4spkB5IY=\n\n— rekor.sigstore.dev wNI9ajBFAiBAfrdgay2/IcWqRzNmTLdSUGHaSnxUDq2eoToF206GvQIhAKbnCSbr3HM+vqmM79tobiieNo5SHMs7KatRLPoZcDAm\n"}}, "canonicalizedBody":"eyJhcGlWZXJzaW9uIjoiMC4wLjEiLCJraW5kIjoiZHNzZSIsInNwZWMiOnsiZW52ZWxvcGVIYXNoIjp7ImFsZ29yaXRobSI6InNoYTI1NiIsInZhbHVlIjoiNThhYjU5ZThlZDBjYWI2NzY5YjU1ZWI5MDc5ZDQ2ZTg1YmIzOWUwMDkzY2NkMzg3YjA0YzQwMGEwOTMzZjAwYyJ9LCJwYXlsb2FkSGFzaCI6eyJhbGdvcml0aG0iOiJzaGEyNTYiLCJ2YWx1ZSI6IjYwYzFhMjZjN2JkYzIxY2JjZTkyNzUyZTI4MmUyOTljNzVkNjM4ZmUwMmMwOWQ1MDE5ZGYxODZhOTZmZTIyNzMifSwic2lnbmF0dXJlcyI6W3sic2lnbmF0dXJlIjoiTUVRQ0lGVUh2c25zcStaUkJoazNPT3NOWFJMYVFDWFFGdFV6cm45S3p2a2hmNUZOQWlCTmpEc0FLODBzTWlEdy92K2MvbjFKQXV4dzJobXVmMkdKNjRnSkpvTzRYZz09IiwidmVyaWZpZXIiOiJMUzB0TFMxQ1JVZEpUaUJEUlZKVVNVWkpRMEZVUlMwdExTMHRDazFKU1VoYWFrTkRRblV5WjBGM1NVSkJaMGxWUWpScmMzVnJSMG92Ulhjd0x5dFNRekZEVFVOVlJ6WnhZa1JWZDBObldVbExiMXBKZW1vd1JVRjNUWGNLVG5wRlZrMUNUVWRCTVZWRlEyaE5UV015Ykc1ak0xSjJZMjFWZFZwSFZqSk5ValIzU0VGWlJGWlJVVVJGZUZaNllWZGtlbVJIT1hsYVV6RndZbTVTYkFwamJURnNXa2RzYUdSSFZYZElhR05PVFdwVmQwOUVTWGROUkdkM1RucE5lRmRvWTA1TmFsVjNUMFJKZDAxRVozaE9lazE0VjJwQlFVMUdhM2RGZDFsSUNrdHZXa2w2YWpCRFFWRlpTVXR2V2tsNmFqQkVRVkZqUkZGblFVVXdjV3RQWkZsV1VVWkNWWFkwYjJZMmRHOHhXWFZpTHpaUVJFRjRja1lyV25oUVpVZ0tOM0o0TkZaUVRGaDBObTU0SzNFMVdYQmlXSGRqY0c1UE5HRjFiSFE1WnpOWE1VUm1MMmRQWm1SVUwxbGlXbXhSVWpaUFEwSm5kM2RuWjFsSlRVRTBSd3BCTVZWa1JIZEZRaTkzVVVWQmQwbElaMFJCVkVKblRsWklVMVZGUkVSQlMwSm5aM0pDWjBWR1FsRmpSRUY2UVdSQ1owNVdTRkUwUlVablVWVkhZM2hzQ21sNGVFMWlla0p3UmtKcU9VYzFkVTFOV2k5cVNsRlZkMGgzV1VSV1VqQnFRa0puZDBadlFWVXpPVkJ3ZWpGWmEwVmFZalZ4VG1wd1MwWlhhWGhwTkZrS1drUTRkMmRaVVVkQk1WVmtSVkZGUWk5M1VqWk5TR2xIWkcxb01HUklRbnBQYVRoMldqSnNNR0ZJVm1sTWJVNTJZbE01ZW1KSVRtaE1WMXA1V1ZjeGJBcGtNamw1WVhrNWVtSklUbWhNVjJSd1pFZG9NVmxwTVc1YVZ6VnNZMjFHTUdJelNYWk1iV1J3WkVkb01WbHBPVE5pTTBweVdtMTRkbVF6VFhaYU1sWjFDbHBZU21oa1J6bDVXREprYkdKdFZubGhWMDVtWXpKNGVsbFVUWFZsVnpGelVVaEtiRnB1VFhaa1IwWnVZM2s1TWsxcE5IaE1ha0YzVDFGWlMwdDNXVUlLUWtGSFJIWjZRVUpCVVZGeVlVaFNNR05JVFRaTWVUa3dZakowYkdKcE5XaFpNMUp3WWpJMWVreHRaSEJrUjJneFdXNVdlbHBZU21waU1qVXdXbGMxTUFwTWJVNTJZbFJCVjBKbmIzSkNaMFZGUVZsUEwwMUJSVU5DUVdoNldUSm9iRnBJVm5OYVZFRXlRbWR2Y2tKblJVVkJXVTh2VFVGRlJFSkRaelZhVjFGNENrNUhVbWxaVkdSdFdrUnJkMDVIVFhsTmVrcHRXa1JTYkU5WFRUVk5SMFYzV2tSSmVFNUVUVEZOVkdzMVRVUkJNMDFDYTBkRGFYTkhRVkZSUW1jM09IY0tRVkZSUlVNeFFubGFVekZUV2xkNGJGbFlUbXhOUkZWSFEybHpSMEZSVVVKbk56aDNRVkZWUlVveVJqTmplVEYzWWpOa2JHTnVVblppTW5oNlRETkNkZ3BrTWxaNVpFYzVkbUpJVFhSaVIwWjBXVzFTYUV4WVFqVmtSMmgyWW1wQlowSm5iM0pDWjBWRlFWbFBMMDFCUlVkQ1FrcDVXbGRhZWt3eWFHeFpWMUo2Q2t3eVVteGtiVlp6WWpOQmQwOTNXVXRMZDFsQ1FrRkhSSFo2UVVKRFFWRjBSRU4wYjJSSVVuZGplbTkyVEROU2RtRXlWblZNYlVacVpFZHNkbUp1VFhVS1dqSnNNR0ZJVm1sa1dFNXNZMjFPZG1KdVVteGlibEYxV1RJNWRFMUpSMGRDWjI5eVFtZEZSVUZaVHk5TlFVVktRa2huVFdSdGFEQmtTRUo2VDJrNGRncGFNbXd3WVVoV2FVeHRUblppVXpsNllraE9hRXhYV25sWlZ6RnNaREk1ZVdGNU9YcGlTRTVvVEZka2NHUkhhREZaYVRGdVdsYzFiR050UmpCaU0wbDJDa3h0WkhCa1IyZ3hXV2s1TTJJelNuSmFiWGgyWkROTmRsb3lWblZhV0Vwb1pFYzVlVmd5Wkd4aWJWWjVZVmRPWm1NeWVIcFpWRTExWlZjeGMxRklTbXdLV201TmRtUkhSbTVqZVRreVRXazBlRXhxUVhkUFFWbExTM2RaUWtKQlIwUjJla0ZDUTJkUmNVUkRhRzFPTWxKclQwZE5NVTVIVFhsTlJGa3pXVzFHYlFwWmVrVjVXVEpGTTFsVVZURk9WR3N4V2tSV2JGcFViR2xPZWxWNVRVUlNhRTFDTUVkRGFYTkhRVkZSUW1jM09IZEJVWE5GUkhkM1Rsb3liREJoU0ZacENreFhhSFpqTTFKc1drUkNTMEpuYjNKQ1owVkZRVmxQTDAxQlJVMUNSSGROVDIxb01HUklRbnBQYVRoMldqSnNNR0ZJVm1sTWJVNTJZbE01YUdRelRYUUtZMGM1TTFwWVNqQmlNamx6WTNrNWQySXpaR3hqYmxKMllqSjRla3hYZUdoaVYwcHJXVk14ZDJWWVVtOWlNalIzVDBGWlMwdDNXVUpDUVVkRWRucEJRZ3BFVVZGeFJFTm5OVnBYVVhoT1IxSnBXVlJrYlZwRWEzZE9SMDE1VFhwS2JWcEVVbXhQVjAwMVRVZEZkMXBFU1hoT1JFMHhUVlJyTlUxRVFUTk5RMGxIQ2tOcGMwZEJVVkZDWnpjNGQwRlJORVZHUVhkVFkyMVdiV041T1c5YVYwWnJZM2s1YTFwWVdteGlSemwzVFVKclIwTnBjMGRCVVZGQ1p6YzRkMEZST0VVS1EzZDNTazFxU1hoUFZFVTFUWHBqTlUxRVJVZERhWE5IUVZGUlFtYzNPSGRCVWtGRlNYZDNhR0ZJVWpCalNFMDJUSGs1Ym1GWVVtOWtWMGwxV1RJNWRBcE1Na1l6WTNreGQySXpaR3hqYmxKMllqSjRlazFDYTBkRGFYTkhRVkZSUW1jM09IZEJVa1ZGUTNkM1NrMVVTVFZOVkVrelRtcE5ORTFJT0VkRGFYTkhDa0ZSVVVKbk56aDNRVkpKUldOUmVIWmhTRkl3WTBoTk5reDVPVzVoV0ZKdlpGZEpkVmt5T1hSTU1rWXpZM2t4ZDJJelpHeGpibEoyWWpKNGVrd3pRbllLWkRKV2VXUkhPWFppU0UxMFlrZEdkRmx0VW1oTVdFSTFaRWRvZG1KcE9IVmFNbXd3WVVoV2FVd3paSFpqYlhSdFlrYzVNMk41T1hkamJWVjBZMjFXY3dwYVYwWjZXbE0xTldKWGVFRmpiVlp0WTNrNWIxcFhSbXRqZVRscldsaGFiR0pIT1hkTlJHZEhRMmx6UjBGUlVVSm5OemgzUVZKTlJVdG5kMjlQVjFackNrMVVVbXRaYlVVeldtMVJOVTFFVW1wTmFrMTVXbTFSTUZwVWJHcFBWRUpvVFVkUmVVMVVVWHBPVkVVMVQxUkJkMDU2UVZsQ1oyOXlRbWRGUlVGWlR5OEtUVUZGVlVKQmIwMURTRTVxWVVkV2EyUlhlR3hOUnpSSFEybHpSMEZSVVVKbk56aDNRVkpWUlZsQmVHVmhTRkl3WTBoTk5reDVPVzVoV0ZKdlpGZEpkUXBaTWpsMFRESkdNMk41TVhkaU0yUnNZMjVTZG1JeWVIcE1NMEoyWkRKV2VXUkhPWFppU0UxMFlrZEdkRmx0VW1oTVdFSTFaRWRvZG1KcE9XaFpNMUp3Q21JeU5YcE1NMG94WW01TmRrMVVZM2RQVkVsNlRXcFpOVTlVV1haWldGSXdXbGN4ZDJSSVRYWk5WRUZYUW1kdmNrSm5SVVZCV1U4dlRVRkZWMEpCWjAwS1FtNUNNVmx0ZUhCWmVrTkNhWGRaUzB0M1dVSkNRVWhYWlZGSlJVRm5VamxDU0hOQlpWRkNNMEZPTURsTlIzSkhlSGhGZVZsNGEyVklTbXh1VG5kTGFRcFRiRFkwTTJwNWRDODBaVXRqYjBGMlMyVTJUMEZCUVVKdFRXRkZNWGxCUVVGQlVVUkJSV2QzVW1kSmFFRktVa1F2UWtWbk5HeExSMUZGU1daamQyTnVDa3RpTlRaMlkwZDVSMHRaUzJwMlUzbENNWE5JVkVNdmEwRnBSVUYwYUhOeE1XWlNkVE5hVGxSME5taDJWRmhCYm1GeVpFWnNiRk5RU1ZWMmRWSXphRzBLTlhsRmJqUTVNSGREWjFsSlMyOWFTWHBxTUVWQmQwMUVXbmRCZDFwQlNYZEhiMlkwWVdkclFYVnBiMHcyVjJkTVJHOTJiRnB6ZGxVMFprZ3hWbHBuWlFweE5VaEhlbWRyTm5JcmNGVnZOWFJ2U0Zjd2ExbHBTa3R3YW1saU5EQlRVa0ZxUVZsUWJIYzRZWGhyTjI1V1NHWnZUMWt3UjFCbWVDdE5Memd5VVhKSENuUm9VVEJLU0RGSFF6RktMMjFuU0haS05Hd3lkaXRyY2taSU4yRmFhMHRzUTIxVlBRb3RMUzB0TFVWT1JDQkRSVkpVU1VaSlEwRlVSUzB0TFMwdENnPT0ifV19fQ=="}]}, "dsseEnvelope":{"payload":"eyJfdHlwZSI6Imh0dHBzOi8vaW4tdG90by5pby9TdGF0ZW1lbnQvdjAuMSIsInByZWRpY2F0ZVR5cGUiOiJodHRwczovL3Nsc2EuZGV2L3Byb3ZlbmFuY2UvdjAuMiIsInN1YmplY3QiOlt7Im5hbWUiOiIuL2F3c19sYW1iZGFfcG93ZXJ0b29scy0zLjE5LjFhNC1weTMtbm9uZS1hbnkud2hsIiwiZGlnZXN0Ijp7InNoYTI1NiI6IjY0M2U2NTZjM2Q2MThjMGQ3YzVlNzgzYTY5MzEwYWE3M2U3YmViNjBhMzY1ZWE3ZjI5YzJmYzZjODVlNzdjNjcifX0seyJuYW1lIjoiLi9hd3NfbGFtYmRhX3Bvd2VydG9vbHMtMy4xOS4xYTQudGFyLmd6IiwiZGlnZXN0Ijp7InNoYTI1NiI6IjUzZjUxZmFlMTQ1NWE3YThkY2U3NGQxNjUzOGEyYzUwNzBhYjk0MzFhYWIwM2IyY2U1ZGExMzM4Y2NlYWI0NTkifX1dLCJwcmVkaWNhdGUiOnsiYnVpbGRlciI6eyJpZCI6Imh0dHBzOi8vZ2l0aHViLmNvbS9zbHNhLWZyYW1ld29yay9zbHNhLWdpdGh1Yi1nZW5lcmF0b3IvLmdpdGh1Yi93b3JrZmxvd3MvZ2VuZXJhdG9yX2dlbmVyaWNfc2xzYTMueW1sQHJlZnMvdGFncy92Mi4xLjAifSwiYnVpbGRUeXBlIjoiaHR0cHM6Ly9naXRodWIuY29tL3Nsc2EtZnJhbWV3b3JrL3Nsc2EtZ2l0aHViLWdlbmVyYXRvci9nZW5lcmljQHYxIiwiaW52b2NhdGlvbiI6eyJjb25maWdTb3VyY2UiOnsidXJpIjoiZ2l0K2h0dHBzOi8vZ2l0aHViLmNvbS9hd3MtcG93ZXJ0b29scy9wb3dlcnRvb2xzLWxhbWJkYS1weXRob25AcmVmcy9oZWFkcy9kZXZlbG9wIiwiZGlnZXN0Ijp7InNoYTEiOiI5ZWQxNGRiYTdmZDkwNGMyMzJmZDRlOWM5MGEwZDIxNDM1MTk5MDA3In0sImVudHJ5UG9pbnQiOiIuZ2l0aHViL3dvcmtmbG93cy9wcmUtcmVsZWFzZS55bWwifSwicGFyYW1ldGVycyI6eyJ2YXJzIjp7fX0sImVudmlyb25tZW50Ijp7ImdpdGh1Yl9hY3RvciI6ImxlYW5kcm9kYW1hc2NlbmEiLCJnaXRodWJfYWN0b3JfaWQiOiI0Mjk1MTczIiwiZ2l0aHViX2Jhc2VfcmVmIjoiIiwiZ2l0aHViX2V2ZW50X25hbWUiOiJzY2hlZHVsZSIsImdpdGh1Yl9ldmVudF9wYXlsb2FkIjp7ImVudGVycHJpc2UiOnsiYXZhdGFyX3VybCI6Imh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vYi8xMjkwP3Y9NCIsImNyZWF0ZWRfYXQiOiIyMDE5LTExLTEzVDE4OjA1OjQxWiIsImRlc2NyaXB0aW9uIjoiIiwiaHRtbF91cmwiOiJodHRwczovL2dpdGh1Yi5jb20vZW50ZXJwcmlzZXMvYW1hem9uIiwiaWQiOjEyOTAsIm5hbWUiOiJBbWF6b24iLCJub2RlX2lkIjoiTURFd09rVnVkR1Z5Y0hKcGMyVXhNamt3Iiwic2x1ZyI6ImFtYXpvbiIsInVwZGF0ZWRfYXQiOiIyMDI1LTA4LTEyVDIwOjU5OjE0WiIsIndlYnNpdGVfdXJsIjoiaHR0cHM6Ly93d3cuYW1hem9uLmNvbS8ifSwib3JnYW5pemF0aW9uIjp7ImF2YXRhcl91cmwiOiJodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTI5MTI3NjM4P3Y9NCIsImRlc2NyaXB0aW9uIjoiIiwiZXZlbnRzX3VybCI6Imh0dHBzOi8vaW50ZXJuYWwtYXBpLnNlcnZpY2UuaWFkLmdpdGh1Yi5uZXQvb3Jncy9hd3MtcG93ZXJ0b29scy9ldmVudHMiLCJob29rc191cmwiOiJodHRwczovL2ludGVybmFsLWFwaS5zZXJ2aWNlLmlhZC5naXRodWIubmV0L29yZ3MvYXdzLXBvd2VydG9vbHMvaG9va3MiLCJpZCI6MTI5MTI3NjM4LCJpc3N1ZXNfdXJsIjoiaHR0cHM6Ly9pbnRlcm5hbC1hcGkuc2VydmljZS5pYWQuZ2l0aHViLm5ldC9vcmdzL2F3cy1wb3dlcnRvb2xzL2lzc3VlcyIsImxvZ2luIjoiYXdzLXBvd2VydG9vbHMiLCJtZW1iZXJzX3VybCI6Imh0dHBzOi8vaW50ZXJuYWwtYXBpLnNlcnZpY2UuaWFkLmdpdGh1Yi5uZXQvb3Jncy9hd3MtcG93ZXJ0b29scy9tZW1iZXJzey9tZW1iZXJ9Iiwibm9kZV9pZCI6Ik9fa2dET0I3SlUxZyIsInB1YmxpY19tZW1iZXJzX3VybCI6Imh0dHBzOi8vaW50ZXJuYWwtYXBpLnNlcnZpY2UuaWFkLmdpdGh1Yi5uZXQvb3Jncy9hd3MtcG93ZXJ0b29scy9wdWJsaWNfbWVtYmVyc3svbWVtYmVyfSIsInJlcG9zX3VybCI6Imh0dHBzOi8vaW50ZXJuYWwtYXBpLnNlcnZpY2UuaWFkLmdpdGh1Yi5uZXQvb3Jncy9hd3MtcG93ZXJ0b29scy9yZXBvcyIsInVybCI6Imh0dHBzOi8vaW50ZXJuYWwtYXBpLnNlcnZpY2UuaWFkLmdpdGh1Yi5uZXQvb3Jncy9hd3MtcG93ZXJ0b29scyJ9LCJyZXBvc2l0b3J5Ijp7ImFsbG93X2ZvcmtpbmciOnRydWUsImFyY2hpdmVfdXJsIjoiaHR0cHM6Ly9pbnRlcm5hbC1hcGkuc2VydmljZS5pYWQuZ2l0aHViLm5ldC9yZXBvcy9hd3MtcG93ZXJ0b29scy9wb3dlcnRvb2xzLWxhbWJkYS1weXRob24ve2FyY2hpdmVfZm9ybWF0fXsvcmVmfSIsImFyY2hpdmVkIjpmYWxzZSwiYXNzaWduZWVzX3VybCI6Imh0dHBzOi8vaW50ZXJuYWwtYXBpLnNlcnZpY2UuaWFkLmdpdGh1Yi5uZXQvcmVwb3MvYXdzLXBvd2VydG9vbHMvcG93ZXJ0b29scy1sYW1iZGEtcHl0aG9uL2Fzc2lnbmVlc3svdXNlcn0iLCJibG9ic191cmwiOiJodHRwczovL2ludGVybmFsLWFwaS5zZXJ2aWNlLmlhZC5naXRodWIubmV0L3JlcG9zL2F3cy1wb3dlcnRvb2xzL3Bvd2VydG9vbHMtbGFtYmRhLXB5dGhvbi9naXQvYmxvYnN7L3NoYX0iLCJicmFuY2hlc191cmwiOiJodHRwczovL2ludGVybmFsLWFwaS5zZXJ2aWNlLmlhZC5naXRodWIubmV0L3JlcG9zL2F3cy1wb3dlcnRvb2xzL3Bvd2VydG9vbHMtbGFtYmRhLXB5dGhvbi9icmFuY2hlc3svYnJhbmNofSIsImNsb25lX3VybCI6Imh0dHBzOi8vZ2l0aHViLmNvbS9hd3MtcG93ZXJ0b29scy9wb3dlcnRvb2xzLWxhbWJkYS1weXRob24uZ2l0IiwiY29sbGFib3JhdG9yc191cmwiOiJodHRwczovL2ludGVybmFsLWFwaS5zZXJ2aWNlLmlhZC5naXRodWIubmV0L3JlcG9zL2F3cy1wb3dlcnRvb2xzL3Bvd2VydG9vbHMtbGFtYmRhLXB5dGhvbi9jb2xsYWJvcmF0b3Jzey9jb2xsYWJvcmF0b3J9IiwiY29tbWVudHNfdXJsIjoiaHR0cHM6Ly9pbnRlcm5hbC1hcGkuc2VydmljZS5pYWQuZ2l0aHViLm5ldC9yZXBvcy9hd3MtcG93ZXJ0b29scy9wb3dlcnRvb2xzLWxhbWJkYS1weXRob24vY29tbWVudHN7L251bWJlcn0iLCJjb21taXRzX3VybCI6Imh0dHBzOi8vaW50ZXJuYWwtYXBpLnNlcnZpY2UuaWFkLmdpdGh1Yi5uZXQvcmVwb3MvYXdzLXBvd2VydG9vbHMvcG93ZXJ0b29scy1sYW1iZGEtcHl0aG9uL2NvbW1pdHN7L3NoYX0iLCJjb21wYXJlX3VybCI6Imh0dHBzOi8vaW50ZXJuYWwtYXBpLnNlcnZpY2UuaWFkLmdpdGh1Yi5uZXQvcmVwb3MvYXdzLXBvd2VydG9vbHMvcG93ZXJ0b29scy1sYW1iZGEtcHl0aG9uL2NvbXBhcmUve2Jhc2V9Li4ue2hlYWR9IiwiY29udGVudHNfdXJsIjoiaHR0cHM6Ly9pbnRlcm5hbC1hcGkuc2VydmljZS5pYWQuZ2l0aHViLm5ldC9yZXBvcy9hd3MtcG93ZXJ0b29scy9wb3dlcnRvb2xzLWxhbWJkYS1weXRob24vY29udGVudHMveytwYXRofSIsImNvbnRyaWJ1dG9yc191cmwiOiJodHRwczovL2ludGVybmFsLWFwaS5zZXJ2aWNlLmlhZC5naXRodWIubmV0L3JlcG9zL2F3cy1wb3dlcnRvb2xzL3Bvd2VydG9vbHMtbGFtYmRhLXB5dGhvbi9jb250cmlidXRvcnMiLCJjcmVhdGVkX2F0IjoiMjAxOS0xMS0xNVQxMjoyNjoxMloiLCJjdXN0b21fcHJvcGVydGllcyI6eyJzdGFnaW5nIjoiZmFsc2UiLCJ2aXNpYmlsaXR5LWFsbG93LWludGVybmFsIjoiZmFsc2UiLCJ2aXNpYmlsaXR5LWFsbG93LXByaXZhdGUiOiJmYWxzZSIsInZpc2liaWxpdHktYWxsb3ctcHVibGljIjoidHJ1ZSJ9LCJkZWZhdWx0X2JyYW5jaCI6ImRldmVsb3AiLCJkZXBsb3ltZW50c191cmwiOiJodHRwczovL2ludGVybmFsLWFwaS5zZXJ2aWNlLmlhZC5naXRodWIubmV0L3JlcG9zL2F3cy1wb3dlcnRvb2xzL3Bvd2VydG9vbHMtbGFtYmRhLXB5dGhvbi9kZXBsb3ltZW50cyIsImRlc2NyaXB0aW9uIjoiQSBkZXZlbG9wZXIgdG9vbGtpdCB0byBpbXBsZW1lbnQgU2VydmVybGVzcyBiZXN0IHByYWN0aWNlcyBhbmQgaW5jcmVhc2UgZGV2ZWxvcGVyIHZlbG9jaXR5LiIsImRpc2FibGVkIjpmYWxzZSwiZG93bmxvYWRzX3VybCI6Imh0dHBzOi8vaW50ZXJuYWwtYXBpLnNlcnZpY2UuaWFkLmdpdGh1Yi5uZXQvcmVwb3MvYXdzLXBvd2VydG9vbHMvcG93ZXJ0b29scy1sYW1iZGEtcHl0aG9uL2Rvd25sb2FkcyIsImV2ZW50c191cmwiOiJodHRwczovL2ludGVybmFsLWFwaS5zZXJ2aWNlLmlhZC5naXRodWIubmV0L3JlcG9zL2F3cy1wb3dlcnRvb2xzL3Bvd2VydG9vbHMtbGFtYmRhLXB5dGhvbi9ldmVudHMiLCJmb3JrIjpmYWxzZSwiZm9ya3MiOjQ0NCwiZm9ya3NfY291bnQiOjQ0NCwiZm9ya3NfdXJsIjoiaHR0cHM6Ly9pbnRlcm5hbC1hcGkuc2VydmljZS5pYWQuZ2l0aHViLm5ldC9yZXBvcy9hd3MtcG93ZXJ0b29scy9wb3dlcnRvb2xzLWxhbWJkYS1weXRob24vZm9ya3MiLCJmdWxsX25hbWUiOiJhd3MtcG93ZXJ0b29scy9wb3dlcnRvb2xzLWxhbWJkYS1weXRob24iLCJnaXRfY29tbWl0c191cmwiOiJodHRwczovL2ludGVybmFsLWFwaS5zZXJ2aWNlLmlhZC5naXRodWIubmV0L3JlcG9zL2F3cy1wb3dlcnRvb2xzL3Bvd2VydG9vbHMtbGFtYmRhLXB5dGhvbi9naXQvY29tbWl0c3svc2hhfSIsImdpdF9yZWZzX3VybCI6Imh0dHBzOi8vaW50ZXJuYWwtYXBpLnNlcnZpY2UuaWFkLmdpdGh1Yi5uZXQvcmVwb3MvYXdzLXBvd2VydG9vbHMvcG93ZXJ0b29scy1sYW1iZGEtcHl0aG9uL2dpdC9yZWZzey9zaGF9IiwiZ2l0X3RhZ3NfdXJsIjoiaHR0cHM6Ly9pbnRlcm5hbC1hcGkuc2VydmljZS5pYWQuZ2l0aHViLm5ldC9yZXBvcy9hd3MtcG93ZXJ0b29scy9wb3dlcnRvb2xzLWxhbWJkYS1weXRob24vZ2l0L3RhZ3N7L3NoYX0iLCJnaXRfdXJsIjoiZ2l0Oi8vZ2l0aHViLmNvbS9hd3MtcG93ZXJ0b29scy9wb3dlcnRvb2xzLWxhbWJkYS1weXRob24uZ2l0IiwiaGFzX2Rpc2N1c3Npb25zIjp0cnVlLCJoYXNfZG93bmxvYWRzIjp0cnVlLCJoYXNfaXNzdWVzIjp0cnVlLCJoYXNfcGFnZXMiOmZhbHNlLCJoYXNfcHJvamVjdHMiOnRydWUsImhhc193aWtpIjpmYWxzZSwiaG9tZXBhZ2UiOiJodHRwczovL2RvY3MucG93ZXJ0b29scy5hd3MuZGV2L2xhbWJkYS9weXRob24vbGF0ZXN0LyIsImhvb2tzX3VybCI6Imh0dHBzOi8vaW50ZXJuYWwtYXBpLnNlcnZpY2UuaWFkLmdpdGh1Yi5uZXQvcmVwb3MvYXdzLXBvd2VydG9vbHMvcG93ZXJ0b29scy1sYW1iZGEtcHl0aG9uL2hvb2tzIiwiaHRtbF91cmwiOiJodHRwczovL2dpdGh1Yi5jb20vYXdzLXBvd2VydG9vbHMvcG93ZXJ0b29scy1sYW1iZGEtcHl0aG9uIiwiaWQiOjIyMTkxOTM3OSwiaXNfdGVtcGxhdGUiOmZhbHNlLCJpc3N1ZV9jb21tZW50X3VybCI6Imh0dHBzOi8vaW50ZXJuYWwtYXBpLnNlcnZpY2UuaWFkLmdpdGh1Yi5uZXQvcmVwb3MvYXdzLXBvd2VydG9vbHMvcG93ZXJ0b29scy1sYW1iZGEtcHl0aG9uL2lzc3Vlcy9jb21tZW50c3svbnVtYmVyfSIsImlzc3VlX2V2ZW50c191cmwiOiJodHRwczovL2ludGVybmFsLWFwaS5zZXJ2aWNlLmlhZC5naXRodWIubmV0L3JlcG9zL2F3cy1wb3dlcnRvb2xzL3Bvd2VydG9vbHMtbGFtYmRhLXB5dGhvbi9pc3N1ZXMvZXZlbnRzey9udW1iZXJ9IiwiaXNzdWVzX3VybCI6Imh0dHBzOi8vaW50ZXJuYWwtYXBpLnNlcnZpY2UuaWFkLmdpdGh1Yi5uZXQvcmVwb3MvYXdzLXBvd2VydG9vbHMvcG93ZXJ0b29scy1sYW1iZGEtcHl0aG9uL2lzc3Vlc3svbnVtYmVyfSIsImtleXNfdXJsIjoiaHR0cHM6Ly9pbnRlcm5hbC1hcGkuc2VydmljZS5pYWQuZ2l0aHViLm5ldC9yZXBvcy9hd3MtcG93ZXJ0b29scy9wb3dlcnRvb2xzLWxhbWJkYS1weXRob24va2V5c3sva2V5X2lkfSIsImxhYmVsc191cmwiOiJodHRwczovL2ludGVybmFsLWFwaS5zZXJ2aWNlLmlhZC5naXRodWIubmV0L3JlcG9zL2F3cy1wb3dlcnRvb2xzL3Bvd2VydG9vbHMtbGFtYmRhLXB5dGhvbi9sYWJlbHN7L25hbWV9IiwibGFuZ3VhZ2UiOiJQeXRob24iLCJsYW5ndWFnZXNfdXJsIjoiaHR0cHM6Ly9pbnRlcm5hbC1hcGkuc2VydmljZS5pYWQuZ2l0aHViLm5ldC9yZXBvcy9hd3MtcG93ZXJ0b29scy9wb3dlcnRvb2xzLWxhbWJkYS1weXRob24vbGFuZ3VhZ2VzIiwibGljZW5zZSI6eyJrZXkiOiJtaXQtMCIsIm5hbWUiOiJNSVQgTm8gQXR0cmlidXRpb24iLCJub2RlX2lkIjoiTURjNlRHbGpaVzV6WlRReCIsInNwZHhfaWQiOiJNSVQtMCIsInVybCI6Imh0dHBzOi8vaW50ZXJuYWwtYXBpLnNlcnZpY2UuaWFkLmdpdGh1Yi5uZXQvbGljZW5zZXMvbWl0LTAifSwibWVyZ2VzX3VybCI6Imh0dHBzOi8vaW50ZXJuYWwtYXBpLnNlcnZpY2UuaWFkLmdpdGh1Yi5uZXQvcmVwb3MvYXdzLXBvd2VydG9vbHMvcG93ZXJ0b29scy1sYW1iZGEtcHl0aG9uL21lcmdlcyIsIm1pbGVzdG9uZXNfdXJsIjoiaHR0cHM6Ly9pbnRlcm5hbC1hcGkuc2VydmljZS5pYWQuZ2l0aHViLm5ldC9yZXBvcy9hd3MtcG93ZXJ0b29scy9wb3dlcnRvb2xzLWxhbWJkYS1weXRob24vbWlsZXN0b25lc3svbnVtYmVyfSIsIm1pcnJvcl91cmwiOm51bGwsIm5hbWUiOiJwb3dlcnRvb2xzLWxhbWJkYS1weXRob24iLCJub2RlX2lkIjoiTURFd09sSmxjRzl6YVhSdmNua3lNakU1TVRrek56az0iLCJub3RpZmljYXRpb25zX3VybCI6Imh0dHBzOi8vaW50ZXJuYWwtYXBpLnNlcnZpY2UuaWFkLmdpdGh1Yi5uZXQvcmVwb3MvYXdzLXBvd2VydG9vbHMvcG93ZXJ0b29scy1sYW1iZGEtcHl0aG9uL25vdGlmaWNhdGlvbnN7P3NpbmNlLGFsbCxwYXJ0aWNpcGF0aW5nfSIsIm9wZW5faXNzdWVzIjo1Nywib3Blbl9pc3N1ZXNfY291bnQiOjU3LCJvd25lciI6eyJhdmF0YXJfdXJsIjoiaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzEyOTEyNzYzOD92PTQiLCJldmVudHNfdXJsIjoiaHR0cHM6Ly9pbnRlcm5hbC1hcGkuc2VydmljZS5pYWQuZ2l0aHViLm5ldC91c2Vycy9hd3MtcG93ZXJ0b29scy9ldmVudHN7L3ByaXZhY3l9IiwiZm9sbG93ZXJzX3VybCI6Imh0dHBzOi8vaW50ZXJuYWwtYXBpLnNlcnZpY2UuaWFkLmdpdGh1Yi5uZXQvdXNlcnMvYXdzLXBvd2VydG9vbHMvZm9sbG93ZXJzIiwiZm9sbG93aW5nX3VybCI6Imh0dHBzOi8vaW50ZXJuYWwtYXBpLnNlcnZpY2UuaWFkLmdpdGh1Yi5uZXQvdXNlcnMvYXdzLXBvd2VydG9vbHMvZm9sbG93aW5ney9vdGhlcl91c2VyfSIsImdpc3RzX3VybCI6Imh0dHBzOi8vaW50ZXJuYWwtYXBpLnNlcnZpY2UuaWFkLmdpdGh1Yi5uZXQvdXNlcnMvYXdzLXBvd2VydG9vbHMvZ2lzdHN7L2dpc3RfaWR9IiwiZ3JhdmF0YXJfaWQiOiIiLCJodG1sX3VybCI6Imh0dHBzOi8vZ2l0aHViLmNvbS9hd3MtcG93ZXJ0b29scyIsImlkIjoxMjkxMjc2MzgsImxvZ2luIjoiYXdzLXBvd2VydG9vbHMiLCJub2RlX2lkIjoiT19rZ0RPQjdKVTFnIiwib3JnYW5pemF0aW9uc191cmwiOiJodHRwczovL2ludGVybmFsLWFwaS5zZXJ2aWNlLmlhZC5naXRodWIubmV0L3VzZXJzL2F3cy1wb3dlcnRvb2xzL29yZ3MiLCJyZWNlaXZlZF9ldmVudHNfdXJsIjoiaHR0cHM6Ly9pbnRlcm5hbC1hcGkuc2VydmljZS5pYWQuZ2l0aHViLm5ldC91c2Vycy9hd3MtcG93ZXJ0b29scy9yZWNlaXZlZF9ldmVudHMiLCJyZXBvc191cmwiOiJodHRwczovL2ludGVybmFsLWFwaS5zZXJ2aWNlLmlhZC5naXRodWIubmV0L3VzZXJzL2F3cy1wb3dlcnRvb2xzL3JlcG9zIiwic2l0ZV9hZG1pbiI6ZmFsc2UsInN0YXJyZWRfdXJsIjoiaHR0cHM6Ly9pbnRlcm5hbC1hcGkuc2VydmljZS5pYWQuZ2l0aHViLm5ldC91c2Vycy9hd3MtcG93ZXJ0b29scy9zdGFycmVkey9vd25lcn17L3JlcG99Iiwic3Vic2NyaXB0aW9uc191cmwiOiJodHRwczovL2ludGVybmFsLWFwaS5zZXJ2aWNlLmlhZC5naXRodWIubmV0L3VzZXJzL2F3cy1wb3dlcnRvb2xzL3N1YnNjcmlwdGlvbnMiLCJ0eXBlIjoiT3JnYW5pemF0aW9uIiwidXJsIjoiaHR0cHM6Ly9pbnRlcm5hbC1hcGkuc2VydmljZS5pYWQuZ2l0aHViLm5ldC91c2Vycy9hd3MtcG93ZXJ0b29scyIsInVzZXJfdmlld190eXBlIjoicHVibGljIn0sInByaXZhdGUiOmZhbHNlLCJwdWxsc191cmwiOiJodHRwczovL2ludGVybmFsLWFwaS5zZXJ2aWNlLmlhZC5naXRodWIubmV0L3JlcG9zL2F3cy1wb3dlcnRvb2xzL3Bvd2VydG9vbHMtbGFtYmRhLXB5dGhvbi9wdWxsc3svbnVtYmVyfSIsInB1c2hlZF9hdCI6IjIwMjUtMDgtMjBUMDU6MjU6MzBaIiwicmVsZWFzZXNfdXJsIjoiaHR0cHM6Ly9pbnRlcm5hbC1hcGkuc2VydmljZS5pYWQuZ2l0aHViLm5ldC9yZXBvcy9hd3MtcG93ZXJ0b29scy9wb3dlcnRvb2xzLWxhbWJkYS1weXRob24vcmVsZWFzZXN7L2lkfSIsInNpemUiOjEzMDk3Mywic3NoX3VybCI6ImdpdEBnaXRodWIuY29tOmF3cy1wb3dlcnRvb2xzL3Bvd2VydG9vbHMtbGFtYmRhLXB5dGhvbi5naXQiLCJzdGFyZ2F6ZXJzX2NvdW50IjozMTI1LCJzdGFyZ2F6ZXJzX3VybCI6Imh0dHBzOi8vaW50ZXJuYWwtYXBpLnNlcnZpY2UuaWFkLmdpdGh1Yi5uZXQvcmVwb3MvYXdzLXBvd2VydG9vbHMvcG93ZXJ0b29scy1sYW1iZGEtcHl0aG9uL3N0YXJnYXplcnMiLCJzdGF0dXNlc191cmwiOiJodHRwczovL2ludGVybmFsLWFwaS5zZXJ2aWNlLmlhZC5naXRodWIubmV0L3JlcG9zL2F3cy1wb3dlcnRvb2xzL3Bvd2VydG9vbHMtbGFtYmRhLXB5dGhvbi9zdGF0dXNlcy97c2hhfSIsInN1YnNjcmliZXJzX3VybCI6Imh0dHBzOi8vaW50ZXJuYWwtYXBpLnNlcnZpY2UuaWFkLmdpdGh1Yi5uZXQvcmVwb3MvYXdzLXBvd2VydG9vbHMvcG93ZXJ0b29scy1sYW1iZGEtcHl0aG9uL3N1YnNjcmliZXJzIiwic3Vic2NyaXB0aW9uX3VybCI6Imh0dHBzOi8vaW50ZXJuYWwtYXBpLnNlcnZpY2UuaWFkLmdpdGh1Yi5uZXQvcmVwb3MvYXdzLXBvd2VydG9vbHMvcG93ZXJ0b29scy1sYW1iZGEtcHl0aG9uL3N1YnNjcmlwdGlvbiIsInN2bl91cmwiOiJodHRwczovL2dpdGh1Yi5jb20vYXdzLXBvd2VydG9vbHMvcG93ZXJ0b29scy1sYW1iZGEtcHl0aG9uIiwidGFnc191cmwiOiJodHRwczovL2ludGVybmFsLWFwaS5zZXJ2aWNlLmlhZC5naXRodWIubmV0L3JlcG9zL2F3cy1wb3dlcnRvb2xzL3Bvd2VydG9vbHMtbGFtYmRhLXB5dGhvbi90YWdzIiwidGVhbXNfdXJsIjoiaHR0cHM6Ly9pbnRlcm5hbC1hcGkuc2VydmljZS5pYWQuZ2l0aHViLm5ldC9yZXBvcy9hd3MtcG93ZXJ0b29scy9wb3dlcnRvb2xzLWxhbWJkYS1weXRob24vdGVhbXMiLCJ0b3BpY3MiOlsiYXdzIiwiYXdzLWxhbWJkYSIsImxhbWJkYSIsInB5dGhvbiIsInNlcnZlcmxlc3MiXSwidHJlZXNfdXJsIjoiaHR0cHM6Ly9pbnRlcm5hbC1hcGkuc2VydmljZS5pYWQuZ2l0aHViLm5ldC9yZXBvcy9hd3MtcG93ZXJ0b29scy9wb3dlcnRvb2xzLWxhbWJkYS1weXRob24vZ2l0L3RyZWVzey9zaGF9IiwidXBkYXRlZF9hdCI6IjIwMjUtMDgtMTlUMTY6Mzc6NDhaIiwidXJsIjoiaHR0cHM6Ly9pbnRlcm5hbC1hcGkuc2VydmljZS5pYWQuZ2l0aHViLm5ldC9yZXBvcy9hd3MtcG93ZXJ0b29scy9wb3dlcnRvb2xzLWxhbWJkYS1weXRob24iLCJ2aXNpYmlsaXR5IjoicHVibGljIiwid2F0Y2hlcnMiOjMxMjUsIndhdGNoZXJzX2NvdW50IjozMTI1LCJ3ZWJfY29tbWl0X3NpZ25vZmZfcmVxdWlyZWQiOnRydWV9LCJzY2hlZHVsZSI6IjAgOCAqICogMS01Iiwid29ya2Zsb3ciOiIuZ2l0aHViL3dvcmtmbG93cy9wcmUtcmVsZWFzZS55bWwifSwiZ2l0aHViX2hlYWRfcmVmIjoiIiwiZ2l0aHViX3JlZiI6InJlZnMvaGVhZHMvZGV2ZWxvcCIsImdpdGh1Yl9yZWZfdHlwZSI6ImJyYW5jaCIsImdpdGh1Yl9yZXBvc2l0b3J5X2lkIjoiMjIxOTE5Mzc5IiwiZ2l0aHViX3JlcG9zaXRvcnlfb3duZXIiOiJhd3MtcG93ZXJ0b29scyIsImdpdGh1Yl9yZXBvc2l0b3J5X293bmVyX2lkIjoiMTI5MTI3NjM4IiwiZ2l0aHViX3J1bl9hdHRlbXB0IjoiMSIsImdpdGh1Yl9ydW5faWQiOiIxNzA5MjMyNjk5NiIsImdpdGh1Yl9ydW5fbnVtYmVyIjoiMzEwIiwiZ2l0aHViX3NoYTEiOiI5ZWQxNGRiYTdmZDkwNGMyMzJmZDRlOWM5MGEwZDIxNDM1MTk5MDA3In19LCJtZXRhZGF0YSI6eyJidWlsZEludm9jYXRpb25JRCI6IjE3MDkyMzI2OTk2LTEiLCJjb21wbGV0ZW5lc3MiOnsicGFyYW1ldGVycyI6dHJ1ZSwiZW52aXJvbm1lbnQiOmZhbHNlLCJtYXRlcmlhbHMiOmZhbHNlfSwicmVwcm9kdWNpYmxlIjpmYWxzZX0sIm1hdGVyaWFscyI6W3sidXJpIjoiZ2l0K2h0dHBzOi8vZ2l0aHViLmNvbS9hd3MtcG93ZXJ0b29scy9wb3dlcnRvb2xzLWxhbWJkYS1weXRob25AcmVmcy9oZWFkcy9kZXZlbG9wIiwiZGlnZXN0Ijp7InNoYTEiOiI5ZWQxNGRiYTdmZDkwNGMyMzJmZDRlOWM5MGEwZDIxNDM1MTk5MDA3In19XX19", "payloadType":"application/vnd.in-toto+json", "signatures":[{"sig":"MEQCIFUHvsnsq+ZRBhk3OOsNXRLaQCXQFtUzrn9Kzvkhf5FNAiBNjDsAK80sMiDw/v+c/n1JAuxw2hmuf2GJ64gJJoO4Xg=="}]}} \ No newline at end of file diff --git a/provenance/3.19.1a5/multiple.intoto.jsonl b/provenance/3.19.1a5/multiple.intoto.jsonl new file mode 100644 index 00000000000..bb6b1229a9a --- /dev/null +++ b/provenance/3.19.1a5/multiple.intoto.jsonl @@ -0,0 +1 @@ +{"mediaType":"application/vnd.dev.sigstore.bundle.v0.3+json", "verificationMaterial":{"certificate":{"rawBytes":"MIIHZjCCBuygAwIBAgIUHwWfLtxBe8LZ9hdH/B1dxhHkcTQwCgYIKoZIzj0EAwMwNzEVMBMGA1UEChMMc2lnc3RvcmUuZGV2MR4wHAYDVQQDExVzaWdzdG9yZS1pbnRlcm1lZGlhdGUwHhcNMjUwODIxMDgwNzQwWhcNMjUwODIxMDgxNzQwWjAAMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEzcwoflppK5QzESf2OqCRKj6tTI3CO+zCjf5PIiZnpiygEoiVnon/hjc2d1zTonkhl8sXB+zAdNjFJwKsoO5RnKOCBgswggYHMA4GA1UdDwEB/wQEAwIHgDATBgNVHSUEDDAKBggrBgEFBQcDAzAdBgNVHQ4EFgQUFKc7D2MoX2PKjoijXPXF761HIl8wHwYDVR0jBBgwFoAU39Ppz1YkEZb5qNjpKFWixi4YZD8wgYQGA1UdEQEB/wR6MHiGdmh0dHBzOi8vZ2l0aHViLmNvbS9zbHNhLWZyYW1ld29yay9zbHNhLWdpdGh1Yi1nZW5lcmF0b3IvLmdpdGh1Yi93b3JrZmxvd3MvZ2VuZXJhdG9yX2dlbmVyaWNfc2xzYTMueW1sQHJlZnMvdGFncy92Mi4xLjAwOQYKKwYBBAGDvzABAQQraHR0cHM6Ly90b2tlbi5hY3Rpb25zLmdpdGh1YnVzZXJjb250ZW50LmNvbTAWBgorBgEEAYO/MAECBAhzY2hlZHVsZTA2BgorBgEEAYO/MAEDBCg0OTIzNDMwMjVlZmY0ZjllZDBhNzZlZjI3ODVlOGM4NGE4ZDhjM2ZmMBkGCisGAQQBg78wAQQEC1ByZS1SZWxlYXNlMDUGCisGAQQBg78wAQUEJ2F3cy1wb3dlcnRvb2xzL3Bvd2VydG9vbHMtbGFtYmRhLXB5dGhvbjAgBgorBgEEAYO/MAEGBBJyZWZzL2hlYWRzL2RldmVsb3AwOwYKKwYBBAGDvzABCAQtDCtodHRwczovL3Rva2VuLmFjdGlvbnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tMIGGBgorBgEEAYO/MAEJBHgMdmh0dHBzOi8vZ2l0aHViLmNvbS9zbHNhLWZyYW1ld29yay9zbHNhLWdpdGh1Yi1nZW5lcmF0b3IvLmdpdGh1Yi93b3JrZmxvd3MvZ2VuZXJhdG9yX2dlbmVyaWNfc2xzYTMueW1sQHJlZnMvdGFncy92Mi4xLjAwOAYKKwYBBAGDvzABCgQqDChmN2RkOGM1NGMyMDY3YmFmYzEyY2E3YTU1NTk1ZDVlZTliNzUyMDRhMB0GCisGAQQBg78wAQsEDwwNZ2l0aHViLWhvc3RlZDBKBgorBgEEAYO/MAEMBDwMOmh0dHBzOi8vZ2l0aHViLmNvbS9hd3MtcG93ZXJ0b29scy9wb3dlcnRvb2xzLWxhbWJkYS1weXRob24wOAYKKwYBBAGDvzABDQQqDCg0OTIzNDMwMjVlZmY0ZjllZDBhNzZlZjI3ODVlOGM4NGE4ZDhjM2ZmMCIGCisGAQQBg78wAQ4EFAwScmVmcy9oZWFkcy9kZXZlbG9wMBkGCisGAQQBg78wAQ8ECwwJMjIxOTE5Mzc5MDEGCisGAQQBg78wARAEIwwhaHR0cHM6Ly9naXRodWIuY29tL2F3cy1wb3dlcnRvb2xzMBkGCisGAQQBg78wAREECwwJMTI5MTI3NjM4MH8GCisGAQQBg78wARIEcQxvaHR0cHM6Ly9naXRodWIuY29tL2F3cy1wb3dlcnRvb2xzL3Bvd2VydG9vbHMtbGFtYmRhLXB5dGhvbi8uZ2l0aHViL3dvcmtmbG93cy9wcmUtcmVsZWFzZS55bWxAcmVmcy9oZWFkcy9kZXZlbG9wMDgGCisGAQQBg78wARMEKgwoNDkyMzQzMDI1ZWZmNGY5ZWQwYTc2ZWYyNzg1ZThjODRhOGQ4YzNmZjAYBgorBgEEAYO/MAEUBAoMCHNjaGVkdWxlMG4GCisGAQQBg78wARUEYAxeaHR0cHM6Ly9naXRodWIuY29tL2F3cy1wb3dlcnRvb2xzL3Bvd2VydG9vbHMtbGFtYmRhLXB5dGhvbi9hY3Rpb25zL3J1bnMvMTcxMjA4ODQ5NzIvYXR0ZW1wdHMvMTAWBgorBgEEAYO/MAEWBAgMBnB1YmxpYzCBigYKKwYBBAHWeQIEAgR8BHoAeAB2AN09MGrGxxEyYxkeHJlnNwKiSl643jyt/4eKcoAvKe6OAAABmMurVVoAAAQDAEcwRQIhAJnhYtfdWPyiS9QGuy/1QYCxqfngEjENfy6KdhKc8BWtAiAjCOYGxGRbn4A5dK7rQIoSfDgxFVa/bh5rZjPtW8VTJDAKBggqhkjOPQQDAwNoADBlAjAdJqzXlwEQFl25OsY5aeBRAF7qhha7l+CFnmGxizFJG+n7QmH3ds1TkwxzHbqz/nQCMQCANHznocWptJdbLGWb8JUL0Kk1zbaE84Zhk5ILx+pGBf/u0JpBF/4NHxvWmL6zv2A="}, "tlogEntries":[{"logIndex":"416229287", "logId":{"keyId":"wNI9atQGlz+VWfO6LRygH4QUfY/8W4RFwiT5i5WRgB0="}, "kindVersion":{"kind":"dsse", "version":"0.0.1"}, "integratedTime":"1755763660", "inclusionPromise":{"signedEntryTimestamp":"MEYCIQDL6HaPS5uoWS7wF8BrnEPq8fh4UoZ+1VNZOaZCT1sCJAIhAOg0P+DCTalPUrCLi+GDarXBOSoS7hzo3jMgwG4G8e36"}, "inclusionProof":{"logIndex":"294325025", "rootHash":"dsM2CrxkUD/BSiSSq/sD8wOP2bO+FY5EJEda/SRgYR8=", "treeSize":"294325043", "hashes":["yOVwuF4F43i8FySjlx7IzOpdJrlXPBCgv/FiQhbIcyM=", "OgUBpRJjpz8d9m+gF4UcFT/GFJXmm1RwsmKqV9ZJ0AY=", "83yBBkMVldcSvVBcal/6F6CCpoPKp7DGrMBGnEfIQw4=", "vsGhtpz+Lgtj+Rqt9HvykXEvJx3Myl7ezwyRUVD8FJE=", "cg7k7uZAbgKQbddJT9f3hJmNiUuv6t3uRJ1aeefRtZg=", "cM9C0nH8XYUOPrhb6bg7qpjd1IIgVdKAOngyU3DBDl0=", "3UBJukrD/H/AudE3LRFdiD+0PQSaxK3XMY6L+3YZXQc=", "p6Z1FH/o4zvbUupjz0pkAQIHeJWX/cBWZR9TUsyIElI=", "xoikDoHm1LkjUR+bYEZHkDPnPbb0C8ZeBkXJTaEK25g=", "PJFyTM8uE344e9n6K7EGLo+2J6sqCYYHSlBvIZBGcmo=", "KBRJj8m2XnBhCVFsw8rV8AEUWaaEi8htOcR+PJi0lN0=", "DNT26UREwb3ikFTt4X6PojzK/jIc7JgZcOth5wTZ6Cg=", "z4fk/in2fEkJsWsf2PfqaAfkG66FGaTkyDuejmCyFlg=", "mY/RW4xaHcEl4tg806MlgeKlHNQKRa1JOmEp9GuAcKY=", "vS7O4ozHIQZJWBiov+mkpI27GE8zAmVCEkRcP3NDyNE="], "checkpoint":{"envelope":"rekor.sigstore.dev - 1193050959916656506\n294325043\ndsM2CrxkUD/BSiSSq/sD8wOP2bO+FY5EJEda/SRgYR8=\n\n— rekor.sigstore.dev wNI9ajBGAiEA7p0oasixh/xhPE13nsuRJQ+DuHv+E0488iVhGSTNyOwCIQCI4nbinvNkfJJfHeROzqObzFoBN9HvfG1noz9gi6AqWg==\n"}}, "canonicalizedBody":"eyJhcGlWZXJzaW9uIjoiMC4wLjEiLCJraW5kIjoiZHNzZSIsInNwZWMiOnsiZW52ZWxvcGVIYXNoIjp7ImFsZ29yaXRobSI6InNoYTI1NiIsInZhbHVlIjoiZGFhZDUxOTQxZTZiYjU0YWViNDE0OGQ0NmVlNThiMzE4NmY4ZjY5YTY5NjJmNzIxNGY1NmJlZjRiN2Y1ZWExNSJ9LCJwYXlsb2FkSGFzaCI6eyJhbGdvcml0aG0iOiJzaGEyNTYiLCJ2YWx1ZSI6IjFmNTc2ODAwM2YxNjU5OTMzMjQ5OGNiZTU5N2I3NmY2MmNhZWVkZjljMDBmNzk5ZGM0ZWRkMzNkNGI2MDgyOTgifSwic2lnbmF0dXJlcyI6W3sic2lnbmF0dXJlIjoiTUVVQ0lRQ24yL0RrM0h6VDF1SHRzaHBTOXUwcnFFYUt6TzlSbGxrbVRBaXh6SWV6V2dJZ0cveHZ2Rkd6THhGU3ZZUG1nQkg0OFZLdXB0REwzTkVqazY3ZHpndEJXL2c9IiwidmVyaWZpZXIiOiJMUzB0TFMxQ1JVZEpUaUJEUlZKVVNVWkpRMEZVUlMwdExTMHRDazFKU1VoYWFrTkRRblY1WjBGM1NVSkJaMGxWU0hkWFpreDBlRUpsT0V4YU9XaGtTQzlDTVdSNGFFaHJZMVJSZDBObldVbExiMXBKZW1vd1JVRjNUWGNLVG5wRlZrMUNUVWRCTVZWRlEyaE5UV015Ykc1ak0xSjJZMjFWZFZwSFZqSk5ValIzU0VGWlJGWlJVVVJGZUZaNllWZGtlbVJIT1hsYVV6RndZbTVTYkFwamJURnNXa2RzYUdSSFZYZElhR05PVFdwVmQwOUVTWGhOUkdkM1RucFJkMWRvWTA1TmFsVjNUMFJKZUUxRVozaE9lbEYzVjJwQlFVMUdhM2RGZDFsSUNrdHZXa2w2YWpCRFFWRlpTVXR2V2tsNmFqQkVRVkZqUkZGblFVVjZZM2R2Wm14d2NFczFVWHBGVTJZeVQzRkRVa3RxTm5SVVNUTkRUeXQ2UTJwbU5WQUtTV2xhYm5CcGVXZEZiMmxXYm05dUwyaHFZekprTVhwVWIyNXJhR3c0YzFoQ0szcEJaRTVxUmtwM1MzTnZUelZTYmt0UFEwSm5jM2RuWjFsSVRVRTBSd3BCTVZWa1JIZEZRaTkzVVVWQmQwbElaMFJCVkVKblRsWklVMVZGUkVSQlMwSm5aM0pDWjBWR1FsRmpSRUY2UVdSQ1owNVdTRkUwUlVablVWVkdTMk0zQ2tReVRXOVlNbEJMYW05cGFsaFFXRVkzTmpGSVNXdzRkMGgzV1VSV1VqQnFRa0puZDBadlFWVXpPVkJ3ZWpGWmEwVmFZalZ4VG1wd1MwWlhhWGhwTkZrS1drUTRkMmRaVVVkQk1WVmtSVkZGUWk5M1VqWk5TR2xIWkcxb01HUklRbnBQYVRoMldqSnNNR0ZJVm1sTWJVNTJZbE01ZW1KSVRtaE1WMXA1V1ZjeGJBcGtNamw1WVhrNWVtSklUbWhNVjJSd1pFZG9NVmxwTVc1YVZ6VnNZMjFHTUdJelNYWk1iV1J3WkVkb01WbHBPVE5pTTBweVdtMTRkbVF6VFhaYU1sWjFDbHBZU21oa1J6bDVXREprYkdKdFZubGhWMDVtWXpKNGVsbFVUWFZsVnpGelVVaEtiRnB1VFhaa1IwWnVZM2s1TWsxcE5IaE1ha0YzVDFGWlMwdDNXVUlLUWtGSFJIWjZRVUpCVVZGeVlVaFNNR05JVFRaTWVUa3dZakowYkdKcE5XaFpNMUp3WWpJMWVreHRaSEJrUjJneFdXNVdlbHBZU21waU1qVXdXbGMxTUFwTWJVNTJZbFJCVjBKbmIzSkNaMFZGUVZsUEwwMUJSVU5DUVdoNldUSm9iRnBJVm5OYVZFRXlRbWR2Y2tKblJVVkJXVTh2VFVGRlJFSkRaekJQVkVsNkNrNUVUWGROYWxac1dtMVpNRnBxYkd4YVJFSm9UbnBhYkZwcVNUTlBSRlpzVDBkTk5FNUhSVFJhUkdocVRUSmFiVTFDYTBkRGFYTkhRVkZSUW1jM09IY0tRVkZSUlVNeFFubGFVekZUV2xkNGJGbFlUbXhOUkZWSFEybHpSMEZSVVVKbk56aDNRVkZWUlVveVJqTmplVEYzWWpOa2JHTnVVblppTW5oNlRETkNkZ3BrTWxaNVpFYzVkbUpJVFhSaVIwWjBXVzFTYUV4WVFqVmtSMmgyWW1wQlowSm5iM0pDWjBWRlFWbFBMMDFCUlVkQ1FrcDVXbGRhZWt3eWFHeFpWMUo2Q2t3eVVteGtiVlp6WWpOQmQwOTNXVXRMZDFsQ1FrRkhSSFo2UVVKRFFWRjBSRU4wYjJSSVVuZGplbTkyVEROU2RtRXlWblZNYlVacVpFZHNkbUp1VFhVS1dqSnNNR0ZJVm1sa1dFNXNZMjFPZG1KdVVteGlibEYxV1RJNWRFMUpSMGRDWjI5eVFtZEZSVUZaVHk5TlFVVktRa2huVFdSdGFEQmtTRUo2VDJrNGRncGFNbXd3WVVoV2FVeHRUblppVXpsNllraE9hRXhYV25sWlZ6RnNaREk1ZVdGNU9YcGlTRTVvVEZka2NHUkhhREZaYVRGdVdsYzFiR050UmpCaU0wbDJDa3h0WkhCa1IyZ3hXV2s1TTJJelNuSmFiWGgyWkROTmRsb3lWblZhV0Vwb1pFYzVlVmd5Wkd4aWJWWjVZVmRPWm1NeWVIcFpWRTExWlZjeGMxRklTbXdLV201TmRtUkhSbTVqZVRreVRXazBlRXhxUVhkUFFWbExTM2RaUWtKQlIwUjJla0ZDUTJkUmNVUkRhRzFPTWxKclQwZE5NVTVIVFhsTlJGa3pXVzFHYlFwWmVrVjVXVEpGTTFsVVZURk9WR3N4V2tSV2JGcFViR2xPZWxWNVRVUlNhRTFDTUVkRGFYTkhRVkZSUW1jM09IZEJVWE5GUkhkM1Rsb3liREJoU0ZacENreFhhSFpqTTFKc1drUkNTMEpuYjNKQ1owVkZRVmxQTDAxQlJVMUNSSGROVDIxb01HUklRbnBQYVRoMldqSnNNR0ZJVm1sTWJVNTJZbE01YUdRelRYUUtZMGM1TTFwWVNqQmlNamx6WTNrNWQySXpaR3hqYmxKMllqSjRla3hYZUdoaVYwcHJXVk14ZDJWWVVtOWlNalIzVDBGWlMwdDNXVUpDUVVkRWRucEJRZ3BFVVZGeFJFTm5NRTlVU1hwT1JFMTNUV3BXYkZwdFdUQmFhbXhzV2tSQ2FFNTZXbXhhYWtrelQwUldiRTlIVFRST1IwVTBXa1JvYWsweVdtMU5RMGxIQ2tOcGMwZEJVVkZDWnpjNGQwRlJORVZHUVhkVFkyMVdiV041T1c5YVYwWnJZM2s1YTFwWVdteGlSemwzVFVKclIwTnBjMGRCVVZGQ1p6YzRkMEZST0VVS1EzZDNTazFxU1hoUFZFVTFUWHBqTlUxRVJVZERhWE5IUVZGUlFtYzNPSGRCVWtGRlNYZDNhR0ZJVWpCalNFMDJUSGs1Ym1GWVVtOWtWMGwxV1RJNWRBcE1Na1l6WTNreGQySXpaR3hqYmxKMllqSjRlazFDYTBkRGFYTkhRVkZSUW1jM09IZEJVa1ZGUTNkM1NrMVVTVFZOVkVrelRtcE5ORTFJT0VkRGFYTkhDa0ZSVVVKbk56aDNRVkpKUldOUmVIWmhTRkl3WTBoTk5reDVPVzVoV0ZKdlpGZEpkVmt5T1hSTU1rWXpZM2t4ZDJJelpHeGpibEoyWWpKNGVrd3pRbllLWkRKV2VXUkhPWFppU0UxMFlrZEdkRmx0VW1oTVdFSTFaRWRvZG1KcE9IVmFNbXd3WVVoV2FVd3paSFpqYlhSdFlrYzVNMk41T1hkamJWVjBZMjFXY3dwYVYwWjZXbE0xTldKWGVFRmpiVlp0WTNrNWIxcFhSbXRqZVRscldsaGFiR0pIT1hkTlJHZEhRMmx6UjBGUlVVSm5OemgzUVZKTlJVdG5kMjlPUkd0NUNrMTZVWHBOUkVreFdsZGFiVTVIV1RWYVYxRjNXVlJqTWxwWFdYbE9lbWN4V2xSb2FrOUVVbWhQUjFFMFdYcE9iVnBxUVZsQ1oyOXlRbWRGUlVGWlR5OEtUVUZGVlVKQmIwMURTRTVxWVVkV2EyUlhlR3hOUnpSSFEybHpSMEZSVVVKbk56aDNRVkpWUlZsQmVHVmhTRkl3WTBoTk5reDVPVzVoV0ZKdlpGZEpkUXBaTWpsMFRESkdNMk41TVhkaU0yUnNZMjVTZG1JeWVIcE1NMEoyWkRKV2VXUkhPWFppU0UxMFlrZEdkRmx0VW1oTVdFSTFaRWRvZG1KcE9XaFpNMUp3Q21JeU5YcE1NMG94WW01TmRrMVVZM2hOYWtFMFQwUlJOVTU2U1haWldGSXdXbGN4ZDJSSVRYWk5WRUZYUW1kdmNrSm5SVVZCV1U4dlRVRkZWMEpCWjAwS1FtNUNNVmx0ZUhCWmVrTkNhV2RaUzB0M1dVSkNRVWhYWlZGSlJVRm5VamhDU0c5QlpVRkNNa0ZPTURsTlIzSkhlSGhGZVZsNGEyVklTbXh1VG5kTGFRcFRiRFkwTTJwNWRDODBaVXRqYjBGMlMyVTJUMEZCUVVKdFRYVnlWbFp2UVVGQlVVUkJSV04zVWxGSmFFRktibWhaZEdaa1YxQjVhVk01VVVkMWVTOHhDbEZaUTNoeFptNW5SV3BGVG1aNU5rdGthRXRqT0VKWGRFRnBRV3BEVDFsSGVFZFNZbTQwUVRWa1N6ZHlVVWx2VTJaRVozaEdWbUV2WW1nMWNscHFVSFFLVnpoV1ZFcEVRVXRDWjJkeGFHdHFUMUJSVVVSQmQwNXZRVVJDYkVGcVFXUktjWHBZYkhkRlVVWnNNalZQYzFrMVlXVkNVa0ZHTjNGb2FHRTNiQ3REUmdwdWJVZDRhWHBHU2tjcmJqZFJiVWd6WkhNeFZHdDNlSHBJWW5GNkwyNVJRMDFSUTBGT1NIcHViMk5YY0hSS1pHSk1SMWRpT0VwVlREQkxhekY2WW1GRkNqZzBXbWhyTlVsTWVDdHdSMEptTDNVd1NuQkNSaTgwVGtoNGRsZHRURFo2ZGpKQlBRb3RMUzB0TFVWT1JDQkRSVkpVU1VaSlEwRlVSUzB0TFMwdENnPT0ifV19fQ=="}]}, "dsseEnvelope":{"payload":"eyJfdHlwZSI6Imh0dHBzOi8vaW4tdG90by5pby9TdGF0ZW1lbnQvdjAuMSIsInByZWRpY2F0ZVR5cGUiOiJodHRwczovL3Nsc2EuZGV2L3Byb3ZlbmFuY2UvdjAuMiIsInN1YmplY3QiOlt7Im5hbWUiOiIuL2F3c19sYW1iZGFfcG93ZXJ0b29scy0zLjE5LjFhNS1weTMtbm9uZS1hbnkud2hsIiwiZGlnZXN0Ijp7InNoYTI1NiI6ImNkMjc2ZjQ3ZmNhNThjNGIxMDQxNzE5ZDUyOGMxMzViZjQxNjliMDVmNWYzZDg4NjAwMDk5MjFiM2I1N2MwMjUifX0seyJuYW1lIjoiLi9hd3NfbGFtYmRhX3Bvd2VydG9vbHMtMy4xOS4xYTUudGFyLmd6IiwiZGlnZXN0Ijp7InNoYTI1NiI6ImI5OWM3YTlkMmU3YjUzZmUxZDAxZTViN2M1ZmNmNzYwMzY5OWRhOTA2NGFhMzU1ZDA5OWZmZmJkZDI0NzdhNzYifX1dLCJwcmVkaWNhdGUiOnsiYnVpbGRlciI6eyJpZCI6Imh0dHBzOi8vZ2l0aHViLmNvbS9zbHNhLWZyYW1ld29yay9zbHNhLWdpdGh1Yi1nZW5lcmF0b3IvLmdpdGh1Yi93b3JrZmxvd3MvZ2VuZXJhdG9yX2dlbmVyaWNfc2xzYTMueW1sQHJlZnMvdGFncy92Mi4xLjAifSwiYnVpbGRUeXBlIjoiaHR0cHM6Ly9naXRodWIuY29tL3Nsc2EtZnJhbWV3b3JrL3Nsc2EtZ2l0aHViLWdlbmVyYXRvci9nZW5lcmljQHYxIiwiaW52b2NhdGlvbiI6eyJjb25maWdTb3VyY2UiOnsidXJpIjoiZ2l0K2h0dHBzOi8vZ2l0aHViLmNvbS9hd3MtcG93ZXJ0b29scy9wb3dlcnRvb2xzLWxhbWJkYS1weXRob25AcmVmcy9oZWFkcy9kZXZlbG9wIiwiZGlnZXN0Ijp7InNoYTEiOiI0OTIzNDMwMjVlZmY0ZjllZDBhNzZlZjI3ODVlOGM4NGE4ZDhjM2ZmIn0sImVudHJ5UG9pbnQiOiIuZ2l0aHViL3dvcmtmbG93cy9wcmUtcmVsZWFzZS55bWwifSwicGFyYW1ldGVycyI6eyJ2YXJzIjp7fX0sImVudmlyb25tZW50Ijp7ImdpdGh1Yl9hY3RvciI6ImxlYW5kcm9kYW1hc2NlbmEiLCJnaXRodWJfYWN0b3JfaWQiOiI0Mjk1MTczIiwiZ2l0aHViX2Jhc2VfcmVmIjoiIiwiZ2l0aHViX2V2ZW50X25hbWUiOiJzY2hlZHVsZSIsImdpdGh1Yl9ldmVudF9wYXlsb2FkIjp7ImVudGVycHJpc2UiOnsiYXZhdGFyX3VybCI6Imh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vYi8xMjkwP3Y9NCIsImNyZWF0ZWRfYXQiOiIyMDE5LTExLTEzVDE4OjA1OjQxWiIsImRlc2NyaXB0aW9uIjoiIiwiaHRtbF91cmwiOiJodHRwczovL2dpdGh1Yi5jb20vZW50ZXJwcmlzZXMvYW1hem9uIiwiaWQiOjEyOTAsIm5hbWUiOiJBbWF6b24iLCJub2RlX2lkIjoiTURFd09rVnVkR1Z5Y0hKcGMyVXhNamt3Iiwic2x1ZyI6ImFtYXpvbiIsInVwZGF0ZWRfYXQiOiIyMDI1LTA4LTEyVDIwOjU5OjE0WiIsIndlYnNpdGVfdXJsIjoiaHR0cHM6Ly93d3cuYW1hem9uLmNvbS8ifSwib3JnYW5pemF0aW9uIjp7ImF2YXRhcl91cmwiOiJodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTI5MTI3NjM4P3Y9NCIsImRlc2NyaXB0aW9uIjoiIiwiZXZlbnRzX3VybCI6Imh0dHBzOi8vaW50ZXJuYWwtYXBpLnNlcnZpY2UuaWFkLmdpdGh1Yi5uZXQvb3Jncy9hd3MtcG93ZXJ0b29scy9ldmVudHMiLCJob29rc191cmwiOiJodHRwczovL2ludGVybmFsLWFwaS5zZXJ2aWNlLmlhZC5naXRodWIubmV0L29yZ3MvYXdzLXBvd2VydG9vbHMvaG9va3MiLCJpZCI6MTI5MTI3NjM4LCJpc3N1ZXNfdXJsIjoiaHR0cHM6Ly9pbnRlcm5hbC1hcGkuc2VydmljZS5pYWQuZ2l0aHViLm5ldC9vcmdzL2F3cy1wb3dlcnRvb2xzL2lzc3VlcyIsImxvZ2luIjoiYXdzLXBvd2VydG9vbHMiLCJtZW1iZXJzX3VybCI6Imh0dHBzOi8vaW50ZXJuYWwtYXBpLnNlcnZpY2UuaWFkLmdpdGh1Yi5uZXQvb3Jncy9hd3MtcG93ZXJ0b29scy9tZW1iZXJzey9tZW1iZXJ9Iiwibm9kZV9pZCI6Ik9fa2dET0I3SlUxZyIsInB1YmxpY19tZW1iZXJzX3VybCI6Imh0dHBzOi8vaW50ZXJuYWwtYXBpLnNlcnZpY2UuaWFkLmdpdGh1Yi5uZXQvb3Jncy9hd3MtcG93ZXJ0b29scy9wdWJsaWNfbWVtYmVyc3svbWVtYmVyfSIsInJlcG9zX3VybCI6Imh0dHBzOi8vaW50ZXJuYWwtYXBpLnNlcnZpY2UuaWFkLmdpdGh1Yi5uZXQvb3Jncy9hd3MtcG93ZXJ0b29scy9yZXBvcyIsInVybCI6Imh0dHBzOi8vaW50ZXJuYWwtYXBpLnNlcnZpY2UuaWFkLmdpdGh1Yi5uZXQvb3Jncy9hd3MtcG93ZXJ0b29scyJ9LCJyZXBvc2l0b3J5Ijp7ImFsbG93X2ZvcmtpbmciOnRydWUsImFyY2hpdmVfdXJsIjoiaHR0cHM6Ly9pbnRlcm5hbC1hcGkuc2VydmljZS5pYWQuZ2l0aHViLm5ldC9yZXBvcy9hd3MtcG93ZXJ0b29scy9wb3dlcnRvb2xzLWxhbWJkYS1weXRob24ve2FyY2hpdmVfZm9ybWF0fXsvcmVmfSIsImFyY2hpdmVkIjpmYWxzZSwiYXNzaWduZWVzX3VybCI6Imh0dHBzOi8vaW50ZXJuYWwtYXBpLnNlcnZpY2UuaWFkLmdpdGh1Yi5uZXQvcmVwb3MvYXdzLXBvd2VydG9vbHMvcG93ZXJ0b29scy1sYW1iZGEtcHl0aG9uL2Fzc2lnbmVlc3svdXNlcn0iLCJibG9ic191cmwiOiJodHRwczovL2ludGVybmFsLWFwaS5zZXJ2aWNlLmlhZC5naXRodWIubmV0L3JlcG9zL2F3cy1wb3dlcnRvb2xzL3Bvd2VydG9vbHMtbGFtYmRhLXB5dGhvbi9naXQvYmxvYnN7L3NoYX0iLCJicmFuY2hlc191cmwiOiJodHRwczovL2ludGVybmFsLWFwaS5zZXJ2aWNlLmlhZC5naXRodWIubmV0L3JlcG9zL2F3cy1wb3dlcnRvb2xzL3Bvd2VydG9vbHMtbGFtYmRhLXB5dGhvbi9icmFuY2hlc3svYnJhbmNofSIsImNsb25lX3VybCI6Imh0dHBzOi8vZ2l0aHViLmNvbS9hd3MtcG93ZXJ0b29scy9wb3dlcnRvb2xzLWxhbWJkYS1weXRob24uZ2l0IiwiY29sbGFib3JhdG9yc191cmwiOiJodHRwczovL2ludGVybmFsLWFwaS5zZXJ2aWNlLmlhZC5naXRodWIubmV0L3JlcG9zL2F3cy1wb3dlcnRvb2xzL3Bvd2VydG9vbHMtbGFtYmRhLXB5dGhvbi9jb2xsYWJvcmF0b3Jzey9jb2xsYWJvcmF0b3J9IiwiY29tbWVudHNfdXJsIjoiaHR0cHM6Ly9pbnRlcm5hbC1hcGkuc2VydmljZS5pYWQuZ2l0aHViLm5ldC9yZXBvcy9hd3MtcG93ZXJ0b29scy9wb3dlcnRvb2xzLWxhbWJkYS1weXRob24vY29tbWVudHN7L251bWJlcn0iLCJjb21taXRzX3VybCI6Imh0dHBzOi8vaW50ZXJuYWwtYXBpLnNlcnZpY2UuaWFkLmdpdGh1Yi5uZXQvcmVwb3MvYXdzLXBvd2VydG9vbHMvcG93ZXJ0b29scy1sYW1iZGEtcHl0aG9uL2NvbW1pdHN7L3NoYX0iLCJjb21wYXJlX3VybCI6Imh0dHBzOi8vaW50ZXJuYWwtYXBpLnNlcnZpY2UuaWFkLmdpdGh1Yi5uZXQvcmVwb3MvYXdzLXBvd2VydG9vbHMvcG93ZXJ0b29scy1sYW1iZGEtcHl0aG9uL2NvbXBhcmUve2Jhc2V9Li4ue2hlYWR9IiwiY29udGVudHNfdXJsIjoiaHR0cHM6Ly9pbnRlcm5hbC1hcGkuc2VydmljZS5pYWQuZ2l0aHViLm5ldC9yZXBvcy9hd3MtcG93ZXJ0b29scy9wb3dlcnRvb2xzLWxhbWJkYS1weXRob24vY29udGVudHMveytwYXRofSIsImNvbnRyaWJ1dG9yc191cmwiOiJodHRwczovL2ludGVybmFsLWFwaS5zZXJ2aWNlLmlhZC5naXRodWIubmV0L3JlcG9zL2F3cy1wb3dlcnRvb2xzL3Bvd2VydG9vbHMtbGFtYmRhLXB5dGhvbi9jb250cmlidXRvcnMiLCJjcmVhdGVkX2F0IjoiMjAxOS0xMS0xNVQxMjoyNjoxMloiLCJjdXN0b21fcHJvcGVydGllcyI6eyJzdGFnaW5nIjoiZmFsc2UiLCJ2aXNpYmlsaXR5LWFsbG93LWludGVybmFsIjoiZmFsc2UiLCJ2aXNpYmlsaXR5LWFsbG93LXByaXZhdGUiOiJmYWxzZSIsInZpc2liaWxpdHktYWxsb3ctcHVibGljIjoidHJ1ZSJ9LCJkZWZhdWx0X2JyYW5jaCI6ImRldmVsb3AiLCJkZXBsb3ltZW50c191cmwiOiJodHRwczovL2ludGVybmFsLWFwaS5zZXJ2aWNlLmlhZC5naXRodWIubmV0L3JlcG9zL2F3cy1wb3dlcnRvb2xzL3Bvd2VydG9vbHMtbGFtYmRhLXB5dGhvbi9kZXBsb3ltZW50cyIsImRlc2NyaXB0aW9uIjoiQSBkZXZlbG9wZXIgdG9vbGtpdCB0byBpbXBsZW1lbnQgU2VydmVybGVzcyBiZXN0IHByYWN0aWNlcyBhbmQgaW5jcmVhc2UgZGV2ZWxvcGVyIHZlbG9jaXR5LiIsImRpc2FibGVkIjpmYWxzZSwiZG93bmxvYWRzX3VybCI6Imh0dHBzOi8vaW50ZXJuYWwtYXBpLnNlcnZpY2UuaWFkLmdpdGh1Yi5uZXQvcmVwb3MvYXdzLXBvd2VydG9vbHMvcG93ZXJ0b29scy1sYW1iZGEtcHl0aG9uL2Rvd25sb2FkcyIsImV2ZW50c191cmwiOiJodHRwczovL2ludGVybmFsLWFwaS5zZXJ2aWNlLmlhZC5naXRodWIubmV0L3JlcG9zL2F3cy1wb3dlcnRvb2xzL3Bvd2VydG9vbHMtbGFtYmRhLXB5dGhvbi9ldmVudHMiLCJmb3JrIjpmYWxzZSwiZm9ya3MiOjQ0NCwiZm9ya3NfY291bnQiOjQ0NCwiZm9ya3NfdXJsIjoiaHR0cHM6Ly9pbnRlcm5hbC1hcGkuc2VydmljZS5pYWQuZ2l0aHViLm5ldC9yZXBvcy9hd3MtcG93ZXJ0b29scy9wb3dlcnRvb2xzLWxhbWJkYS1weXRob24vZm9ya3MiLCJmdWxsX25hbWUiOiJhd3MtcG93ZXJ0b29scy9wb3dlcnRvb2xzLWxhbWJkYS1weXRob24iLCJnaXRfY29tbWl0c191cmwiOiJodHRwczovL2ludGVybmFsLWFwaS5zZXJ2aWNlLmlhZC5naXRodWIubmV0L3JlcG9zL2F3cy1wb3dlcnRvb2xzL3Bvd2VydG9vbHMtbGFtYmRhLXB5dGhvbi9naXQvY29tbWl0c3svc2hhfSIsImdpdF9yZWZzX3VybCI6Imh0dHBzOi8vaW50ZXJuYWwtYXBpLnNlcnZpY2UuaWFkLmdpdGh1Yi5uZXQvcmVwb3MvYXdzLXBvd2VydG9vbHMvcG93ZXJ0b29scy1sYW1iZGEtcHl0aG9uL2dpdC9yZWZzey9zaGF9IiwiZ2l0X3RhZ3NfdXJsIjoiaHR0cHM6Ly9pbnRlcm5hbC1hcGkuc2VydmljZS5pYWQuZ2l0aHViLm5ldC9yZXBvcy9hd3MtcG93ZXJ0b29scy9wb3dlcnRvb2xzLWxhbWJkYS1weXRob24vZ2l0L3RhZ3N7L3NoYX0iLCJnaXRfdXJsIjoiZ2l0Oi8vZ2l0aHViLmNvbS9hd3MtcG93ZXJ0b29scy9wb3dlcnRvb2xzLWxhbWJkYS1weXRob24uZ2l0IiwiaGFzX2Rpc2N1c3Npb25zIjp0cnVlLCJoYXNfZG93bmxvYWRzIjp0cnVlLCJoYXNfaXNzdWVzIjp0cnVlLCJoYXNfcGFnZXMiOmZhbHNlLCJoYXNfcHJvamVjdHMiOnRydWUsImhhc193aWtpIjpmYWxzZSwiaG9tZXBhZ2UiOiJodHRwczovL2RvY3MucG93ZXJ0b29scy5hd3MuZGV2L2xhbWJkYS9weXRob24vbGF0ZXN0LyIsImhvb2tzX3VybCI6Imh0dHBzOi8vaW50ZXJuYWwtYXBpLnNlcnZpY2UuaWFkLmdpdGh1Yi5uZXQvcmVwb3MvYXdzLXBvd2VydG9vbHMvcG93ZXJ0b29scy1sYW1iZGEtcHl0aG9uL2hvb2tzIiwiaHRtbF91cmwiOiJodHRwczovL2dpdGh1Yi5jb20vYXdzLXBvd2VydG9vbHMvcG93ZXJ0b29scy1sYW1iZGEtcHl0aG9uIiwiaWQiOjIyMTkxOTM3OSwiaXNfdGVtcGxhdGUiOmZhbHNlLCJpc3N1ZV9jb21tZW50X3VybCI6Imh0dHBzOi8vaW50ZXJuYWwtYXBpLnNlcnZpY2UuaWFkLmdpdGh1Yi5uZXQvcmVwb3MvYXdzLXBvd2VydG9vbHMvcG93ZXJ0b29scy1sYW1iZGEtcHl0aG9uL2lzc3Vlcy9jb21tZW50c3svbnVtYmVyfSIsImlzc3VlX2V2ZW50c191cmwiOiJodHRwczovL2ludGVybmFsLWFwaS5zZXJ2aWNlLmlhZC5naXRodWIubmV0L3JlcG9zL2F3cy1wb3dlcnRvb2xzL3Bvd2VydG9vbHMtbGFtYmRhLXB5dGhvbi9pc3N1ZXMvZXZlbnRzey9udW1iZXJ9IiwiaXNzdWVzX3VybCI6Imh0dHBzOi8vaW50ZXJuYWwtYXBpLnNlcnZpY2UuaWFkLmdpdGh1Yi5uZXQvcmVwb3MvYXdzLXBvd2VydG9vbHMvcG93ZXJ0b29scy1sYW1iZGEtcHl0aG9uL2lzc3Vlc3svbnVtYmVyfSIsImtleXNfdXJsIjoiaHR0cHM6Ly9pbnRlcm5hbC1hcGkuc2VydmljZS5pYWQuZ2l0aHViLm5ldC9yZXBvcy9hd3MtcG93ZXJ0b29scy9wb3dlcnRvb2xzLWxhbWJkYS1weXRob24va2V5c3sva2V5X2lkfSIsImxhYmVsc191cmwiOiJodHRwczovL2ludGVybmFsLWFwaS5zZXJ2aWNlLmlhZC5naXRodWIubmV0L3JlcG9zL2F3cy1wb3dlcnRvb2xzL3Bvd2VydG9vbHMtbGFtYmRhLXB5dGhvbi9sYWJlbHN7L25hbWV9IiwibGFuZ3VhZ2UiOiJQeXRob24iLCJsYW5ndWFnZXNfdXJsIjoiaHR0cHM6Ly9pbnRlcm5hbC1hcGkuc2VydmljZS5pYWQuZ2l0aHViLm5ldC9yZXBvcy9hd3MtcG93ZXJ0b29scy9wb3dlcnRvb2xzLWxhbWJkYS1weXRob24vbGFuZ3VhZ2VzIiwibGljZW5zZSI6eyJrZXkiOiJtaXQtMCIsIm5hbWUiOiJNSVQgTm8gQXR0cmlidXRpb24iLCJub2RlX2lkIjoiTURjNlRHbGpaVzV6WlRReCIsInNwZHhfaWQiOiJNSVQtMCIsInVybCI6Imh0dHBzOi8vaW50ZXJuYWwtYXBpLnNlcnZpY2UuaWFkLmdpdGh1Yi5uZXQvbGljZW5zZXMvbWl0LTAifSwibWVyZ2VzX3VybCI6Imh0dHBzOi8vaW50ZXJuYWwtYXBpLnNlcnZpY2UuaWFkLmdpdGh1Yi5uZXQvcmVwb3MvYXdzLXBvd2VydG9vbHMvcG93ZXJ0b29scy1sYW1iZGEtcHl0aG9uL21lcmdlcyIsIm1pbGVzdG9uZXNfdXJsIjoiaHR0cHM6Ly9pbnRlcm5hbC1hcGkuc2VydmljZS5pYWQuZ2l0aHViLm5ldC9yZXBvcy9hd3MtcG93ZXJ0b29scy9wb3dlcnRvb2xzLWxhbWJkYS1weXRob24vbWlsZXN0b25lc3svbnVtYmVyfSIsIm1pcnJvcl91cmwiOm51bGwsIm5hbWUiOiJwb3dlcnRvb2xzLWxhbWJkYS1weXRob24iLCJub2RlX2lkIjoiTURFd09sSmxjRzl6YVhSdmNua3lNakU1TVRrek56az0iLCJub3RpZmljYXRpb25zX3VybCI6Imh0dHBzOi8vaW50ZXJuYWwtYXBpLnNlcnZpY2UuaWFkLmdpdGh1Yi5uZXQvcmVwb3MvYXdzLXBvd2VydG9vbHMvcG93ZXJ0b29scy1sYW1iZGEtcHl0aG9uL25vdGlmaWNhdGlvbnN7P3NpbmNlLGFsbCxwYXJ0aWNpcGF0aW5nfSIsIm9wZW5faXNzdWVzIjo1OSwib3Blbl9pc3N1ZXNfY291bnQiOjU5LCJvd25lciI6eyJhdmF0YXJfdXJsIjoiaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzEyOTEyNzYzOD92PTQiLCJldmVudHNfdXJsIjoiaHR0cHM6Ly9pbnRlcm5hbC1hcGkuc2VydmljZS5pYWQuZ2l0aHViLm5ldC91c2Vycy9hd3MtcG93ZXJ0b29scy9ldmVudHN7L3ByaXZhY3l9IiwiZm9sbG93ZXJzX3VybCI6Imh0dHBzOi8vaW50ZXJuYWwtYXBpLnNlcnZpY2UuaWFkLmdpdGh1Yi5uZXQvdXNlcnMvYXdzLXBvd2VydG9vbHMvZm9sbG93ZXJzIiwiZm9sbG93aW5nX3VybCI6Imh0dHBzOi8vaW50ZXJuYWwtYXBpLnNlcnZpY2UuaWFkLmdpdGh1Yi5uZXQvdXNlcnMvYXdzLXBvd2VydG9vbHMvZm9sbG93aW5ney9vdGhlcl91c2VyfSIsImdpc3RzX3VybCI6Imh0dHBzOi8vaW50ZXJuYWwtYXBpLnNlcnZpY2UuaWFkLmdpdGh1Yi5uZXQvdXNlcnMvYXdzLXBvd2VydG9vbHMvZ2lzdHN7L2dpc3RfaWR9IiwiZ3JhdmF0YXJfaWQiOiIiLCJodG1sX3VybCI6Imh0dHBzOi8vZ2l0aHViLmNvbS9hd3MtcG93ZXJ0b29scyIsImlkIjoxMjkxMjc2MzgsImxvZ2luIjoiYXdzLXBvd2VydG9vbHMiLCJub2RlX2lkIjoiT19rZ0RPQjdKVTFnIiwib3JnYW5pemF0aW9uc191cmwiOiJodHRwczovL2ludGVybmFsLWFwaS5zZXJ2aWNlLmlhZC5naXRodWIubmV0L3VzZXJzL2F3cy1wb3dlcnRvb2xzL29yZ3MiLCJyZWNlaXZlZF9ldmVudHNfdXJsIjoiaHR0cHM6Ly9pbnRlcm5hbC1hcGkuc2VydmljZS5pYWQuZ2l0aHViLm5ldC91c2Vycy9hd3MtcG93ZXJ0b29scy9yZWNlaXZlZF9ldmVudHMiLCJyZXBvc191cmwiOiJodHRwczovL2ludGVybmFsLWFwaS5zZXJ2aWNlLmlhZC5naXRodWIubmV0L3VzZXJzL2F3cy1wb3dlcnRvb2xzL3JlcG9zIiwic2l0ZV9hZG1pbiI6ZmFsc2UsInN0YXJyZWRfdXJsIjoiaHR0cHM6Ly9pbnRlcm5hbC1hcGkuc2VydmljZS5pYWQuZ2l0aHViLm5ldC91c2Vycy9hd3MtcG93ZXJ0b29scy9zdGFycmVkey9vd25lcn17L3JlcG99Iiwic3Vic2NyaXB0aW9uc191cmwiOiJodHRwczovL2ludGVybmFsLWFwaS5zZXJ2aWNlLmlhZC5naXRodWIubmV0L3VzZXJzL2F3cy1wb3dlcnRvb2xzL3N1YnNjcmlwdGlvbnMiLCJ0eXBlIjoiT3JnYW5pemF0aW9uIiwidXJsIjoiaHR0cHM6Ly9pbnRlcm5hbC1hcGkuc2VydmljZS5pYWQuZ2l0aHViLm5ldC91c2Vycy9hd3MtcG93ZXJ0b29scyIsInVzZXJfdmlld190eXBlIjoicHVibGljIn0sInByaXZhdGUiOmZhbHNlLCJwdWxsc191cmwiOiJodHRwczovL2ludGVybmFsLWFwaS5zZXJ2aWNlLmlhZC5naXRodWIubmV0L3JlcG9zL2F3cy1wb3dlcnRvb2xzL3Bvd2VydG9vbHMtbGFtYmRhLXB5dGhvbi9wdWxsc3svbnVtYmVyfSIsInB1c2hlZF9hdCI6IjIwMjUtMDgtMjBUMjE6MDA6MTFaIiwicmVsZWFzZXNfdXJsIjoiaHR0cHM6Ly9pbnRlcm5hbC1hcGkuc2VydmljZS5pYWQuZ2l0aHViLm5ldC9yZXBvcy9hd3MtcG93ZXJ0b29scy9wb3dlcnRvb2xzLWxhbWJkYS1weXRob24vcmVsZWFzZXN7L2lkfSIsInNpemUiOjEzMTQ2Miwic3NoX3VybCI6ImdpdEBnaXRodWIuY29tOmF3cy1wb3dlcnRvb2xzL3Bvd2VydG9vbHMtbGFtYmRhLXB5dGhvbi5naXQiLCJzdGFyZ2F6ZXJzX2NvdW50IjozMTI2LCJzdGFyZ2F6ZXJzX3VybCI6Imh0dHBzOi8vaW50ZXJuYWwtYXBpLnNlcnZpY2UuaWFkLmdpdGh1Yi5uZXQvcmVwb3MvYXdzLXBvd2VydG9vbHMvcG93ZXJ0b29scy1sYW1iZGEtcHl0aG9uL3N0YXJnYXplcnMiLCJzdGF0dXNlc191cmwiOiJodHRwczovL2ludGVybmFsLWFwaS5zZXJ2aWNlLmlhZC5naXRodWIubmV0L3JlcG9zL2F3cy1wb3dlcnRvb2xzL3Bvd2VydG9vbHMtbGFtYmRhLXB5dGhvbi9zdGF0dXNlcy97c2hhfSIsInN1YnNjcmliZXJzX3VybCI6Imh0dHBzOi8vaW50ZXJuYWwtYXBpLnNlcnZpY2UuaWFkLmdpdGh1Yi5uZXQvcmVwb3MvYXdzLXBvd2VydG9vbHMvcG93ZXJ0b29scy1sYW1iZGEtcHl0aG9uL3N1YnNjcmliZXJzIiwic3Vic2NyaXB0aW9uX3VybCI6Imh0dHBzOi8vaW50ZXJuYWwtYXBpLnNlcnZpY2UuaWFkLmdpdGh1Yi5uZXQvcmVwb3MvYXdzLXBvd2VydG9vbHMvcG93ZXJ0b29scy1sYW1iZGEtcHl0aG9uL3N1YnNjcmlwdGlvbiIsInN2bl91cmwiOiJodHRwczovL2dpdGh1Yi5jb20vYXdzLXBvd2VydG9vbHMvcG93ZXJ0b29scy1sYW1iZGEtcHl0aG9uIiwidGFnc191cmwiOiJodHRwczovL2ludGVybmFsLWFwaS5zZXJ2aWNlLmlhZC5naXRodWIubmV0L3JlcG9zL2F3cy1wb3dlcnRvb2xzL3Bvd2VydG9vbHMtbGFtYmRhLXB5dGhvbi90YWdzIiwidGVhbXNfdXJsIjoiaHR0cHM6Ly9pbnRlcm5hbC1hcGkuc2VydmljZS5pYWQuZ2l0aHViLm5ldC9yZXBvcy9hd3MtcG93ZXJ0b29scy9wb3dlcnRvb2xzLWxhbWJkYS1weXRob24vdGVhbXMiLCJ0b3BpY3MiOlsiYXdzIiwiYXdzLWxhbWJkYSIsImxhbWJkYSIsInB5dGhvbiIsInNlcnZlcmxlc3MiXSwidHJlZXNfdXJsIjoiaHR0cHM6Ly9pbnRlcm5hbC1hcGkuc2VydmljZS5pYWQuZ2l0aHViLm5ldC9yZXBvcy9hd3MtcG93ZXJ0b29scy9wb3dlcnRvb2xzLWxhbWJkYS1weXRob24vZ2l0L3RyZWVzey9zaGF9IiwidXBkYXRlZF9hdCI6IjIwMjUtMDgtMjBUMjM6NDI6NTlaIiwidXJsIjoiaHR0cHM6Ly9pbnRlcm5hbC1hcGkuc2VydmljZS5pYWQuZ2l0aHViLm5ldC9yZXBvcy9hd3MtcG93ZXJ0b29scy9wb3dlcnRvb2xzLWxhbWJkYS1weXRob24iLCJ2aXNpYmlsaXR5IjoicHVibGljIiwid2F0Y2hlcnMiOjMxMjYsIndhdGNoZXJzX2NvdW50IjozMTI2LCJ3ZWJfY29tbWl0X3NpZ25vZmZfcmVxdWlyZWQiOnRydWV9LCJzY2hlZHVsZSI6IjAgOCAqICogMS01Iiwid29ya2Zsb3ciOiIuZ2l0aHViL3dvcmtmbG93cy9wcmUtcmVsZWFzZS55bWwifSwiZ2l0aHViX2hlYWRfcmVmIjoiIiwiZ2l0aHViX3JlZiI6InJlZnMvaGVhZHMvZGV2ZWxvcCIsImdpdGh1Yl9yZWZfdHlwZSI6ImJyYW5jaCIsImdpdGh1Yl9yZXBvc2l0b3J5X2lkIjoiMjIxOTE5Mzc5IiwiZ2l0aHViX3JlcG9zaXRvcnlfb3duZXIiOiJhd3MtcG93ZXJ0b29scyIsImdpdGh1Yl9yZXBvc2l0b3J5X293bmVyX2lkIjoiMTI5MTI3NjM4IiwiZ2l0aHViX3J1bl9hdHRlbXB0IjoiMSIsImdpdGh1Yl9ydW5faWQiOiIxNzEyMDg4NDk3MiIsImdpdGh1Yl9ydW5fbnVtYmVyIjoiMzExIiwiZ2l0aHViX3NoYTEiOiI0OTIzNDMwMjVlZmY0ZjllZDBhNzZlZjI3ODVlOGM4NGE4ZDhjM2ZmIn19LCJtZXRhZGF0YSI6eyJidWlsZEludm9jYXRpb25JRCI6IjE3MTIwODg0OTcyLTEiLCJjb21wbGV0ZW5lc3MiOnsicGFyYW1ldGVycyI6dHJ1ZSwiZW52aXJvbm1lbnQiOmZhbHNlLCJtYXRlcmlhbHMiOmZhbHNlfSwicmVwcm9kdWNpYmxlIjpmYWxzZX0sIm1hdGVyaWFscyI6W3sidXJpIjoiZ2l0K2h0dHBzOi8vZ2l0aHViLmNvbS9hd3MtcG93ZXJ0b29scy9wb3dlcnRvb2xzLWxhbWJkYS1weXRob25AcmVmcy9oZWFkcy9kZXZlbG9wIiwiZGlnZXN0Ijp7InNoYTEiOiI0OTIzNDMwMjVlZmY0ZjllZDBhNzZlZjI3ODVlOGM4NGE4ZDhjM2ZmIn19XX19", "payloadType":"application/vnd.in-toto+json", "signatures":[{"sig":"MEUCIQCn2/Dk3HzT1uHtshpS9u0rqEaKzO9RllkmTAixzIezWgIgG/xvvFGzLxFSvYPmgBH48VKuptDL3NEjk67dzgtBW/g="}]}} \ No newline at end of file diff --git a/provenance/3.19.1a6/multiple.intoto.jsonl b/provenance/3.19.1a6/multiple.intoto.jsonl new file mode 100644 index 00000000000..75c3e238515 --- /dev/null +++ b/provenance/3.19.1a6/multiple.intoto.jsonl @@ -0,0 +1 @@ +{"mediaType":"application/vnd.dev.sigstore.bundle.v0.3+json", "verificationMaterial":{"certificate":{"rawBytes":"MIIHZzCCBu2gAwIBAgIUBbyKfsMLOsb8zu7F5El0X0N52EwwCgYIKoZIzj0EAwMwNzEVMBMGA1UEChMMc2lnc3RvcmUuZGV2MR4wHAYDVQQDExVzaWdzdG9yZS1pbnRlcm1lZGlhdGUwHhcNMjUwODIyMDgwNzQxWhcNMjUwODIyMDgxNzQxWjAAMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEVSNXU3rW1qXRzRGuvpldNA5n3SNbGU+qfhJve2xWLkupIC/f/tGAueE1ded0Gp+0JWXDPzzizkwiUO5/Vy9kxaOCBgwwggYIMA4GA1UdDwEB/wQEAwIHgDATBgNVHSUEDDAKBggrBgEFBQcDAzAdBgNVHQ4EFgQUA15/244giAWUxBowvjJEtqQfNIswHwYDVR0jBBgwFoAU39Ppz1YkEZb5qNjpKFWixi4YZD8wgYQGA1UdEQEB/wR6MHiGdmh0dHBzOi8vZ2l0aHViLmNvbS9zbHNhLWZyYW1ld29yay9zbHNhLWdpdGh1Yi1nZW5lcmF0b3IvLmdpdGh1Yi93b3JrZmxvd3MvZ2VuZXJhdG9yX2dlbmVyaWNfc2xzYTMueW1sQHJlZnMvdGFncy92Mi4xLjAwOQYKKwYBBAGDvzABAQQraHR0cHM6Ly90b2tlbi5hY3Rpb25zLmdpdGh1YnVzZXJjb250ZW50LmNvbTAWBgorBgEEAYO/MAECBAhzY2hlZHVsZTA2BgorBgEEAYO/MAEDBCg1M2NkYmYzMDE1NmYwNDJlNzMyNzliZDJkMWNhZDY4MWM4NGI2ZGI0MBkGCisGAQQBg78wAQQEC1ByZS1SZWxlYXNlMDUGCisGAQQBg78wAQUEJ2F3cy1wb3dlcnRvb2xzL3Bvd2VydG9vbHMtbGFtYmRhLXB5dGhvbjAgBgorBgEEAYO/MAEGBBJyZWZzL2hlYWRzL2RldmVsb3AwOwYKKwYBBAGDvzABCAQtDCtodHRwczovL3Rva2VuLmFjdGlvbnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tMIGGBgorBgEEAYO/MAEJBHgMdmh0dHBzOi8vZ2l0aHViLmNvbS9zbHNhLWZyYW1ld29yay9zbHNhLWdpdGh1Yi1nZW5lcmF0b3IvLmdpdGh1Yi93b3JrZmxvd3MvZ2VuZXJhdG9yX2dlbmVyaWNfc2xzYTMueW1sQHJlZnMvdGFncy92Mi4xLjAwOAYKKwYBBAGDvzABCgQqDChmN2RkOGM1NGMyMDY3YmFmYzEyY2E3YTU1NTk1ZDVlZTliNzUyMDRhMB0GCisGAQQBg78wAQsEDwwNZ2l0aHViLWhvc3RlZDBKBgorBgEEAYO/MAEMBDwMOmh0dHBzOi8vZ2l0aHViLmNvbS9hd3MtcG93ZXJ0b29scy9wb3dlcnRvb2xzLWxhbWJkYS1weXRob24wOAYKKwYBBAGDvzABDQQqDCg1M2NkYmYzMDE1NmYwNDJlNzMyNzliZDJkMWNhZDY4MWM4NGI2ZGI0MCIGCisGAQQBg78wAQ4EFAwScmVmcy9oZWFkcy9kZXZlbG9wMBkGCisGAQQBg78wAQ8ECwwJMjIxOTE5Mzc5MDEGCisGAQQBg78wARAEIwwhaHR0cHM6Ly9naXRodWIuY29tL2F3cy1wb3dlcnRvb2xzMBkGCisGAQQBg78wAREECwwJMTI5MTI3NjM4MH8GCisGAQQBg78wARIEcQxvaHR0cHM6Ly9naXRodWIuY29tL2F3cy1wb3dlcnRvb2xzL3Bvd2VydG9vbHMtbGFtYmRhLXB5dGhvbi8uZ2l0aHViL3dvcmtmbG93cy9wcmUtcmVsZWFzZS55bWxAcmVmcy9oZWFkcy9kZXZlbG9wMDgGCisGAQQBg78wARMEKgwoNTNjZGJmMzAxNTZmMDQyZTczMjc5YmQyZDFjYWQ2ODFjODRiNmRiNDAYBgorBgEEAYO/MAEUBAoMCHNjaGVkdWxlMG4GCisGAQQBg78wARUEYAxeaHR0cHM6Ly9naXRodWIuY29tL2F3cy1wb3dlcnRvb2xzL3Bvd2VydG9vbHMtbGFtYmRhLXB5dGhvbi9hY3Rpb25zL3J1bnMvMTcxNDk3MTU0NjYvYXR0ZW1wdHMvMTAWBgorBgEEAYO/MAEWBAgMBnB1YmxpYzCBiwYKKwYBBAHWeQIEAgR9BHsAeQB3AN09MGrGxxEyYxkeHJlnNwKiSl643jyt/4eKcoAvKe6OAAABmNDRtdcAAAQDAEgwRgIhAJaJwLu2HdXTWsfTFNu/1/bXO0lxy0Nr0CKo1OIvUlblAiEA4QqWGpBZZ9mH3l8JRaVRn9vW7YMpw0yI1wl6iM33d9QwCgYIKoZIzj0EAwMDaAAwZQIxAPRBaOlRjVCHCGef6RVDWYruqU0kq9pEHpFDPpLy+ddD4IMzzlqfci6LukqVZJ+m1gIwJYGGUjYZ7nwlD340W9CikqAxyA3Cip7xbmKjIRfj7NGYwONosHsCegdcUx3pmAFO"}, "tlogEntries":[{"logIndex":"421187372", "logId":{"keyId":"wNI9atQGlz+VWfO6LRygH4QUfY/8W4RFwiT5i5WRgB0="}, "kindVersion":{"kind":"dsse", "version":"0.0.1"}, "integratedTime":"1755850061", "inclusionPromise":{"signedEntryTimestamp":"MEQCIGZvqdrJwgwk3NvOTBpNlNEjVx8BS65Uf0/YYLWeAN+RAiAq7BQDlJglSYo0kjPvWjy9Y0Ikea+I2/zvElZjbGY7Hw=="}, "inclusionProof":{"logIndex":"299283110", "rootHash":"0Uf/uVHZq6yXk9F1hlNed3S8tdFEDJ0tw1Py/ldvlWM=", "treeSize":"299283118", "hashes":["Ujv+bw9/YMUVtNlMsuyYA973rLfq1AhTW8jJOfdYjPk=", "S3QPtcXzunzsZEu1oqwleF06/Tj3/eyR9UvBYX/YYVU=", "i9qXdzn/uaOsqaw4XpKSvU0SIA9tqR9nkbcAl/C/bu4=", "jAcQxs3imZz0JGyHzZtgSVo6NXUG0neZG4u2rHIPBeU=", "Ce10BLLOeqiuhmbfjRXqvqQBylRR/h0li42A9/riaHI=", "5mTBYPBr8FHoIER8zCySyLebTIQ2cEkreByYDtGtF5Q=", "brkLVxgKtGMqfO/SLfbYHmhC6OVIuRnJYkBnogF7uxc=", "sQIYRPZjIF7qnb7mSB+V1vPA5e/at9WapWZ7FxofZPs=", "gPDgtcgQxkQcoL9K5yPPSQyiIzY/WbkjmzH7WeQDH8o=", "xgFHkn/YbL87h1933q88IyHCy/pq0Iuss+a96HcK1z4=", "kjiz7JYMfh67Q7SoD53eGFxQo7vhaxsx2Z5fvVMTBB8=", "G9TfN+IrIXNZYcqrCQ+8NWqAi5x4YIn0Hq1vhw+sUjU=", "SATc7/r2cdjEFbBlBi50ECcmOV/y4wNhK05/XdFs2jI=", "jGp13qJ5PkpaUwDgwOro54rgfdL7SSTP5Kl8XT60B8I=", "z4fk/in2fEkJsWsf2PfqaAfkG66FGaTkyDuejmCyFlg=", "mY/RW4xaHcEl4tg806MlgeKlHNQKRa1JOmEp9GuAcKY=", "vS7O4ozHIQZJWBiov+mkpI27GE8zAmVCEkRcP3NDyNE="], "checkpoint":{"envelope":"rekor.sigstore.dev - 1193050959916656506\n299283118\n0Uf/uVHZq6yXk9F1hlNed3S8tdFEDJ0tw1Py/ldvlWM=\n\n— rekor.sigstore.dev wNI9ajBEAiB8tNK09oKrymI0R/H42y3YPgoVo7/vfD98jYkVMQ0fpwIgP93gz7LDD/bxt9jW4rKuoMUod1dKV2sBcjZpiCIS3h4=\n"}}, "canonicalizedBody":"eyJhcGlWZXJzaW9uIjoiMC4wLjEiLCJraW5kIjoiZHNzZSIsInNwZWMiOnsiZW52ZWxvcGVIYXNoIjp7ImFsZ29yaXRobSI6InNoYTI1NiIsInZhbHVlIjoiNDM4M2NmMTMzNmFjYzQ0NjI5NmU5YzQ3YTJjMDU5MDhkMTViOGEyY2NhYTE5MjZjM2E4YmE3NTk5YzMyOTg1NyJ9LCJwYXlsb2FkSGFzaCI6eyJhbGdvcml0aG0iOiJzaGEyNTYiLCJ2YWx1ZSI6ImMwNDcwNWQyMmM3YTFkMjhlNzIwNTZiZjk1MTE2ZDJlZTZlMDUzNzc5NGQ5MTdlZTk0OGU0YjliMjJjZDcwYjgifSwic2lnbmF0dXJlcyI6W3sic2lnbmF0dXJlIjoiTUVVQ0lGWmhuQXptYnNqbHJkWkJ2cHlUNGF2ZDQxaTVWWUdMU2ZxTFYwSWtSQ2RYQWlFQXV3endTQUU1eWhRdW8rR0lwZE9CVndVVXcwbkFZZ21aVzlQMm0rRW5xWlE9IiwidmVyaWZpZXIiOiJMUzB0TFMxQ1JVZEpUaUJEUlZKVVNVWkpRMEZVUlMwdExTMHRDazFKU1VoYWVrTkRRblV5WjBGM1NVSkJaMGxWUW1KNVMyWnpUVXhQYzJJNGVuVTNSalZGYkRCWU1FNDFNa1YzZDBObldVbExiMXBKZW1vd1JVRjNUWGNLVG5wRlZrMUNUVWRCTVZWRlEyaE5UV015Ykc1ak0xSjJZMjFWZFZwSFZqSk5ValIzU0VGWlJGWlJVVVJGZUZaNllWZGtlbVJIT1hsYVV6RndZbTVTYkFwamJURnNXa2RzYUdSSFZYZElhR05PVFdwVmQwOUVTWGxOUkdkM1RucFJlRmRvWTA1TmFsVjNUMFJKZVUxRVozaE9lbEY0VjJwQlFVMUdhM2RGZDFsSUNrdHZXa2w2YWpCRFFWRlpTVXR2V2tsNmFqQkVRVkZqUkZGblFVVldVMDVZVlROeVZ6RnhXRko2VWtkMWRuQnNaRTVCTlc0elUwNWlSMVVyY1dab1NuWUtaVEo0VjB4cmRYQkpReTltTDNSSFFYVmxSVEZrWldRd1IzQXJNRXBYV0VSUWVucHBlbXQzYVZWUE5TOVdlVGxyZUdGUFEwSm5kM2RuWjFsSlRVRTBSd3BCTVZWa1JIZEZRaTkzVVVWQmQwbElaMFJCVkVKblRsWklVMVZGUkVSQlMwSm5aM0pDWjBWR1FsRmpSRUY2UVdSQ1owNVdTRkUwUlVablVWVkJNVFV2Q2pJME5HZHBRVmRWZUVKdmQzWnFTa1YwY1ZGbVRrbHpkMGgzV1VSV1VqQnFRa0puZDBadlFWVXpPVkJ3ZWpGWmEwVmFZalZ4VG1wd1MwWlhhWGhwTkZrS1drUTRkMmRaVVVkQk1WVmtSVkZGUWk5M1VqWk5TR2xIWkcxb01HUklRbnBQYVRoMldqSnNNR0ZJVm1sTWJVNTJZbE01ZW1KSVRtaE1WMXA1V1ZjeGJBcGtNamw1WVhrNWVtSklUbWhNVjJSd1pFZG9NVmxwTVc1YVZ6VnNZMjFHTUdJelNYWk1iV1J3WkVkb01WbHBPVE5pTTBweVdtMTRkbVF6VFhaYU1sWjFDbHBZU21oa1J6bDVXREprYkdKdFZubGhWMDVtWXpKNGVsbFVUWFZsVnpGelVVaEtiRnB1VFhaa1IwWnVZM2s1TWsxcE5IaE1ha0YzVDFGWlMwdDNXVUlLUWtGSFJIWjZRVUpCVVZGeVlVaFNNR05JVFRaTWVUa3dZakowYkdKcE5XaFpNMUp3WWpJMWVreHRaSEJrUjJneFdXNVdlbHBZU21waU1qVXdXbGMxTUFwTWJVNTJZbFJCVjBKbmIzSkNaMFZGUVZsUEwwMUJSVU5DUVdoNldUSm9iRnBJVm5OYVZFRXlRbWR2Y2tKblJVVkJXVTh2VFVGRlJFSkRaekZOTWs1ckNsbHRXWHBOUkVVeFRtMVpkMDVFU214T2VrMTVUbnBzYVZwRVNtdE5WMDVvV2tSWk5FMVhUVFJPUjBreVdrZEpNRTFDYTBkRGFYTkhRVkZSUW1jM09IY0tRVkZSUlVNeFFubGFVekZUV2xkNGJGbFlUbXhOUkZWSFEybHpSMEZSVVVKbk56aDNRVkZWUlVveVJqTmplVEYzWWpOa2JHTnVVblppTW5oNlRETkNkZ3BrTWxaNVpFYzVkbUpJVFhSaVIwWjBXVzFTYUV4WVFqVmtSMmgyWW1wQlowSm5iM0pDWjBWRlFWbFBMMDFCUlVkQ1FrcDVXbGRhZWt3eWFHeFpWMUo2Q2t3eVVteGtiVlp6WWpOQmQwOTNXVXRMZDFsQ1FrRkhSSFo2UVVKRFFWRjBSRU4wYjJSSVVuZGplbTkyVEROU2RtRXlWblZNYlVacVpFZHNkbUp1VFhVS1dqSnNNR0ZJVm1sa1dFNXNZMjFPZG1KdVVteGlibEYxV1RJNWRFMUpSMGRDWjI5eVFtZEZSVUZaVHk5TlFVVktRa2huVFdSdGFEQmtTRUo2VDJrNGRncGFNbXd3WVVoV2FVeHRUblppVXpsNllraE9hRXhYV25sWlZ6RnNaREk1ZVdGNU9YcGlTRTVvVEZka2NHUkhhREZaYVRGdVdsYzFiR050UmpCaU0wbDJDa3h0WkhCa1IyZ3hXV2s1TTJJelNuSmFiWGgyWkROTmRsb3lWblZhV0Vwb1pFYzVlVmd5Wkd4aWJWWjVZVmRPWm1NeWVIcFpWRTExWlZjeGMxRklTbXdLV201TmRtUkhSbTVqZVRreVRXazBlRXhxUVhkUFFWbExTM2RaUWtKQlIwUjJla0ZDUTJkUmNVUkRhRzFPTWxKclQwZE5NVTVIVFhsTlJGa3pXVzFHYlFwWmVrVjVXVEpGTTFsVVZURk9WR3N4V2tSV2JGcFViR2xPZWxWNVRVUlNhRTFDTUVkRGFYTkhRVkZSUW1jM09IZEJVWE5GUkhkM1Rsb3liREJoU0ZacENreFhhSFpqTTFKc1drUkNTMEpuYjNKQ1owVkZRVmxQTDAxQlJVMUNSSGROVDIxb01HUklRbnBQYVRoMldqSnNNR0ZJVm1sTWJVNTJZbE01YUdRelRYUUtZMGM1TTFwWVNqQmlNamx6WTNrNWQySXpaR3hqYmxKMllqSjRla3hYZUdoaVYwcHJXVk14ZDJWWVVtOWlNalIzVDBGWlMwdDNXVUpDUVVkRWRucEJRZ3BFVVZGeFJFTm5NVTB5VG10WmJWbDZUVVJGTVU1dFdYZE9SRXBzVG5wTmVVNTZiR2xhUkVwclRWZE9hRnBFV1RSTlYwMDBUa2RKTWxwSFNUQk5RMGxIQ2tOcGMwZEJVVkZDWnpjNGQwRlJORVZHUVhkVFkyMVdiV041T1c5YVYwWnJZM2s1YTFwWVdteGlSemwzVFVKclIwTnBjMGRCVVZGQ1p6YzRkMEZST0VVS1EzZDNTazFxU1hoUFZFVTFUWHBqTlUxRVJVZERhWE5IUVZGUlFtYzNPSGRCVWtGRlNYZDNhR0ZJVWpCalNFMDJUSGs1Ym1GWVVtOWtWMGwxV1RJNWRBcE1Na1l6WTNreGQySXpaR3hqYmxKMllqSjRlazFDYTBkRGFYTkhRVkZSUW1jM09IZEJVa1ZGUTNkM1NrMVVTVFZOVkVrelRtcE5ORTFJT0VkRGFYTkhDa0ZSVVVKbk56aDNRVkpKUldOUmVIWmhTRkl3WTBoTk5reDVPVzVoV0ZKdlpGZEpkVmt5T1hSTU1rWXpZM2t4ZDJJelpHeGpibEoyWWpKNGVrd3pRbllLWkRKV2VXUkhPWFppU0UxMFlrZEdkRmx0VW1oTVdFSTFaRWRvZG1KcE9IVmFNbXd3WVVoV2FVd3paSFpqYlhSdFlrYzVNMk41T1hkamJWVjBZMjFXY3dwYVYwWjZXbE0xTldKWGVFRmpiVlp0WTNrNWIxcFhSbXRqZVRscldsaGFiR0pIT1hkTlJHZEhRMmx6UjBGUlVVSm5OemgzUVZKTlJVdG5kMjlPVkU1cUNscEhTbTFOZWtGNFRsUmFiVTFFVVhsYVZHTjZUV3BqTlZsdFVYbGFSRVpxV1ZkUk1rOUVSbXBQUkZKcFRtMVNhVTVFUVZsQ1oyOXlRbWRGUlVGWlR5OEtUVUZGVlVKQmIwMURTRTVxWVVkV2EyUlhlR3hOUnpSSFEybHpSMEZSVVVKbk56aDNRVkpWUlZsQmVHVmhTRkl3WTBoTk5reDVPVzVoV0ZKdlpGZEpkUXBaTWpsMFRESkdNMk41TVhkaU0yUnNZMjVTZG1JeWVIcE1NMEoyWkRKV2VXUkhPWFppU0UxMFlrZEdkRmx0VW1oTVdFSTFaRWRvZG1KcE9XaFpNMUp3Q21JeU5YcE1NMG94WW01TmRrMVVZM2hPUkdzelRWUlZNRTVxV1haWldGSXdXbGN4ZDJSSVRYWk5WRUZYUW1kdmNrSm5SVVZCV1U4dlRVRkZWMEpCWjAwS1FtNUNNVmx0ZUhCWmVrTkNhWGRaUzB0M1dVSkNRVWhYWlZGSlJVRm5VamxDU0hOQlpWRkNNMEZPTURsTlIzSkhlSGhGZVZsNGEyVklTbXh1VG5kTGFRcFRiRFkwTTJwNWRDODBaVXRqYjBGMlMyVTJUMEZCUVVKdFRrUlNkR1JqUVVGQlVVUkJSV2QzVW1kSmFFRktZVXAzVEhVeVNHUllWRmR6WmxSR1RuVXZDakV2WWxoUE1HeDRlVEJPY2pCRFMyOHhUMGwyVld4aWJFRnBSVUUwVVhGWFIzQkNXbG81YlVnemJEaEtVbUZXVW00NWRsYzNXVTF3ZHpCNVNURjNiRFlLYVUwek0yUTVVWGREWjFsSlMyOWFTWHBxTUVWQmQwMUVZVUZCZDFwUlNYaEJVRkpDWVU5c1VtcFdRMGhEUjJWbU5sSldSRmRaY25WeFZUQnJjVGx3UlFwSWNFWkVVSEJNZVN0a1pFUTBTVTE2ZW14eFptTnBOa3gxYTNGV1drb3JiVEZuU1hkS1dVZEhWV3BaV2pkdWQyeEVNelF3VnpsRGFXdHhRWGg1UVRORENtbHdOM2hpYlV0cVNWSm1hamRPUjFsM1QwNXZjMGh6UTJWblpHTlZlRE53YlVGR1R3b3RMUzB0TFVWT1JDQkRSVkpVU1VaSlEwRlVSUzB0TFMwdENnPT0ifV19fQ=="}]}, "dsseEnvelope":{"payload":"eyJfdHlwZSI6Imh0dHBzOi8vaW4tdG90by5pby9TdGF0ZW1lbnQvdjAuMSIsInByZWRpY2F0ZVR5cGUiOiJodHRwczovL3Nsc2EuZGV2L3Byb3ZlbmFuY2UvdjAuMiIsInN1YmplY3QiOlt7Im5hbWUiOiIuL2F3c19sYW1iZGFfcG93ZXJ0b29scy0zLjE5LjFhNi1weTMtbm9uZS1hbnkud2hsIiwiZGlnZXN0Ijp7InNoYTI1NiI6IjAxZTA5ZjcyOGEyMmFhNzA0YjNjNjliOTQyNjM5ZjkwZGUzZTZlYTY0YWI1MGI0NDk0NDRhNjVhNjk3OWU0NGMifX0seyJuYW1lIjoiLi9hd3NfbGFtYmRhX3Bvd2VydG9vbHMtMy4xOS4xYTYudGFyLmd6IiwiZGlnZXN0Ijp7InNoYTI1NiI6ImI2MTkyMWQwOGE4NWY2NWNkNjc5MmVlY2FmMGYwZjJlMzRiNjM0MDNkNWUzNTRjMzE5NWVmZTI1ZTg2MTc3YzUifX1dLCJwcmVkaWNhdGUiOnsiYnVpbGRlciI6eyJpZCI6Imh0dHBzOi8vZ2l0aHViLmNvbS9zbHNhLWZyYW1ld29yay9zbHNhLWdpdGh1Yi1nZW5lcmF0b3IvLmdpdGh1Yi93b3JrZmxvd3MvZ2VuZXJhdG9yX2dlbmVyaWNfc2xzYTMueW1sQHJlZnMvdGFncy92Mi4xLjAifSwiYnVpbGRUeXBlIjoiaHR0cHM6Ly9naXRodWIuY29tL3Nsc2EtZnJhbWV3b3JrL3Nsc2EtZ2l0aHViLWdlbmVyYXRvci9nZW5lcmljQHYxIiwiaW52b2NhdGlvbiI6eyJjb25maWdTb3VyY2UiOnsidXJpIjoiZ2l0K2h0dHBzOi8vZ2l0aHViLmNvbS9hd3MtcG93ZXJ0b29scy9wb3dlcnRvb2xzLWxhbWJkYS1weXRob25AcmVmcy9oZWFkcy9kZXZlbG9wIiwiZGlnZXN0Ijp7InNoYTEiOiI1M2NkYmYzMDE1NmYwNDJlNzMyNzliZDJkMWNhZDY4MWM4NGI2ZGI0In0sImVudHJ5UG9pbnQiOiIuZ2l0aHViL3dvcmtmbG93cy9wcmUtcmVsZWFzZS55bWwifSwicGFyYW1ldGVycyI6eyJ2YXJzIjp7fX0sImVudmlyb25tZW50Ijp7ImdpdGh1Yl9hY3RvciI6ImxlYW5kcm9kYW1hc2NlbmEiLCJnaXRodWJfYWN0b3JfaWQiOiI0Mjk1MTczIiwiZ2l0aHViX2Jhc2VfcmVmIjoiIiwiZ2l0aHViX2V2ZW50X25hbWUiOiJzY2hlZHVsZSIsImdpdGh1Yl9ldmVudF9wYXlsb2FkIjp7ImVudGVycHJpc2UiOnsiYXZhdGFyX3VybCI6Imh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vYi8xMjkwP3Y9NCIsImNyZWF0ZWRfYXQiOiIyMDE5LTExLTEzVDE4OjA1OjQxWiIsImRlc2NyaXB0aW9uIjoiIiwiaHRtbF91cmwiOiJodHRwczovL2dpdGh1Yi5jb20vZW50ZXJwcmlzZXMvYW1hem9uIiwiaWQiOjEyOTAsIm5hbWUiOiJBbWF6b24iLCJub2RlX2lkIjoiTURFd09rVnVkR1Z5Y0hKcGMyVXhNamt3Iiwic2x1ZyI6ImFtYXpvbiIsInVwZGF0ZWRfYXQiOiIyMDI1LTA4LTEyVDIwOjU5OjE0WiIsIndlYnNpdGVfdXJsIjoiaHR0cHM6Ly93d3cuYW1hem9uLmNvbS8ifSwib3JnYW5pemF0aW9uIjp7ImF2YXRhcl91cmwiOiJodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTI5MTI3NjM4P3Y9NCIsImRlc2NyaXB0aW9uIjoiIiwiZXZlbnRzX3VybCI6Imh0dHBzOi8vaW50ZXJuYWwtYXBpLnNlcnZpY2UuaWFkLmdpdGh1Yi5uZXQvb3Jncy9hd3MtcG93ZXJ0b29scy9ldmVudHMiLCJob29rc191cmwiOiJodHRwczovL2ludGVybmFsLWFwaS5zZXJ2aWNlLmlhZC5naXRodWIubmV0L29yZ3MvYXdzLXBvd2VydG9vbHMvaG9va3MiLCJpZCI6MTI5MTI3NjM4LCJpc3N1ZXNfdXJsIjoiaHR0cHM6Ly9pbnRlcm5hbC1hcGkuc2VydmljZS5pYWQuZ2l0aHViLm5ldC9vcmdzL2F3cy1wb3dlcnRvb2xzL2lzc3VlcyIsImxvZ2luIjoiYXdzLXBvd2VydG9vbHMiLCJtZW1iZXJzX3VybCI6Imh0dHBzOi8vaW50ZXJuYWwtYXBpLnNlcnZpY2UuaWFkLmdpdGh1Yi5uZXQvb3Jncy9hd3MtcG93ZXJ0b29scy9tZW1iZXJzey9tZW1iZXJ9Iiwibm9kZV9pZCI6Ik9fa2dET0I3SlUxZyIsInB1YmxpY19tZW1iZXJzX3VybCI6Imh0dHBzOi8vaW50ZXJuYWwtYXBpLnNlcnZpY2UuaWFkLmdpdGh1Yi5uZXQvb3Jncy9hd3MtcG93ZXJ0b29scy9wdWJsaWNfbWVtYmVyc3svbWVtYmVyfSIsInJlcG9zX3VybCI6Imh0dHBzOi8vaW50ZXJuYWwtYXBpLnNlcnZpY2UuaWFkLmdpdGh1Yi5uZXQvb3Jncy9hd3MtcG93ZXJ0b29scy9yZXBvcyIsInVybCI6Imh0dHBzOi8vaW50ZXJuYWwtYXBpLnNlcnZpY2UuaWFkLmdpdGh1Yi5uZXQvb3Jncy9hd3MtcG93ZXJ0b29scyJ9LCJyZXBvc2l0b3J5Ijp7ImFsbG93X2ZvcmtpbmciOnRydWUsImFyY2hpdmVfdXJsIjoiaHR0cHM6Ly9pbnRlcm5hbC1hcGkuc2VydmljZS5pYWQuZ2l0aHViLm5ldC9yZXBvcy9hd3MtcG93ZXJ0b29scy9wb3dlcnRvb2xzLWxhbWJkYS1weXRob24ve2FyY2hpdmVfZm9ybWF0fXsvcmVmfSIsImFyY2hpdmVkIjpmYWxzZSwiYXNzaWduZWVzX3VybCI6Imh0dHBzOi8vaW50ZXJuYWwtYXBpLnNlcnZpY2UuaWFkLmdpdGh1Yi5uZXQvcmVwb3MvYXdzLXBvd2VydG9vbHMvcG93ZXJ0b29scy1sYW1iZGEtcHl0aG9uL2Fzc2lnbmVlc3svdXNlcn0iLCJibG9ic191cmwiOiJodHRwczovL2ludGVybmFsLWFwaS5zZXJ2aWNlLmlhZC5naXRodWIubmV0L3JlcG9zL2F3cy1wb3dlcnRvb2xzL3Bvd2VydG9vbHMtbGFtYmRhLXB5dGhvbi9naXQvYmxvYnN7L3NoYX0iLCJicmFuY2hlc191cmwiOiJodHRwczovL2ludGVybmFsLWFwaS5zZXJ2aWNlLmlhZC5naXRodWIubmV0L3JlcG9zL2F3cy1wb3dlcnRvb2xzL3Bvd2VydG9vbHMtbGFtYmRhLXB5dGhvbi9icmFuY2hlc3svYnJhbmNofSIsImNsb25lX3VybCI6Imh0dHBzOi8vZ2l0aHViLmNvbS9hd3MtcG93ZXJ0b29scy9wb3dlcnRvb2xzLWxhbWJkYS1weXRob24uZ2l0IiwiY29sbGFib3JhdG9yc191cmwiOiJodHRwczovL2ludGVybmFsLWFwaS5zZXJ2aWNlLmlhZC5naXRodWIubmV0L3JlcG9zL2F3cy1wb3dlcnRvb2xzL3Bvd2VydG9vbHMtbGFtYmRhLXB5dGhvbi9jb2xsYWJvcmF0b3Jzey9jb2xsYWJvcmF0b3J9IiwiY29tbWVudHNfdXJsIjoiaHR0cHM6Ly9pbnRlcm5hbC1hcGkuc2VydmljZS5pYWQuZ2l0aHViLm5ldC9yZXBvcy9hd3MtcG93ZXJ0b29scy9wb3dlcnRvb2xzLWxhbWJkYS1weXRob24vY29tbWVudHN7L251bWJlcn0iLCJjb21taXRzX3VybCI6Imh0dHBzOi8vaW50ZXJuYWwtYXBpLnNlcnZpY2UuaWFkLmdpdGh1Yi5uZXQvcmVwb3MvYXdzLXBvd2VydG9vbHMvcG93ZXJ0b29scy1sYW1iZGEtcHl0aG9uL2NvbW1pdHN7L3NoYX0iLCJjb21wYXJlX3VybCI6Imh0dHBzOi8vaW50ZXJuYWwtYXBpLnNlcnZpY2UuaWFkLmdpdGh1Yi5uZXQvcmVwb3MvYXdzLXBvd2VydG9vbHMvcG93ZXJ0b29scy1sYW1iZGEtcHl0aG9uL2NvbXBhcmUve2Jhc2V9Li4ue2hlYWR9IiwiY29udGVudHNfdXJsIjoiaHR0cHM6Ly9pbnRlcm5hbC1hcGkuc2VydmljZS5pYWQuZ2l0aHViLm5ldC9yZXBvcy9hd3MtcG93ZXJ0b29scy9wb3dlcnRvb2xzLWxhbWJkYS1weXRob24vY29udGVudHMveytwYXRofSIsImNvbnRyaWJ1dG9yc191cmwiOiJodHRwczovL2ludGVybmFsLWFwaS5zZXJ2aWNlLmlhZC5naXRodWIubmV0L3JlcG9zL2F3cy1wb3dlcnRvb2xzL3Bvd2VydG9vbHMtbGFtYmRhLXB5dGhvbi9jb250cmlidXRvcnMiLCJjcmVhdGVkX2F0IjoiMjAxOS0xMS0xNVQxMjoyNjoxMloiLCJjdXN0b21fcHJvcGVydGllcyI6eyJzdGFnaW5nIjoiZmFsc2UiLCJ2aXNpYmlsaXR5LWFsbG93LWludGVybmFsIjoiZmFsc2UiLCJ2aXNpYmlsaXR5LWFsbG93LXByaXZhdGUiOiJmYWxzZSIsInZpc2liaWxpdHktYWxsb3ctcHVibGljIjoidHJ1ZSJ9LCJkZWZhdWx0X2JyYW5jaCI6ImRldmVsb3AiLCJkZXBsb3ltZW50c191cmwiOiJodHRwczovL2ludGVybmFsLWFwaS5zZXJ2aWNlLmlhZC5naXRodWIubmV0L3JlcG9zL2F3cy1wb3dlcnRvb2xzL3Bvd2VydG9vbHMtbGFtYmRhLXB5dGhvbi9kZXBsb3ltZW50cyIsImRlc2NyaXB0aW9uIjoiQSBkZXZlbG9wZXIgdG9vbGtpdCB0byBpbXBsZW1lbnQgU2VydmVybGVzcyBiZXN0IHByYWN0aWNlcyBhbmQgaW5jcmVhc2UgZGV2ZWxvcGVyIHZlbG9jaXR5LiIsImRpc2FibGVkIjpmYWxzZSwiZG93bmxvYWRzX3VybCI6Imh0dHBzOi8vaW50ZXJuYWwtYXBpLnNlcnZpY2UuaWFkLmdpdGh1Yi5uZXQvcmVwb3MvYXdzLXBvd2VydG9vbHMvcG93ZXJ0b29scy1sYW1iZGEtcHl0aG9uL2Rvd25sb2FkcyIsImV2ZW50c191cmwiOiJodHRwczovL2ludGVybmFsLWFwaS5zZXJ2aWNlLmlhZC5naXRodWIubmV0L3JlcG9zL2F3cy1wb3dlcnRvb2xzL3Bvd2VydG9vbHMtbGFtYmRhLXB5dGhvbi9ldmVudHMiLCJmb3JrIjpmYWxzZSwiZm9ya3MiOjQ0NSwiZm9ya3NfY291bnQiOjQ0NSwiZm9ya3NfdXJsIjoiaHR0cHM6Ly9pbnRlcm5hbC1hcGkuc2VydmljZS5pYWQuZ2l0aHViLm5ldC9yZXBvcy9hd3MtcG93ZXJ0b29scy9wb3dlcnRvb2xzLWxhbWJkYS1weXRob24vZm9ya3MiLCJmdWxsX25hbWUiOiJhd3MtcG93ZXJ0b29scy9wb3dlcnRvb2xzLWxhbWJkYS1weXRob24iLCJnaXRfY29tbWl0c191cmwiOiJodHRwczovL2ludGVybmFsLWFwaS5zZXJ2aWNlLmlhZC5naXRodWIubmV0L3JlcG9zL2F3cy1wb3dlcnRvb2xzL3Bvd2VydG9vbHMtbGFtYmRhLXB5dGhvbi9naXQvY29tbWl0c3svc2hhfSIsImdpdF9yZWZzX3VybCI6Imh0dHBzOi8vaW50ZXJuYWwtYXBpLnNlcnZpY2UuaWFkLmdpdGh1Yi5uZXQvcmVwb3MvYXdzLXBvd2VydG9vbHMvcG93ZXJ0b29scy1sYW1iZGEtcHl0aG9uL2dpdC9yZWZzey9zaGF9IiwiZ2l0X3RhZ3NfdXJsIjoiaHR0cHM6Ly9pbnRlcm5hbC1hcGkuc2VydmljZS5pYWQuZ2l0aHViLm5ldC9yZXBvcy9hd3MtcG93ZXJ0b29scy9wb3dlcnRvb2xzLWxhbWJkYS1weXRob24vZ2l0L3RhZ3N7L3NoYX0iLCJnaXRfdXJsIjoiZ2l0Oi8vZ2l0aHViLmNvbS9hd3MtcG93ZXJ0b29scy9wb3dlcnRvb2xzLWxhbWJkYS1weXRob24uZ2l0IiwiaGFzX2Rpc2N1c3Npb25zIjp0cnVlLCJoYXNfZG93bmxvYWRzIjp0cnVlLCJoYXNfaXNzdWVzIjp0cnVlLCJoYXNfcGFnZXMiOmZhbHNlLCJoYXNfcHJvamVjdHMiOnRydWUsImhhc193aWtpIjpmYWxzZSwiaG9tZXBhZ2UiOiJodHRwczovL2RvY3MucG93ZXJ0b29scy5hd3MuZGV2L2xhbWJkYS9weXRob24vbGF0ZXN0LyIsImhvb2tzX3VybCI6Imh0dHBzOi8vaW50ZXJuYWwtYXBpLnNlcnZpY2UuaWFkLmdpdGh1Yi5uZXQvcmVwb3MvYXdzLXBvd2VydG9vbHMvcG93ZXJ0b29scy1sYW1iZGEtcHl0aG9uL2hvb2tzIiwiaHRtbF91cmwiOiJodHRwczovL2dpdGh1Yi5jb20vYXdzLXBvd2VydG9vbHMvcG93ZXJ0b29scy1sYW1iZGEtcHl0aG9uIiwiaWQiOjIyMTkxOTM3OSwiaXNfdGVtcGxhdGUiOmZhbHNlLCJpc3N1ZV9jb21tZW50X3VybCI6Imh0dHBzOi8vaW50ZXJuYWwtYXBpLnNlcnZpY2UuaWFkLmdpdGh1Yi5uZXQvcmVwb3MvYXdzLXBvd2VydG9vbHMvcG93ZXJ0b29scy1sYW1iZGEtcHl0aG9uL2lzc3Vlcy9jb21tZW50c3svbnVtYmVyfSIsImlzc3VlX2V2ZW50c191cmwiOiJodHRwczovL2ludGVybmFsLWFwaS5zZXJ2aWNlLmlhZC5naXRodWIubmV0L3JlcG9zL2F3cy1wb3dlcnRvb2xzL3Bvd2VydG9vbHMtbGFtYmRhLXB5dGhvbi9pc3N1ZXMvZXZlbnRzey9udW1iZXJ9IiwiaXNzdWVzX3VybCI6Imh0dHBzOi8vaW50ZXJuYWwtYXBpLnNlcnZpY2UuaWFkLmdpdGh1Yi5uZXQvcmVwb3MvYXdzLXBvd2VydG9vbHMvcG93ZXJ0b29scy1sYW1iZGEtcHl0aG9uL2lzc3Vlc3svbnVtYmVyfSIsImtleXNfdXJsIjoiaHR0cHM6Ly9pbnRlcm5hbC1hcGkuc2VydmljZS5pYWQuZ2l0aHViLm5ldC9yZXBvcy9hd3MtcG93ZXJ0b29scy9wb3dlcnRvb2xzLWxhbWJkYS1weXRob24va2V5c3sva2V5X2lkfSIsImxhYmVsc191cmwiOiJodHRwczovL2ludGVybmFsLWFwaS5zZXJ2aWNlLmlhZC5naXRodWIubmV0L3JlcG9zL2F3cy1wb3dlcnRvb2xzL3Bvd2VydG9vbHMtbGFtYmRhLXB5dGhvbi9sYWJlbHN7L25hbWV9IiwibGFuZ3VhZ2UiOiJQeXRob24iLCJsYW5ndWFnZXNfdXJsIjoiaHR0cHM6Ly9pbnRlcm5hbC1hcGkuc2VydmljZS5pYWQuZ2l0aHViLm5ldC9yZXBvcy9hd3MtcG93ZXJ0b29scy9wb3dlcnRvb2xzLWxhbWJkYS1weXRob24vbGFuZ3VhZ2VzIiwibGljZW5zZSI6eyJrZXkiOiJtaXQtMCIsIm5hbWUiOiJNSVQgTm8gQXR0cmlidXRpb24iLCJub2RlX2lkIjoiTURjNlRHbGpaVzV6WlRReCIsInNwZHhfaWQiOiJNSVQtMCIsInVybCI6Imh0dHBzOi8vaW50ZXJuYWwtYXBpLnNlcnZpY2UuaWFkLmdpdGh1Yi5uZXQvbGljZW5zZXMvbWl0LTAifSwibWVyZ2VzX3VybCI6Imh0dHBzOi8vaW50ZXJuYWwtYXBpLnNlcnZpY2UuaWFkLmdpdGh1Yi5uZXQvcmVwb3MvYXdzLXBvd2VydG9vbHMvcG93ZXJ0b29scy1sYW1iZGEtcHl0aG9uL21lcmdlcyIsIm1pbGVzdG9uZXNfdXJsIjoiaHR0cHM6Ly9pbnRlcm5hbC1hcGkuc2VydmljZS5pYWQuZ2l0aHViLm5ldC9yZXBvcy9hd3MtcG93ZXJ0b29scy9wb3dlcnRvb2xzLWxhbWJkYS1weXRob24vbWlsZXN0b25lc3svbnVtYmVyfSIsIm1pcnJvcl91cmwiOm51bGwsIm5hbWUiOiJwb3dlcnRvb2xzLWxhbWJkYS1weXRob24iLCJub2RlX2lkIjoiTURFd09sSmxjRzl6YVhSdmNua3lNakU1TVRrek56az0iLCJub3RpZmljYXRpb25zX3VybCI6Imh0dHBzOi8vaW50ZXJuYWwtYXBpLnNlcnZpY2UuaWFkLmdpdGh1Yi5uZXQvcmVwb3MvYXdzLXBvd2VydG9vbHMvcG93ZXJ0b29scy1sYW1iZGEtcHl0aG9uL25vdGlmaWNhdGlvbnN7P3NpbmNlLGFsbCxwYXJ0aWNpcGF0aW5nfSIsIm9wZW5faXNzdWVzIjo1Niwib3Blbl9pc3N1ZXNfY291bnQiOjU2LCJvd25lciI6eyJhdmF0YXJfdXJsIjoiaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzEyOTEyNzYzOD92PTQiLCJldmVudHNfdXJsIjoiaHR0cHM6Ly9pbnRlcm5hbC1hcGkuc2VydmljZS5pYWQuZ2l0aHViLm5ldC91c2Vycy9hd3MtcG93ZXJ0b29scy9ldmVudHN7L3ByaXZhY3l9IiwiZm9sbG93ZXJzX3VybCI6Imh0dHBzOi8vaW50ZXJuYWwtYXBpLnNlcnZpY2UuaWFkLmdpdGh1Yi5uZXQvdXNlcnMvYXdzLXBvd2VydG9vbHMvZm9sbG93ZXJzIiwiZm9sbG93aW5nX3VybCI6Imh0dHBzOi8vaW50ZXJuYWwtYXBpLnNlcnZpY2UuaWFkLmdpdGh1Yi5uZXQvdXNlcnMvYXdzLXBvd2VydG9vbHMvZm9sbG93aW5ney9vdGhlcl91c2VyfSIsImdpc3RzX3VybCI6Imh0dHBzOi8vaW50ZXJuYWwtYXBpLnNlcnZpY2UuaWFkLmdpdGh1Yi5uZXQvdXNlcnMvYXdzLXBvd2VydG9vbHMvZ2lzdHN7L2dpc3RfaWR9IiwiZ3JhdmF0YXJfaWQiOiIiLCJodG1sX3VybCI6Imh0dHBzOi8vZ2l0aHViLmNvbS9hd3MtcG93ZXJ0b29scyIsImlkIjoxMjkxMjc2MzgsImxvZ2luIjoiYXdzLXBvd2VydG9vbHMiLCJub2RlX2lkIjoiT19rZ0RPQjdKVTFnIiwib3JnYW5pemF0aW9uc191cmwiOiJodHRwczovL2ludGVybmFsLWFwaS5zZXJ2aWNlLmlhZC5naXRodWIubmV0L3VzZXJzL2F3cy1wb3dlcnRvb2xzL29yZ3MiLCJyZWNlaXZlZF9ldmVudHNfdXJsIjoiaHR0cHM6Ly9pbnRlcm5hbC1hcGkuc2VydmljZS5pYWQuZ2l0aHViLm5ldC91c2Vycy9hd3MtcG93ZXJ0b29scy9yZWNlaXZlZF9ldmVudHMiLCJyZXBvc191cmwiOiJodHRwczovL2ludGVybmFsLWFwaS5zZXJ2aWNlLmlhZC5naXRodWIubmV0L3VzZXJzL2F3cy1wb3dlcnRvb2xzL3JlcG9zIiwic2l0ZV9hZG1pbiI6ZmFsc2UsInN0YXJyZWRfdXJsIjoiaHR0cHM6Ly9pbnRlcm5hbC1hcGkuc2VydmljZS5pYWQuZ2l0aHViLm5ldC91c2Vycy9hd3MtcG93ZXJ0b29scy9zdGFycmVkey9vd25lcn17L3JlcG99Iiwic3Vic2NyaXB0aW9uc191cmwiOiJodHRwczovL2ludGVybmFsLWFwaS5zZXJ2aWNlLmlhZC5naXRodWIubmV0L3VzZXJzL2F3cy1wb3dlcnRvb2xzL3N1YnNjcmlwdGlvbnMiLCJ0eXBlIjoiT3JnYW5pemF0aW9uIiwidXJsIjoiaHR0cHM6Ly9pbnRlcm5hbC1hcGkuc2VydmljZS5pYWQuZ2l0aHViLm5ldC91c2Vycy9hd3MtcG93ZXJ0b29scyIsInVzZXJfdmlld190eXBlIjoicHVibGljIn0sInByaXZhdGUiOmZhbHNlLCJwdWxsc191cmwiOiJodHRwczovL2ludGVybmFsLWFwaS5zZXJ2aWNlLmlhZC5naXRodWIubmV0L3JlcG9zL2F3cy1wb3dlcnRvb2xzL3Bvd2VydG9vbHMtbGFtYmRhLXB5dGhvbi9wdWxsc3svbnVtYmVyfSIsInB1c2hlZF9hdCI6IjIwMjUtMDgtMjFUMjA6NTM6MTRaIiwicmVsZWFzZXNfdXJsIjoiaHR0cHM6Ly9pbnRlcm5hbC1hcGkuc2VydmljZS5pYWQuZ2l0aHViLm5ldC9yZXBvcy9hd3MtcG93ZXJ0b29scy9wb3dlcnRvb2xzLWxhbWJkYS1weXRob24vcmVsZWFzZXN7L2lkfSIsInNpemUiOjEzMTA5Niwic3NoX3VybCI6ImdpdEBnaXRodWIuY29tOmF3cy1wb3dlcnRvb2xzL3Bvd2VydG9vbHMtbGFtYmRhLXB5dGhvbi5naXQiLCJzdGFyZ2F6ZXJzX2NvdW50IjozMTI2LCJzdGFyZ2F6ZXJzX3VybCI6Imh0dHBzOi8vaW50ZXJuYWwtYXBpLnNlcnZpY2UuaWFkLmdpdGh1Yi5uZXQvcmVwb3MvYXdzLXBvd2VydG9vbHMvcG93ZXJ0b29scy1sYW1iZGEtcHl0aG9uL3N0YXJnYXplcnMiLCJzdGF0dXNlc191cmwiOiJodHRwczovL2ludGVybmFsLWFwaS5zZXJ2aWNlLmlhZC5naXRodWIubmV0L3JlcG9zL2F3cy1wb3dlcnRvb2xzL3Bvd2VydG9vbHMtbGFtYmRhLXB5dGhvbi9zdGF0dXNlcy97c2hhfSIsInN1YnNjcmliZXJzX3VybCI6Imh0dHBzOi8vaW50ZXJuYWwtYXBpLnNlcnZpY2UuaWFkLmdpdGh1Yi5uZXQvcmVwb3MvYXdzLXBvd2VydG9vbHMvcG93ZXJ0b29scy1sYW1iZGEtcHl0aG9uL3N1YnNjcmliZXJzIiwic3Vic2NyaXB0aW9uX3VybCI6Imh0dHBzOi8vaW50ZXJuYWwtYXBpLnNlcnZpY2UuaWFkLmdpdGh1Yi5uZXQvcmVwb3MvYXdzLXBvd2VydG9vbHMvcG93ZXJ0b29scy1sYW1iZGEtcHl0aG9uL3N1YnNjcmlwdGlvbiIsInN2bl91cmwiOiJodHRwczovL2dpdGh1Yi5jb20vYXdzLXBvd2VydG9vbHMvcG93ZXJ0b29scy1sYW1iZGEtcHl0aG9uIiwidGFnc191cmwiOiJodHRwczovL2ludGVybmFsLWFwaS5zZXJ2aWNlLmlhZC5naXRodWIubmV0L3JlcG9zL2F3cy1wb3dlcnRvb2xzL3Bvd2VydG9vbHMtbGFtYmRhLXB5dGhvbi90YWdzIiwidGVhbXNfdXJsIjoiaHR0cHM6Ly9pbnRlcm5hbC1hcGkuc2VydmljZS5pYWQuZ2l0aHViLm5ldC9yZXBvcy9hd3MtcG93ZXJ0b29scy9wb3dlcnRvb2xzLWxhbWJkYS1weXRob24vdGVhbXMiLCJ0b3BpY3MiOlsiYXdzIiwiYXdzLWxhbWJkYSIsImxhbWJkYSIsInB5dGhvbiIsInNlcnZlcmxlc3MiXSwidHJlZXNfdXJsIjoiaHR0cHM6Ly9pbnRlcm5hbC1hcGkuc2VydmljZS5pYWQuZ2l0aHViLm5ldC9yZXBvcy9hd3MtcG93ZXJ0b29scy9wb3dlcnRvb2xzLWxhbWJkYS1weXRob24vZ2l0L3RyZWVzey9zaGF9IiwidXBkYXRlZF9hdCI6IjIwMjUtMDgtMjFUMTA6MTQ6MjNaIiwidXJsIjoiaHR0cHM6Ly9pbnRlcm5hbC1hcGkuc2VydmljZS5pYWQuZ2l0aHViLm5ldC9yZXBvcy9hd3MtcG93ZXJ0b29scy9wb3dlcnRvb2xzLWxhbWJkYS1weXRob24iLCJ2aXNpYmlsaXR5IjoicHVibGljIiwid2F0Y2hlcnMiOjMxMjYsIndhdGNoZXJzX2NvdW50IjozMTI2LCJ3ZWJfY29tbWl0X3NpZ25vZmZfcmVxdWlyZWQiOnRydWV9LCJzY2hlZHVsZSI6IjAgOCAqICogMS01Iiwid29ya2Zsb3ciOiIuZ2l0aHViL3dvcmtmbG93cy9wcmUtcmVsZWFzZS55bWwifSwiZ2l0aHViX2hlYWRfcmVmIjoiIiwiZ2l0aHViX3JlZiI6InJlZnMvaGVhZHMvZGV2ZWxvcCIsImdpdGh1Yl9yZWZfdHlwZSI6ImJyYW5jaCIsImdpdGh1Yl9yZXBvc2l0b3J5X2lkIjoiMjIxOTE5Mzc5IiwiZ2l0aHViX3JlcG9zaXRvcnlfb3duZXIiOiJhd3MtcG93ZXJ0b29scyIsImdpdGh1Yl9yZXBvc2l0b3J5X293bmVyX2lkIjoiMTI5MTI3NjM4IiwiZ2l0aHViX3J1bl9hdHRlbXB0IjoiMSIsImdpdGh1Yl9ydW5faWQiOiIxNzE0OTcxNTQ2NiIsImdpdGh1Yl9ydW5fbnVtYmVyIjoiMzEyIiwiZ2l0aHViX3NoYTEiOiI1M2NkYmYzMDE1NmYwNDJlNzMyNzliZDJkMWNhZDY4MWM4NGI2ZGI0In19LCJtZXRhZGF0YSI6eyJidWlsZEludm9jYXRpb25JRCI6IjE3MTQ5NzE1NDY2LTEiLCJjb21wbGV0ZW5lc3MiOnsicGFyYW1ldGVycyI6dHJ1ZSwiZW52aXJvbm1lbnQiOmZhbHNlLCJtYXRlcmlhbHMiOmZhbHNlfSwicmVwcm9kdWNpYmxlIjpmYWxzZX0sIm1hdGVyaWFscyI6W3sidXJpIjoiZ2l0K2h0dHBzOi8vZ2l0aHViLmNvbS9hd3MtcG93ZXJ0b29scy9wb3dlcnRvb2xzLWxhbWJkYS1weXRob25AcmVmcy9oZWFkcy9kZXZlbG9wIiwiZGlnZXN0Ijp7InNoYTEiOiI1M2NkYmYzMDE1NmYwNDJlNzMyNzliZDJkMWNhZDY4MWM4NGI2ZGI0In19XX19", "payloadType":"application/vnd.in-toto+json", "signatures":[{"sig":"MEUCIFZhnAzmbsjlrdZBvpyT4avd41i5VYGLSfqLV0IkRCdXAiEAuwzwSAE5yhQuo+GIpdOBVwUUw0nAYgmZW9P2m+EnqZQ="}]}} \ No newline at end of file diff --git a/provenance/3.19.1a7/multiple.intoto.jsonl b/provenance/3.19.1a7/multiple.intoto.jsonl new file mode 100644 index 00000000000..7216666c739 --- /dev/null +++ b/provenance/3.19.1a7/multiple.intoto.jsonl @@ -0,0 +1 @@ +{"mediaType":"application/vnd.dev.sigstore.bundle.v0.3+json", "verificationMaterial":{"certificate":{"rawBytes":"MIIHZjCCBuygAwIBAgIUXavfE/6DgWi3eUlFImnH4vhRZ6YwCgYIKoZIzj0EAwMwNzEVMBMGA1UEChMMc2lnc3RvcmUuZGV2MR4wHAYDVQQDExVzaWdzdG9yZS1pbnRlcm1lZGlhdGUwHhcNMjUwODI1MDgwODQxWhcNMjUwODI1MDgxODQxWjAAMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAESZRkO4Ti86xCoo/BQJBinwqeOPkmCId8IuwC3irl4QiqliCBEd3KUD3M+q882judcz9Md7yy+Dx+UOyob40//6OCBgswggYHMA4GA1UdDwEB/wQEAwIHgDATBgNVHSUEDDAKBggrBgEFBQcDAzAdBgNVHQ4EFgQUQbQR3pWkhhvpHILiRa/Qr+6K+c0wHwYDVR0jBBgwFoAU39Ppz1YkEZb5qNjpKFWixi4YZD8wgYQGA1UdEQEB/wR6MHiGdmh0dHBzOi8vZ2l0aHViLmNvbS9zbHNhLWZyYW1ld29yay9zbHNhLWdpdGh1Yi1nZW5lcmF0b3IvLmdpdGh1Yi93b3JrZmxvd3MvZ2VuZXJhdG9yX2dlbmVyaWNfc2xzYTMueW1sQHJlZnMvdGFncy92Mi4xLjAwOQYKKwYBBAGDvzABAQQraHR0cHM6Ly90b2tlbi5hY3Rpb25zLmdpdGh1YnVzZXJjb250ZW50LmNvbTAWBgorBgEEAYO/MAECBAhzY2hlZHVsZTA2BgorBgEEAYO/MAEDBChlNzQzMGRiODIwMjBkYTRiM2IzZDBiNDAzMTJjYjgzNThjYjI4ODJlMBkGCisGAQQBg78wAQQEC1ByZS1SZWxlYXNlMDUGCisGAQQBg78wAQUEJ2F3cy1wb3dlcnRvb2xzL3Bvd2VydG9vbHMtbGFtYmRhLXB5dGhvbjAgBgorBgEEAYO/MAEGBBJyZWZzL2hlYWRzL2RldmVsb3AwOwYKKwYBBAGDvzABCAQtDCtodHRwczovL3Rva2VuLmFjdGlvbnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tMIGGBgorBgEEAYO/MAEJBHgMdmh0dHBzOi8vZ2l0aHViLmNvbS9zbHNhLWZyYW1ld29yay9zbHNhLWdpdGh1Yi1nZW5lcmF0b3IvLmdpdGh1Yi93b3JrZmxvd3MvZ2VuZXJhdG9yX2dlbmVyaWNfc2xzYTMueW1sQHJlZnMvdGFncy92Mi4xLjAwOAYKKwYBBAGDvzABCgQqDChmN2RkOGM1NGMyMDY3YmFmYzEyY2E3YTU1NTk1ZDVlZTliNzUyMDRhMB0GCisGAQQBg78wAQsEDwwNZ2l0aHViLWhvc3RlZDBKBgorBgEEAYO/MAEMBDwMOmh0dHBzOi8vZ2l0aHViLmNvbS9hd3MtcG93ZXJ0b29scy9wb3dlcnRvb2xzLWxhbWJkYS1weXRob24wOAYKKwYBBAGDvzABDQQqDChlNzQzMGRiODIwMjBkYTRiM2IzZDBiNDAzMTJjYjgzNThjYjI4ODJlMCIGCisGAQQBg78wAQ4EFAwScmVmcy9oZWFkcy9kZXZlbG9wMBkGCisGAQQBg78wAQ8ECwwJMjIxOTE5Mzc5MDEGCisGAQQBg78wARAEIwwhaHR0cHM6Ly9naXRodWIuY29tL2F3cy1wb3dlcnRvb2xzMBkGCisGAQQBg78wAREECwwJMTI5MTI3NjM4MH8GCisGAQQBg78wARIEcQxvaHR0cHM6Ly9naXRodWIuY29tL2F3cy1wb3dlcnRvb2xzL3Bvd2VydG9vbHMtbGFtYmRhLXB5dGhvbi8uZ2l0aHViL3dvcmtmbG93cy9wcmUtcmVsZWFzZS55bWxAcmVmcy9oZWFkcy9kZXZlbG9wMDgGCisGAQQBg78wARMEKgwoZTc0MzBkYjgyMDIwZGE0YjNiM2QwYjQwMzEyY2I4MzU4Y2IyODgyZTAYBgorBgEEAYO/MAEUBAoMCHNjaGVkdWxlMG4GCisGAQQBg78wARUEYAxeaHR0cHM6Ly9naXRodWIuY29tL2F3cy1wb3dlcnRvb2xzL3Bvd2VydG9vbHMtbGFtYmRhLXB5dGhvbi9hY3Rpb25zL3J1bnMvMTcyMDI5MzkwNTAvYXR0ZW1wdHMvMTAWBgorBgEEAYO/MAEWBAgMBnB1YmxpYzCBigYKKwYBBAHWeQIEAgR8BHoAeAB2AN09MGrGxxEyYxkeHJlnNwKiSl643jyt/4eKcoAvKe6OAAABmOBFs1IAAAQDAEcwRQIgIqeK127mMtLYZDMIjg+b+woWR3ylmWS2ccf9RcP18OUCIQC8PjuIYC9M9p2eNsj8lri+XcIYw77FrvloMALs+VFq7zAKBggqhkjOPQQDAwNoADBlAjEA96HsQfvUlLagOjjsAYZNRoEDfXbmPtn44dphBCq+X3nWb9GjHlWFzEL9ZkYI//5rAjAlF3yLaJKqOOeGj2w/BvuQOLtr6K+RWiNCmUcFD9UaDY0rXZWJSelkc7FmrwxnQOA="}, "tlogEntries":[{"logIndex":"429118761", "logId":{"keyId":"wNI9atQGlz+VWfO6LRygH4QUfY/8W4RFwiT5i5WRgB0="}, "kindVersion":{"kind":"dsse", "version":"0.0.1"}, "integratedTime":"1756109321", "inclusionPromise":{"signedEntryTimestamp":"MEQCIDt5RHRmBdDw7yM+CLmWBMRnO23lnuTUgKCi8+tn70LzAiAyp5oCZdbl8GXRsl5xW2foGrF6xK3bZ399RTHLlVDiVg=="}, "inclusionProof":{"logIndex":"307214499", "rootHash":"exyd0UAF5Yzxy2QfYAVSwJ/lR9ttGxFF3lvHaaduV/4=", "treeSize":"307214511", "hashes":["It1JHgS//HZWFpl21sShMdfQn7glqLyJvVloARbOiF0=", "3ys8Exy7AGah40wDvi1sgSWZrYTcqHKejkyooFpO40g=", "h3MDhw5ieDfx3cydP7eoExPds4aMZHBRYujyT2W0llA=", "xbQay1Lk3EJKiQX5+hSIOWJfd5fFKUmu0iTsv6fJKCo=", "5tNPrqwK0BXduYH41pqni7ljxsXqJJ/20M3MCyNvhvw=", "Orot58b6Z0z8f5Rp6XJxR3mw7qcjCDnfyZu2ZldCnMc=", "jNqlBOB+M+EN1ccqxD65LNPKQiwWieAQEMlZU4vI5wE=", "QHMa518H8cTGVfod6y1xSPjuNm0myXrkIsrUczRw4lQ=", "qxVLc5dWndSn6ERj+6Nrrr6ALdwVlTnEReG+CXYY8SQ=", "lbi96srfGXrhKZvIo79BQF+UlKwvI3OUTpbkHHJFXWU=", "rY4eb+xJESXjzXV9s0v1JXJLxX/wcZBI4GWA9YbhqOw=", "jLvLoLuj1eF/OzvBYCW9SdvPFoETeQWinK7SO7PWJps=", "sjf3KQw8nxNn1yPLiKQ0dZDHT4fm9uf6nMwfgY8g6zk=", "Wn4KqgZkmNAYN2ySMtR7xTiSkU8F37gjReeBd14HUlE=", "zmniHggpEa+w3c0/SzPcBRocqhTdGpf8waG/TikCkmQ=", "wCCU7hO8zBe9mf+YE82KuXgzxyhnEK0FkeZe0lH3dZ4=", "vS7O4ozHIQZJWBiov+mkpI27GE8zAmVCEkRcP3NDyNE="], "checkpoint":{"envelope":"rekor.sigstore.dev - 1193050959916656506\n307214511\nexyd0UAF5Yzxy2QfYAVSwJ/lR9ttGxFF3lvHaaduV/4=\n\n— rekor.sigstore.dev wNI9ajBGAiEAmMSP2QY7FFxVq2PUthIFSEFc7wvtMD7KaKtcwyX1i24CIQCj7ysDQ3LcvcYpXoFbmbftltvwRFgB39Obnbx03Y+udQ==\n"}}, "canonicalizedBody":"eyJhcGlWZXJzaW9uIjoiMC4wLjEiLCJraW5kIjoiZHNzZSIsInNwZWMiOnsiZW52ZWxvcGVIYXNoIjp7ImFsZ29yaXRobSI6InNoYTI1NiIsInZhbHVlIjoiNTI1YWQzZTkwN2ExODBkNDNhNzg3ZTJjMjFkZTU1ZmZlMTQ4NDQ2ZWFiMWYwZWEwZGZkOGJkMTk0YjZkMjkwZiJ9LCJwYXlsb2FkSGFzaCI6eyJhbGdvcml0aG0iOiJzaGEyNTYiLCJ2YWx1ZSI6IjAyNmJjNTMzZTZmMjdjNGQxZWJlNWYzMDlkYTI1ZTg2NzkwYzYxZjJhNDdjNjUyMzZlYWRmYzBlYTdjZGI4MTYifSwic2lnbmF0dXJlcyI6W3sic2lnbmF0dXJlIjoiTUVVQ0lHQ3A4dzVJNHFlbE4xVzU2Mm83OUpQUVd1dXZZOW9XWHpXUldSVWxTbFhJQWlFQXV0a1JxQTlTMkY1K05lOFk3OEptTHhwZlZTeEZUWlVpTXNvYWkzcjZhckU9IiwidmVyaWZpZXIiOiJMUzB0TFMxQ1JVZEpUaUJEUlZKVVNVWkpRMEZVUlMwdExTMHRDazFKU1VoYWFrTkRRblY1WjBGM1NVSkJaMGxWV0dGMlprVXZOa1JuVjJrelpWVnNSa2x0YmtnMGRtaFNXalpaZDBObldVbExiMXBKZW1vd1JVRjNUWGNLVG5wRlZrMUNUVWRCTVZWRlEyaE5UV015Ykc1ak0xSjJZMjFWZFZwSFZqSk5ValIzU0VGWlJGWlJVVVJGZUZaNllWZGtlbVJIT1hsYVV6RndZbTVTYkFwamJURnNXa2RzYUdSSFZYZElhR05PVFdwVmQwOUVTVEZOUkdkM1QwUlJlRmRvWTA1TmFsVjNUMFJKTVUxRVozaFBSRkY0VjJwQlFVMUdhM2RGZDFsSUNrdHZXa2w2YWpCRFFWRlpTVXR2V2tsNmFqQkVRVkZqUkZGblFVVlRXbEpyVHpSVWFUZzJlRU52Ynk5Q1VVcENhVzUzY1dWUFVHdHRRMGxrT0VsMWQwTUtNMmx5YkRSUmFYRnNhVU5DUldRelMxVkVNMDByY1RnNE1tcDFaR042T1Uxa04zbDVLMFI0SzFWUGVXOWlOREF2THpaUFEwSm5jM2RuWjFsSVRVRTBSd3BCTVZWa1JIZEZRaTkzVVVWQmQwbElaMFJCVkVKblRsWklVMVZGUkVSQlMwSm5aM0pDWjBWR1FsRmpSRUY2UVdSQ1owNVdTRkUwUlVablVWVlJZbEZTQ2pOd1YydG9hSFp3U0VsTWFWSmhMMUZ5S3paTEsyTXdkMGgzV1VSV1VqQnFRa0puZDBadlFWVXpPVkJ3ZWpGWmEwVmFZalZ4VG1wd1MwWlhhWGhwTkZrS1drUTRkMmRaVVVkQk1WVmtSVkZGUWk5M1VqWk5TR2xIWkcxb01HUklRbnBQYVRoMldqSnNNR0ZJVm1sTWJVNTJZbE01ZW1KSVRtaE1WMXA1V1ZjeGJBcGtNamw1WVhrNWVtSklUbWhNVjJSd1pFZG9NVmxwTVc1YVZ6VnNZMjFHTUdJelNYWk1iV1J3WkVkb01WbHBPVE5pTTBweVdtMTRkbVF6VFhaYU1sWjFDbHBZU21oa1J6bDVXREprYkdKdFZubGhWMDVtWXpKNGVsbFVUWFZsVnpGelVVaEtiRnB1VFhaa1IwWnVZM2s1TWsxcE5IaE1ha0YzVDFGWlMwdDNXVUlLUWtGSFJIWjZRVUpCVVZGeVlVaFNNR05JVFRaTWVUa3dZakowYkdKcE5XaFpNMUp3WWpJMWVreHRaSEJrUjJneFdXNVdlbHBZU21waU1qVXdXbGMxTUFwTWJVNTJZbFJCVjBKbmIzSkNaMFZGUVZsUEwwMUJSVU5DUVdoNldUSm9iRnBJVm5OYVZFRXlRbWR2Y2tKblJVVkJXVTh2VFVGRlJFSkRhR3hPZWxGNkNrMUhVbWxQUkVsM1RXcENhMWxVVW1sTk1rbDZXa1JDYVU1RVFYcE5WRXBxV1dwbmVrNVVhR3BaYWtrMFQwUktiRTFDYTBkRGFYTkhRVkZSUW1jM09IY0tRVkZSUlVNeFFubGFVekZUV2xkNGJGbFlUbXhOUkZWSFEybHpSMEZSVVVKbk56aDNRVkZWUlVveVJqTmplVEYzWWpOa2JHTnVVblppTW5oNlRETkNkZ3BrTWxaNVpFYzVkbUpJVFhSaVIwWjBXVzFTYUV4WVFqVmtSMmgyWW1wQlowSm5iM0pDWjBWRlFWbFBMMDFCUlVkQ1FrcDVXbGRhZWt3eWFHeFpWMUo2Q2t3eVVteGtiVlp6WWpOQmQwOTNXVXRMZDFsQ1FrRkhSSFo2UVVKRFFWRjBSRU4wYjJSSVVuZGplbTkyVEROU2RtRXlWblZNYlVacVpFZHNkbUp1VFhVS1dqSnNNR0ZJVm1sa1dFNXNZMjFPZG1KdVVteGlibEYxV1RJNWRFMUpSMGRDWjI5eVFtZEZSVUZaVHk5TlFVVktRa2huVFdSdGFEQmtTRUo2VDJrNGRncGFNbXd3WVVoV2FVeHRUblppVXpsNllraE9hRXhYV25sWlZ6RnNaREk1ZVdGNU9YcGlTRTVvVEZka2NHUkhhREZaYVRGdVdsYzFiR050UmpCaU0wbDJDa3h0WkhCa1IyZ3hXV2s1TTJJelNuSmFiWGgyWkROTmRsb3lWblZhV0Vwb1pFYzVlVmd5Wkd4aWJWWjVZVmRPWm1NeWVIcFpWRTExWlZjeGMxRklTbXdLV201TmRtUkhSbTVqZVRreVRXazBlRXhxUVhkUFFWbExTM2RaUWtKQlIwUjJla0ZDUTJkUmNVUkRhRzFPTWxKclQwZE5NVTVIVFhsTlJGa3pXVzFHYlFwWmVrVjVXVEpGTTFsVVZURk9WR3N4V2tSV2JGcFViR2xPZWxWNVRVUlNhRTFDTUVkRGFYTkhRVkZSUW1jM09IZEJVWE5GUkhkM1Rsb3liREJoU0ZacENreFhhSFpqTTFKc1drUkNTMEpuYjNKQ1owVkZRVmxQTDAxQlJVMUNSSGROVDIxb01HUklRbnBQYVRoMldqSnNNR0ZJVm1sTWJVNTJZbE01YUdRelRYUUtZMGM1TTFwWVNqQmlNamx6WTNrNWQySXpaR3hqYmxKMllqSjRla3hYZUdoaVYwcHJXVk14ZDJWWVVtOWlNalIzVDBGWlMwdDNXVUpDUVVkRWRucEJRZ3BFVVZGeFJFTm9iRTU2VVhwTlIxSnBUMFJKZDAxcVFtdFpWRkpwVFRKSmVscEVRbWxPUkVGNlRWUkthbGxxWjNwT1ZHaHFXV3BKTkU5RVNteE5RMGxIQ2tOcGMwZEJVVkZDWnpjNGQwRlJORVZHUVhkVFkyMVdiV041T1c5YVYwWnJZM2s1YTFwWVdteGlSemwzVFVKclIwTnBjMGRCVVZGQ1p6YzRkMEZST0VVS1EzZDNTazFxU1hoUFZFVTFUWHBqTlUxRVJVZERhWE5IUVZGUlFtYzNPSGRCVWtGRlNYZDNhR0ZJVWpCalNFMDJUSGs1Ym1GWVVtOWtWMGwxV1RJNWRBcE1Na1l6WTNreGQySXpaR3hqYmxKMllqSjRlazFDYTBkRGFYTkhRVkZSUW1jM09IZEJVa1ZGUTNkM1NrMVVTVFZOVkVrelRtcE5ORTFJT0VkRGFYTkhDa0ZSVVVKbk56aDNRVkpKUldOUmVIWmhTRkl3WTBoTk5reDVPVzVoV0ZKdlpGZEpkVmt5T1hSTU1rWXpZM2t4ZDJJelpHeGpibEoyWWpKNGVrd3pRbllLWkRKV2VXUkhPWFppU0UxMFlrZEdkRmx0VW1oTVdFSTFaRWRvZG1KcE9IVmFNbXd3WVVoV2FVd3paSFpqYlhSdFlrYzVNMk41T1hkamJWVjBZMjFXY3dwYVYwWjZXbE0xTldKWGVFRmpiVlp0WTNrNWIxcFhSbXRqZVRscldsaGFiR0pIT1hkTlJHZEhRMmx6UjBGUlVVSm5OemgzUVZKTlJVdG5kMjlhVkdNd0NrMTZRbXRaYW1kNVRVUkpkMXBIUlRCWmFrNXBUVEpSZDFscVVYZE5la1Y1V1RKSk5FMTZWVFJaTWtsNVQwUm5lVnBVUVZsQ1oyOXlRbWRGUlVGWlR5OEtUVUZGVlVKQmIwMURTRTVxWVVkV2EyUlhlR3hOUnpSSFEybHpSMEZSVVVKbk56aDNRVkpWUlZsQmVHVmhTRkl3WTBoTk5reDVPVzVoV0ZKdlpGZEpkUXBaTWpsMFRESkdNMk41TVhkaU0yUnNZMjVTZG1JeWVIcE1NMEoyWkRKV2VXUkhPWFppU0UxMFlrZEdkRmx0VW1oTVdFSTFaRWRvZG1KcE9XaFpNMUp3Q21JeU5YcE1NMG94WW01TmRrMVVZM2xOUkVrMVRYcHJkMDVVUVhaWldGSXdXbGN4ZDJSSVRYWk5WRUZYUW1kdmNrSm5SVVZCV1U4dlRVRkZWMEpCWjAwS1FtNUNNVmx0ZUhCWmVrTkNhV2RaUzB0M1dVSkNRVWhYWlZGSlJVRm5VamhDU0c5QlpVRkNNa0ZPTURsTlIzSkhlSGhGZVZsNGEyVklTbXh1VG5kTGFRcFRiRFkwTTJwNWRDODBaVXRqYjBGMlMyVTJUMEZCUVVKdFQwSkdjekZKUVVGQlVVUkJSV04zVWxGSlowbHhaVXN4TWpkdFRYUk1XVnBFVFVscVp5dGlDaXQzYjFkU00zbHNiVmRUTW1OalpqbFNZMUF4T0U5VlEwbFJRemhRYW5WSldVTTVUVGx3TW1WT2MybzRiSEpwSzFoalNWbDNOemRHY25ac2IwMUJUSE1LSzFaR2NUZDZRVXRDWjJkeGFHdHFUMUJSVVVSQmQwNXZRVVJDYkVGcVJVRTVOa2h6VVdaMlZXeE1ZV2RQYW1welFWbGFUbEp2UlVSbVdHSnRVSFJ1TkFvMFpIQm9Ra054SzFnemJsZGlPVWRxU0d4WFJucEZURGxhYTFsSkx5ODFja0ZxUVd4R00zbE1ZVXBMY1U5UFpVZHFNbmN2UW5aMVVVOU1kSEkyU3l0U0NsZHBUa050VldOR1JEbFZZVVJaTUhKWVdsZEtVMlZzYTJNM1JtMXlkM2h1VVU5QlBRb3RMUzB0TFVWT1JDQkRSVkpVU1VaSlEwRlVSUzB0TFMwdENnPT0ifV19fQ=="}]}, "dsseEnvelope":{"payload":"eyJfdHlwZSI6Imh0dHBzOi8vaW4tdG90by5pby9TdGF0ZW1lbnQvdjAuMSIsInByZWRpY2F0ZVR5cGUiOiJodHRwczovL3Nsc2EuZGV2L3Byb3ZlbmFuY2UvdjAuMiIsInN1YmplY3QiOlt7Im5hbWUiOiIuL2F3c19sYW1iZGFfcG93ZXJ0b29scy0zLjE5LjFhNy1weTMtbm9uZS1hbnkud2hsIiwiZGlnZXN0Ijp7InNoYTI1NiI6ImI4MzE4MzAzODdhZWY4OTljOGU4ZmQ3YTJhNTJlNTkxYzA3YzBlNjEzMDVmZjU2MWZlOGNkN2ZiOTkxNTY5M2IifX0seyJuYW1lIjoiLi9hd3NfbGFtYmRhX3Bvd2VydG9vbHMtMy4xOS4xYTcudGFyLmd6IiwiZGlnZXN0Ijp7InNoYTI1NiI6ImI0NzVkMjZiZDRhMzY1NDk4ZDJkN2Y1Yjg3MWZlYTAxYzMxODAwOTM4Zjc4ZGJlMmUyOGYxNDFjN2FmMGNjNGQifX1dLCJwcmVkaWNhdGUiOnsiYnVpbGRlciI6eyJpZCI6Imh0dHBzOi8vZ2l0aHViLmNvbS9zbHNhLWZyYW1ld29yay9zbHNhLWdpdGh1Yi1nZW5lcmF0b3IvLmdpdGh1Yi93b3JrZmxvd3MvZ2VuZXJhdG9yX2dlbmVyaWNfc2xzYTMueW1sQHJlZnMvdGFncy92Mi4xLjAifSwiYnVpbGRUeXBlIjoiaHR0cHM6Ly9naXRodWIuY29tL3Nsc2EtZnJhbWV3b3JrL3Nsc2EtZ2l0aHViLWdlbmVyYXRvci9nZW5lcmljQHYxIiwiaW52b2NhdGlvbiI6eyJjb25maWdTb3VyY2UiOnsidXJpIjoiZ2l0K2h0dHBzOi8vZ2l0aHViLmNvbS9hd3MtcG93ZXJ0b29scy9wb3dlcnRvb2xzLWxhbWJkYS1weXRob25AcmVmcy9oZWFkcy9kZXZlbG9wIiwiZGlnZXN0Ijp7InNoYTEiOiJlNzQzMGRiODIwMjBkYTRiM2IzZDBiNDAzMTJjYjgzNThjYjI4ODJlIn0sImVudHJ5UG9pbnQiOiIuZ2l0aHViL3dvcmtmbG93cy9wcmUtcmVsZWFzZS55bWwifSwicGFyYW1ldGVycyI6eyJ2YXJzIjp7fX0sImVudmlyb25tZW50Ijp7ImdpdGh1Yl9hY3RvciI6ImxlYW5kcm9kYW1hc2NlbmEiLCJnaXRodWJfYWN0b3JfaWQiOiI0Mjk1MTczIiwiZ2l0aHViX2Jhc2VfcmVmIjoiIiwiZ2l0aHViX2V2ZW50X25hbWUiOiJzY2hlZHVsZSIsImdpdGh1Yl9ldmVudF9wYXlsb2FkIjp7ImVudGVycHJpc2UiOnsiYXZhdGFyX3VybCI6Imh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vYi8xMjkwP3Y9NCIsImNyZWF0ZWRfYXQiOiIyMDE5LTExLTEzVDE4OjA1OjQxWiIsImRlc2NyaXB0aW9uIjoiIiwiaHRtbF91cmwiOiJodHRwczovL2dpdGh1Yi5jb20vZW50ZXJwcmlzZXMvYW1hem9uIiwiaWQiOjEyOTAsIm5hbWUiOiJBbWF6b24iLCJub2RlX2lkIjoiTURFd09rVnVkR1Z5Y0hKcGMyVXhNamt3Iiwic2x1ZyI6ImFtYXpvbiIsInVwZGF0ZWRfYXQiOiIyMDI1LTA4LTEyVDIwOjU5OjE0WiIsIndlYnNpdGVfdXJsIjoiaHR0cHM6Ly93d3cuYW1hem9uLmNvbS8ifSwib3JnYW5pemF0aW9uIjp7ImF2YXRhcl91cmwiOiJodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTI5MTI3NjM4P3Y9NCIsImRlc2NyaXB0aW9uIjoiIiwiZXZlbnRzX3VybCI6Imh0dHBzOi8vaW50ZXJuYWwtYXBpLnNlcnZpY2UuaWFkLmdpdGh1Yi5uZXQvb3Jncy9hd3MtcG93ZXJ0b29scy9ldmVudHMiLCJob29rc191cmwiOiJodHRwczovL2ludGVybmFsLWFwaS5zZXJ2aWNlLmlhZC5naXRodWIubmV0L29yZ3MvYXdzLXBvd2VydG9vbHMvaG9va3MiLCJpZCI6MTI5MTI3NjM4LCJpc3N1ZXNfdXJsIjoiaHR0cHM6Ly9pbnRlcm5hbC1hcGkuc2VydmljZS5pYWQuZ2l0aHViLm5ldC9vcmdzL2F3cy1wb3dlcnRvb2xzL2lzc3VlcyIsImxvZ2luIjoiYXdzLXBvd2VydG9vbHMiLCJtZW1iZXJzX3VybCI6Imh0dHBzOi8vaW50ZXJuYWwtYXBpLnNlcnZpY2UuaWFkLmdpdGh1Yi5uZXQvb3Jncy9hd3MtcG93ZXJ0b29scy9tZW1iZXJzey9tZW1iZXJ9Iiwibm9kZV9pZCI6Ik9fa2dET0I3SlUxZyIsInB1YmxpY19tZW1iZXJzX3VybCI6Imh0dHBzOi8vaW50ZXJuYWwtYXBpLnNlcnZpY2UuaWFkLmdpdGh1Yi5uZXQvb3Jncy9hd3MtcG93ZXJ0b29scy9wdWJsaWNfbWVtYmVyc3svbWVtYmVyfSIsInJlcG9zX3VybCI6Imh0dHBzOi8vaW50ZXJuYWwtYXBpLnNlcnZpY2UuaWFkLmdpdGh1Yi5uZXQvb3Jncy9hd3MtcG93ZXJ0b29scy9yZXBvcyIsInVybCI6Imh0dHBzOi8vaW50ZXJuYWwtYXBpLnNlcnZpY2UuaWFkLmdpdGh1Yi5uZXQvb3Jncy9hd3MtcG93ZXJ0b29scyJ9LCJyZXBvc2l0b3J5Ijp7ImFsbG93X2ZvcmtpbmciOnRydWUsImFyY2hpdmVfdXJsIjoiaHR0cHM6Ly9pbnRlcm5hbC1hcGkuc2VydmljZS5pYWQuZ2l0aHViLm5ldC9yZXBvcy9hd3MtcG93ZXJ0b29scy9wb3dlcnRvb2xzLWxhbWJkYS1weXRob24ve2FyY2hpdmVfZm9ybWF0fXsvcmVmfSIsImFyY2hpdmVkIjpmYWxzZSwiYXNzaWduZWVzX3VybCI6Imh0dHBzOi8vaW50ZXJuYWwtYXBpLnNlcnZpY2UuaWFkLmdpdGh1Yi5uZXQvcmVwb3MvYXdzLXBvd2VydG9vbHMvcG93ZXJ0b29scy1sYW1iZGEtcHl0aG9uL2Fzc2lnbmVlc3svdXNlcn0iLCJibG9ic191cmwiOiJodHRwczovL2ludGVybmFsLWFwaS5zZXJ2aWNlLmlhZC5naXRodWIubmV0L3JlcG9zL2F3cy1wb3dlcnRvb2xzL3Bvd2VydG9vbHMtbGFtYmRhLXB5dGhvbi9naXQvYmxvYnN7L3NoYX0iLCJicmFuY2hlc191cmwiOiJodHRwczovL2ludGVybmFsLWFwaS5zZXJ2aWNlLmlhZC5naXRodWIubmV0L3JlcG9zL2F3cy1wb3dlcnRvb2xzL3Bvd2VydG9vbHMtbGFtYmRhLXB5dGhvbi9icmFuY2hlc3svYnJhbmNofSIsImNsb25lX3VybCI6Imh0dHBzOi8vZ2l0aHViLmNvbS9hd3MtcG93ZXJ0b29scy9wb3dlcnRvb2xzLWxhbWJkYS1weXRob24uZ2l0IiwiY29sbGFib3JhdG9yc191cmwiOiJodHRwczovL2ludGVybmFsLWFwaS5zZXJ2aWNlLmlhZC5naXRodWIubmV0L3JlcG9zL2F3cy1wb3dlcnRvb2xzL3Bvd2VydG9vbHMtbGFtYmRhLXB5dGhvbi9jb2xsYWJvcmF0b3Jzey9jb2xsYWJvcmF0b3J9IiwiY29tbWVudHNfdXJsIjoiaHR0cHM6Ly9pbnRlcm5hbC1hcGkuc2VydmljZS5pYWQuZ2l0aHViLm5ldC9yZXBvcy9hd3MtcG93ZXJ0b29scy9wb3dlcnRvb2xzLWxhbWJkYS1weXRob24vY29tbWVudHN7L251bWJlcn0iLCJjb21taXRzX3VybCI6Imh0dHBzOi8vaW50ZXJuYWwtYXBpLnNlcnZpY2UuaWFkLmdpdGh1Yi5uZXQvcmVwb3MvYXdzLXBvd2VydG9vbHMvcG93ZXJ0b29scy1sYW1iZGEtcHl0aG9uL2NvbW1pdHN7L3NoYX0iLCJjb21wYXJlX3VybCI6Imh0dHBzOi8vaW50ZXJuYWwtYXBpLnNlcnZpY2UuaWFkLmdpdGh1Yi5uZXQvcmVwb3MvYXdzLXBvd2VydG9vbHMvcG93ZXJ0b29scy1sYW1iZGEtcHl0aG9uL2NvbXBhcmUve2Jhc2V9Li4ue2hlYWR9IiwiY29udGVudHNfdXJsIjoiaHR0cHM6Ly9pbnRlcm5hbC1hcGkuc2VydmljZS5pYWQuZ2l0aHViLm5ldC9yZXBvcy9hd3MtcG93ZXJ0b29scy9wb3dlcnRvb2xzLWxhbWJkYS1weXRob24vY29udGVudHMveytwYXRofSIsImNvbnRyaWJ1dG9yc191cmwiOiJodHRwczovL2ludGVybmFsLWFwaS5zZXJ2aWNlLmlhZC5naXRodWIubmV0L3JlcG9zL2F3cy1wb3dlcnRvb2xzL3Bvd2VydG9vbHMtbGFtYmRhLXB5dGhvbi9jb250cmlidXRvcnMiLCJjcmVhdGVkX2F0IjoiMjAxOS0xMS0xNVQxMjoyNjoxMloiLCJjdXN0b21fcHJvcGVydGllcyI6eyJzdGFnaW5nIjoiZmFsc2UiLCJ2aXNpYmlsaXR5LWFsbG93LWludGVybmFsIjoiZmFsc2UiLCJ2aXNpYmlsaXR5LWFsbG93LXByaXZhdGUiOiJmYWxzZSIsInZpc2liaWxpdHktYWxsb3ctcHVibGljIjoidHJ1ZSJ9LCJkZWZhdWx0X2JyYW5jaCI6ImRldmVsb3AiLCJkZXBsb3ltZW50c191cmwiOiJodHRwczovL2ludGVybmFsLWFwaS5zZXJ2aWNlLmlhZC5naXRodWIubmV0L3JlcG9zL2F3cy1wb3dlcnRvb2xzL3Bvd2VydG9vbHMtbGFtYmRhLXB5dGhvbi9kZXBsb3ltZW50cyIsImRlc2NyaXB0aW9uIjoiQSBkZXZlbG9wZXIgdG9vbGtpdCB0byBpbXBsZW1lbnQgU2VydmVybGVzcyBiZXN0IHByYWN0aWNlcyBhbmQgaW5jcmVhc2UgZGV2ZWxvcGVyIHZlbG9jaXR5LiIsImRpc2FibGVkIjpmYWxzZSwiZG93bmxvYWRzX3VybCI6Imh0dHBzOi8vaW50ZXJuYWwtYXBpLnNlcnZpY2UuaWFkLmdpdGh1Yi5uZXQvcmVwb3MvYXdzLXBvd2VydG9vbHMvcG93ZXJ0b29scy1sYW1iZGEtcHl0aG9uL2Rvd25sb2FkcyIsImV2ZW50c191cmwiOiJodHRwczovL2ludGVybmFsLWFwaS5zZXJ2aWNlLmlhZC5naXRodWIubmV0L3JlcG9zL2F3cy1wb3dlcnRvb2xzL3Bvd2VydG9vbHMtbGFtYmRhLXB5dGhvbi9ldmVudHMiLCJmb3JrIjpmYWxzZSwiZm9ya3MiOjQ0NiwiZm9ya3NfY291bnQiOjQ0NiwiZm9ya3NfdXJsIjoiaHR0cHM6Ly9pbnRlcm5hbC1hcGkuc2VydmljZS5pYWQuZ2l0aHViLm5ldC9yZXBvcy9hd3MtcG93ZXJ0b29scy9wb3dlcnRvb2xzLWxhbWJkYS1weXRob24vZm9ya3MiLCJmdWxsX25hbWUiOiJhd3MtcG93ZXJ0b29scy9wb3dlcnRvb2xzLWxhbWJkYS1weXRob24iLCJnaXRfY29tbWl0c191cmwiOiJodHRwczovL2ludGVybmFsLWFwaS5zZXJ2aWNlLmlhZC5naXRodWIubmV0L3JlcG9zL2F3cy1wb3dlcnRvb2xzL3Bvd2VydG9vbHMtbGFtYmRhLXB5dGhvbi9naXQvY29tbWl0c3svc2hhfSIsImdpdF9yZWZzX3VybCI6Imh0dHBzOi8vaW50ZXJuYWwtYXBpLnNlcnZpY2UuaWFkLmdpdGh1Yi5uZXQvcmVwb3MvYXdzLXBvd2VydG9vbHMvcG93ZXJ0b29scy1sYW1iZGEtcHl0aG9uL2dpdC9yZWZzey9zaGF9IiwiZ2l0X3RhZ3NfdXJsIjoiaHR0cHM6Ly9pbnRlcm5hbC1hcGkuc2VydmljZS5pYWQuZ2l0aHViLm5ldC9yZXBvcy9hd3MtcG93ZXJ0b29scy9wb3dlcnRvb2xzLWxhbWJkYS1weXRob24vZ2l0L3RhZ3N7L3NoYX0iLCJnaXRfdXJsIjoiZ2l0Oi8vZ2l0aHViLmNvbS9hd3MtcG93ZXJ0b29scy9wb3dlcnRvb2xzLWxhbWJkYS1weXRob24uZ2l0IiwiaGFzX2Rpc2N1c3Npb25zIjp0cnVlLCJoYXNfZG93bmxvYWRzIjp0cnVlLCJoYXNfaXNzdWVzIjp0cnVlLCJoYXNfcGFnZXMiOmZhbHNlLCJoYXNfcHJvamVjdHMiOnRydWUsImhhc193aWtpIjpmYWxzZSwiaG9tZXBhZ2UiOiJodHRwczovL2RvY3MucG93ZXJ0b29scy5hd3MuZGV2L2xhbWJkYS9weXRob24vbGF0ZXN0LyIsImhvb2tzX3VybCI6Imh0dHBzOi8vaW50ZXJuYWwtYXBpLnNlcnZpY2UuaWFkLmdpdGh1Yi5uZXQvcmVwb3MvYXdzLXBvd2VydG9vbHMvcG93ZXJ0b29scy1sYW1iZGEtcHl0aG9uL2hvb2tzIiwiaHRtbF91cmwiOiJodHRwczovL2dpdGh1Yi5jb20vYXdzLXBvd2VydG9vbHMvcG93ZXJ0b29scy1sYW1iZGEtcHl0aG9uIiwiaWQiOjIyMTkxOTM3OSwiaXNfdGVtcGxhdGUiOmZhbHNlLCJpc3N1ZV9jb21tZW50X3VybCI6Imh0dHBzOi8vaW50ZXJuYWwtYXBpLnNlcnZpY2UuaWFkLmdpdGh1Yi5uZXQvcmVwb3MvYXdzLXBvd2VydG9vbHMvcG93ZXJ0b29scy1sYW1iZGEtcHl0aG9uL2lzc3Vlcy9jb21tZW50c3svbnVtYmVyfSIsImlzc3VlX2V2ZW50c191cmwiOiJodHRwczovL2ludGVybmFsLWFwaS5zZXJ2aWNlLmlhZC5naXRodWIubmV0L3JlcG9zL2F3cy1wb3dlcnRvb2xzL3Bvd2VydG9vbHMtbGFtYmRhLXB5dGhvbi9pc3N1ZXMvZXZlbnRzey9udW1iZXJ9IiwiaXNzdWVzX3VybCI6Imh0dHBzOi8vaW50ZXJuYWwtYXBpLnNlcnZpY2UuaWFkLmdpdGh1Yi5uZXQvcmVwb3MvYXdzLXBvd2VydG9vbHMvcG93ZXJ0b29scy1sYW1iZGEtcHl0aG9uL2lzc3Vlc3svbnVtYmVyfSIsImtleXNfdXJsIjoiaHR0cHM6Ly9pbnRlcm5hbC1hcGkuc2VydmljZS5pYWQuZ2l0aHViLm5ldC9yZXBvcy9hd3MtcG93ZXJ0b29scy9wb3dlcnRvb2xzLWxhbWJkYS1weXRob24va2V5c3sva2V5X2lkfSIsImxhYmVsc191cmwiOiJodHRwczovL2ludGVybmFsLWFwaS5zZXJ2aWNlLmlhZC5naXRodWIubmV0L3JlcG9zL2F3cy1wb3dlcnRvb2xzL3Bvd2VydG9vbHMtbGFtYmRhLXB5dGhvbi9sYWJlbHN7L25hbWV9IiwibGFuZ3VhZ2UiOiJQeXRob24iLCJsYW5ndWFnZXNfdXJsIjoiaHR0cHM6Ly9pbnRlcm5hbC1hcGkuc2VydmljZS5pYWQuZ2l0aHViLm5ldC9yZXBvcy9hd3MtcG93ZXJ0b29scy9wb3dlcnRvb2xzLWxhbWJkYS1weXRob24vbGFuZ3VhZ2VzIiwibGljZW5zZSI6eyJrZXkiOiJtaXQtMCIsIm5hbWUiOiJNSVQgTm8gQXR0cmlidXRpb24iLCJub2RlX2lkIjoiTURjNlRHbGpaVzV6WlRReCIsInNwZHhfaWQiOiJNSVQtMCIsInVybCI6Imh0dHBzOi8vaW50ZXJuYWwtYXBpLnNlcnZpY2UuaWFkLmdpdGh1Yi5uZXQvbGljZW5zZXMvbWl0LTAifSwibWVyZ2VzX3VybCI6Imh0dHBzOi8vaW50ZXJuYWwtYXBpLnNlcnZpY2UuaWFkLmdpdGh1Yi5uZXQvcmVwb3MvYXdzLXBvd2VydG9vbHMvcG93ZXJ0b29scy1sYW1iZGEtcHl0aG9uL21lcmdlcyIsIm1pbGVzdG9uZXNfdXJsIjoiaHR0cHM6Ly9pbnRlcm5hbC1hcGkuc2VydmljZS5pYWQuZ2l0aHViLm5ldC9yZXBvcy9hd3MtcG93ZXJ0b29scy9wb3dlcnRvb2xzLWxhbWJkYS1weXRob24vbWlsZXN0b25lc3svbnVtYmVyfSIsIm1pcnJvcl91cmwiOm51bGwsIm5hbWUiOiJwb3dlcnRvb2xzLWxhbWJkYS1weXRob24iLCJub2RlX2lkIjoiTURFd09sSmxjRzl6YVhSdmNua3lNakU1TVRrek56az0iLCJub3RpZmljYXRpb25zX3VybCI6Imh0dHBzOi8vaW50ZXJuYWwtYXBpLnNlcnZpY2UuaWFkLmdpdGh1Yi5uZXQvcmVwb3MvYXdzLXBvd2VydG9vbHMvcG93ZXJ0b29scy1sYW1iZGEtcHl0aG9uL25vdGlmaWNhdGlvbnN7P3NpbmNlLGFsbCxwYXJ0aWNpcGF0aW5nfSIsIm9wZW5faXNzdWVzIjo1Mywib3Blbl9pc3N1ZXNfY291bnQiOjUzLCJvd25lciI6eyJhdmF0YXJfdXJsIjoiaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzEyOTEyNzYzOD92PTQiLCJldmVudHNfdXJsIjoiaHR0cHM6Ly9pbnRlcm5hbC1hcGkuc2VydmljZS5pYWQuZ2l0aHViLm5ldC91c2Vycy9hd3MtcG93ZXJ0b29scy9ldmVudHN7L3ByaXZhY3l9IiwiZm9sbG93ZXJzX3VybCI6Imh0dHBzOi8vaW50ZXJuYWwtYXBpLnNlcnZpY2UuaWFkLmdpdGh1Yi5uZXQvdXNlcnMvYXdzLXBvd2VydG9vbHMvZm9sbG93ZXJzIiwiZm9sbG93aW5nX3VybCI6Imh0dHBzOi8vaW50ZXJuYWwtYXBpLnNlcnZpY2UuaWFkLmdpdGh1Yi5uZXQvdXNlcnMvYXdzLXBvd2VydG9vbHMvZm9sbG93aW5ney9vdGhlcl91c2VyfSIsImdpc3RzX3VybCI6Imh0dHBzOi8vaW50ZXJuYWwtYXBpLnNlcnZpY2UuaWFkLmdpdGh1Yi5uZXQvdXNlcnMvYXdzLXBvd2VydG9vbHMvZ2lzdHN7L2dpc3RfaWR9IiwiZ3JhdmF0YXJfaWQiOiIiLCJodG1sX3VybCI6Imh0dHBzOi8vZ2l0aHViLmNvbS9hd3MtcG93ZXJ0b29scyIsImlkIjoxMjkxMjc2MzgsImxvZ2luIjoiYXdzLXBvd2VydG9vbHMiLCJub2RlX2lkIjoiT19rZ0RPQjdKVTFnIiwib3JnYW5pemF0aW9uc191cmwiOiJodHRwczovL2ludGVybmFsLWFwaS5zZXJ2aWNlLmlhZC5naXRodWIubmV0L3VzZXJzL2F3cy1wb3dlcnRvb2xzL29yZ3MiLCJyZWNlaXZlZF9ldmVudHNfdXJsIjoiaHR0cHM6Ly9pbnRlcm5hbC1hcGkuc2VydmljZS5pYWQuZ2l0aHViLm5ldC91c2Vycy9hd3MtcG93ZXJ0b29scy9yZWNlaXZlZF9ldmVudHMiLCJyZXBvc191cmwiOiJodHRwczovL2ludGVybmFsLWFwaS5zZXJ2aWNlLmlhZC5naXRodWIubmV0L3VzZXJzL2F3cy1wb3dlcnRvb2xzL3JlcG9zIiwic2l0ZV9hZG1pbiI6ZmFsc2UsInN0YXJyZWRfdXJsIjoiaHR0cHM6Ly9pbnRlcm5hbC1hcGkuc2VydmljZS5pYWQuZ2l0aHViLm5ldC91c2Vycy9hd3MtcG93ZXJ0b29scy9zdGFycmVkey9vd25lcn17L3JlcG99Iiwic3Vic2NyaXB0aW9uc191cmwiOiJodHRwczovL2ludGVybmFsLWFwaS5zZXJ2aWNlLmlhZC5naXRodWIubmV0L3VzZXJzL2F3cy1wb3dlcnRvb2xzL3N1YnNjcmlwdGlvbnMiLCJ0eXBlIjoiT3JnYW5pemF0aW9uIiwidXJsIjoiaHR0cHM6Ly9pbnRlcm5hbC1hcGkuc2VydmljZS5pYWQuZ2l0aHViLm5ldC91c2Vycy9hd3MtcG93ZXJ0b29scyIsInVzZXJfdmlld190eXBlIjoicHVibGljIn0sInByaXZhdGUiOmZhbHNlLCJwdWxsc191cmwiOiJodHRwczovL2ludGVybmFsLWFwaS5zZXJ2aWNlLmlhZC5naXRodWIubmV0L3JlcG9zL2F3cy1wb3dlcnRvb2xzL3Bvd2VydG9vbHMtbGFtYmRhLXB5dGhvbi9wdWxsc3svbnVtYmVyfSIsInB1c2hlZF9hdCI6IjIwMjUtMDgtMjVUMDc6NDI6MjRaIiwicmVsZWFzZXNfdXJsIjoiaHR0cHM6Ly9pbnRlcm5hbC1hcGkuc2VydmljZS5pYWQuZ2l0aHViLm5ldC9yZXBvcy9hd3MtcG93ZXJ0b29scy9wb3dlcnRvb2xzLWxhbWJkYS1weXRob24vcmVsZWFzZXN7L2lkfSIsInNpemUiOjEzMDk5Niwic3NoX3VybCI6ImdpdEBnaXRodWIuY29tOmF3cy1wb3dlcnRvb2xzL3Bvd2VydG9vbHMtbGFtYmRhLXB5dGhvbi5naXQiLCJzdGFyZ2F6ZXJzX2NvdW50IjozMTI4LCJzdGFyZ2F6ZXJzX3VybCI6Imh0dHBzOi8vaW50ZXJuYWwtYXBpLnNlcnZpY2UuaWFkLmdpdGh1Yi5uZXQvcmVwb3MvYXdzLXBvd2VydG9vbHMvcG93ZXJ0b29scy1sYW1iZGEtcHl0aG9uL3N0YXJnYXplcnMiLCJzdGF0dXNlc191cmwiOiJodHRwczovL2ludGVybmFsLWFwaS5zZXJ2aWNlLmlhZC5naXRodWIubmV0L3JlcG9zL2F3cy1wb3dlcnRvb2xzL3Bvd2VydG9vbHMtbGFtYmRhLXB5dGhvbi9zdGF0dXNlcy97c2hhfSIsInN1YnNjcmliZXJzX3VybCI6Imh0dHBzOi8vaW50ZXJuYWwtYXBpLnNlcnZpY2UuaWFkLmdpdGh1Yi5uZXQvcmVwb3MvYXdzLXBvd2VydG9vbHMvcG93ZXJ0b29scy1sYW1iZGEtcHl0aG9uL3N1YnNjcmliZXJzIiwic3Vic2NyaXB0aW9uX3VybCI6Imh0dHBzOi8vaW50ZXJuYWwtYXBpLnNlcnZpY2UuaWFkLmdpdGh1Yi5uZXQvcmVwb3MvYXdzLXBvd2VydG9vbHMvcG93ZXJ0b29scy1sYW1iZGEtcHl0aG9uL3N1YnNjcmlwdGlvbiIsInN2bl91cmwiOiJodHRwczovL2dpdGh1Yi5jb20vYXdzLXBvd2VydG9vbHMvcG93ZXJ0b29scy1sYW1iZGEtcHl0aG9uIiwidGFnc191cmwiOiJodHRwczovL2ludGVybmFsLWFwaS5zZXJ2aWNlLmlhZC5naXRodWIubmV0L3JlcG9zL2F3cy1wb3dlcnRvb2xzL3Bvd2VydG9vbHMtbGFtYmRhLXB5dGhvbi90YWdzIiwidGVhbXNfdXJsIjoiaHR0cHM6Ly9pbnRlcm5hbC1hcGkuc2VydmljZS5pYWQuZ2l0aHViLm5ldC9yZXBvcy9hd3MtcG93ZXJ0b29scy9wb3dlcnRvb2xzLWxhbWJkYS1weXRob24vdGVhbXMiLCJ0b3BpY3MiOlsiYXdzIiwiYXdzLWxhbWJkYSIsImxhbWJkYSIsInB5dGhvbiIsInNlcnZlcmxlc3MiXSwidHJlZXNfdXJsIjoiaHR0cHM6Ly9pbnRlcm5hbC1hcGkuc2VydmljZS5pYWQuZ2l0aHViLm5ldC9yZXBvcy9hd3MtcG93ZXJ0b29scy9wb3dlcnRvb2xzLWxhbWJkYS1weXRob24vZ2l0L3RyZWVzey9zaGF9IiwidXBkYXRlZF9hdCI6IjIwMjUtMDgtMjVUMDc6NDI6MjZaIiwidXJsIjoiaHR0cHM6Ly9pbnRlcm5hbC1hcGkuc2VydmljZS5pYWQuZ2l0aHViLm5ldC9yZXBvcy9hd3MtcG93ZXJ0b29scy9wb3dlcnRvb2xzLWxhbWJkYS1weXRob24iLCJ2aXNpYmlsaXR5IjoicHVibGljIiwid2F0Y2hlcnMiOjMxMjgsIndhdGNoZXJzX2NvdW50IjozMTI4LCJ3ZWJfY29tbWl0X3NpZ25vZmZfcmVxdWlyZWQiOnRydWV9LCJzY2hlZHVsZSI6IjAgOCAqICogMS01Iiwid29ya2Zsb3ciOiIuZ2l0aHViL3dvcmtmbG93cy9wcmUtcmVsZWFzZS55bWwifSwiZ2l0aHViX2hlYWRfcmVmIjoiIiwiZ2l0aHViX3JlZiI6InJlZnMvaGVhZHMvZGV2ZWxvcCIsImdpdGh1Yl9yZWZfdHlwZSI6ImJyYW5jaCIsImdpdGh1Yl9yZXBvc2l0b3J5X2lkIjoiMjIxOTE5Mzc5IiwiZ2l0aHViX3JlcG9zaXRvcnlfb3duZXIiOiJhd3MtcG93ZXJ0b29scyIsImdpdGh1Yl9yZXBvc2l0b3J5X293bmVyX2lkIjoiMTI5MTI3NjM4IiwiZ2l0aHViX3J1bl9hdHRlbXB0IjoiMSIsImdpdGh1Yl9ydW5faWQiOiIxNzIwMjkzOTA1MCIsImdpdGh1Yl9ydW5fbnVtYmVyIjoiMzEzIiwiZ2l0aHViX3NoYTEiOiJlNzQzMGRiODIwMjBkYTRiM2IzZDBiNDAzMTJjYjgzNThjYjI4ODJlIn19LCJtZXRhZGF0YSI6eyJidWlsZEludm9jYXRpb25JRCI6IjE3MjAyOTM5MDUwLTEiLCJjb21wbGV0ZW5lc3MiOnsicGFyYW1ldGVycyI6dHJ1ZSwiZW52aXJvbm1lbnQiOmZhbHNlLCJtYXRlcmlhbHMiOmZhbHNlfSwicmVwcm9kdWNpYmxlIjpmYWxzZX0sIm1hdGVyaWFscyI6W3sidXJpIjoiZ2l0K2h0dHBzOi8vZ2l0aHViLmNvbS9hd3MtcG93ZXJ0b29scy9wb3dlcnRvb2xzLWxhbWJkYS1weXRob25AcmVmcy9oZWFkcy9kZXZlbG9wIiwiZGlnZXN0Ijp7InNoYTEiOiJlNzQzMGRiODIwMjBkYTRiM2IzZDBiNDAzMTJjYjgzNThjYjI4ODJlIn19XX19", "payloadType":"application/vnd.in-toto+json", "signatures":[{"sig":"MEUCIGCp8w5I4qelN1W562o79JPQWuuvY9oWXzWRWRUlSlXIAiEAutkRqA9S2F5+Ne8Y78JmLxpfVSxFTZUiMsoai3r6arE="}]}} \ No newline at end of file diff --git a/provenance/3.19.1a8/multiple.intoto.jsonl b/provenance/3.19.1a8/multiple.intoto.jsonl new file mode 100644 index 00000000000..f196a7df7eb --- /dev/null +++ b/provenance/3.19.1a8/multiple.intoto.jsonl @@ -0,0 +1 @@ +{"mediaType":"application/vnd.dev.sigstore.bundle.v0.3+json", "verificationMaterial":{"certificate":{"rawBytes":"MIIHZjCCBuugAwIBAgIURxCUdykEtJYToq7VSyrE5FBH18QwCgYIKoZIzj0EAwMwNzEVMBMGA1UEChMMc2lnc3RvcmUuZGV2MR4wHAYDVQQDExVzaWdzdG9yZS1pbnRlcm1lZGlhdGUwHhcNMjUwODI2MDgwODEwWhcNMjUwODI2MDgxODEwWjAAMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEdc3Q1Y/ejC60WSKiZLs5qmy8xc1lYWvKMH68fhSuMUoA6YxYft5uRjTn44bQfXyFjxHVaQ6mHfArWQYL3aQ/haOCBgowggYGMA4GA1UdDwEB/wQEAwIHgDATBgNVHSUEDDAKBggrBgEFBQcDAzAdBgNVHQ4EFgQUSLWb5dLiNmH11JDymc7nz4oTGywwHwYDVR0jBBgwFoAU39Ppz1YkEZb5qNjpKFWixi4YZD8wgYQGA1UdEQEB/wR6MHiGdmh0dHBzOi8vZ2l0aHViLmNvbS9zbHNhLWZyYW1ld29yay9zbHNhLWdpdGh1Yi1nZW5lcmF0b3IvLmdpdGh1Yi93b3JrZmxvd3MvZ2VuZXJhdG9yX2dlbmVyaWNfc2xzYTMueW1sQHJlZnMvdGFncy92Mi4xLjAwOQYKKwYBBAGDvzABAQQraHR0cHM6Ly90b2tlbi5hY3Rpb25zLmdpdGh1YnVzZXJjb250ZW50LmNvbTAWBgorBgEEAYO/MAECBAhzY2hlZHVsZTA2BgorBgEEAYO/MAEDBChmYmQzZGQxYjFmNGI3Yzc0ZDhjYzE0M2RhZTdjZWFiNTBmYzgyNzY2MBkGCisGAQQBg78wAQQEC1ByZS1SZWxlYXNlMDUGCisGAQQBg78wAQUEJ2F3cy1wb3dlcnRvb2xzL3Bvd2VydG9vbHMtbGFtYmRhLXB5dGhvbjAgBgorBgEEAYO/MAEGBBJyZWZzL2hlYWRzL2RldmVsb3AwOwYKKwYBBAGDvzABCAQtDCtodHRwczovL3Rva2VuLmFjdGlvbnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tMIGGBgorBgEEAYO/MAEJBHgMdmh0dHBzOi8vZ2l0aHViLmNvbS9zbHNhLWZyYW1ld29yay9zbHNhLWdpdGh1Yi1nZW5lcmF0b3IvLmdpdGh1Yi93b3JrZmxvd3MvZ2VuZXJhdG9yX2dlbmVyaWNfc2xzYTMueW1sQHJlZnMvdGFncy92Mi4xLjAwOAYKKwYBBAGDvzABCgQqDChmN2RkOGM1NGMyMDY3YmFmYzEyY2E3YTU1NTk1ZDVlZTliNzUyMDRhMB0GCisGAQQBg78wAQsEDwwNZ2l0aHViLWhvc3RlZDBKBgorBgEEAYO/MAEMBDwMOmh0dHBzOi8vZ2l0aHViLmNvbS9hd3MtcG93ZXJ0b29scy9wb3dlcnRvb2xzLWxhbWJkYS1weXRob24wOAYKKwYBBAGDvzABDQQqDChmYmQzZGQxYjFmNGI3Yzc0ZDhjYzE0M2RhZTdjZWFiNTBmYzgyNzY2MCIGCisGAQQBg78wAQ4EFAwScmVmcy9oZWFkcy9kZXZlbG9wMBkGCisGAQQBg78wAQ8ECwwJMjIxOTE5Mzc5MDEGCisGAQQBg78wARAEIwwhaHR0cHM6Ly9naXRodWIuY29tL2F3cy1wb3dlcnRvb2xzMBkGCisGAQQBg78wAREECwwJMTI5MTI3NjM4MH8GCisGAQQBg78wARIEcQxvaHR0cHM6Ly9naXRodWIuY29tL2F3cy1wb3dlcnRvb2xzL3Bvd2VydG9vbHMtbGFtYmRhLXB5dGhvbi8uZ2l0aHViL3dvcmtmbG93cy9wcmUtcmVsZWFzZS55bWxAcmVmcy9oZWFkcy9kZXZlbG9wMDgGCisGAQQBg78wARMEKgwoZmJkM2RkMWIxZjRiN2M3NGQ4Y2MxNDNkYWU3Y2VhYjUwZmM4Mjc2NjAYBgorBgEEAYO/MAEUBAoMCHNjaGVkdWxlMG4GCisGAQQBg78wARUEYAxeaHR0cHM6Ly9naXRodWIuY29tL2F3cy1wb3dlcnRvb2xzL3Bvd2VydG9vbHMtbGFtYmRhLXB5dGhvbi9hY3Rpb25zL3J1bnMvMTcyMzE4OTQ2MDcvYXR0ZW1wdHMvMTAWBgorBgEEAYO/MAEWBAgMBnB1YmxpYzCBiQYKKwYBBAHWeQIEAgR7BHkAdwB1AN09MGrGxxEyYxkeHJlnNwKiSl643jyt/4eKcoAvKe6OAAABmOVrmK4AAAQDAEYwRAIgDvtpX6h+gVDFH3+3Ev2ipHozXeM7hlZisazx3qzCD7kCIBSmiAcHCzP6GMhf2YYi4tsvEk9YferAE+fW+Ux/SKVEMAoGCCqGSM49BAMDA2kAMGYCMQDNwz91liyzW6+U1JKmAI13tA6AvIF9GHgcYROc651lQ65pBqzz3WK24Gutf/R+0XACMQDRSAuWkLqsp+R8+iA+J4iYl+MBHkUT9R5o0c+PwROudx5YH8N9dWd74EbmBSs7dtI="}, "tlogEntries":[{"logIndex":"433430184", "logId":{"keyId":"wNI9atQGlz+VWfO6LRygH4QUfY/8W4RFwiT5i5WRgB0="}, "kindVersion":{"kind":"dsse", "version":"0.0.1"}, "integratedTime":"1756195690", "inclusionPromise":{"signedEntryTimestamp":"MEUCIAkdi1DRDV91GtDh8I/XNiiHlxYWSydWz58q/BbU/l1+AiEApU35jeliv28AqDEsASdGYGM/T476HozUGvsZEXaMu+o="}, "inclusionProof":{"logIndex":"311525922", "rootHash":"a6sRHx1c40+ahSAg2pLyq0cUO6uflvjrKfRWciYn150=", "treeSize":"311525928", "hashes":["gQdoYPJygZpQT2331vbLmpNFa4aghVPhkBh3htEseUk=", "aVm9gg5SpTKkQ1l63QU+jHDbBQ9fJyl5aXd1a6qv5Z0=", "cYxf7beBd3YQ/a26me42lG664U2z6Xllp1SrNOjmlPk=", "LNPy7dDNFWvUCU9WhpHFeQrLaAA84LgrCuUxGdC5YkI=", "HK+MNjnBFczIYwXZlDjJasIif6G/mF2oPXeYTIPZ6PQ=", "ofBtQRCVRUW6hbb94zfo+TyiZKwZrgAVX3kXsFN2akQ=", "TPWf3pz+j7Vkn2NGqlf+29l/I5iJ6191WIL+va1y4e4=", "64HHGEve7ekQ9xvA5jgs+PPGwry+TpAHLkdyHf7v6vQ=", "QuAU3TyNAvVEcHz+j/oTSRYe1i/QqVxiwzI9oiuV8/U=", "wCCU7hO8zBe9mf+YE82KuXgzxyhnEK0FkeZe0lH3dZ4=", "vS7O4ozHIQZJWBiov+mkpI27GE8zAmVCEkRcP3NDyNE="], "checkpoint":{"envelope":"rekor.sigstore.dev - 1193050959916656506\n311525928\na6sRHx1c40+ahSAg2pLyq0cUO6uflvjrKfRWciYn150=\n\n— rekor.sigstore.dev wNI9ajBEAiB4qWgCNQ3dz9lmYjwBwsVFfVZsxsA8R+EysaZeNNPkEAIgVTotxz0dhu0SJpDd7+UzkVMCFOFF2+2scvB4smakH6U=\n"}}, "canonicalizedBody":"eyJhcGlWZXJzaW9uIjoiMC4wLjEiLCJraW5kIjoiZHNzZSIsInNwZWMiOnsiZW52ZWxvcGVIYXNoIjp7ImFsZ29yaXRobSI6InNoYTI1NiIsInZhbHVlIjoiY2NjZTQzYjFjMzIxYzk0N2M4YzNlOWE0NzVjNTM3OGU1NWJmYzBlMmNjMDgyZDhhN2Q2MTA4MmRlYzMxOGE4MiJ9LCJwYXlsb2FkSGFzaCI6eyJhbGdvcml0aG0iOiJzaGEyNTYiLCJ2YWx1ZSI6Ijg0Y2YwMzVlNmExNzFiOTU0ZDFmODFhYTc2MjliMWUxNDkwM2YwOTQ3NWI5ODI4OGQ0YWZmYzE3MmEzY2VmZWYifSwic2lnbmF0dXJlcyI6W3sic2lnbmF0dXJlIjoiTUVZQ0lRREZMOHlwNkJhWW1EaFd5dVZ6TUtVMmgyMHZYOE95b2N4aytoZ1pnWDQ3OFFJaEFPK1lhOUhmdzJadlVEOFNBVEpaaWhLU0syQ0RQdkRKVklkcFZzMWVXMVVlIiwidmVyaWZpZXIiOiJMUzB0TFMxQ1JVZEpUaUJEUlZKVVNVWkpRMEZVUlMwdExTMHRDazFKU1VoYWFrTkRRblYxWjBGM1NVSkJaMGxWVW5oRFZXUjVhMFYwU2xsVWIzRTNWbE41Y2tVMVJrSklNVGhSZDBObldVbExiMXBKZW1vd1JVRjNUWGNLVG5wRlZrMUNUVWRCTVZWRlEyaE5UV015Ykc1ak0xSjJZMjFWZFZwSFZqSk5ValIzU0VGWlJGWlJVVVJGZUZaNllWZGtlbVJIT1hsYVV6RndZbTVTYkFwamJURnNXa2RzYUdSSFZYZElhR05PVFdwVmQwOUVTVEpOUkdkM1QwUkZkMWRvWTA1TmFsVjNUMFJKTWsxRVozaFBSRVYzVjJwQlFVMUdhM2RGZDFsSUNrdHZXa2w2YWpCRFFWRlpTVXR2V2tsNmFqQkVRVkZqUkZGblFVVmtZek5STVZrdlpXcEROakJYVTB0cFdreHpOWEZ0ZVRoNFl6RnNXVmQyUzAxSU5qZ0tabWhUZFUxVmIwRTJXWGhaWm5RMWRWSnFWRzQwTkdKUlpsaDVSbXA0U0ZaaFVUWnRTR1pCY2xkUldVd3pZVkV2YUdGUFEwSm5iM2RuWjFsSFRVRTBSd3BCTVZWa1JIZEZRaTkzVVVWQmQwbElaMFJCVkVKblRsWklVMVZGUkVSQlMwSm5aM0pDWjBWR1FsRmpSRUY2UVdSQ1owNVdTRkUwUlVablVWVlRURmRpQ2pWa1RHbE9iVWd4TVVwRWVXMWpOMjU2Tkc5VVIzbDNkMGgzV1VSV1VqQnFRa0puZDBadlFWVXpPVkJ3ZWpGWmEwVmFZalZ4VG1wd1MwWlhhWGhwTkZrS1drUTRkMmRaVVVkQk1WVmtSVkZGUWk5M1VqWk5TR2xIWkcxb01HUklRbnBQYVRoMldqSnNNR0ZJVm1sTWJVNTJZbE01ZW1KSVRtaE1WMXA1V1ZjeGJBcGtNamw1WVhrNWVtSklUbWhNVjJSd1pFZG9NVmxwTVc1YVZ6VnNZMjFHTUdJelNYWk1iV1J3WkVkb01WbHBPVE5pTTBweVdtMTRkbVF6VFhaYU1sWjFDbHBZU21oa1J6bDVXREprYkdKdFZubGhWMDVtWXpKNGVsbFVUWFZsVnpGelVVaEtiRnB1VFhaa1IwWnVZM2s1TWsxcE5IaE1ha0YzVDFGWlMwdDNXVUlLUWtGSFJIWjZRVUpCVVZGeVlVaFNNR05JVFRaTWVUa3dZakowYkdKcE5XaFpNMUp3WWpJMWVreHRaSEJrUjJneFdXNVdlbHBZU21waU1qVXdXbGMxTUFwTWJVNTJZbFJCVjBKbmIzSkNaMFZGUVZsUEwwMUJSVU5DUVdoNldUSm9iRnBJVm5OYVZFRXlRbWR2Y2tKblJVVkJXVTh2VFVGRlJFSkRhRzFaYlZGNkNscEhVWGhaYWtadFRrZEpNMWw2WXpCYVJHaHFXWHBGTUUweVVtaGFWR1JxV2xkR2FVNVVRbTFaZW1kNVRucFpNazFDYTBkRGFYTkhRVkZSUW1jM09IY0tRVkZSUlVNeFFubGFVekZUV2xkNGJGbFlUbXhOUkZWSFEybHpSMEZSVVVKbk56aDNRVkZWUlVveVJqTmplVEYzWWpOa2JHTnVVblppTW5oNlRETkNkZ3BrTWxaNVpFYzVkbUpJVFhSaVIwWjBXVzFTYUV4WVFqVmtSMmgyWW1wQlowSm5iM0pDWjBWRlFWbFBMMDFCUlVkQ1FrcDVXbGRhZWt3eWFHeFpWMUo2Q2t3eVVteGtiVlp6WWpOQmQwOTNXVXRMZDFsQ1FrRkhSSFo2UVVKRFFWRjBSRU4wYjJSSVVuZGplbTkyVEROU2RtRXlWblZNYlVacVpFZHNkbUp1VFhVS1dqSnNNR0ZJVm1sa1dFNXNZMjFPZG1KdVVteGlibEYxV1RJNWRFMUpSMGRDWjI5eVFtZEZSVUZaVHk5TlFVVktRa2huVFdSdGFEQmtTRUo2VDJrNGRncGFNbXd3WVVoV2FVeHRUblppVXpsNllraE9hRXhYV25sWlZ6RnNaREk1ZVdGNU9YcGlTRTVvVEZka2NHUkhhREZaYVRGdVdsYzFiR050UmpCaU0wbDJDa3h0WkhCa1IyZ3hXV2s1TTJJelNuSmFiWGgyWkROTmRsb3lWblZhV0Vwb1pFYzVlVmd5Wkd4aWJWWjVZVmRPWm1NeWVIcFpWRTExWlZjeGMxRklTbXdLV201TmRtUkhSbTVqZVRreVRXazBlRXhxUVhkUFFWbExTM2RaUWtKQlIwUjJla0ZDUTJkUmNVUkRhRzFPTWxKclQwZE5NVTVIVFhsTlJGa3pXVzFHYlFwWmVrVjVXVEpGTTFsVVZURk9WR3N4V2tSV2JGcFViR2xPZWxWNVRVUlNhRTFDTUVkRGFYTkhRVkZSUW1jM09IZEJVWE5GUkhkM1Rsb3liREJoU0ZacENreFhhSFpqTTFKc1drUkNTMEpuYjNKQ1owVkZRVmxQTDAxQlJVMUNSSGROVDIxb01HUklRbnBQYVRoMldqSnNNR0ZJVm1sTWJVNTJZbE01YUdRelRYUUtZMGM1TTFwWVNqQmlNamx6WTNrNWQySXpaR3hqYmxKMllqSjRla3hYZUdoaVYwcHJXVk14ZDJWWVVtOWlNalIzVDBGWlMwdDNXVUpDUVVkRWRucEJRZ3BFVVZGeFJFTm9iVmx0VVhwYVIxRjRXV3BHYlU1SFNUTlplbU13V2tSb2FsbDZSVEJOTWxKb1dsUmthbHBYUm1sT1ZFSnRXWHBuZVU1NldUSk5RMGxIQ2tOcGMwZEJVVkZDWnpjNGQwRlJORVZHUVhkVFkyMVdiV041T1c5YVYwWnJZM2s1YTFwWVdteGlSemwzVFVKclIwTnBjMGRCVVZGQ1p6YzRkMEZST0VVS1EzZDNTazFxU1hoUFZFVTFUWHBqTlUxRVJVZERhWE5IUVZGUlFtYzNPSGRCVWtGRlNYZDNhR0ZJVWpCalNFMDJUSGs1Ym1GWVVtOWtWMGwxV1RJNWRBcE1Na1l6WTNreGQySXpaR3hqYmxKMllqSjRlazFDYTBkRGFYTkhRVkZSUW1jM09IZEJVa1ZGUTNkM1NrMVVTVFZOVkVrelRtcE5ORTFJT0VkRGFYTkhDa0ZSVVVKbk56aDNRVkpKUldOUmVIWmhTRkl3WTBoTk5reDVPVzVoV0ZKdlpGZEpkVmt5T1hSTU1rWXpZM2t4ZDJJelpHeGpibEoyWWpKNGVrd3pRbllLWkRKV2VXUkhPWFppU0UxMFlrZEdkRmx0VW1oTVdFSTFaRWRvZG1KcE9IVmFNbXd3WVVoV2FVd3paSFpqYlhSdFlrYzVNMk41T1hkamJWVjBZMjFXY3dwYVYwWjZXbE0xTldKWGVFRmpiVlp0WTNrNWIxcFhSbXRqZVRscldsaGFiR0pIT1hkTlJHZEhRMmx6UjBGUlVVSm5OemgzUVZKTlJVdG5kMjlhYlVwckNrMHlVbXROVjBsNFdtcFNhVTR5VFROT1IxRTBXVEpOZUU1RVRtdFpWMVV6V1RKV2FGbHFWWGRhYlUwMFRXcGpNazVxUVZsQ1oyOXlRbWRGUlVGWlR5OEtUVUZGVlVKQmIwMURTRTVxWVVkV2EyUlhlR3hOUnpSSFEybHpSMEZSVVVKbk56aDNRVkpWUlZsQmVHVmhTRkl3WTBoTk5reDVPVzVoV0ZKdlpGZEpkUXBaTWpsMFRESkdNMk41TVhkaU0yUnNZMjVTZG1JeWVIcE1NMEoyWkRKV2VXUkhPWFppU0UxMFlrZEdkRmx0VW1oTVdFSTFaRWRvZG1KcE9XaFpNMUp3Q21JeU5YcE1NMG94WW01TmRrMVVZM2xOZWtVMFQxUlJNazFFWTNaWldGSXdXbGN4ZDJSSVRYWk5WRUZYUW1kdmNrSm5SVVZCV1U4dlRVRkZWMEpCWjAwS1FtNUNNVmx0ZUhCWmVrTkNhVkZaUzB0M1dVSkNRVWhYWlZGSlJVRm5VamRDU0d0QlpIZENNVUZPTURsTlIzSkhlSGhGZVZsNGEyVklTbXh1VG5kTGFRcFRiRFkwTTJwNWRDODBaVXRqYjBGMlMyVTJUMEZCUVVKdFQxWnliVXMwUVVGQlVVUkJSVmwzVWtGSlowUjJkSEJZTm1ncloxWkVSa2d6S3pORmRqSnBDbkJJYjNwWVpVMDNhR3hhYVhOaGVuZ3pjWHBEUkRkclEwbENVMjFwUVdOSVEzcFFOa2ROYUdZeVdWbHBOSFJ6ZGtWck9WbG1aWEpCUlN0bVZ5dFZlQzhLVTB0V1JVMUJiMGREUTNGSFUwMDBPVUpCVFVSQk1tdEJUVWRaUTAxUlJFNTNlamt4YkdsNWVsYzJLMVV4U2t0dFFVa3hNM1JCTmtGMlNVWTVSMGhuWXdwWlVrOWpOalV4YkZFMk5YQkNjWHA2TTFkTE1qUkhkWFJtTDFJck1GaEJRMDFSUkZKVFFYVlhhMHh4YzNBclVqZ3JhVUVyU2pScFdXd3JUVUpJYTFWVUNqbFNOVzh3WXl0UWQxSlBkV1I0TlZsSU9FNDVaRmRrTnpSRlltMUNVM00zWkhSSlBRb3RMUzB0TFVWT1JDQkRSVkpVU1VaSlEwRlVSUzB0TFMwdENnPT0ifV19fQ=="}]}, "dsseEnvelope":{"payload":"eyJfdHlwZSI6Imh0dHBzOi8vaW4tdG90by5pby9TdGF0ZW1lbnQvdjAuMSIsInByZWRpY2F0ZVR5cGUiOiJodHRwczovL3Nsc2EuZGV2L3Byb3ZlbmFuY2UvdjAuMiIsInN1YmplY3QiOlt7Im5hbWUiOiIuL2F3c19sYW1iZGFfcG93ZXJ0b29scy0zLjE5LjFhOC1weTMtbm9uZS1hbnkud2hsIiwiZGlnZXN0Ijp7InNoYTI1NiI6IjMyNjRmNzFhYjM2NWUwYjJjODFkYTFkMzYwOTBiNDRiY2VmZTE4OTQwODc5ZGU0ZmNmYjI4Y2M0ZmIwOWU1MWEifX0seyJuYW1lIjoiLi9hd3NfbGFtYmRhX3Bvd2VydG9vbHMtMy4xOS4xYTgudGFyLmd6IiwiZGlnZXN0Ijp7InNoYTI1NiI6Ijc3NTI3Mjk4M2FjYWNiYTRkMWZlMmI4MjYzZWYzMDgwY2MzZWRlZjRkZTQwMzRiNDQwYTc0ZDNhNzE1MDllMDcifX1dLCJwcmVkaWNhdGUiOnsiYnVpbGRlciI6eyJpZCI6Imh0dHBzOi8vZ2l0aHViLmNvbS9zbHNhLWZyYW1ld29yay9zbHNhLWdpdGh1Yi1nZW5lcmF0b3IvLmdpdGh1Yi93b3JrZmxvd3MvZ2VuZXJhdG9yX2dlbmVyaWNfc2xzYTMueW1sQHJlZnMvdGFncy92Mi4xLjAifSwiYnVpbGRUeXBlIjoiaHR0cHM6Ly9naXRodWIuY29tL3Nsc2EtZnJhbWV3b3JrL3Nsc2EtZ2l0aHViLWdlbmVyYXRvci9nZW5lcmljQHYxIiwiaW52b2NhdGlvbiI6eyJjb25maWdTb3VyY2UiOnsidXJpIjoiZ2l0K2h0dHBzOi8vZ2l0aHViLmNvbS9hd3MtcG93ZXJ0b29scy9wb3dlcnRvb2xzLWxhbWJkYS1weXRob25AcmVmcy9oZWFkcy9kZXZlbG9wIiwiZGlnZXN0Ijp7InNoYTEiOiJmYmQzZGQxYjFmNGI3Yzc0ZDhjYzE0M2RhZTdjZWFiNTBmYzgyNzY2In0sImVudHJ5UG9pbnQiOiIuZ2l0aHViL3dvcmtmbG93cy9wcmUtcmVsZWFzZS55bWwifSwicGFyYW1ldGVycyI6eyJ2YXJzIjp7fX0sImVudmlyb25tZW50Ijp7ImdpdGh1Yl9hY3RvciI6ImxlYW5kcm9kYW1hc2NlbmEiLCJnaXRodWJfYWN0b3JfaWQiOiI0Mjk1MTczIiwiZ2l0aHViX2Jhc2VfcmVmIjoiIiwiZ2l0aHViX2V2ZW50X25hbWUiOiJzY2hlZHVsZSIsImdpdGh1Yl9ldmVudF9wYXlsb2FkIjp7ImVudGVycHJpc2UiOnsiYXZhdGFyX3VybCI6Imh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vYi8xMjkwP3Y9NCIsImNyZWF0ZWRfYXQiOiIyMDE5LTExLTEzVDE4OjA1OjQxWiIsImRlc2NyaXB0aW9uIjoiIiwiaHRtbF91cmwiOiJodHRwczovL2dpdGh1Yi5jb20vZW50ZXJwcmlzZXMvYW1hem9uIiwiaWQiOjEyOTAsIm5hbWUiOiJBbWF6b24iLCJub2RlX2lkIjoiTURFd09rVnVkR1Z5Y0hKcGMyVXhNamt3Iiwic2x1ZyI6ImFtYXpvbiIsInVwZGF0ZWRfYXQiOiIyMDI1LTA4LTEyVDIwOjU5OjE0WiIsIndlYnNpdGVfdXJsIjoiaHR0cHM6Ly93d3cuYW1hem9uLmNvbS8ifSwib3JnYW5pemF0aW9uIjp7ImF2YXRhcl91cmwiOiJodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTI5MTI3NjM4P3Y9NCIsImRlc2NyaXB0aW9uIjoiIiwiZXZlbnRzX3VybCI6Imh0dHBzOi8vaW50ZXJuYWwtYXBpLnNlcnZpY2UuaWFkLmdpdGh1Yi5uZXQvb3Jncy9hd3MtcG93ZXJ0b29scy9ldmVudHMiLCJob29rc191cmwiOiJodHRwczovL2ludGVybmFsLWFwaS5zZXJ2aWNlLmlhZC5naXRodWIubmV0L29yZ3MvYXdzLXBvd2VydG9vbHMvaG9va3MiLCJpZCI6MTI5MTI3NjM4LCJpc3N1ZXNfdXJsIjoiaHR0cHM6Ly9pbnRlcm5hbC1hcGkuc2VydmljZS5pYWQuZ2l0aHViLm5ldC9vcmdzL2F3cy1wb3dlcnRvb2xzL2lzc3VlcyIsImxvZ2luIjoiYXdzLXBvd2VydG9vbHMiLCJtZW1iZXJzX3VybCI6Imh0dHBzOi8vaW50ZXJuYWwtYXBpLnNlcnZpY2UuaWFkLmdpdGh1Yi5uZXQvb3Jncy9hd3MtcG93ZXJ0b29scy9tZW1iZXJzey9tZW1iZXJ9Iiwibm9kZV9pZCI6Ik9fa2dET0I3SlUxZyIsInB1YmxpY19tZW1iZXJzX3VybCI6Imh0dHBzOi8vaW50ZXJuYWwtYXBpLnNlcnZpY2UuaWFkLmdpdGh1Yi5uZXQvb3Jncy9hd3MtcG93ZXJ0b29scy9wdWJsaWNfbWVtYmVyc3svbWVtYmVyfSIsInJlcG9zX3VybCI6Imh0dHBzOi8vaW50ZXJuYWwtYXBpLnNlcnZpY2UuaWFkLmdpdGh1Yi5uZXQvb3Jncy9hd3MtcG93ZXJ0b29scy9yZXBvcyIsInVybCI6Imh0dHBzOi8vaW50ZXJuYWwtYXBpLnNlcnZpY2UuaWFkLmdpdGh1Yi5uZXQvb3Jncy9hd3MtcG93ZXJ0b29scyJ9LCJyZXBvc2l0b3J5Ijp7ImFsbG93X2ZvcmtpbmciOnRydWUsImFyY2hpdmVfdXJsIjoiaHR0cHM6Ly9pbnRlcm5hbC1hcGkuc2VydmljZS5pYWQuZ2l0aHViLm5ldC9yZXBvcy9hd3MtcG93ZXJ0b29scy9wb3dlcnRvb2xzLWxhbWJkYS1weXRob24ve2FyY2hpdmVfZm9ybWF0fXsvcmVmfSIsImFyY2hpdmVkIjpmYWxzZSwiYXNzaWduZWVzX3VybCI6Imh0dHBzOi8vaW50ZXJuYWwtYXBpLnNlcnZpY2UuaWFkLmdpdGh1Yi5uZXQvcmVwb3MvYXdzLXBvd2VydG9vbHMvcG93ZXJ0b29scy1sYW1iZGEtcHl0aG9uL2Fzc2lnbmVlc3svdXNlcn0iLCJibG9ic191cmwiOiJodHRwczovL2ludGVybmFsLWFwaS5zZXJ2aWNlLmlhZC5naXRodWIubmV0L3JlcG9zL2F3cy1wb3dlcnRvb2xzL3Bvd2VydG9vbHMtbGFtYmRhLXB5dGhvbi9naXQvYmxvYnN7L3NoYX0iLCJicmFuY2hlc191cmwiOiJodHRwczovL2ludGVybmFsLWFwaS5zZXJ2aWNlLmlhZC5naXRodWIubmV0L3JlcG9zL2F3cy1wb3dlcnRvb2xzL3Bvd2VydG9vbHMtbGFtYmRhLXB5dGhvbi9icmFuY2hlc3svYnJhbmNofSIsImNsb25lX3VybCI6Imh0dHBzOi8vZ2l0aHViLmNvbS9hd3MtcG93ZXJ0b29scy9wb3dlcnRvb2xzLWxhbWJkYS1weXRob24uZ2l0IiwiY29sbGFib3JhdG9yc191cmwiOiJodHRwczovL2ludGVybmFsLWFwaS5zZXJ2aWNlLmlhZC5naXRodWIubmV0L3JlcG9zL2F3cy1wb3dlcnRvb2xzL3Bvd2VydG9vbHMtbGFtYmRhLXB5dGhvbi9jb2xsYWJvcmF0b3Jzey9jb2xsYWJvcmF0b3J9IiwiY29tbWVudHNfdXJsIjoiaHR0cHM6Ly9pbnRlcm5hbC1hcGkuc2VydmljZS5pYWQuZ2l0aHViLm5ldC9yZXBvcy9hd3MtcG93ZXJ0b29scy9wb3dlcnRvb2xzLWxhbWJkYS1weXRob24vY29tbWVudHN7L251bWJlcn0iLCJjb21taXRzX3VybCI6Imh0dHBzOi8vaW50ZXJuYWwtYXBpLnNlcnZpY2UuaWFkLmdpdGh1Yi5uZXQvcmVwb3MvYXdzLXBvd2VydG9vbHMvcG93ZXJ0b29scy1sYW1iZGEtcHl0aG9uL2NvbW1pdHN7L3NoYX0iLCJjb21wYXJlX3VybCI6Imh0dHBzOi8vaW50ZXJuYWwtYXBpLnNlcnZpY2UuaWFkLmdpdGh1Yi5uZXQvcmVwb3MvYXdzLXBvd2VydG9vbHMvcG93ZXJ0b29scy1sYW1iZGEtcHl0aG9uL2NvbXBhcmUve2Jhc2V9Li4ue2hlYWR9IiwiY29udGVudHNfdXJsIjoiaHR0cHM6Ly9pbnRlcm5hbC1hcGkuc2VydmljZS5pYWQuZ2l0aHViLm5ldC9yZXBvcy9hd3MtcG93ZXJ0b29scy9wb3dlcnRvb2xzLWxhbWJkYS1weXRob24vY29udGVudHMveytwYXRofSIsImNvbnRyaWJ1dG9yc191cmwiOiJodHRwczovL2ludGVybmFsLWFwaS5zZXJ2aWNlLmlhZC5naXRodWIubmV0L3JlcG9zL2F3cy1wb3dlcnRvb2xzL3Bvd2VydG9vbHMtbGFtYmRhLXB5dGhvbi9jb250cmlidXRvcnMiLCJjcmVhdGVkX2F0IjoiMjAxOS0xMS0xNVQxMjoyNjoxMloiLCJjdXN0b21fcHJvcGVydGllcyI6eyJzdGFnaW5nIjoiZmFsc2UiLCJ2aXNpYmlsaXR5LWFsbG93LWludGVybmFsIjoiZmFsc2UiLCJ2aXNpYmlsaXR5LWFsbG93LXByaXZhdGUiOiJmYWxzZSIsInZpc2liaWxpdHktYWxsb3ctcHVibGljIjoidHJ1ZSJ9LCJkZWZhdWx0X2JyYW5jaCI6ImRldmVsb3AiLCJkZXBsb3ltZW50c191cmwiOiJodHRwczovL2ludGVybmFsLWFwaS5zZXJ2aWNlLmlhZC5naXRodWIubmV0L3JlcG9zL2F3cy1wb3dlcnRvb2xzL3Bvd2VydG9vbHMtbGFtYmRhLXB5dGhvbi9kZXBsb3ltZW50cyIsImRlc2NyaXB0aW9uIjoiQSBkZXZlbG9wZXIgdG9vbGtpdCB0byBpbXBsZW1lbnQgU2VydmVybGVzcyBiZXN0IHByYWN0aWNlcyBhbmQgaW5jcmVhc2UgZGV2ZWxvcGVyIHZlbG9jaXR5LiIsImRpc2FibGVkIjpmYWxzZSwiZG93bmxvYWRzX3VybCI6Imh0dHBzOi8vaW50ZXJuYWwtYXBpLnNlcnZpY2UuaWFkLmdpdGh1Yi5uZXQvcmVwb3MvYXdzLXBvd2VydG9vbHMvcG93ZXJ0b29scy1sYW1iZGEtcHl0aG9uL2Rvd25sb2FkcyIsImV2ZW50c191cmwiOiJodHRwczovL2ludGVybmFsLWFwaS5zZXJ2aWNlLmlhZC5naXRodWIubmV0L3JlcG9zL2F3cy1wb3dlcnRvb2xzL3Bvd2VydG9vbHMtbGFtYmRhLXB5dGhvbi9ldmVudHMiLCJmb3JrIjpmYWxzZSwiZm9ya3MiOjQ0NywiZm9ya3NfY291bnQiOjQ0NywiZm9ya3NfdXJsIjoiaHR0cHM6Ly9pbnRlcm5hbC1hcGkuc2VydmljZS5pYWQuZ2l0aHViLm5ldC9yZXBvcy9hd3MtcG93ZXJ0b29scy9wb3dlcnRvb2xzLWxhbWJkYS1weXRob24vZm9ya3MiLCJmdWxsX25hbWUiOiJhd3MtcG93ZXJ0b29scy9wb3dlcnRvb2xzLWxhbWJkYS1weXRob24iLCJnaXRfY29tbWl0c191cmwiOiJodHRwczovL2ludGVybmFsLWFwaS5zZXJ2aWNlLmlhZC5naXRodWIubmV0L3JlcG9zL2F3cy1wb3dlcnRvb2xzL3Bvd2VydG9vbHMtbGFtYmRhLXB5dGhvbi9naXQvY29tbWl0c3svc2hhfSIsImdpdF9yZWZzX3VybCI6Imh0dHBzOi8vaW50ZXJuYWwtYXBpLnNlcnZpY2UuaWFkLmdpdGh1Yi5uZXQvcmVwb3MvYXdzLXBvd2VydG9vbHMvcG93ZXJ0b29scy1sYW1iZGEtcHl0aG9uL2dpdC9yZWZzey9zaGF9IiwiZ2l0X3RhZ3NfdXJsIjoiaHR0cHM6Ly9pbnRlcm5hbC1hcGkuc2VydmljZS5pYWQuZ2l0aHViLm5ldC9yZXBvcy9hd3MtcG93ZXJ0b29scy9wb3dlcnRvb2xzLWxhbWJkYS1weXRob24vZ2l0L3RhZ3N7L3NoYX0iLCJnaXRfdXJsIjoiZ2l0Oi8vZ2l0aHViLmNvbS9hd3MtcG93ZXJ0b29scy9wb3dlcnRvb2xzLWxhbWJkYS1weXRob24uZ2l0IiwiaGFzX2Rpc2N1c3Npb25zIjp0cnVlLCJoYXNfZG93bmxvYWRzIjp0cnVlLCJoYXNfaXNzdWVzIjp0cnVlLCJoYXNfcGFnZXMiOmZhbHNlLCJoYXNfcHJvamVjdHMiOnRydWUsImhhc193aWtpIjpmYWxzZSwiaG9tZXBhZ2UiOiJodHRwczovL2RvY3MucG93ZXJ0b29scy5hd3MuZGV2L2xhbWJkYS9weXRob24vbGF0ZXN0LyIsImhvb2tzX3VybCI6Imh0dHBzOi8vaW50ZXJuYWwtYXBpLnNlcnZpY2UuaWFkLmdpdGh1Yi5uZXQvcmVwb3MvYXdzLXBvd2VydG9vbHMvcG93ZXJ0b29scy1sYW1iZGEtcHl0aG9uL2hvb2tzIiwiaHRtbF91cmwiOiJodHRwczovL2dpdGh1Yi5jb20vYXdzLXBvd2VydG9vbHMvcG93ZXJ0b29scy1sYW1iZGEtcHl0aG9uIiwiaWQiOjIyMTkxOTM3OSwiaXNfdGVtcGxhdGUiOmZhbHNlLCJpc3N1ZV9jb21tZW50X3VybCI6Imh0dHBzOi8vaW50ZXJuYWwtYXBpLnNlcnZpY2UuaWFkLmdpdGh1Yi5uZXQvcmVwb3MvYXdzLXBvd2VydG9vbHMvcG93ZXJ0b29scy1sYW1iZGEtcHl0aG9uL2lzc3Vlcy9jb21tZW50c3svbnVtYmVyfSIsImlzc3VlX2V2ZW50c191cmwiOiJodHRwczovL2ludGVybmFsLWFwaS5zZXJ2aWNlLmlhZC5naXRodWIubmV0L3JlcG9zL2F3cy1wb3dlcnRvb2xzL3Bvd2VydG9vbHMtbGFtYmRhLXB5dGhvbi9pc3N1ZXMvZXZlbnRzey9udW1iZXJ9IiwiaXNzdWVzX3VybCI6Imh0dHBzOi8vaW50ZXJuYWwtYXBpLnNlcnZpY2UuaWFkLmdpdGh1Yi5uZXQvcmVwb3MvYXdzLXBvd2VydG9vbHMvcG93ZXJ0b29scy1sYW1iZGEtcHl0aG9uL2lzc3Vlc3svbnVtYmVyfSIsImtleXNfdXJsIjoiaHR0cHM6Ly9pbnRlcm5hbC1hcGkuc2VydmljZS5pYWQuZ2l0aHViLm5ldC9yZXBvcy9hd3MtcG93ZXJ0b29scy9wb3dlcnRvb2xzLWxhbWJkYS1weXRob24va2V5c3sva2V5X2lkfSIsImxhYmVsc191cmwiOiJodHRwczovL2ludGVybmFsLWFwaS5zZXJ2aWNlLmlhZC5naXRodWIubmV0L3JlcG9zL2F3cy1wb3dlcnRvb2xzL3Bvd2VydG9vbHMtbGFtYmRhLXB5dGhvbi9sYWJlbHN7L25hbWV9IiwibGFuZ3VhZ2UiOiJQeXRob24iLCJsYW5ndWFnZXNfdXJsIjoiaHR0cHM6Ly9pbnRlcm5hbC1hcGkuc2VydmljZS5pYWQuZ2l0aHViLm5ldC9yZXBvcy9hd3MtcG93ZXJ0b29scy9wb3dlcnRvb2xzLWxhbWJkYS1weXRob24vbGFuZ3VhZ2VzIiwibGljZW5zZSI6eyJrZXkiOiJtaXQtMCIsIm5hbWUiOiJNSVQgTm8gQXR0cmlidXRpb24iLCJub2RlX2lkIjoiTURjNlRHbGpaVzV6WlRReCIsInNwZHhfaWQiOiJNSVQtMCIsInVybCI6Imh0dHBzOi8vaW50ZXJuYWwtYXBpLnNlcnZpY2UuaWFkLmdpdGh1Yi5uZXQvbGljZW5zZXMvbWl0LTAifSwibWVyZ2VzX3VybCI6Imh0dHBzOi8vaW50ZXJuYWwtYXBpLnNlcnZpY2UuaWFkLmdpdGh1Yi5uZXQvcmVwb3MvYXdzLXBvd2VydG9vbHMvcG93ZXJ0b29scy1sYW1iZGEtcHl0aG9uL21lcmdlcyIsIm1pbGVzdG9uZXNfdXJsIjoiaHR0cHM6Ly9pbnRlcm5hbC1hcGkuc2VydmljZS5pYWQuZ2l0aHViLm5ldC9yZXBvcy9hd3MtcG93ZXJ0b29scy9wb3dlcnRvb2xzLWxhbWJkYS1weXRob24vbWlsZXN0b25lc3svbnVtYmVyfSIsIm1pcnJvcl91cmwiOm51bGwsIm5hbWUiOiJwb3dlcnRvb2xzLWxhbWJkYS1weXRob24iLCJub2RlX2lkIjoiTURFd09sSmxjRzl6YVhSdmNua3lNakU1TVRrek56az0iLCJub3RpZmljYXRpb25zX3VybCI6Imh0dHBzOi8vaW50ZXJuYWwtYXBpLnNlcnZpY2UuaWFkLmdpdGh1Yi5uZXQvcmVwb3MvYXdzLXBvd2VydG9vbHMvcG93ZXJ0b29scy1sYW1iZGEtcHl0aG9uL25vdGlmaWNhdGlvbnN7P3NpbmNlLGFsbCxwYXJ0aWNpcGF0aW5nfSIsIm9wZW5faXNzdWVzIjo1NSwib3Blbl9pc3N1ZXNfY291bnQiOjU1LCJvd25lciI6eyJhdmF0YXJfdXJsIjoiaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzEyOTEyNzYzOD92PTQiLCJldmVudHNfdXJsIjoiaHR0cHM6Ly9pbnRlcm5hbC1hcGkuc2VydmljZS5pYWQuZ2l0aHViLm5ldC91c2Vycy9hd3MtcG93ZXJ0b29scy9ldmVudHN7L3ByaXZhY3l9IiwiZm9sbG93ZXJzX3VybCI6Imh0dHBzOi8vaW50ZXJuYWwtYXBpLnNlcnZpY2UuaWFkLmdpdGh1Yi5uZXQvdXNlcnMvYXdzLXBvd2VydG9vbHMvZm9sbG93ZXJzIiwiZm9sbG93aW5nX3VybCI6Imh0dHBzOi8vaW50ZXJuYWwtYXBpLnNlcnZpY2UuaWFkLmdpdGh1Yi5uZXQvdXNlcnMvYXdzLXBvd2VydG9vbHMvZm9sbG93aW5ney9vdGhlcl91c2VyfSIsImdpc3RzX3VybCI6Imh0dHBzOi8vaW50ZXJuYWwtYXBpLnNlcnZpY2UuaWFkLmdpdGh1Yi5uZXQvdXNlcnMvYXdzLXBvd2VydG9vbHMvZ2lzdHN7L2dpc3RfaWR9IiwiZ3JhdmF0YXJfaWQiOiIiLCJodG1sX3VybCI6Imh0dHBzOi8vZ2l0aHViLmNvbS9hd3MtcG93ZXJ0b29scyIsImlkIjoxMjkxMjc2MzgsImxvZ2luIjoiYXdzLXBvd2VydG9vbHMiLCJub2RlX2lkIjoiT19rZ0RPQjdKVTFnIiwib3JnYW5pemF0aW9uc191cmwiOiJodHRwczovL2ludGVybmFsLWFwaS5zZXJ2aWNlLmlhZC5naXRodWIubmV0L3VzZXJzL2F3cy1wb3dlcnRvb2xzL29yZ3MiLCJyZWNlaXZlZF9ldmVudHNfdXJsIjoiaHR0cHM6Ly9pbnRlcm5hbC1hcGkuc2VydmljZS5pYWQuZ2l0aHViLm5ldC91c2Vycy9hd3MtcG93ZXJ0b29scy9yZWNlaXZlZF9ldmVudHMiLCJyZXBvc191cmwiOiJodHRwczovL2ludGVybmFsLWFwaS5zZXJ2aWNlLmlhZC5naXRodWIubmV0L3VzZXJzL2F3cy1wb3dlcnRvb2xzL3JlcG9zIiwic2l0ZV9hZG1pbiI6ZmFsc2UsInN0YXJyZWRfdXJsIjoiaHR0cHM6Ly9pbnRlcm5hbC1hcGkuc2VydmljZS5pYWQuZ2l0aHViLm5ldC91c2Vycy9hd3MtcG93ZXJ0b29scy9zdGFycmVkey9vd25lcn17L3JlcG99Iiwic3Vic2NyaXB0aW9uc191cmwiOiJodHRwczovL2ludGVybmFsLWFwaS5zZXJ2aWNlLmlhZC5naXRodWIubmV0L3VzZXJzL2F3cy1wb3dlcnRvb2xzL3N1YnNjcmlwdGlvbnMiLCJ0eXBlIjoiT3JnYW5pemF0aW9uIiwidXJsIjoiaHR0cHM6Ly9pbnRlcm5hbC1hcGkuc2VydmljZS5pYWQuZ2l0aHViLm5ldC91c2Vycy9hd3MtcG93ZXJ0b29scyIsInVzZXJfdmlld190eXBlIjoicHVibGljIn0sInByaXZhdGUiOmZhbHNlLCJwdWxsc191cmwiOiJodHRwczovL2ludGVybmFsLWFwaS5zZXJ2aWNlLmlhZC5naXRodWIubmV0L3JlcG9zL2F3cy1wb3dlcnRvb2xzL3Bvd2VydG9vbHMtbGFtYmRhLXB5dGhvbi9wdWxsc3svbnVtYmVyfSIsInB1c2hlZF9hdCI6IjIwMjUtMDgtMjVUMTI6MDQ6MTVaIiwicmVsZWFzZXNfdXJsIjoiaHR0cHM6Ly9pbnRlcm5hbC1hcGkuc2VydmljZS5pYWQuZ2l0aHViLm5ldC9yZXBvcy9hd3MtcG93ZXJ0b29scy9wb3dlcnRvb2xzLWxhbWJkYS1weXRob24vcmVsZWFzZXN7L2lkfSIsInNpemUiOjEzMTExNywic3NoX3VybCI6ImdpdEBnaXRodWIuY29tOmF3cy1wb3dlcnRvb2xzL3Bvd2VydG9vbHMtbGFtYmRhLXB5dGhvbi5naXQiLCJzdGFyZ2F6ZXJzX2NvdW50IjozMTI4LCJzdGFyZ2F6ZXJzX3VybCI6Imh0dHBzOi8vaW50ZXJuYWwtYXBpLnNlcnZpY2UuaWFkLmdpdGh1Yi5uZXQvcmVwb3MvYXdzLXBvd2VydG9vbHMvcG93ZXJ0b29scy1sYW1iZGEtcHl0aG9uL3N0YXJnYXplcnMiLCJzdGF0dXNlc191cmwiOiJodHRwczovL2ludGVybmFsLWFwaS5zZXJ2aWNlLmlhZC5naXRodWIubmV0L3JlcG9zL2F3cy1wb3dlcnRvb2xzL3Bvd2VydG9vbHMtbGFtYmRhLXB5dGhvbi9zdGF0dXNlcy97c2hhfSIsInN1YnNjcmliZXJzX3VybCI6Imh0dHBzOi8vaW50ZXJuYWwtYXBpLnNlcnZpY2UuaWFkLmdpdGh1Yi5uZXQvcmVwb3MvYXdzLXBvd2VydG9vbHMvcG93ZXJ0b29scy1sYW1iZGEtcHl0aG9uL3N1YnNjcmliZXJzIiwic3Vic2NyaXB0aW9uX3VybCI6Imh0dHBzOi8vaW50ZXJuYWwtYXBpLnNlcnZpY2UuaWFkLmdpdGh1Yi5uZXQvcmVwb3MvYXdzLXBvd2VydG9vbHMvcG93ZXJ0b29scy1sYW1iZGEtcHl0aG9uL3N1YnNjcmlwdGlvbiIsInN2bl91cmwiOiJodHRwczovL2dpdGh1Yi5jb20vYXdzLXBvd2VydG9vbHMvcG93ZXJ0b29scy1sYW1iZGEtcHl0aG9uIiwidGFnc191cmwiOiJodHRwczovL2ludGVybmFsLWFwaS5zZXJ2aWNlLmlhZC5naXRodWIubmV0L3JlcG9zL2F3cy1wb3dlcnRvb2xzL3Bvd2VydG9vbHMtbGFtYmRhLXB5dGhvbi90YWdzIiwidGVhbXNfdXJsIjoiaHR0cHM6Ly9pbnRlcm5hbC1hcGkuc2VydmljZS5pYWQuZ2l0aHViLm5ldC9yZXBvcy9hd3MtcG93ZXJ0b29scy9wb3dlcnRvb2xzLWxhbWJkYS1weXRob24vdGVhbXMiLCJ0b3BpY3MiOlsiYXdzIiwiYXdzLWxhbWJkYSIsImxhbWJkYSIsInB5dGhvbiIsInNlcnZlcmxlc3MiXSwidHJlZXNfdXJsIjoiaHR0cHM6Ly9pbnRlcm5hbC1hcGkuc2VydmljZS5pYWQuZ2l0aHViLm5ldC9yZXBvcy9hd3MtcG93ZXJ0b29scy9wb3dlcnRvb2xzLWxhbWJkYS1weXRob24vZ2l0L3RyZWVzey9zaGF9IiwidXBkYXRlZF9hdCI6IjIwMjUtMDgtMjVUMTI6MDQ6MDFaIiwidXJsIjoiaHR0cHM6Ly9pbnRlcm5hbC1hcGkuc2VydmljZS5pYWQuZ2l0aHViLm5ldC9yZXBvcy9hd3MtcG93ZXJ0b29scy9wb3dlcnRvb2xzLWxhbWJkYS1weXRob24iLCJ2aXNpYmlsaXR5IjoicHVibGljIiwid2F0Y2hlcnMiOjMxMjgsIndhdGNoZXJzX2NvdW50IjozMTI4LCJ3ZWJfY29tbWl0X3NpZ25vZmZfcmVxdWlyZWQiOnRydWV9LCJzY2hlZHVsZSI6IjAgOCAqICogMS01Iiwid29ya2Zsb3ciOiIuZ2l0aHViL3dvcmtmbG93cy9wcmUtcmVsZWFzZS55bWwifSwiZ2l0aHViX2hlYWRfcmVmIjoiIiwiZ2l0aHViX3JlZiI6InJlZnMvaGVhZHMvZGV2ZWxvcCIsImdpdGh1Yl9yZWZfdHlwZSI6ImJyYW5jaCIsImdpdGh1Yl9yZXBvc2l0b3J5X2lkIjoiMjIxOTE5Mzc5IiwiZ2l0aHViX3JlcG9zaXRvcnlfb3duZXIiOiJhd3MtcG93ZXJ0b29scyIsImdpdGh1Yl9yZXBvc2l0b3J5X293bmVyX2lkIjoiMTI5MTI3NjM4IiwiZ2l0aHViX3J1bl9hdHRlbXB0IjoiMSIsImdpdGh1Yl9ydW5faWQiOiIxNzIzMTg5NDYwNyIsImdpdGh1Yl9ydW5fbnVtYmVyIjoiMzE0IiwiZ2l0aHViX3NoYTEiOiJmYmQzZGQxYjFmNGI3Yzc0ZDhjYzE0M2RhZTdjZWFiNTBmYzgyNzY2In19LCJtZXRhZGF0YSI6eyJidWlsZEludm9jYXRpb25JRCI6IjE3MjMxODk0NjA3LTEiLCJjb21wbGV0ZW5lc3MiOnsicGFyYW1ldGVycyI6dHJ1ZSwiZW52aXJvbm1lbnQiOmZhbHNlLCJtYXRlcmlhbHMiOmZhbHNlfSwicmVwcm9kdWNpYmxlIjpmYWxzZX0sIm1hdGVyaWFscyI6W3sidXJpIjoiZ2l0K2h0dHBzOi8vZ2l0aHViLmNvbS9hd3MtcG93ZXJ0b29scy9wb3dlcnRvb2xzLWxhbWJkYS1weXRob25AcmVmcy9oZWFkcy9kZXZlbG9wIiwiZGlnZXN0Ijp7InNoYTEiOiJmYmQzZGQxYjFmNGI3Yzc0ZDhjYzE0M2RhZTdjZWFiNTBmYzgyNzY2In19XX19", "payloadType":"application/vnd.in-toto+json", "signatures":[{"sig":"MEYCIQDFL8yp6BaYmDhWyuVzMKU2h20vX8Oyocxk+hgZgX478QIhAO+Ya9Hfw2ZvUD8SATJZihKSK2CDPvDJVIdpVs1eW1Ue"}]}} \ No newline at end of file diff --git a/provenance/3.19.1a9/multiple.intoto.jsonl b/provenance/3.19.1a9/multiple.intoto.jsonl new file mode 100644 index 00000000000..d7a8414124e --- /dev/null +++ b/provenance/3.19.1a9/multiple.intoto.jsonl @@ -0,0 +1 @@ +{"mediaType":"application/vnd.dev.sigstore.bundle.v0.3+json", "verificationMaterial":{"certificate":{"rawBytes":"MIIHZzCCBuygAwIBAgIURbkiHcc0k9yVs3K+oU7icnCUz0swCgYIKoZIzj0EAwMwNzEVMBMGA1UEChMMc2lnc3RvcmUuZGV2MR4wHAYDVQQDExVzaWdzdG9yZS1pbnRlcm1lZGlhdGUwHhcNMjUwODI3MDgwNzM3WhcNMjUwODI3MDgxNzM3WjAAMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEclI/u3GdT9X11ozQS9XzSVdJDBx0A0NaquydbEMXezWCRTtRkWhR7jkElR5bWeSqZh5MAzdRqdfRaNjbRQDgzaOCBgswggYHMA4GA1UdDwEB/wQEAwIHgDATBgNVHSUEDDAKBggrBgEFBQcDAzAdBgNVHQ4EFgQUWUYPLAJrJP4T9c0Xo0CjDJhH1U4wHwYDVR0jBBgwFoAU39Ppz1YkEZb5qNjpKFWixi4YZD8wgYQGA1UdEQEB/wR6MHiGdmh0dHBzOi8vZ2l0aHViLmNvbS9zbHNhLWZyYW1ld29yay9zbHNhLWdpdGh1Yi1nZW5lcmF0b3IvLmdpdGh1Yi93b3JrZmxvd3MvZ2VuZXJhdG9yX2dlbmVyaWNfc2xzYTMueW1sQHJlZnMvdGFncy92Mi4xLjAwOQYKKwYBBAGDvzABAQQraHR0cHM6Ly90b2tlbi5hY3Rpb25zLmdpdGh1YnVzZXJjb250ZW50LmNvbTAWBgorBgEEAYO/MAECBAhzY2hlZHVsZTA2BgorBgEEAYO/MAEDBCg4MWI1MGVkMmE0MGI4MWE4ZTk3YzZlYjY5NTFmMDhjYjM3NDJjMzllMBkGCisGAQQBg78wAQQEC1ByZS1SZWxlYXNlMDUGCisGAQQBg78wAQUEJ2F3cy1wb3dlcnRvb2xzL3Bvd2VydG9vbHMtbGFtYmRhLXB5dGhvbjAgBgorBgEEAYO/MAEGBBJyZWZzL2hlYWRzL2RldmVsb3AwOwYKKwYBBAGDvzABCAQtDCtodHRwczovL3Rva2VuLmFjdGlvbnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tMIGGBgorBgEEAYO/MAEJBHgMdmh0dHBzOi8vZ2l0aHViLmNvbS9zbHNhLWZyYW1ld29yay9zbHNhLWdpdGh1Yi1nZW5lcmF0b3IvLmdpdGh1Yi93b3JrZmxvd3MvZ2VuZXJhdG9yX2dlbmVyaWNfc2xzYTMueW1sQHJlZnMvdGFncy92Mi4xLjAwOAYKKwYBBAGDvzABCgQqDChmN2RkOGM1NGMyMDY3YmFmYzEyY2E3YTU1NTk1ZDVlZTliNzUyMDRhMB0GCisGAQQBg78wAQsEDwwNZ2l0aHViLWhvc3RlZDBKBgorBgEEAYO/MAEMBDwMOmh0dHBzOi8vZ2l0aHViLmNvbS9hd3MtcG93ZXJ0b29scy9wb3dlcnRvb2xzLWxhbWJkYS1weXRob24wOAYKKwYBBAGDvzABDQQqDCg4MWI1MGVkMmE0MGI4MWE4ZTk3YzZlYjY5NTFmMDhjYjM3NDJjMzllMCIGCisGAQQBg78wAQ4EFAwScmVmcy9oZWFkcy9kZXZlbG9wMBkGCisGAQQBg78wAQ8ECwwJMjIxOTE5Mzc5MDEGCisGAQQBg78wARAEIwwhaHR0cHM6Ly9naXRodWIuY29tL2F3cy1wb3dlcnRvb2xzMBkGCisGAQQBg78wAREECwwJMTI5MTI3NjM4MH8GCisGAQQBg78wARIEcQxvaHR0cHM6Ly9naXRodWIuY29tL2F3cy1wb3dlcnRvb2xzL3Bvd2VydG9vbHMtbGFtYmRhLXB5dGhvbi8uZ2l0aHViL3dvcmtmbG93cy9wcmUtcmVsZWFzZS55bWxAcmVmcy9oZWFkcy9kZXZlbG9wMDgGCisGAQQBg78wARMEKgwoODFiNTBlZDJhNDBiODFhOGU5N2M2ZWI2OTUxZjA4Y2IzNzQyYzM5ZTAYBgorBgEEAYO/MAEUBAoMCHNjaGVkdWxlMG4GCisGAQQBg78wARUEYAxeaHR0cHM6Ly9naXRodWIuY29tL2F3cy1wb3dlcnRvb2xzL3Bvd2VydG9vbHMtbGFtYmRhLXB5dGhvbi9hY3Rpb25zL3J1bnMvMTcyNjA5MDE1NjYvYXR0ZW1wdHMvMTAWBgorBgEEAYO/MAEWBAgMBnB1YmxpYzCBigYKKwYBBAHWeQIEAgR8BHoAeAB2AN09MGrGxxEyYxkeHJlnNwKiSl643jyt/4eKcoAvKe6OAAABmOqRcjUAAAQDAEcwRQIgc7pM67yD+9zXs5yKEmYW9R8Jv1xjjxq5e5kP/0wprbECIQCU+i3x2tcHlWyyVfGhOMNg+/bJjVPYuc2XKXaVpDbWRDAKBggqhkjOPQQDAwNpADBmAjEAy3t+7xcTup1E+B+5RvGR0EE9iJzO4FgKi6ryZnKMlaO7xXBS18XIPPB67Peou7q5AjEAzmpzUio19wQjYq/sGGB94BRVpne/yaagPGmqvrJPIB8gBJ5XyR5Y1/BfpV7YyG2X"}, "tlogEntries":[{"logIndex":"438314066", "logId":{"keyId":"wNI9atQGlz+VWfO6LRygH4QUfY/8W4RFwiT5i5WRgB0="}, "kindVersion":{"kind":"dsse", "version":"0.0.1"}, "integratedTime":"1756282057", "inclusionPromise":{"signedEntryTimestamp":"MEYCIQCHu8oC9e2PYPICUYfcu5kycMm9ASJ41Z1xPajfWYN1dwIhAI+dIbwv1D0D0pPUeWRcG72LMWLrcjgueDBp7iiIi1w6"}, "inclusionProof":{"logIndex":"316409804", "rootHash":"dJ3x8q41bnc7wz/px5lnpNdn4bGLsmX9PHVwV5Ah32I=", "treeSize":"316409807", "hashes":["R3diGIn8aY2RdS8wKlapmNOEv0MVzywiG9FKgFmO8+Q=", "Mqr+37jGvWgiZ4uqO2FJVL6tiBR3bxkbSMmQhgTmRBI=", "+j+OGQec5TLyzs4R9GNddND0sJptKCbWM2DDlhxCPDk=", "X1NLo0bZNcBOwrbulQbQM5Bk0TQ9XOnUcK/hfAS122g=", "15yAsSOUV9M3svushjgh0yaboQsu+HaiOXDkep2fCeA=", "kBIiOLZlbQ9/SnTZevw13c0IHK5+ROeSDsve2M4iHUM=", "QdB+bVbybEHHQgchwKscKG34ShHSEF1BU6VGUmvN3/U=", "nQ6den+KxXomnZ4X90vCfroOd1aumOi5p5OZJ2GE7j4=", "D3kSA2j1HsL4y/m1R203XKkYISQ9xqVTSp1yRkNk904=", "g1JY8QW7VnAvEI1oB2p2+v1m/EGmKVZRPNjFOKI2Yhg=", "oicDIFD9sFfn5umREKsReR0Irf05A646X11O4aBtW/A=", "wZG2ng7kwfBBCC4nmmCZa69zBrFhbd6vofleeCf0mPw=", "WOjmBDiSFJmWNZxh4vQuzXKy9iRLWrl7nFXrID3qYSg=", "QuAU3TyNAvVEcHz+j/oTSRYe1i/QqVxiwzI9oiuV8/U=", "wCCU7hO8zBe9mf+YE82KuXgzxyhnEK0FkeZe0lH3dZ4=", "vS7O4ozHIQZJWBiov+mkpI27GE8zAmVCEkRcP3NDyNE="], "checkpoint":{"envelope":"rekor.sigstore.dev - 1193050959916656506\n316409807\ndJ3x8q41bnc7wz/px5lnpNdn4bGLsmX9PHVwV5Ah32I=\n\n— rekor.sigstore.dev wNI9ajBFAiEAw85xJspaKDS/iq7rjZR+QqAxmLlZ3r1osysB3DCUfGYCIEZ8jYl07gbxKSLARsNL4qhPGBpqddyDrGvJ0AI3pAAx\n"}}, "canonicalizedBody":"eyJhcGlWZXJzaW9uIjoiMC4wLjEiLCJraW5kIjoiZHNzZSIsInNwZWMiOnsiZW52ZWxvcGVIYXNoIjp7ImFsZ29yaXRobSI6InNoYTI1NiIsInZhbHVlIjoiZjIyOTZiMDY3OWMxOTdkNTE4OWU4ODJjM2M0MjNkZDMyNWZhYjY2MTRlMDEwY2MxZDQwZjQ4NTNlYTJmZDkxMiJ9LCJwYXlsb2FkSGFzaCI6eyJhbGdvcml0aG0iOiJzaGEyNTYiLCJ2YWx1ZSI6IjU5ZmM4NjdkMWY1NWNiZWJkYTgxOGFmYmFhMGY2NzNkZmFlYWFhYTMyM2QxNWIyMWIyMDdhN2M5MzhmMmJiNmYifSwic2lnbmF0dXJlcyI6W3sic2lnbmF0dXJlIjoiTUVVQ0lBRHl4MjdCUjhlZWVtNTNhRVU5Y3R0V2NZT2g0dG9UMFZXLzN3b2RkdTV5QWlFQWhJWE03QnVoMEdvSW1KU0ljSlhrc2tqVnJydUxZa3lUNXpvZmFiaVJnMXc9IiwidmVyaWZpZXIiOiJMUzB0TFMxQ1JVZEpUaUJEUlZKVVNVWkpRMEZVUlMwdExTMHRDazFKU1VoYWVrTkRRblY1WjBGM1NVSkJaMGxWVW1KcmFVaGpZekJyT1hsV2N6TkxLMjlWTjJsamJrTlZlakJ6ZDBObldVbExiMXBKZW1vd1JVRjNUWGNLVG5wRlZrMUNUVWRCTVZWRlEyaE5UV015Ykc1ak0xSjJZMjFWZFZwSFZqSk5ValIzU0VGWlJGWlJVVVJGZUZaNllWZGtlbVJIT1hsYVV6RndZbTVTYkFwamJURnNXa2RzYUdSSFZYZElhR05PVFdwVmQwOUVTVE5OUkdkM1RucE5NMWRvWTA1TmFsVjNUMFJKTTAxRVozaE9lazB6VjJwQlFVMUdhM2RGZDFsSUNrdHZXa2w2YWpCRFFWRlpTVXR2V2tsNmFqQkVRVkZqUkZGblFVVmpiRWt2ZFROSFpGUTVXREV4YjNwUlV6bFllbE5XWkVwRVFuZ3dRVEJPWVhGMWVXUUtZa1ZOV0dWNlYwTlNWSFJTYTFkb1VqZHFhMFZzVWpWaVYyVlRjVnBvTlUxQmVtUlNjV1JtVW1GT2FtSlNVVVJuZW1GUFEwSm5jM2RuWjFsSVRVRTBSd3BCTVZWa1JIZEZRaTkzVVVWQmQwbElaMFJCVkVKblRsWklVMVZGUkVSQlMwSm5aM0pDWjBWR1FsRmpSRUY2UVdSQ1owNVdTRkUwUlVablVWVlhWVmxRQ2t4QlNuSktVRFJVT1dNd1dHOHdRMnBFU21oSU1WVTBkMGgzV1VSV1VqQnFRa0puZDBadlFWVXpPVkJ3ZWpGWmEwVmFZalZ4VG1wd1MwWlhhWGhwTkZrS1drUTRkMmRaVVVkQk1WVmtSVkZGUWk5M1VqWk5TR2xIWkcxb01HUklRbnBQYVRoMldqSnNNR0ZJVm1sTWJVNTJZbE01ZW1KSVRtaE1WMXA1V1ZjeGJBcGtNamw1WVhrNWVtSklUbWhNVjJSd1pFZG9NVmxwTVc1YVZ6VnNZMjFHTUdJelNYWk1iV1J3WkVkb01WbHBPVE5pTTBweVdtMTRkbVF6VFhaYU1sWjFDbHBZU21oa1J6bDVXREprYkdKdFZubGhWMDVtWXpKNGVsbFVUWFZsVnpGelVVaEtiRnB1VFhaa1IwWnVZM2s1TWsxcE5IaE1ha0YzVDFGWlMwdDNXVUlLUWtGSFJIWjZRVUpCVVZGeVlVaFNNR05JVFRaTWVUa3dZakowYkdKcE5XaFpNMUp3WWpJMWVreHRaSEJrUjJneFdXNVdlbHBZU21waU1qVXdXbGMxTUFwTWJVNTJZbFJCVjBKbmIzSkNaMFZGUVZsUEwwMUJSVU5DUVdoNldUSm9iRnBJVm5OYVZFRXlRbWR2Y2tKblJVVkJXVTh2VFVGRlJFSkRaelJOVjBreENrMUhWbXROYlVVd1RVZEpORTFYUlRSYVZHc3pXWHBhYkZscVdUVk9WRVp0VFVSb2FsbHFUVE5PUkVwcVRYcHNiRTFDYTBkRGFYTkhRVkZSUW1jM09IY0tRVkZSUlVNeFFubGFVekZUV2xkNGJGbFlUbXhOUkZWSFEybHpSMEZSVVVKbk56aDNRVkZWUlVveVJqTmplVEYzWWpOa2JHTnVVblppTW5oNlRETkNkZ3BrTWxaNVpFYzVkbUpJVFhSaVIwWjBXVzFTYUV4WVFqVmtSMmgyWW1wQlowSm5iM0pDWjBWRlFWbFBMMDFCUlVkQ1FrcDVXbGRhZWt3eWFHeFpWMUo2Q2t3eVVteGtiVlp6WWpOQmQwOTNXVXRMZDFsQ1FrRkhSSFo2UVVKRFFWRjBSRU4wYjJSSVVuZGplbTkyVEROU2RtRXlWblZNYlVacVpFZHNkbUp1VFhVS1dqSnNNR0ZJVm1sa1dFNXNZMjFPZG1KdVVteGlibEYxV1RJNWRFMUpSMGRDWjI5eVFtZEZSVUZaVHk5TlFVVktRa2huVFdSdGFEQmtTRUo2VDJrNGRncGFNbXd3WVVoV2FVeHRUblppVXpsNllraE9hRXhYV25sWlZ6RnNaREk1ZVdGNU9YcGlTRTVvVEZka2NHUkhhREZaYVRGdVdsYzFiR050UmpCaU0wbDJDa3h0WkhCa1IyZ3hXV2s1TTJJelNuSmFiWGgyWkROTmRsb3lWblZhV0Vwb1pFYzVlVmd5Wkd4aWJWWjVZVmRPWm1NeWVIcFpWRTExWlZjeGMxRklTbXdLV201TmRtUkhSbTVqZVRreVRXazBlRXhxUVhkUFFWbExTM2RaUWtKQlIwUjJla0ZDUTJkUmNVUkRhRzFPTWxKclQwZE5NVTVIVFhsTlJGa3pXVzFHYlFwWmVrVjVXVEpGTTFsVVZURk9WR3N4V2tSV2JGcFViR2xPZWxWNVRVUlNhRTFDTUVkRGFYTkhRVkZSUW1jM09IZEJVWE5GUkhkM1Rsb3liREJoU0ZacENreFhhSFpqTTFKc1drUkNTMEpuYjNKQ1owVkZRVmxQTDAxQlJVMUNSSGROVDIxb01HUklRbnBQYVRoMldqSnNNR0ZJVm1sTWJVNTJZbE01YUdRelRYUUtZMGM1TTFwWVNqQmlNamx6WTNrNWQySXpaR3hqYmxKMllqSjRla3hYZUdoaVYwcHJXVk14ZDJWWVVtOWlNalIzVDBGWlMwdDNXVUpDUVVkRWRucEJRZ3BFVVZGeFJFTm5ORTFYU1RGTlIxWnJUVzFGTUUxSFNUUk5WMFUwV2xSck0xbDZXbXhaYWxrMVRsUkdiVTFFYUdwWmFrMHpUa1JLYWsxNmJHeE5RMGxIQ2tOcGMwZEJVVkZDWnpjNGQwRlJORVZHUVhkVFkyMVdiV041T1c5YVYwWnJZM2s1YTFwWVdteGlSemwzVFVKclIwTnBjMGRCVVZGQ1p6YzRkMEZST0VVS1EzZDNTazFxU1hoUFZFVTFUWHBqTlUxRVJVZERhWE5IUVZGUlFtYzNPSGRCVWtGRlNYZDNhR0ZJVWpCalNFMDJUSGs1Ym1GWVVtOWtWMGwxV1RJNWRBcE1Na1l6WTNreGQySXpaR3hqYmxKMllqSjRlazFDYTBkRGFYTkhRVkZSUW1jM09IZEJVa1ZGUTNkM1NrMVVTVFZOVkVrelRtcE5ORTFJT0VkRGFYTkhDa0ZSVVVKbk56aDNRVkpKUldOUmVIWmhTRkl3WTBoTk5reDVPVzVoV0ZKdlpGZEpkVmt5T1hSTU1rWXpZM2t4ZDJJelpHeGpibEoyWWpKNGVrd3pRbllLWkRKV2VXUkhPWFppU0UxMFlrZEdkRmx0VW1oTVdFSTFaRWRvZG1KcE9IVmFNbXd3WVVoV2FVd3paSFpqYlhSdFlrYzVNMk41T1hkamJWVjBZMjFXY3dwYVYwWjZXbE0xTldKWGVFRmpiVlp0WTNrNWIxcFhSbXRqZVRscldsaGFiR0pIT1hkTlJHZEhRMmx6UjBGUlVVSm5OemgzUVZKTlJVdG5kMjlQUkVacENrNVVRbXhhUkVwb1RrUkNhVTlFUm1oUFIxVTFUakpOTWxwWFNUSlBWRlY0V21wQk5Ga3lTWHBPZWxGNVdYcE5OVnBVUVZsQ1oyOXlRbWRGUlVGWlR5OEtUVUZGVlVKQmIwMURTRTVxWVVkV2EyUlhlR3hOUnpSSFEybHpSMEZSVVVKbk56aDNRVkpWUlZsQmVHVmhTRkl3WTBoTk5reDVPVzVoV0ZKdlpGZEpkUXBaTWpsMFRESkdNMk41TVhkaU0yUnNZMjVTZG1JeWVIcE1NMEoyWkRKV2VXUkhPWFppU0UxMFlrZEdkRmx0VW1oTVdFSTFaRWRvZG1KcE9XaFpNMUp3Q21JeU5YcE1NMG94WW01TmRrMVVZM2xPYWtFMVRVUkZNVTVxV1haWldGSXdXbGN4ZDJSSVRYWk5WRUZYUW1kdmNrSm5SVVZCV1U4dlRVRkZWMEpCWjAwS1FtNUNNVmx0ZUhCWmVrTkNhV2RaUzB0M1dVSkNRVWhYWlZGSlJVRm5VamhDU0c5QlpVRkNNa0ZPTURsTlIzSkhlSGhGZVZsNGEyVklTbXh1VG5kTGFRcFRiRFkwTTJwNWRDODBaVXRqYjBGMlMyVTJUMEZCUVVKdFQzRlNZMnBWUVVGQlVVUkJSV04zVWxGSloyTTNjRTAyTjNsRUt6bDZXSE0xZVV0RmJWbFhDamxTT0VwMk1YaHFhbmh4TldVMWExQXZNSGR3Y21KRlEwbFJRMVVyYVRONE1uUmpTR3hYZVhsV1prZG9UMDFPWnlzdllrcHFWbEJaZFdNeVdFdFlZVllLY0VSaVYxSkVRVXRDWjJkeGFHdHFUMUJSVVVSQmQwNXdRVVJDYlVGcVJVRjVNM1FyTjNoalZIVndNVVVyUWlzMVVuWkhVakJGUlRscFNucFBORVpuU3dwcE5uSjVXbTVMVFd4aFR6ZDRXRUpUTVRoWVNWQlFRalkzVUdWdmRUZHhOVUZxUlVGNmJYQjZWV2x2TVRsM1VXcFpjUzl6UjBkQ09UUkNVbFp3Ym1VdkNubGhZV2RRUjIxeGRuSktVRWxDT0dkQ1NqVlllVkkxV1RFdlFtWndWamRaZVVjeVdBb3RMUzB0TFVWT1JDQkRSVkpVU1VaSlEwRlVSUzB0TFMwdENnPT0ifV19fQ=="}]}, "dsseEnvelope":{"payload":"eyJfdHlwZSI6Imh0dHBzOi8vaW4tdG90by5pby9TdGF0ZW1lbnQvdjAuMSIsInByZWRpY2F0ZVR5cGUiOiJodHRwczovL3Nsc2EuZGV2L3Byb3ZlbmFuY2UvdjAuMiIsInN1YmplY3QiOlt7Im5hbWUiOiIuL2F3c19sYW1iZGFfcG93ZXJ0b29scy0zLjE5LjFhOS1weTMtbm9uZS1hbnkud2hsIiwiZGlnZXN0Ijp7InNoYTI1NiI6IjE0NjhjNmIwOGU2NDAxZGFkZjk4NGYwOWI4OWUzODU1ZDhkNDc1NzUyNWQ2OWNhMWUzOTBkZDlkODY4MWY3YmQifX0seyJuYW1lIjoiLi9hd3NfbGFtYmRhX3Bvd2VydG9vbHMtMy4xOS4xYTkudGFyLmd6IiwiZGlnZXN0Ijp7InNoYTI1NiI6ImVjNjU3NWQ1Y2I1MGJiYjJjY2MzYTIzMjdkMWJjNjQyYzFkM2Y0NWI5YzMzYjNhOGFhNzcwMTg5ZTI3NjU3ZjAifX1dLCJwcmVkaWNhdGUiOnsiYnVpbGRlciI6eyJpZCI6Imh0dHBzOi8vZ2l0aHViLmNvbS9zbHNhLWZyYW1ld29yay9zbHNhLWdpdGh1Yi1nZW5lcmF0b3IvLmdpdGh1Yi93b3JrZmxvd3MvZ2VuZXJhdG9yX2dlbmVyaWNfc2xzYTMueW1sQHJlZnMvdGFncy92Mi4xLjAifSwiYnVpbGRUeXBlIjoiaHR0cHM6Ly9naXRodWIuY29tL3Nsc2EtZnJhbWV3b3JrL3Nsc2EtZ2l0aHViLWdlbmVyYXRvci9nZW5lcmljQHYxIiwiaW52b2NhdGlvbiI6eyJjb25maWdTb3VyY2UiOnsidXJpIjoiZ2l0K2h0dHBzOi8vZ2l0aHViLmNvbS9hd3MtcG93ZXJ0b29scy9wb3dlcnRvb2xzLWxhbWJkYS1weXRob25AcmVmcy9oZWFkcy9kZXZlbG9wIiwiZGlnZXN0Ijp7InNoYTEiOiI4MWI1MGVkMmE0MGI4MWE4ZTk3YzZlYjY5NTFmMDhjYjM3NDJjMzllIn0sImVudHJ5UG9pbnQiOiIuZ2l0aHViL3dvcmtmbG93cy9wcmUtcmVsZWFzZS55bWwifSwicGFyYW1ldGVycyI6eyJ2YXJzIjp7fX0sImVudmlyb25tZW50Ijp7ImdpdGh1Yl9hY3RvciI6ImxlYW5kcm9kYW1hc2NlbmEiLCJnaXRodWJfYWN0b3JfaWQiOiI0Mjk1MTczIiwiZ2l0aHViX2Jhc2VfcmVmIjoiIiwiZ2l0aHViX2V2ZW50X25hbWUiOiJzY2hlZHVsZSIsImdpdGh1Yl9ldmVudF9wYXlsb2FkIjp7ImVudGVycHJpc2UiOnsiYXZhdGFyX3VybCI6Imh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vYi8xMjkwP3Y9NCIsImNyZWF0ZWRfYXQiOiIyMDE5LTExLTEzVDE4OjA1OjQxWiIsImRlc2NyaXB0aW9uIjoiIiwiaHRtbF91cmwiOiJodHRwczovL2dpdGh1Yi5jb20vZW50ZXJwcmlzZXMvYW1hem9uIiwiaWQiOjEyOTAsIm5hbWUiOiJBbWF6b24iLCJub2RlX2lkIjoiTURFd09rVnVkR1Z5Y0hKcGMyVXhNamt3Iiwic2x1ZyI6ImFtYXpvbiIsInVwZGF0ZWRfYXQiOiIyMDI1LTA4LTEyVDIwOjU5OjE0WiIsIndlYnNpdGVfdXJsIjoiaHR0cHM6Ly93d3cuYW1hem9uLmNvbS8ifSwib3JnYW5pemF0aW9uIjp7ImF2YXRhcl91cmwiOiJodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTI5MTI3NjM4P3Y9NCIsImRlc2NyaXB0aW9uIjoiIiwiZXZlbnRzX3VybCI6Imh0dHBzOi8vaW50ZXJuYWwtYXBpLnNlcnZpY2UuaWFkLmdpdGh1Yi5uZXQvb3Jncy9hd3MtcG93ZXJ0b29scy9ldmVudHMiLCJob29rc191cmwiOiJodHRwczovL2ludGVybmFsLWFwaS5zZXJ2aWNlLmlhZC5naXRodWIubmV0L29yZ3MvYXdzLXBvd2VydG9vbHMvaG9va3MiLCJpZCI6MTI5MTI3NjM4LCJpc3N1ZXNfdXJsIjoiaHR0cHM6Ly9pbnRlcm5hbC1hcGkuc2VydmljZS5pYWQuZ2l0aHViLm5ldC9vcmdzL2F3cy1wb3dlcnRvb2xzL2lzc3VlcyIsImxvZ2luIjoiYXdzLXBvd2VydG9vbHMiLCJtZW1iZXJzX3VybCI6Imh0dHBzOi8vaW50ZXJuYWwtYXBpLnNlcnZpY2UuaWFkLmdpdGh1Yi5uZXQvb3Jncy9hd3MtcG93ZXJ0b29scy9tZW1iZXJzey9tZW1iZXJ9Iiwibm9kZV9pZCI6Ik9fa2dET0I3SlUxZyIsInB1YmxpY19tZW1iZXJzX3VybCI6Imh0dHBzOi8vaW50ZXJuYWwtYXBpLnNlcnZpY2UuaWFkLmdpdGh1Yi5uZXQvb3Jncy9hd3MtcG93ZXJ0b29scy9wdWJsaWNfbWVtYmVyc3svbWVtYmVyfSIsInJlcG9zX3VybCI6Imh0dHBzOi8vaW50ZXJuYWwtYXBpLnNlcnZpY2UuaWFkLmdpdGh1Yi5uZXQvb3Jncy9hd3MtcG93ZXJ0b29scy9yZXBvcyIsInVybCI6Imh0dHBzOi8vaW50ZXJuYWwtYXBpLnNlcnZpY2UuaWFkLmdpdGh1Yi5uZXQvb3Jncy9hd3MtcG93ZXJ0b29scyJ9LCJyZXBvc2l0b3J5Ijp7ImFsbG93X2ZvcmtpbmciOnRydWUsImFyY2hpdmVfdXJsIjoiaHR0cHM6Ly9pbnRlcm5hbC1hcGkuc2VydmljZS5pYWQuZ2l0aHViLm5ldC9yZXBvcy9hd3MtcG93ZXJ0b29scy9wb3dlcnRvb2xzLWxhbWJkYS1weXRob24ve2FyY2hpdmVfZm9ybWF0fXsvcmVmfSIsImFyY2hpdmVkIjpmYWxzZSwiYXNzaWduZWVzX3VybCI6Imh0dHBzOi8vaW50ZXJuYWwtYXBpLnNlcnZpY2UuaWFkLmdpdGh1Yi5uZXQvcmVwb3MvYXdzLXBvd2VydG9vbHMvcG93ZXJ0b29scy1sYW1iZGEtcHl0aG9uL2Fzc2lnbmVlc3svdXNlcn0iLCJibG9ic191cmwiOiJodHRwczovL2ludGVybmFsLWFwaS5zZXJ2aWNlLmlhZC5naXRodWIubmV0L3JlcG9zL2F3cy1wb3dlcnRvb2xzL3Bvd2VydG9vbHMtbGFtYmRhLXB5dGhvbi9naXQvYmxvYnN7L3NoYX0iLCJicmFuY2hlc191cmwiOiJodHRwczovL2ludGVybmFsLWFwaS5zZXJ2aWNlLmlhZC5naXRodWIubmV0L3JlcG9zL2F3cy1wb3dlcnRvb2xzL3Bvd2VydG9vbHMtbGFtYmRhLXB5dGhvbi9icmFuY2hlc3svYnJhbmNofSIsImNsb25lX3VybCI6Imh0dHBzOi8vZ2l0aHViLmNvbS9hd3MtcG93ZXJ0b29scy9wb3dlcnRvb2xzLWxhbWJkYS1weXRob24uZ2l0IiwiY29sbGFib3JhdG9yc191cmwiOiJodHRwczovL2ludGVybmFsLWFwaS5zZXJ2aWNlLmlhZC5naXRodWIubmV0L3JlcG9zL2F3cy1wb3dlcnRvb2xzL3Bvd2VydG9vbHMtbGFtYmRhLXB5dGhvbi9jb2xsYWJvcmF0b3Jzey9jb2xsYWJvcmF0b3J9IiwiY29tbWVudHNfdXJsIjoiaHR0cHM6Ly9pbnRlcm5hbC1hcGkuc2VydmljZS5pYWQuZ2l0aHViLm5ldC9yZXBvcy9hd3MtcG93ZXJ0b29scy9wb3dlcnRvb2xzLWxhbWJkYS1weXRob24vY29tbWVudHN7L251bWJlcn0iLCJjb21taXRzX3VybCI6Imh0dHBzOi8vaW50ZXJuYWwtYXBpLnNlcnZpY2UuaWFkLmdpdGh1Yi5uZXQvcmVwb3MvYXdzLXBvd2VydG9vbHMvcG93ZXJ0b29scy1sYW1iZGEtcHl0aG9uL2NvbW1pdHN7L3NoYX0iLCJjb21wYXJlX3VybCI6Imh0dHBzOi8vaW50ZXJuYWwtYXBpLnNlcnZpY2UuaWFkLmdpdGh1Yi5uZXQvcmVwb3MvYXdzLXBvd2VydG9vbHMvcG93ZXJ0b29scy1sYW1iZGEtcHl0aG9uL2NvbXBhcmUve2Jhc2V9Li4ue2hlYWR9IiwiY29udGVudHNfdXJsIjoiaHR0cHM6Ly9pbnRlcm5hbC1hcGkuc2VydmljZS5pYWQuZ2l0aHViLm5ldC9yZXBvcy9hd3MtcG93ZXJ0b29scy9wb3dlcnRvb2xzLWxhbWJkYS1weXRob24vY29udGVudHMveytwYXRofSIsImNvbnRyaWJ1dG9yc191cmwiOiJodHRwczovL2ludGVybmFsLWFwaS5zZXJ2aWNlLmlhZC5naXRodWIubmV0L3JlcG9zL2F3cy1wb3dlcnRvb2xzL3Bvd2VydG9vbHMtbGFtYmRhLXB5dGhvbi9jb250cmlidXRvcnMiLCJjcmVhdGVkX2F0IjoiMjAxOS0xMS0xNVQxMjoyNjoxMloiLCJjdXN0b21fcHJvcGVydGllcyI6eyJzdGFnaW5nIjoiZmFsc2UiLCJ2aXNpYmlsaXR5LWFsbG93LWludGVybmFsIjoiZmFsc2UiLCJ2aXNpYmlsaXR5LWFsbG93LXByaXZhdGUiOiJmYWxzZSIsInZpc2liaWxpdHktYWxsb3ctcHVibGljIjoidHJ1ZSJ9LCJkZWZhdWx0X2JyYW5jaCI6ImRldmVsb3AiLCJkZXBsb3ltZW50c191cmwiOiJodHRwczovL2ludGVybmFsLWFwaS5zZXJ2aWNlLmlhZC5naXRodWIubmV0L3JlcG9zL2F3cy1wb3dlcnRvb2xzL3Bvd2VydG9vbHMtbGFtYmRhLXB5dGhvbi9kZXBsb3ltZW50cyIsImRlc2NyaXB0aW9uIjoiQSBkZXZlbG9wZXIgdG9vbGtpdCB0byBpbXBsZW1lbnQgU2VydmVybGVzcyBiZXN0IHByYWN0aWNlcyBhbmQgaW5jcmVhc2UgZGV2ZWxvcGVyIHZlbG9jaXR5LiIsImRpc2FibGVkIjpmYWxzZSwiZG93bmxvYWRzX3VybCI6Imh0dHBzOi8vaW50ZXJuYWwtYXBpLnNlcnZpY2UuaWFkLmdpdGh1Yi5uZXQvcmVwb3MvYXdzLXBvd2VydG9vbHMvcG93ZXJ0b29scy1sYW1iZGEtcHl0aG9uL2Rvd25sb2FkcyIsImV2ZW50c191cmwiOiJodHRwczovL2ludGVybmFsLWFwaS5zZXJ2aWNlLmlhZC5naXRodWIubmV0L3JlcG9zL2F3cy1wb3dlcnRvb2xzL3Bvd2VydG9vbHMtbGFtYmRhLXB5dGhvbi9ldmVudHMiLCJmb3JrIjpmYWxzZSwiZm9ya3MiOjQ0NywiZm9ya3NfY291bnQiOjQ0NywiZm9ya3NfdXJsIjoiaHR0cHM6Ly9pbnRlcm5hbC1hcGkuc2VydmljZS5pYWQuZ2l0aHViLm5ldC9yZXBvcy9hd3MtcG93ZXJ0b29scy9wb3dlcnRvb2xzLWxhbWJkYS1weXRob24vZm9ya3MiLCJmdWxsX25hbWUiOiJhd3MtcG93ZXJ0b29scy9wb3dlcnRvb2xzLWxhbWJkYS1weXRob24iLCJnaXRfY29tbWl0c191cmwiOiJodHRwczovL2ludGVybmFsLWFwaS5zZXJ2aWNlLmlhZC5naXRodWIubmV0L3JlcG9zL2F3cy1wb3dlcnRvb2xzL3Bvd2VydG9vbHMtbGFtYmRhLXB5dGhvbi9naXQvY29tbWl0c3svc2hhfSIsImdpdF9yZWZzX3VybCI6Imh0dHBzOi8vaW50ZXJuYWwtYXBpLnNlcnZpY2UuaWFkLmdpdGh1Yi5uZXQvcmVwb3MvYXdzLXBvd2VydG9vbHMvcG93ZXJ0b29scy1sYW1iZGEtcHl0aG9uL2dpdC9yZWZzey9zaGF9IiwiZ2l0X3RhZ3NfdXJsIjoiaHR0cHM6Ly9pbnRlcm5hbC1hcGkuc2VydmljZS5pYWQuZ2l0aHViLm5ldC9yZXBvcy9hd3MtcG93ZXJ0b29scy9wb3dlcnRvb2xzLWxhbWJkYS1weXRob24vZ2l0L3RhZ3N7L3NoYX0iLCJnaXRfdXJsIjoiZ2l0Oi8vZ2l0aHViLmNvbS9hd3MtcG93ZXJ0b29scy9wb3dlcnRvb2xzLWxhbWJkYS1weXRob24uZ2l0IiwiaGFzX2Rpc2N1c3Npb25zIjp0cnVlLCJoYXNfZG93bmxvYWRzIjp0cnVlLCJoYXNfaXNzdWVzIjp0cnVlLCJoYXNfcGFnZXMiOmZhbHNlLCJoYXNfcHJvamVjdHMiOnRydWUsImhhc193aWtpIjpmYWxzZSwiaG9tZXBhZ2UiOiJodHRwczovL2RvY3MucG93ZXJ0b29scy5hd3MuZGV2L2xhbWJkYS9weXRob24vbGF0ZXN0LyIsImhvb2tzX3VybCI6Imh0dHBzOi8vaW50ZXJuYWwtYXBpLnNlcnZpY2UuaWFkLmdpdGh1Yi5uZXQvcmVwb3MvYXdzLXBvd2VydG9vbHMvcG93ZXJ0b29scy1sYW1iZGEtcHl0aG9uL2hvb2tzIiwiaHRtbF91cmwiOiJodHRwczovL2dpdGh1Yi5jb20vYXdzLXBvd2VydG9vbHMvcG93ZXJ0b29scy1sYW1iZGEtcHl0aG9uIiwiaWQiOjIyMTkxOTM3OSwiaXNfdGVtcGxhdGUiOmZhbHNlLCJpc3N1ZV9jb21tZW50X3VybCI6Imh0dHBzOi8vaW50ZXJuYWwtYXBpLnNlcnZpY2UuaWFkLmdpdGh1Yi5uZXQvcmVwb3MvYXdzLXBvd2VydG9vbHMvcG93ZXJ0b29scy1sYW1iZGEtcHl0aG9uL2lzc3Vlcy9jb21tZW50c3svbnVtYmVyfSIsImlzc3VlX2V2ZW50c191cmwiOiJodHRwczovL2ludGVybmFsLWFwaS5zZXJ2aWNlLmlhZC5naXRodWIubmV0L3JlcG9zL2F3cy1wb3dlcnRvb2xzL3Bvd2VydG9vbHMtbGFtYmRhLXB5dGhvbi9pc3N1ZXMvZXZlbnRzey9udW1iZXJ9IiwiaXNzdWVzX3VybCI6Imh0dHBzOi8vaW50ZXJuYWwtYXBpLnNlcnZpY2UuaWFkLmdpdGh1Yi5uZXQvcmVwb3MvYXdzLXBvd2VydG9vbHMvcG93ZXJ0b29scy1sYW1iZGEtcHl0aG9uL2lzc3Vlc3svbnVtYmVyfSIsImtleXNfdXJsIjoiaHR0cHM6Ly9pbnRlcm5hbC1hcGkuc2VydmljZS5pYWQuZ2l0aHViLm5ldC9yZXBvcy9hd3MtcG93ZXJ0b29scy9wb3dlcnRvb2xzLWxhbWJkYS1weXRob24va2V5c3sva2V5X2lkfSIsImxhYmVsc191cmwiOiJodHRwczovL2ludGVybmFsLWFwaS5zZXJ2aWNlLmlhZC5naXRodWIubmV0L3JlcG9zL2F3cy1wb3dlcnRvb2xzL3Bvd2VydG9vbHMtbGFtYmRhLXB5dGhvbi9sYWJlbHN7L25hbWV9IiwibGFuZ3VhZ2UiOiJQeXRob24iLCJsYW5ndWFnZXNfdXJsIjoiaHR0cHM6Ly9pbnRlcm5hbC1hcGkuc2VydmljZS5pYWQuZ2l0aHViLm5ldC9yZXBvcy9hd3MtcG93ZXJ0b29scy9wb3dlcnRvb2xzLWxhbWJkYS1weXRob24vbGFuZ3VhZ2VzIiwibGljZW5zZSI6eyJrZXkiOiJtaXQtMCIsIm5hbWUiOiJNSVQgTm8gQXR0cmlidXRpb24iLCJub2RlX2lkIjoiTURjNlRHbGpaVzV6WlRReCIsInNwZHhfaWQiOiJNSVQtMCIsInVybCI6Imh0dHBzOi8vaW50ZXJuYWwtYXBpLnNlcnZpY2UuaWFkLmdpdGh1Yi5uZXQvbGljZW5zZXMvbWl0LTAifSwibWVyZ2VzX3VybCI6Imh0dHBzOi8vaW50ZXJuYWwtYXBpLnNlcnZpY2UuaWFkLmdpdGh1Yi5uZXQvcmVwb3MvYXdzLXBvd2VydG9vbHMvcG93ZXJ0b29scy1sYW1iZGEtcHl0aG9uL21lcmdlcyIsIm1pbGVzdG9uZXNfdXJsIjoiaHR0cHM6Ly9pbnRlcm5hbC1hcGkuc2VydmljZS5pYWQuZ2l0aHViLm5ldC9yZXBvcy9hd3MtcG93ZXJ0b29scy9wb3dlcnRvb2xzLWxhbWJkYS1weXRob24vbWlsZXN0b25lc3svbnVtYmVyfSIsIm1pcnJvcl91cmwiOm51bGwsIm5hbWUiOiJwb3dlcnRvb2xzLWxhbWJkYS1weXRob24iLCJub2RlX2lkIjoiTURFd09sSmxjRzl6YVhSdmNua3lNakU1TVRrek56az0iLCJub3RpZmljYXRpb25zX3VybCI6Imh0dHBzOi8vaW50ZXJuYWwtYXBpLnNlcnZpY2UuaWFkLmdpdGh1Yi5uZXQvcmVwb3MvYXdzLXBvd2VydG9vbHMvcG93ZXJ0b29scy1sYW1iZGEtcHl0aG9uL25vdGlmaWNhdGlvbnN7P3NpbmNlLGFsbCxwYXJ0aWNpcGF0aW5nfSIsIm9wZW5faXNzdWVzIjo1OCwib3Blbl9pc3N1ZXNfY291bnQiOjU4LCJvd25lciI6eyJhdmF0YXJfdXJsIjoiaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzEyOTEyNzYzOD92PTQiLCJldmVudHNfdXJsIjoiaHR0cHM6Ly9pbnRlcm5hbC1hcGkuc2VydmljZS5pYWQuZ2l0aHViLm5ldC91c2Vycy9hd3MtcG93ZXJ0b29scy9ldmVudHN7L3ByaXZhY3l9IiwiZm9sbG93ZXJzX3VybCI6Imh0dHBzOi8vaW50ZXJuYWwtYXBpLnNlcnZpY2UuaWFkLmdpdGh1Yi5uZXQvdXNlcnMvYXdzLXBvd2VydG9vbHMvZm9sbG93ZXJzIiwiZm9sbG93aW5nX3VybCI6Imh0dHBzOi8vaW50ZXJuYWwtYXBpLnNlcnZpY2UuaWFkLmdpdGh1Yi5uZXQvdXNlcnMvYXdzLXBvd2VydG9vbHMvZm9sbG93aW5ney9vdGhlcl91c2VyfSIsImdpc3RzX3VybCI6Imh0dHBzOi8vaW50ZXJuYWwtYXBpLnNlcnZpY2UuaWFkLmdpdGh1Yi5uZXQvdXNlcnMvYXdzLXBvd2VydG9vbHMvZ2lzdHN7L2dpc3RfaWR9IiwiZ3JhdmF0YXJfaWQiOiIiLCJodG1sX3VybCI6Imh0dHBzOi8vZ2l0aHViLmNvbS9hd3MtcG93ZXJ0b29scyIsImlkIjoxMjkxMjc2MzgsImxvZ2luIjoiYXdzLXBvd2VydG9vbHMiLCJub2RlX2lkIjoiT19rZ0RPQjdKVTFnIiwib3JnYW5pemF0aW9uc191cmwiOiJodHRwczovL2ludGVybmFsLWFwaS5zZXJ2aWNlLmlhZC5naXRodWIubmV0L3VzZXJzL2F3cy1wb3dlcnRvb2xzL29yZ3MiLCJyZWNlaXZlZF9ldmVudHNfdXJsIjoiaHR0cHM6Ly9pbnRlcm5hbC1hcGkuc2VydmljZS5pYWQuZ2l0aHViLm5ldC91c2Vycy9hd3MtcG93ZXJ0b29scy9yZWNlaXZlZF9ldmVudHMiLCJyZXBvc191cmwiOiJodHRwczovL2ludGVybmFsLWFwaS5zZXJ2aWNlLmlhZC5naXRodWIubmV0L3VzZXJzL2F3cy1wb3dlcnRvb2xzL3JlcG9zIiwic2l0ZV9hZG1pbiI6ZmFsc2UsInN0YXJyZWRfdXJsIjoiaHR0cHM6Ly9pbnRlcm5hbC1hcGkuc2VydmljZS5pYWQuZ2l0aHViLm5ldC91c2Vycy9hd3MtcG93ZXJ0b29scy9zdGFycmVkey9vd25lcn17L3JlcG99Iiwic3Vic2NyaXB0aW9uc191cmwiOiJodHRwczovL2ludGVybmFsLWFwaS5zZXJ2aWNlLmlhZC5naXRodWIubmV0L3VzZXJzL2F3cy1wb3dlcnRvb2xzL3N1YnNjcmlwdGlvbnMiLCJ0eXBlIjoiT3JnYW5pemF0aW9uIiwidXJsIjoiaHR0cHM6Ly9pbnRlcm5hbC1hcGkuc2VydmljZS5pYWQuZ2l0aHViLm5ldC91c2Vycy9hd3MtcG93ZXJ0b29scyIsInVzZXJfdmlld190eXBlIjoicHVibGljIn0sInByaXZhdGUiOmZhbHNlLCJwdWxsc191cmwiOiJodHRwczovL2ludGVybmFsLWFwaS5zZXJ2aWNlLmlhZC5naXRodWIubmV0L3JlcG9zL2F3cy1wb3dlcnRvb2xzL3Bvd2VydG9vbHMtbGFtYmRhLXB5dGhvbi9wdWxsc3svbnVtYmVyfSIsInB1c2hlZF9hdCI6IjIwMjUtMDgtMjdUMDc6NTc6MzhaIiwicmVsZWFzZXNfdXJsIjoiaHR0cHM6Ly9pbnRlcm5hbC1hcGkuc2VydmljZS5pYWQuZ2l0aHViLm5ldC9yZXBvcy9hd3MtcG93ZXJ0b29scy9wb3dlcnRvb2xzLWxhbWJkYS1weXRob24vcmVsZWFzZXN7L2lkfSIsInNpemUiOjEzMDcyNSwic3NoX3VybCI6ImdpdEBnaXRodWIuY29tOmF3cy1wb3dlcnRvb2xzL3Bvd2VydG9vbHMtbGFtYmRhLXB5dGhvbi5naXQiLCJzdGFyZ2F6ZXJzX2NvdW50IjozMTI4LCJzdGFyZ2F6ZXJzX3VybCI6Imh0dHBzOi8vaW50ZXJuYWwtYXBpLnNlcnZpY2UuaWFkLmdpdGh1Yi5uZXQvcmVwb3MvYXdzLXBvd2VydG9vbHMvcG93ZXJ0b29scy1sYW1iZGEtcHl0aG9uL3N0YXJnYXplcnMiLCJzdGF0dXNlc191cmwiOiJodHRwczovL2ludGVybmFsLWFwaS5zZXJ2aWNlLmlhZC5naXRodWIubmV0L3JlcG9zL2F3cy1wb3dlcnRvb2xzL3Bvd2VydG9vbHMtbGFtYmRhLXB5dGhvbi9zdGF0dXNlcy97c2hhfSIsInN1YnNjcmliZXJzX3VybCI6Imh0dHBzOi8vaW50ZXJuYWwtYXBpLnNlcnZpY2UuaWFkLmdpdGh1Yi5uZXQvcmVwb3MvYXdzLXBvd2VydG9vbHMvcG93ZXJ0b29scy1sYW1iZGEtcHl0aG9uL3N1YnNjcmliZXJzIiwic3Vic2NyaXB0aW9uX3VybCI6Imh0dHBzOi8vaW50ZXJuYWwtYXBpLnNlcnZpY2UuaWFkLmdpdGh1Yi5uZXQvcmVwb3MvYXdzLXBvd2VydG9vbHMvcG93ZXJ0b29scy1sYW1iZGEtcHl0aG9uL3N1YnNjcmlwdGlvbiIsInN2bl91cmwiOiJodHRwczovL2dpdGh1Yi5jb20vYXdzLXBvd2VydG9vbHMvcG93ZXJ0b29scy1sYW1iZGEtcHl0aG9uIiwidGFnc191cmwiOiJodHRwczovL2ludGVybmFsLWFwaS5zZXJ2aWNlLmlhZC5naXRodWIubmV0L3JlcG9zL2F3cy1wb3dlcnRvb2xzL3Bvd2VydG9vbHMtbGFtYmRhLXB5dGhvbi90YWdzIiwidGVhbXNfdXJsIjoiaHR0cHM6Ly9pbnRlcm5hbC1hcGkuc2VydmljZS5pYWQuZ2l0aHViLm5ldC9yZXBvcy9hd3MtcG93ZXJ0b29scy9wb3dlcnRvb2xzLWxhbWJkYS1weXRob24vdGVhbXMiLCJ0b3BpY3MiOlsiYXdzIiwiYXdzLWxhbWJkYSIsImxhbWJkYSIsInB5dGhvbiIsInNlcnZlcmxlc3MiXSwidHJlZXNfdXJsIjoiaHR0cHM6Ly9pbnRlcm5hbC1hcGkuc2VydmljZS5pYWQuZ2l0aHViLm5ldC9yZXBvcy9hd3MtcG93ZXJ0b29scy9wb3dlcnRvb2xzLWxhbWJkYS1weXRob24vZ2l0L3RyZWVzey9zaGF9IiwidXBkYXRlZF9hdCI6IjIwMjUtMDgtMjZUMTk6MjA6NTdaIiwidXJsIjoiaHR0cHM6Ly9pbnRlcm5hbC1hcGkuc2VydmljZS5pYWQuZ2l0aHViLm5ldC9yZXBvcy9hd3MtcG93ZXJ0b29scy9wb3dlcnRvb2xzLWxhbWJkYS1weXRob24iLCJ2aXNpYmlsaXR5IjoicHVibGljIiwid2F0Y2hlcnMiOjMxMjgsIndhdGNoZXJzX2NvdW50IjozMTI4LCJ3ZWJfY29tbWl0X3NpZ25vZmZfcmVxdWlyZWQiOnRydWV9LCJzY2hlZHVsZSI6IjAgOCAqICogMS01Iiwid29ya2Zsb3ciOiIuZ2l0aHViL3dvcmtmbG93cy9wcmUtcmVsZWFzZS55bWwifSwiZ2l0aHViX2hlYWRfcmVmIjoiIiwiZ2l0aHViX3JlZiI6InJlZnMvaGVhZHMvZGV2ZWxvcCIsImdpdGh1Yl9yZWZfdHlwZSI6ImJyYW5jaCIsImdpdGh1Yl9yZXBvc2l0b3J5X2lkIjoiMjIxOTE5Mzc5IiwiZ2l0aHViX3JlcG9zaXRvcnlfb3duZXIiOiJhd3MtcG93ZXJ0b29scyIsImdpdGh1Yl9yZXBvc2l0b3J5X293bmVyX2lkIjoiMTI5MTI3NjM4IiwiZ2l0aHViX3J1bl9hdHRlbXB0IjoiMSIsImdpdGh1Yl9ydW5faWQiOiIxNzI2MDkwMTU2NiIsImdpdGh1Yl9ydW5fbnVtYmVyIjoiMzE1IiwiZ2l0aHViX3NoYTEiOiI4MWI1MGVkMmE0MGI4MWE4ZTk3YzZlYjY5NTFmMDhjYjM3NDJjMzllIn19LCJtZXRhZGF0YSI6eyJidWlsZEludm9jYXRpb25JRCI6IjE3MjYwOTAxNTY2LTEiLCJjb21wbGV0ZW5lc3MiOnsicGFyYW1ldGVycyI6dHJ1ZSwiZW52aXJvbm1lbnQiOmZhbHNlLCJtYXRlcmlhbHMiOmZhbHNlfSwicmVwcm9kdWNpYmxlIjpmYWxzZX0sIm1hdGVyaWFscyI6W3sidXJpIjoiZ2l0K2h0dHBzOi8vZ2l0aHViLmNvbS9hd3MtcG93ZXJ0b29scy9wb3dlcnRvb2xzLWxhbWJkYS1weXRob25AcmVmcy9oZWFkcy9kZXZlbG9wIiwiZGlnZXN0Ijp7InNoYTEiOiI4MWI1MGVkMmE0MGI4MWE4ZTk3YzZlYjY5NTFmMDhjYjM3NDJjMzllIn19XX19", "payloadType":"application/vnd.in-toto+json", "signatures":[{"sig":"MEUCIADyx27BR8eeem53aEU9cttWcYOh4toT0VW/3woddu5yAiEAhIXM7Buh0GoImJSIcJXkskjVrruLYkyT5zofabiRg1w="}]}} \ No newline at end of file diff --git a/pyproject.toml b/pyproject.toml index 02b0aec63d9..d120e554c0e 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "aws_lambda_powertools" -version = "3.18.1a9" +version = "3.20.0" description = "Powertools for AWS Lambda (Python) is a developer toolkit to implement Serverless best practices and increase developer velocity." authors = ["Amazon Web Services"] include = ["aws_lambda_powertools/py.typed", "THIRD-PARTY-LICENSES"] @@ -113,13 +113,13 @@ urllib3 = [ { version = ">=1.25.4,!=2.2.0,<3", python = ">=3.10" }, ] requests = ">=2.32.0" -cfn-lint = "1.38.2" +cfn-lint = "1.39.1" mypy = "^1.1.1" types-python-dateutil = "^2.8.19.6" aws-cdk-aws-appsync-alpha = "^2.59.0a0" httpx = ">=0.23.3,<0.29.0" sentry-sdk = ">=1.22.2,<3.0.0" -ruff = ">=0.5.1,<0.12.9" +ruff = ">=0.5.1,<0.12.13" retry2 = "^0.9.5" pytest-socket = ">=0.6,<0.8" types-redis = "^4.6.0.7" diff --git a/tests/unit/parser/_pydantic/test_apigw.py b/tests/unit/parser/_pydantic/test_apigw.py index 9fdf623bcf9..be613c97245 100644 --- a/tests/unit/parser/_pydantic/test_apigw.py +++ b/tests/unit/parser/_pydantic/test_apigw.py @@ -105,6 +105,35 @@ def test_apigw_event(): assert identity.apiKeyId is None +def test_apigw_event_and_source_ip_with_port(): + raw_event = load_event("apiGatewayProxyEvent.json") + raw_event["requestContext"]["identity"]["sourceIp"] = "10.10.10.10:1235" + + APIGatewayProxyEventModel(**raw_event) + + +def test_apigw_event_and_source_ip_with_random_string(): + raw_event = load_event("apiGatewayProxyEvent.json") + raw_event["requestContext"]["identity"]["sourceIp"] = "NON_IP_WITH_OR_WITHOUT_PORT_STRING" + + with pytest.raises(ValidationError): + APIGatewayProxyEventModel(**raw_event) + + +def test_apigw_event_and_source_ip_ipv6(): + raw_event = load_event("apiGatewayProxyEvent.json") + raw_event["requestContext"]["identity"]["sourceIp"] = "fe80::1ff:fe23:4567:890a" + + APIGatewayProxyEventModel(**raw_event) + + +def test_apigw_event_and_source_ip_ipv6_with_port(): + raw_event = load_event("apiGatewayProxyEvent.json") + raw_event["requestContext"]["identity"]["sourceIp"] = "[fe80::1ff:fe23:4567:890a]:12345" + + APIGatewayProxyEventModel(**raw_event) + + def test_apigw_event_with_invalid_websocket_request(): # GIVEN an event with an eventType != MESSAGE and has a messageId event = { diff --git a/tests/unit/parser/_pydantic/test_apigwv2.py b/tests/unit/parser/_pydantic/test_apigwv2.py index ddb849bb68a..a9c7a3ef9e1 100644 --- a/tests/unit/parser/_pydantic/test_apigwv2.py +++ b/tests/unit/parser/_pydantic/test_apigwv2.py @@ -1,3 +1,6 @@ +import pytest +from pydantic import ValidationError + from aws_lambda_powertools.utilities.parser import envelopes, parse from aws_lambda_powertools.utilities.parser.models import ( ApiGatewayAuthorizerRequestV2, @@ -71,6 +74,35 @@ def test_apigw_v2_event_empty_jwt_scopes(): APIGatewayProxyEventV2Model(**raw_event) +def test_apigw_v2_event_and_source_ip_with_port(): + raw_event = load_event("apiGatewayProxyV2Event.json") + raw_event["requestContext"]["http"]["sourceIp"] = "10.10.10.10:1235" + + APIGatewayProxyEventV2Model(**raw_event) + + +def test_apigw_v2_event_and_source_ip_with_random_string(): + raw_event = load_event("apiGatewayProxyV2Event.json") + raw_event["requestContext"]["http"]["sourceIp"] = "NON_IP_WITH_OR_WITHOUT_PORT_STRING" + + with pytest.raises(ValidationError): + APIGatewayProxyEventV2Model(**raw_event) + + +def test_apigw_v2_event_and_source_ip_ipv6(): + raw_event = load_event("apiGatewayProxyV2Event.json") + raw_event["requestContext"]["http"]["sourceIp"] = "fe80::1ff:fe23:4567:890a" + + APIGatewayProxyEventV2Model(**raw_event) + + +def test_apigw_v2_event_and_source_ip_ipv6_with_port(): + raw_event = load_event("apiGatewayProxyV2Event.json") + raw_event["requestContext"]["http"]["sourceIp"] = "[fe80::1ff:fe23:4567:890a]:12345" + + APIGatewayProxyEventV2Model(**raw_event) + + def test_api_gateway_proxy_v2_event_lambda_authorizer(): raw_event = load_event("apiGatewayProxyV2LambdaAuthorizerEvent.json") parsed_event: APIGatewayProxyEventV2Model = APIGatewayProxyEventV2Model(**raw_event) diff --git a/tests/unit/test_shared_functions.py b/tests/unit/test_shared_functions.py index 2cd6a41aa12..7f9effdb5e7 100644 --- a/tests/unit/test_shared_functions.py +++ b/tests/unit/test_shared_functions.py @@ -18,6 +18,7 @@ resolve_max_age, resolve_truthy_env_var_choice, sanitize_xray_segment_name, + slice_dictionary, strtobool, ) from aws_lambda_powertools.utilities.data_classes.common import DictWrapper @@ -202,3 +203,17 @@ def test_sanitize_xray_segment_name_with_no_special_characters(): # THEN the sanitized name remains the same as the original name expected_name = valid_name assert sanitized_name == expected_name + + +@pytest.mark.parametrize( + "chunk_size, expected", + [ + (1, [{"k0": 0}, {"k1": 1}, {"k2": 2}, {"k3": 3}]), + (2, [{"k0": 0, "k1": 1}, {"k2": 2, "k3": 3}]), + (3, [{"k0": 0, "k1": 1, "k2": 2}, {"k3": 3}]), + ], +) +def test_slice_dictionary(chunk_size, expected): + data = {f"k{i}": i for i in range(4)} + chunks = list(slice_dictionary(data, chunk_size=chunk_size)) + assert chunks == expected