diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 0960a6c7e..9d13a0b71 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -31,14 +31,14 @@ jobs: fail-fast: true steps: - name: Set up Go ${{ matrix.go-version }} - uses: actions/setup-go@f111f3307d8850f501ac008e886eec1fd1932a34 # v5.3.0 + uses: actions/setup-go@0aaccfd150d50ccaeb58ebd88d36e91967a5f35b # v5.4.0 with: go-version: ${{ matrix.go-version }} check-latest: true - name: Check out code uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 - name: Cache Go modules - uses: actions/cache@1bd1e32a3bdc45362d1e726936510720a7c30a57 # v4.2.0 + uses: actions/cache@5a3ec84eff668545956fd18022155c47e93e2684 # v4.2.3 id: go-mod-cache with: path: ~/go/pkg/mod @@ -59,6 +59,6 @@ jobs: make e2e-covdata fi - name: Upload coverage to codecov.io - uses: codecov/codecov-action@13ce06bfc6bbe3ecf90edbbf1bc32fe5978ca1d3 # v5.3.1 + uses: codecov/codecov-action@ad3126e916f78f00edff4ed0317cf185271ccc2d # v5.4.2 env: CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }} diff --git a/.github/workflows/codeql.yml b/.github/workflows/codeql.yml index 1cff301fb..07ba6433f 100644 --- a/.github/workflows/codeql.yml +++ b/.github/workflows/codeql.yml @@ -44,13 +44,13 @@ jobs: - name: Checkout repository uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 - name: Set up Go ${{ matrix.go-version }} environment - uses: actions/setup-go@f111f3307d8850f501ac008e886eec1fd1932a34 # v5.3.0 + uses: actions/setup-go@0aaccfd150d50ccaeb58ebd88d36e91967a5f35b # v5.4.0 with: go-version: ${{ matrix.go-version }} check-latest: true - name: Initialize CodeQL - uses: github/codeql-action/init@9e8d0789d4a0fa9ceb6b1738f7e269594bdd67f0 # v3.28.9 + uses: github/codeql-action/init@45775bd8235c68ba998cffa5171334d58593da47 # v3.28.15 with: languages: go - name: Perform CodeQL Analysis - uses: github/codeql-action/analyze@9e8d0789d4a0fa9ceb6b1738f7e269594bdd67f0 # v3.28.9 + uses: github/codeql-action/analyze@45775bd8235c68ba998cffa5171334d58593da47 # v3.28.15 diff --git a/.github/workflows/release-github.yml b/.github/workflows/release-github.yml index 35df27825..502e07945 100644 --- a/.github/workflows/release-github.yml +++ b/.github/workflows/release-github.yml @@ -33,7 +33,7 @@ jobs: fail-fast: true steps: - name: Set up Go ${{ matrix.go-version }} - uses: actions/setup-go@f111f3307d8850f501ac008e886eec1fd1932a34 # v5.3.0 + uses: actions/setup-go@0aaccfd150d50ccaeb58ebd88d36e91967a5f35b # v5.4.0 with: go-version: ${{ matrix.go-version }} check-latest: true @@ -46,10 +46,10 @@ jobs: pre_tag=`git tag --sort=-creatordate --list 'v*' | grep -v dev | head -2 | tail -1` echo "GORELEASER_PREVIOUS_TAG=$pre_tag" >> $GITHUB_ENV - name: Run GoReleaser - uses: goreleaser/goreleaser-action@90a3faa9d0182683851fbfa97ca1a2cb983bfca3 # v6.2.1 + uses: goreleaser/goreleaser-action@9c156ee8a17a598857849441385a2041ef570552 # v6.3.0 with: distribution: goreleaser - version: latest + version: v2 args: release --clean env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/.github/workflows/scorecard.yml b/.github/workflows/scorecard.yml index 7ce7bfac5..53022d38e 100644 --- a/.github/workflows/scorecard.yml +++ b/.github/workflows/scorecard.yml @@ -46,7 +46,7 @@ jobs: persist-credentials: false - name: "Run analysis" - uses: ossf/scorecard-action@62b2cac7ed8198b15735ed49ab1e5cf35480ba46 # tag=v2.4.0 + uses: ossf/scorecard-action@f49aabe0b5af0936a0987cfb85d86b75731b0186 # tag=v2.4.1 with: results_file: results.sarif results_format: sarif @@ -54,13 +54,13 @@ jobs: publish_results: true - name: "Upload artifact" - uses: actions/upload-artifact@65c4c4a1ddee5b72f698fdd19549f0f0fb45cf08 # tag=v4.6.0 + uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # tag=v4.6.2 with: name: SARIF file path: results.sarif retention-days: 5 - name: "Upload to code-scanning" - uses: github/codeql-action/upload-sarif@9e8d0789d4a0fa9ceb6b1738f7e269594bdd67f0 # v3.28.9 + uses: github/codeql-action/upload-sarif@45775bd8235c68ba998cffa5171334d58593da47 # v3.28.15 with: sarif_file: results.sarif diff --git a/.goreleaser.yml b/.goreleaser.yml index 86dbc2453..219e26cab 100644 --- a/.goreleaser.yml +++ b/.goreleaser.yml @@ -11,6 +11,7 @@ # See the License for the specific language governing permissions and # limitations under the License. +version: 2 builds: - main: ./cmd/notation id: notation @@ -37,10 +38,10 @@ builds: ldflags: - -s -w -X {{.ModulePath}}/internal/version.Version={{.Version}} -X {{.ModulePath}}/internal/version.GitCommit={{.FullCommit}} -X {{.ModulePath}}/internal/version.BuildMetadata= archives: - - format: tar.gz + - formats: [ 'tar.gz' ] format_overrides: - goos: windows - format: zip + formats: [ 'zip' ] files: - LICENSE release: diff --git a/README.md b/README.md index c50e9f564..411437c8f 100644 --- a/README.md +++ b/README.md @@ -37,6 +37,7 @@ Notary Project is a [CNCF Incubating project](https://www.cncf.io/projects/notar - [Build Notation from source code](/building.md) - [Governance for Notary Project](https://github.com/notaryproject/.github/blob/master/GOVERNANCE.md) - [Maintainers and reviewers list](https://github.com/notaryproject/notation/blob/main/CODEOWNERS) +- [Contributing Guide](https://github.com/notaryproject/.github/blob/main/CONTRIBUTING.md) - Regular conversations for Notary Project occur on the [Cloud Native Computing Slack](https://slack.cncf.io/) **notary-project** channel. ### Notary Project Community Meeting diff --git a/cmd/notation/cert/add.go b/cmd/notation/cert/add.go index c4d489d31..ce4f4f00c 100644 --- a/cmd/notation/cert/add.go +++ b/cmd/notation/cert/add.go @@ -56,7 +56,7 @@ Example - Add a certificate to the "tsa" type of a named store "timestamp": return addCerts(opts) }, } - command.Flags().StringVarP(&opts.storeType, "type", "t", "", "specify trust store type, options: ca, signingAuthority") + command.Flags().StringVarP(&opts.storeType, "type", "t", "", "specify trust store type, options: ca, signingAuthority, tsa") command.Flags().StringVarP(&opts.namedStore, "store", "s", "", "specify named store") command.MarkFlagRequired("type") command.MarkFlagRequired("store") diff --git a/cmd/notation/cert/delete.go b/cmd/notation/cert/delete.go index 044f240c0..2849d4906 100644 --- a/cmd/notation/cert/delete.go +++ b/cmd/notation/cert/delete.go @@ -67,7 +67,7 @@ Example - Delete certificate "wabbit-networks-timestamp.pem" with "tsa" type fro return deleteCerts(opts) }, } - command.Flags().StringVarP(&opts.storeType, "type", "t", "", "specify trust store type, options: ca, signingAuthority") + command.Flags().StringVarP(&opts.storeType, "type", "t", "", "specify trust store type, options: ca, signingAuthority, tsa") command.Flags().StringVarP(&opts.namedStore, "store", "s", "", "specify named store") command.Flags().BoolVarP(&opts.all, "all", "a", false, "delete all certificates in the named store") command.Flags().BoolVarP(&opts.confirmed, "yes", "y", false, "do not prompt for confirmation") diff --git a/cmd/notation/cert/list.go b/cmd/notation/cert/list.go index 6321ff7b8..aeb145979 100644 --- a/cmd/notation/cert/list.go +++ b/cmd/notation/cert/list.go @@ -63,7 +63,7 @@ Example - List all certificate files from trust store of type "tsa" }, } opts.LoggingFlagOpts.ApplyFlags(command.Flags()) - command.Flags().StringVarP(&opts.storeType, "type", "t", "", "specify trust store type, options: ca, signingAuthority") + command.Flags().StringVarP(&opts.storeType, "type", "t", "", "specify trust store type, options: ca, signingAuthority, tsa") command.Flags().StringVarP(&opts.namedStore, "store", "s", "", "specify named store") return command } diff --git a/cmd/notation/cert/show.go b/cmd/notation/cert/show.go index cc0ff1464..92f606e23 100644 --- a/cmd/notation/cert/show.go +++ b/cmd/notation/cert/show.go @@ -66,7 +66,7 @@ Example - Show details of certificate "wabbit-networks-timestamp.pem" with type }, } opts.LoggingFlagOpts.ApplyFlags(command.Flags()) - command.Flags().StringVarP(&opts.storeType, "type", "t", "", "specify trust store type, options: ca, signingAuthority") + command.Flags().StringVarP(&opts.storeType, "type", "t", "", "specify trust store type, options: ca, signingAuthority, tsa") command.Flags().StringVarP(&opts.namedStore, "store", "s", "", "specify named store") command.MarkFlagRequired("type") command.MarkFlagRequired("store") diff --git a/cmd/notation/main.go b/cmd/notation/main.go index 712668a9f..395f0c201 100644 --- a/cmd/notation/main.go +++ b/cmd/notation/main.go @@ -14,7 +14,9 @@ package main import ( + "context" "os" + "os/signal" "github.com/notaryproject/notation-go/dir" "github.com/notaryproject/notation/cmd/notation/cert" @@ -23,7 +25,7 @@ import ( "github.com/spf13/cobra" ) -func main() { +func run() error { cmd := &cobra.Command{ Use: "notation", Short: "Notation - a tool to sign and verify artifacts", @@ -63,7 +65,14 @@ func main() { versionCommand(), inspectCommand(nil), ) - if err := cmd.Execute(); err != nil { + + ctx, cancel := signal.NotifyContext(context.Background(), os.Interrupt) + defer cancel() + return cmd.ExecuteContext(ctx) +} + +func main() { + if err := run(); err != nil { os.Exit(1) } } diff --git a/cmd/notation/plugin/list.go b/cmd/notation/plugin/list.go index bfc3ebffe..95ddbd1bb 100644 --- a/cmd/notation/plugin/list.go +++ b/cmd/notation/plugin/list.go @@ -16,12 +16,16 @@ package plugin import ( "errors" "fmt" + "io/fs" "os" + "runtime" + "syscall" "text/tabwriter" "github.com/notaryproject/notation-go/dir" "github.com/notaryproject/notation-go/plugin" "github.com/notaryproject/notation-go/plugin/proto" + pluginFramework "github.com/notaryproject/notation-plugin-framework-go/plugin" "github.com/spf13/cobra" ) @@ -58,8 +62,8 @@ func listPlugins(command *cobra.Command) error { var pl plugin.Plugin var resp *proto.GetMetadataResponse - for _, n := range pluginNames { - pl, err = mgr.Get(command.Context(), n) + for _, pluginName := range pluginNames { + pl, err = mgr.Get(command.Context(), pluginName) metaData := &proto.GetMetadataResponse{} if err == nil { resp, err = pl.GetMetadata(command.Context(), &proto.GetMetadataRequest{}) @@ -68,7 +72,32 @@ func listPlugins(command *cobra.Command) error { } } fmt.Fprintf(tw, "%s\t%s\t%s\t%v\t%v\t\n", - n, metaData.Description, metaData.Version, metaData.Capabilities, err) + pluginName, metaData.Description, metaData.Version, metaData.Capabilities, userFriendlyError(pluginName, err)) } return tw.Flush() } + +// userFriendlyError optimizes the error message for the user. +func userFriendlyError(pluginName string, err error) error { + if err == nil { + return nil + } + var pathError *fs.PathError + if errors.As(err, &pathError) { + pluginFileName := pluginFramework.BinaryPrefix + pluginName + if runtime.GOOS == "windows" { + pluginFileName += ".exe" + } + + // for plugin does not exist + if errors.Is(pathError, fs.ErrNotExist) { + return fmt.Errorf("plugin executable file `%s` not found. Use `notation plugin install` command to install the plugin", pluginFileName) + } + + // for plugin is not executable + if pathError.Err == syscall.ENOEXEC { + return fmt.Errorf("plugin file `%s` is not executable. Use `notation plugin install` command to install the plugin. Please ensure that the plugin executable file is compatible with %s/%s", pluginFileName, runtime.GOOS, runtime.GOARCH) + } + } + return err +} diff --git a/go.mod b/go.mod index 5b37c5b79..c2b5f841f 100644 --- a/go.mod +++ b/go.mod @@ -1,33 +1,33 @@ module github.com/notaryproject/notation -go 1.23 +go 1.23.0 require ( - github.com/notaryproject/notation-core-go v1.2.0 - github.com/notaryproject/notation-go v1.3.1 - github.com/notaryproject/tspclient-go v1.0.0 + github.com/notaryproject/notation-core-go v1.3.0 + github.com/notaryproject/notation-go v1.3.2 + github.com/notaryproject/notation-plugin-framework-go v1.0.0 + github.com/notaryproject/tspclient-go v1.0.1-0.20250306063739-4f55b14d9f01 github.com/opencontainers/go-digest v1.0.0 - github.com/opencontainers/image-spec v1.1.0 + github.com/opencontainers/image-spec v1.1.1 github.com/sirupsen/logrus v1.9.3 github.com/spf13/cobra v1.9.1 github.com/spf13/pflag v1.0.6 - golang.org/x/term v0.29.0 + golang.org/x/term v0.31.0 oras.land/oras-go/v2 v2.5.0 ) require ( github.com/Azure/go-ntlmssp v0.0.0-20221128193559-754e69321358 // indirect - github.com/fxamacker/cbor/v2 v2.7.0 // indirect + github.com/fxamacker/cbor/v2 v2.8.0 // indirect github.com/go-asn1-ber/asn1-ber v1.5.7 // indirect github.com/go-ldap/ldap/v3 v3.4.10 // indirect github.com/golang-jwt/jwt/v4 v4.5.2 // indirect github.com/google/uuid v1.6.0 // indirect github.com/inconshreveable/mousetrap v1.1.0 // indirect - github.com/notaryproject/notation-plugin-framework-go v1.0.0 // indirect github.com/veraison/go-cose v1.3.0 // indirect github.com/x448/float16 v0.8.4 // indirect - golang.org/x/crypto v0.33.0 // indirect - golang.org/x/mod v0.23.0 // indirect + golang.org/x/crypto v0.37.0 // indirect + golang.org/x/mod v0.24.0 // indirect golang.org/x/sync v0.10.0 // indirect - golang.org/x/sys v0.30.0 // indirect + golang.org/x/sys v0.32.0 // indirect ) diff --git a/go.sum b/go.sum index 43c63a466..4727de990 100644 --- a/go.sum +++ b/go.sum @@ -6,14 +6,12 @@ github.com/cpuguy83/go-md2man/v2 v2.0.6/go.mod h1:oOW0eioCTA6cOiMLiUPZOpcVxMig6N github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/fxamacker/cbor/v2 v2.7.0 h1:iM5WgngdRBanHcxugY4JySA0nk1wZorNOpTgCMedv5E= -github.com/fxamacker/cbor/v2 v2.7.0/go.mod h1:pxXPTn3joSm21Gbwsv0w9OSA2y1HFR9qXEeXQVeNoDQ= +github.com/fxamacker/cbor/v2 v2.8.0 h1:fFtUGXUzXPHTIUdne5+zzMPTfffl3RD5qYnkY40vtxU= +github.com/fxamacker/cbor/v2 v2.8.0/go.mod h1:vM4b+DJCtHn+zz7h3FFp/hDAI9WNWCsZj23V5ytsSxQ= github.com/go-asn1-ber/asn1-ber v1.5.7 h1:DTX+lbVTWaTw1hQ+PbZPlnDZPEIs0SS/GCZAl535dDk= github.com/go-asn1-ber/asn1-ber v1.5.7/go.mod h1:hEBeB/ic+5LoWskz+yKT7vGhhPYkProFKoKdwZRWMe0= github.com/go-ldap/ldap/v3 v3.4.10 h1:ot/iwPOhfpNVgB1o+AVXljizWZ9JTp7YF5oeyONmcJU= github.com/go-ldap/ldap/v3 v3.4.10/go.mod h1:JXh4Uxgi40P6E9rdsYqpUtbW46D9UTjJ9QSwGRznplY= -github.com/golang-jwt/jwt/v4 v4.5.1 h1:JdqV9zKUdtaa9gdPlywC3aeoEsR681PlKC+4F5gQgeo= -github.com/golang-jwt/jwt/v4 v4.5.1/go.mod h1:m21LjoU+eqJr34lmDMbreY2eSTRJ1cv77w39/MY0Ch0= github.com/golang-jwt/jwt/v4 v4.5.2 h1:YtQM7lnr8iZ+j5q71MGKkNw9Mn7AjHM68uc9g5fXeUI= github.com/golang-jwt/jwt/v4 v4.5.2/go.mod h1:m21LjoU+eqJr34lmDMbreY2eSTRJ1cv77w39/MY0Ch0= github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= @@ -38,18 +36,18 @@ github.com/jcmturner/gokrb5/v8 v8.4.4 h1:x1Sv4HaTpepFkXbt2IkL29DXRf8sOfZXo8eRKh6 github.com/jcmturner/gokrb5/v8 v8.4.4/go.mod h1:1btQEpgT6k+unzCwX1KdWMEwPPkkgBtP+F6aCACiMrs= github.com/jcmturner/rpc/v2 v2.0.3 h1:7FXXj8Ti1IaVFpSAziCZWNzbNuZmnvw/i6CqLNdWfZY= github.com/jcmturner/rpc/v2 v2.0.3/go.mod h1:VUJYCIDm3PVOEHw8sgt091/20OJjskO/YJki3ELg/Hc= -github.com/notaryproject/notation-core-go v1.2.0 h1:WElMG9X0YXJhBd0A4VOxLNalTLrTjvqtIAj7JHr5X08= -github.com/notaryproject/notation-core-go v1.2.0/go.mod h1:+y3L1dOs2/ZwJIU5Imo7BBvZ/M3CFjXkydGGdK09EtA= -github.com/notaryproject/notation-go v1.3.1 h1:JLJ9HiwMwPAFNkJEBkF8iBdNazdEKrGAylOKoFjTd6o= -github.com/notaryproject/notation-go v1.3.1/go.mod h1:Qytzn2v8nYkA9G44fbXKh1Tnvz8ONmod2Tgtkrl5zYc= +github.com/notaryproject/notation-core-go v1.3.0 h1:mWJaw1QBpBxpjLSiKOjzbZvB+xh2Abzk14FHWQ+9Kfs= +github.com/notaryproject/notation-core-go v1.3.0/go.mod h1:hzvEOit5lXfNATGNBT8UQRx2J6Fiw/dq/78TQL8aE64= +github.com/notaryproject/notation-go v1.3.2 h1:4223iLXOHhEV7ZPzIUJEwwMkhlgzoYFCsMJvSH1Chb8= +github.com/notaryproject/notation-go v1.3.2/go.mod h1:/1kuq5WuLF6Gaer5re0Z6HlkQRlKYO4EbWWT/L7J1Uw= github.com/notaryproject/notation-plugin-framework-go v1.0.0 h1:6Qzr7DGXoCgXEQN+1gTZWuJAZvxh3p8Lryjn5FaLzi4= github.com/notaryproject/notation-plugin-framework-go v1.0.0/go.mod h1:RqWSrTOtEASCrGOEffq0n8pSg2KOgKYiWqFWczRSics= -github.com/notaryproject/tspclient-go v1.0.0 h1:AwQ4x0gX8IHnyiZB1tggpn5NFqHpTEm1SDX8YNv4Dg4= -github.com/notaryproject/tspclient-go v1.0.0/go.mod h1:LGyA/6Kwd2FlM0uk8Vc5il3j0CddbWSHBj/4kxQDbjs= +github.com/notaryproject/tspclient-go v1.0.1-0.20250306063739-4f55b14d9f01 h1:Ay72jBeHKqBFk6TbJWywfwzefN3Ei7Py2OzCiWU/7nk= +github.com/notaryproject/tspclient-go v1.0.1-0.20250306063739-4f55b14d9f01/go.mod h1:3ZJPmpmdwufY23BkS+JPNktOVb5DXJ8Ik5zxvN7h670= github.com/opencontainers/go-digest v1.0.0 h1:apOUWs51W5PlhuyGyz9FCeeBIOUDA/6nW8Oi/yOhh5U= github.com/opencontainers/go-digest v1.0.0/go.mod h1:0JzlMkj0TRzQZfJkVvzbP0HBR3IKzErnv2BNG4W4MAM= -github.com/opencontainers/image-spec v1.1.0 h1:8SG7/vwALn54lVB/0yZ/MMwhFrPYtpEHQb2IpWsCzug= -github.com/opencontainers/image-spec v1.1.0/go.mod h1:W4s4sFTMaBeK1BQLXbG4AdM2szdn85PY75RI83NrTrM= +github.com/opencontainers/image-spec v1.1.1 h1:y0fUlFfIZhPF1W537XOLg0/fcx6zcHCJwooC2xJA040= +github.com/opencontainers/image-spec v1.1.1/go.mod h1:qpqAh3Dmcf36wStyyWU+kCeDgrGnAve2nCC8+7h8Q0M= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= @@ -80,15 +78,15 @@ golang.org/x/crypto v0.13.0/go.mod h1:y6Z2r+Rw4iayiXXAIxJIDAJ1zMW4yaTpebo8fPOliY golang.org/x/crypto v0.19.0/go.mod h1:Iy9bg/ha4yyC70EfRS8jz+B6ybOBKMaSxLj6P6oBDfU= golang.org/x/crypto v0.23.0/go.mod h1:CKFgDieR+mRhux2Lsu27y0fO304Db0wZe70UKqHu0v8= golang.org/x/crypto v0.31.0/go.mod h1:kDsLvtWBEx7MV9tJOj9bnXsPbxwJQ6csT/x4KIN4Ssk= -golang.org/x/crypto v0.33.0 h1:IOBPskki6Lysi0lo9qQvbxiQ+FvsCC/YWOecCHAixus= -golang.org/x/crypto v0.33.0/go.mod h1:bVdXmD7IV/4GdElGPozy6U7lWdRXA4qyRVGJV57uQ5M= +golang.org/x/crypto v0.37.0 h1:kJNSjF/Xp7kU0iB2Z+9viTPMW4EqqsrywMXLJOOsXSE= +golang.org/x/crypto v0.37.0/go.mod h1:vg+k43peMZ0pUMhYmVAWysMK35e6ioLh3wB8ZCAfbVc= golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= golang.org/x/mod v0.12.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= golang.org/x/mod v0.15.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= golang.org/x/mod v0.17.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= -golang.org/x/mod v0.23.0 h1:Zb7khfcRGKk+kqfxFaP5tZqCnDZMjC5VtUBs87Hr6QM= -golang.org/x/mod v0.23.0/go.mod h1:6SkKJ3Xj0I0BrPOZoBy3bdMptDDU9oJrpohJ3eWZ1fY= +golang.org/x/mod v0.24.0 h1:ZfthKaKaT4NrhGVZHO1/WDTwGES4De8KtWO0SIbNJMU= +golang.org/x/mod v0.24.0/go.mod h1:IXM97Txy2VM4PJ3gI61r1YEk/gAj6zAHN3AdZt6S9Ww= golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200114155413-6afb5195e5aa/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= @@ -121,8 +119,8 @@ golang.org/x/sys v0.12.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.17.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/sys v0.20.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/sys v0.28.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= -golang.org/x/sys v0.30.0 h1:QjkSwP/36a20jFYWkSue1YwXzLmsV5Gfq7Eiy72C1uc= -golang.org/x/sys v0.30.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.32.0 h1:s77OFDvIQeibCmezSnk/q6iAfkdiQaJi4VzroCFrN20= +golang.org/x/sys v0.32.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k= golang.org/x/telemetry v0.0.0-20240228155512-f48c80bd79b2/go.mod h1:TeRTkGYfJXctD9OcfyVLyj2J3IxLnKwHJR8f4D8a3YE= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= @@ -132,8 +130,8 @@ golang.org/x/term v0.12.0/go.mod h1:owVbMEjm3cBLCHdkQu9b1opXd4ETQWc3BhuQGKgXgvU= golang.org/x/term v0.17.0/go.mod h1:lLRBjIVuehSbZlaOtGMbcMncT+aqLLLmKrsjNrUguwk= golang.org/x/term v0.20.0/go.mod h1:8UkIAJTvZgivsXaD6/pH6U9ecQzZ45awqEOzuCvwpFY= golang.org/x/term v0.27.0/go.mod h1:iMsnZpn0cago0GOrHO2+Y7u7JPn5AylBrcoWkElMTSM= -golang.org/x/term v0.29.0 h1:L6pJp37ocefwRRtYPKSWOWzOtWSxVajvz2ldH/xi3iU= -golang.org/x/term v0.29.0/go.mod h1:6bl4lRlvVuDgSf3179VpIxBF0o10JUpXWOnI7nErv7s= +golang.org/x/term v0.31.0 h1:erwDkOK1Msy6offm1mOgvspSkslFnIGsFnxOKoufg3o= +golang.org/x/term v0.31.0/go.mod h1:R4BeIy7D95HzImkxGkTW1UQTtP54tio2RyHz7PwK0aw= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= diff --git a/specs/commandline/certificate.md b/specs/commandline/certificate.md index 2822d79e0..2d5167f4e 100644 --- a/specs/commandline/certificate.md +++ b/specs/commandline/certificate.md @@ -4,10 +4,11 @@ Use ```notation certificate``` command to add/list/delete certificates in notation's trust store. Updating an existing certificate is not allowed since the thumbprint will be inconsistent, which results in a new certificate. -The trust store is in the format of a directory in the filesystem as`x509///*.crt|*.cer|*.pem`. Currently two types of trust store are supported: +The trust store is in the format of a directory in the filesystem as`x509///*.crt|*.cer|*.pem`. Currently three types of trust store are supported: -* `Certificate Authority`: The directory name is `ca`. +* `Certificate Authority`: The directory name is `ca` * `Signing Authority`: The directory name is `signingAuthority` +* `Timestamping Authority`: The directory name is `tsa` There could be more trust store types introduced in the future. @@ -26,9 +27,13 @@ $XDG_CONFIG_HOME/notation/truststore /signingAuthority /wabbit-networks cert3.crt + + /tsa + /trusted-tsa + tsa.crt ``` -In this example, there are two certificates stored in trust store named `acme-rockets` of type `ca`. There is one certificate stored in trust store named `wabbit-networks` of type `signingAuthority`. +In this example, there are two certificates stored in trust store named `acme-rockets` of type `ca`. There is one certificate stored in trust store named `wabbit-networks` of type `signingAuthority`. And there is one certificate stored in trust store named `trusted-tsa` of type `tsa`. ## Outline @@ -65,7 +70,7 @@ Usage: Flags: -h, --help help for add -s, --store string specify named store - -t, --type string specify trust store type, options: ca, signingAuthority + -t, --type string specify trust store type, options: ca, signingAuthority, tsa ``` ### notation certificate list @@ -83,7 +88,7 @@ Flags: -d, --debug debug mode -h, --help help for list -s, --store string specify named store - -t, --type string specify trust store type, options: ca, signingAuthority + -t, --type string specify trust store type, options: ca, signingAuthority, tsa -v, --verbose verbose mode ``` @@ -99,7 +104,7 @@ Flags: -d, --debug debug mode -h, --help help for show -s, --store string specify named store - -t, --type string specify trust store type, options: ca, signingAuthority + -t, --type string specify trust store type, options: ca, signingAuthority, tsa -v, --verbose verbose mode ``` @@ -115,7 +120,7 @@ Flags: -a, --all delete all certificates in the named store -h, --help help for delete -s, --store string specify named store - -t, --type string specify trust store type, options: ca, signingAuthority + -t, --type string specify trust store type, options: ca, signingAuthority, tsa -y, --yes do not prompt for confirmation ``` @@ -155,11 +160,12 @@ Upon successful listing, all the certificate files in the trust store are printe An example of the output: ``` -STORE TYPE STORE NAME CERTIFICATE -ca myStore1 cert1.pem -ca myStore2 cert2.crt -signingAuthority myStore1 cert3.crt +STORE TYPE STORE NAME CERTIFICATE +ca myStore1 cert1.pem +ca myStore2 cert2.crt +signingAuthority myStore1 cert3.crt signingAuthority myStore2 cert4.pem +tsa myTSA tsa.crt ``` ### List all certificate files of a certain named store @@ -219,7 +225,7 @@ notation certificate delete --type --store A prompt is displayed, asking the user to confirm the deletion. Upon successful deletion, the specific certificate is deleted from the trust store named `` of type ``. The output message is printed out as following: ```text -Successfully deleted from the trust store. +Successfully deleted from the trust store. ``` If users execute the deletion without specifying required flags using `notation cert delete `, the deletion fails and the error output message is printed out as follows: diff --git a/test/e2e/go.mod b/test/e2e/go.mod index b8d0a1ed5..5ec245654 100644 --- a/test/e2e/go.mod +++ b/test/e2e/go.mod @@ -1,32 +1,33 @@ module github.com/notaryproject/notation/test/e2e -go 1.23 +go 1.23.0 require ( - github.com/notaryproject/notation-core-go v1.2.0 - github.com/notaryproject/notation-go v1.3.1 - github.com/onsi/ginkgo/v2 v2.22.2 - github.com/onsi/gomega v1.36.2 - github.com/opencontainers/image-spec v1.1.0 + github.com/notaryproject/notation-core-go v1.3.0 + github.com/notaryproject/notation-go v1.3.2 + github.com/onsi/ginkgo/v2 v2.23.4 + github.com/onsi/gomega v1.37.0 + github.com/opencontainers/image-spec v1.1.1 oras.land/oras-go/v2 v2.5.0 ) require ( - github.com/fxamacker/cbor/v2 v2.7.0 // indirect + github.com/fxamacker/cbor/v2 v2.8.0 // indirect github.com/go-logr/logr v1.4.2 // indirect github.com/go-task/slim-sprig/v3 v3.0.0 // indirect - github.com/google/go-cmp v0.6.0 // indirect - github.com/google/pprof v0.0.0-20241210010833-40e02aabc2ad // indirect - github.com/notaryproject/tspclient-go v1.0.0 // indirect + github.com/google/go-cmp v0.7.0 // indirect + github.com/google/pprof v0.0.0-20250403155104-27863c87afa6 // indirect + github.com/notaryproject/tspclient-go v1.0.1-0.20250306063739-4f55b14d9f01 // indirect github.com/opencontainers/go-digest v1.0.0 // indirect github.com/veraison/go-cose v1.3.0 // indirect github.com/x448/float16 v0.8.4 // indirect - golang.org/x/crypto v0.33.0 // indirect - golang.org/x/net v0.33.0 // indirect - golang.org/x/sync v0.11.0 // indirect - golang.org/x/sys v0.30.0 // indirect - golang.org/x/text v0.22.0 // indirect - golang.org/x/tools v0.28.0 // indirect + go.uber.org/automaxprocs v1.6.0 // indirect + golang.org/x/crypto v0.37.0 // indirect + golang.org/x/net v0.38.0 // indirect + golang.org/x/sync v0.13.0 // indirect + golang.org/x/sys v0.32.0 // indirect + golang.org/x/text v0.24.0 // indirect + golang.org/x/tools v0.31.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect ) diff --git a/test/e2e/go.sum b/test/e2e/go.sum index c8ae423b6..9a11a48af 100644 --- a/test/e2e/go.sum +++ b/test/e2e/go.sum @@ -1,53 +1,62 @@ github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/fxamacker/cbor/v2 v2.7.0 h1:iM5WgngdRBanHcxugY4JySA0nk1wZorNOpTgCMedv5E= -github.com/fxamacker/cbor/v2 v2.7.0/go.mod h1:pxXPTn3joSm21Gbwsv0w9OSA2y1HFR9qXEeXQVeNoDQ= +github.com/fxamacker/cbor/v2 v2.8.0 h1:fFtUGXUzXPHTIUdne5+zzMPTfffl3RD5qYnkY40vtxU= +github.com/fxamacker/cbor/v2 v2.8.0/go.mod h1:vM4b+DJCtHn+zz7h3FFp/hDAI9WNWCsZj23V5ytsSxQ= github.com/go-logr/logr v1.4.2 h1:6pFjapn8bFcIbiKo3XT4j/BhANplGihG6tvd+8rYgrY= github.com/go-logr/logr v1.4.2/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= github.com/go-task/slim-sprig/v3 v3.0.0 h1:sUs3vkvUymDpBKi3qH1YSqBQk9+9D/8M2mN1vB6EwHI= github.com/go-task/slim-sprig/v3 v3.0.0/go.mod h1:W848ghGpv3Qj3dhTPRyJypKRiqCdHZiAzKg9hl15HA8= -github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= -github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= -github.com/google/pprof v0.0.0-20241210010833-40e02aabc2ad h1:a6HEuzUHeKH6hwfN/ZoQgRgVIWFJljSWa/zetS2WTvg= -github.com/google/pprof v0.0.0-20241210010833-40e02aabc2ad/go.mod h1:vavhavw2zAxS5dIdcRluK6cSGGPlZynqzFM8NdvU144= -github.com/notaryproject/notation-core-go v1.2.0 h1:WElMG9X0YXJhBd0A4VOxLNalTLrTjvqtIAj7JHr5X08= -github.com/notaryproject/notation-core-go v1.2.0/go.mod h1:+y3L1dOs2/ZwJIU5Imo7BBvZ/M3CFjXkydGGdK09EtA= -github.com/notaryproject/notation-go v1.3.1 h1:JLJ9HiwMwPAFNkJEBkF8iBdNazdEKrGAylOKoFjTd6o= -github.com/notaryproject/notation-go v1.3.1/go.mod h1:Qytzn2v8nYkA9G44fbXKh1Tnvz8ONmod2Tgtkrl5zYc= -github.com/notaryproject/tspclient-go v1.0.0 h1:AwQ4x0gX8IHnyiZB1tggpn5NFqHpTEm1SDX8YNv4Dg4= -github.com/notaryproject/tspclient-go v1.0.0/go.mod h1:LGyA/6Kwd2FlM0uk8Vc5il3j0CddbWSHBj/4kxQDbjs= -github.com/onsi/ginkgo/v2 v2.22.2 h1:/3X8Panh8/WwhU/3Ssa6rCKqPLuAkVY2I0RoyDLySlU= -github.com/onsi/ginkgo/v2 v2.22.2/go.mod h1:oeMosUL+8LtarXBHu/c0bx2D/K9zyQ6uX3cTyztHwsk= -github.com/onsi/gomega v1.36.2 h1:koNYke6TVk6ZmnyHrCXba/T/MoLBXFjeC1PtvYgw0A8= -github.com/onsi/gomega v1.36.2/go.mod h1:DdwyADRjrc825LhMEkD76cHR5+pUnjhUN8GlHlRPHzY= +github.com/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8= +github.com/google/go-cmp v0.7.0/go.mod h1:pXiqmnSA92OHEEa9HXL2W4E7lf9JzCmGVUdgjX3N/iU= +github.com/google/pprof v0.0.0-20250403155104-27863c87afa6 h1:BHT72Gu3keYf3ZEu2J0b1vyeLSOYI8bm5wbJM/8yDe8= +github.com/google/pprof v0.0.0-20250403155104-27863c87afa6/go.mod h1:boTsfXsheKC2y+lKOCMpSfarhxDeIzfZG1jqGcPl3cA= +github.com/kr/pretty v0.1.0 h1:L/CwN0zerZDmRFUapSPitk6f+Q3+0za1rQkzVuMiMFI= +github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= +github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= +github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= +github.com/notaryproject/notation-core-go v1.3.0 h1:mWJaw1QBpBxpjLSiKOjzbZvB+xh2Abzk14FHWQ+9Kfs= +github.com/notaryproject/notation-core-go v1.3.0/go.mod h1:hzvEOit5lXfNATGNBT8UQRx2J6Fiw/dq/78TQL8aE64= +github.com/notaryproject/notation-go v1.3.2 h1:4223iLXOHhEV7ZPzIUJEwwMkhlgzoYFCsMJvSH1Chb8= +github.com/notaryproject/notation-go v1.3.2/go.mod h1:/1kuq5WuLF6Gaer5re0Z6HlkQRlKYO4EbWWT/L7J1Uw= +github.com/notaryproject/tspclient-go v1.0.1-0.20250306063739-4f55b14d9f01 h1:Ay72jBeHKqBFk6TbJWywfwzefN3Ei7Py2OzCiWU/7nk= +github.com/notaryproject/tspclient-go v1.0.1-0.20250306063739-4f55b14d9f01/go.mod h1:3ZJPmpmdwufY23BkS+JPNktOVb5DXJ8Ik5zxvN7h670= +github.com/onsi/ginkgo/v2 v2.23.4 h1:ktYTpKJAVZnDT4VjxSbiBenUjmlL/5QkBEocaWXiQus= +github.com/onsi/ginkgo/v2 v2.23.4/go.mod h1:Bt66ApGPBFzHyR+JO10Zbt0Gsp4uWxu5mIOTusL46e8= +github.com/onsi/gomega v1.37.0 h1:CdEG8g0S133B4OswTDC/5XPSzE1OeP29QOioj2PID2Y= +github.com/onsi/gomega v1.37.0/go.mod h1:8D9+Txp43QWKhM24yyOBEdpkzN8FvJyAwecBgsU4KU0= github.com/opencontainers/go-digest v1.0.0 h1:apOUWs51W5PlhuyGyz9FCeeBIOUDA/6nW8Oi/yOhh5U= github.com/opencontainers/go-digest v1.0.0/go.mod h1:0JzlMkj0TRzQZfJkVvzbP0HBR3IKzErnv2BNG4W4MAM= -github.com/opencontainers/image-spec v1.1.0 h1:8SG7/vwALn54lVB/0yZ/MMwhFrPYtpEHQb2IpWsCzug= -github.com/opencontainers/image-spec v1.1.0/go.mod h1:W4s4sFTMaBeK1BQLXbG4AdM2szdn85PY75RI83NrTrM= +github.com/opencontainers/image-spec v1.1.1 h1:y0fUlFfIZhPF1W537XOLg0/fcx6zcHCJwooC2xJA040= +github.com/opencontainers/image-spec v1.1.1/go.mod h1:qpqAh3Dmcf36wStyyWU+kCeDgrGnAve2nCC8+7h8Q0M= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/prashantv/gostub v1.1.0 h1:BTyx3RfQjRHnUWaGF9oQos79AlQ5k8WNktv7VGvVH4g= +github.com/prashantv/gostub v1.1.0/go.mod h1:A5zLQHz7ieHGG7is6LLXLz7I8+3LZzsrV0P1IAHhP5U= github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk= github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= github.com/veraison/go-cose v1.3.0 h1:2/H5w8kdSpQJyVtIhx8gmwPJ2uSz1PkyWFx0idbd7rk= github.com/veraison/go-cose v1.3.0/go.mod h1:df09OV91aHoQWLmy1KsDdYiagtXgyAwAl8vFeFn1gMc= github.com/x448/float16 v0.8.4 h1:qLwI1I70+NjRFUR3zs1JPUCgaCXSh3SW62uAKT1mSBM= github.com/x448/float16 v0.8.4/go.mod h1:14CWIYCyZA/cWjXOioeEpHeN/83MdbZDRQHoFcYsOfg= -golang.org/x/crypto v0.33.0 h1:IOBPskki6Lysi0lo9qQvbxiQ+FvsCC/YWOecCHAixus= -golang.org/x/crypto v0.33.0/go.mod h1:bVdXmD7IV/4GdElGPozy6U7lWdRXA4qyRVGJV57uQ5M= -golang.org/x/net v0.33.0 h1:74SYHlV8BIgHIFC/LrYkOGIwL19eTYXQ5wc6TBuO36I= -golang.org/x/net v0.33.0/go.mod h1:HXLR5J+9DxmrqMwG9qjGCxZ+zKXxBru04zlTvWlWuN4= -golang.org/x/sync v0.11.0 h1:GGz8+XQP4FvTTrjZPzNKTMFtSXH80RAzG+5ghFPgK9w= -golang.org/x/sync v0.11.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= -golang.org/x/sys v0.30.0 h1:QjkSwP/36a20jFYWkSue1YwXzLmsV5Gfq7Eiy72C1uc= -golang.org/x/sys v0.30.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= -golang.org/x/text v0.22.0 h1:bofq7m3/HAFvbF51jz3Q9wLg3jkvSPuiZu/pD1XwgtM= -golang.org/x/text v0.22.0/go.mod h1:YRoo4H8PVmsu+E3Ou7cqLVH8oXWIHVoX0jqUWALQhfY= -golang.org/x/tools v0.28.0 h1:WuB6qZ4RPCQo5aP3WdKZS7i595EdWqWR8vqJTlwTVK8= -golang.org/x/tools v0.28.0/go.mod h1:dcIOrVd3mfQKTgrDVQHqCPMWy6lnhfhtX3hLXYVLfRw= -google.golang.org/protobuf v1.36.1 h1:yBPeRvTftaleIgM3PZ/WBIZ7XM/eEYAaEyCwvyjq/gk= -google.golang.org/protobuf v1.36.1/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE= -gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM= +go.uber.org/automaxprocs v1.6.0 h1:O3y2/QNTOdbF+e/dpXNNW7Rx2hZ4sTIPyybbxyNqTUs= +go.uber.org/automaxprocs v1.6.0/go.mod h1:ifeIMSnPZuznNm6jmdzmU3/bfk01Fe2fotchwEFJ8r8= +golang.org/x/crypto v0.37.0 h1:kJNSjF/Xp7kU0iB2Z+9viTPMW4EqqsrywMXLJOOsXSE= +golang.org/x/crypto v0.37.0/go.mod h1:vg+k43peMZ0pUMhYmVAWysMK35e6ioLh3wB8ZCAfbVc= +golang.org/x/net v0.38.0 h1:vRMAPTMaeGqVhG5QyLJHqNDwecKTomGeqbnfZyKlBI8= +golang.org/x/net v0.38.0/go.mod h1:ivrbrMbzFq5J41QOQh0siUuly180yBYtLp+CKbEaFx8= +golang.org/x/sync v0.13.0 h1:AauUjRAJ9OSnvULf/ARrrVywoJDy0YS2AwQ98I37610= +golang.org/x/sync v0.13.0/go.mod h1:1dzgHSNfp02xaA81J2MS99Qcpr2w7fw1gpm99rleRqA= +golang.org/x/sys v0.32.0 h1:s77OFDvIQeibCmezSnk/q6iAfkdiQaJi4VzroCFrN20= +golang.org/x/sys v0.32.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k= +golang.org/x/text v0.24.0 h1:dd5Bzh4yt5KYA8f9CJHCP4FB4D51c2c6JvN37xJJkJ0= +golang.org/x/text v0.24.0/go.mod h1:L8rBsPeo2pSS+xqN0d5u2ikmjtmoJbDBT1b7nHvFCdU= +golang.org/x/tools v0.31.0 h1:0EedkvKDbh+qistFTd0Bcwe/YLh4vHwWEkiI0toFIBU= +golang.org/x/tools v0.31.0/go.mod h1:naFTU+Cev749tSJRXJlna0T3WxKvb1kWEx15xA4SdmQ= +google.golang.org/protobuf v1.36.5 h1:tPhr+woSbjfYvY6/GPufUoYizxw1cF/yFoxJ2fmpwlM= +google.golang.org/protobuf v1.36.5/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 h1:qIbj1fsPNlZgppZ+VLlY7N33q108Sa+fhmuc+sWQYwY= +gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= oras.land/oras-go/v2 v2.5.0 h1:o8Me9kLY74Vp5uw07QXPiitjsw7qNXi8Twd+19Zf02c= diff --git a/test/e2e/plugin/go.mod b/test/e2e/plugin/go.mod index b5fc961d7..1f1d351d5 100644 --- a/test/e2e/plugin/go.mod +++ b/test/e2e/plugin/go.mod @@ -1,31 +1,31 @@ module github.com/notaryproject/notation/test/e2e/plugin -go 1.23 +go 1.23.0 require ( github.com/golang-jwt/jwt v3.2.2+incompatible - github.com/notaryproject/notation-core-go v1.2.0 - github.com/notaryproject/notation-go v1.3.1 + github.com/notaryproject/notation-core-go v1.3.0 + github.com/notaryproject/notation-go v1.3.2 github.com/notaryproject/notation-plugin-framework-go v1.0.0 github.com/spf13/cobra v1.9.1 ) require ( github.com/Azure/go-ntlmssp v0.0.0-20221128193559-754e69321358 // indirect - github.com/fxamacker/cbor/v2 v2.7.0 // indirect + github.com/fxamacker/cbor/v2 v2.8.0 // indirect github.com/go-asn1-ber/asn1-ber v1.5.7 // indirect github.com/go-ldap/ldap/v3 v3.4.10 // indirect - github.com/golang-jwt/jwt/v4 v4.5.1 // indirect + github.com/golang-jwt/jwt/v4 v4.5.2 // indirect github.com/google/uuid v1.6.0 // indirect github.com/inconshreveable/mousetrap v1.1.0 // indirect - github.com/notaryproject/tspclient-go v1.0.0 // indirect + github.com/notaryproject/tspclient-go v1.0.1-0.20250306063739-4f55b14d9f01 // indirect github.com/opencontainers/go-digest v1.0.0 // indirect - github.com/opencontainers/image-spec v1.1.0 // indirect + github.com/opencontainers/image-spec v1.1.1 // indirect github.com/spf13/pflag v1.0.6 // indirect github.com/veraison/go-cose v1.3.0 // indirect github.com/x448/float16 v0.8.4 // indirect - golang.org/x/crypto v0.33.0 // indirect - golang.org/x/mod v0.23.0 // indirect + golang.org/x/crypto v0.37.0 // indirect + golang.org/x/mod v0.24.0 // indirect golang.org/x/sync v0.10.0 // indirect oras.land/oras-go/v2 v2.5.0 // indirect ) diff --git a/test/e2e/plugin/go.sum b/test/e2e/plugin/go.sum index a76d57ed3..3d81726c5 100644 --- a/test/e2e/plugin/go.sum +++ b/test/e2e/plugin/go.sum @@ -6,16 +6,16 @@ github.com/cpuguy83/go-md2man/v2 v2.0.6/go.mod h1:oOW0eioCTA6cOiMLiUPZOpcVxMig6N github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/fxamacker/cbor/v2 v2.7.0 h1:iM5WgngdRBanHcxugY4JySA0nk1wZorNOpTgCMedv5E= -github.com/fxamacker/cbor/v2 v2.7.0/go.mod h1:pxXPTn3joSm21Gbwsv0w9OSA2y1HFR9qXEeXQVeNoDQ= +github.com/fxamacker/cbor/v2 v2.8.0 h1:fFtUGXUzXPHTIUdne5+zzMPTfffl3RD5qYnkY40vtxU= +github.com/fxamacker/cbor/v2 v2.8.0/go.mod h1:vM4b+DJCtHn+zz7h3FFp/hDAI9WNWCsZj23V5ytsSxQ= github.com/go-asn1-ber/asn1-ber v1.5.7 h1:DTX+lbVTWaTw1hQ+PbZPlnDZPEIs0SS/GCZAl535dDk= github.com/go-asn1-ber/asn1-ber v1.5.7/go.mod h1:hEBeB/ic+5LoWskz+yKT7vGhhPYkProFKoKdwZRWMe0= github.com/go-ldap/ldap/v3 v3.4.10 h1:ot/iwPOhfpNVgB1o+AVXljizWZ9JTp7YF5oeyONmcJU= github.com/go-ldap/ldap/v3 v3.4.10/go.mod h1:JXh4Uxgi40P6E9rdsYqpUtbW46D9UTjJ9QSwGRznplY= github.com/golang-jwt/jwt v3.2.2+incompatible h1:IfV12K8xAKAnZqdXVzCZ+TOjboZ2keLg81eXfW3O+oY= github.com/golang-jwt/jwt v3.2.2+incompatible/go.mod h1:8pz2t5EyA70fFQQSrl6XZXzqecmYZeUEB8OUGHkxJ+I= -github.com/golang-jwt/jwt/v4 v4.5.1 h1:JdqV9zKUdtaa9gdPlywC3aeoEsR681PlKC+4F5gQgeo= -github.com/golang-jwt/jwt/v4 v4.5.1/go.mod h1:m21LjoU+eqJr34lmDMbreY2eSTRJ1cv77w39/MY0Ch0= +github.com/golang-jwt/jwt/v4 v4.5.2 h1:YtQM7lnr8iZ+j5q71MGKkNw9Mn7AjHM68uc9g5fXeUI= +github.com/golang-jwt/jwt/v4 v4.5.2/go.mod h1:m21LjoU+eqJr34lmDMbreY2eSTRJ1cv77w39/MY0Ch0= github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= @@ -38,18 +38,18 @@ github.com/jcmturner/gokrb5/v8 v8.4.4 h1:x1Sv4HaTpepFkXbt2IkL29DXRf8sOfZXo8eRKh6 github.com/jcmturner/gokrb5/v8 v8.4.4/go.mod h1:1btQEpgT6k+unzCwX1KdWMEwPPkkgBtP+F6aCACiMrs= github.com/jcmturner/rpc/v2 v2.0.3 h1:7FXXj8Ti1IaVFpSAziCZWNzbNuZmnvw/i6CqLNdWfZY= github.com/jcmturner/rpc/v2 v2.0.3/go.mod h1:VUJYCIDm3PVOEHw8sgt091/20OJjskO/YJki3ELg/Hc= -github.com/notaryproject/notation-core-go v1.2.0 h1:WElMG9X0YXJhBd0A4VOxLNalTLrTjvqtIAj7JHr5X08= -github.com/notaryproject/notation-core-go v1.2.0/go.mod h1:+y3L1dOs2/ZwJIU5Imo7BBvZ/M3CFjXkydGGdK09EtA= -github.com/notaryproject/notation-go v1.3.1 h1:JLJ9HiwMwPAFNkJEBkF8iBdNazdEKrGAylOKoFjTd6o= -github.com/notaryproject/notation-go v1.3.1/go.mod h1:Qytzn2v8nYkA9G44fbXKh1Tnvz8ONmod2Tgtkrl5zYc= +github.com/notaryproject/notation-core-go v1.3.0 h1:mWJaw1QBpBxpjLSiKOjzbZvB+xh2Abzk14FHWQ+9Kfs= +github.com/notaryproject/notation-core-go v1.3.0/go.mod h1:hzvEOit5lXfNATGNBT8UQRx2J6Fiw/dq/78TQL8aE64= +github.com/notaryproject/notation-go v1.3.2 h1:4223iLXOHhEV7ZPzIUJEwwMkhlgzoYFCsMJvSH1Chb8= +github.com/notaryproject/notation-go v1.3.2/go.mod h1:/1kuq5WuLF6Gaer5re0Z6HlkQRlKYO4EbWWT/L7J1Uw= github.com/notaryproject/notation-plugin-framework-go v1.0.0 h1:6Qzr7DGXoCgXEQN+1gTZWuJAZvxh3p8Lryjn5FaLzi4= github.com/notaryproject/notation-plugin-framework-go v1.0.0/go.mod h1:RqWSrTOtEASCrGOEffq0n8pSg2KOgKYiWqFWczRSics= -github.com/notaryproject/tspclient-go v1.0.0 h1:AwQ4x0gX8IHnyiZB1tggpn5NFqHpTEm1SDX8YNv4Dg4= -github.com/notaryproject/tspclient-go v1.0.0/go.mod h1:LGyA/6Kwd2FlM0uk8Vc5il3j0CddbWSHBj/4kxQDbjs= +github.com/notaryproject/tspclient-go v1.0.1-0.20250306063739-4f55b14d9f01 h1:Ay72jBeHKqBFk6TbJWywfwzefN3Ei7Py2OzCiWU/7nk= +github.com/notaryproject/tspclient-go v1.0.1-0.20250306063739-4f55b14d9f01/go.mod h1:3ZJPmpmdwufY23BkS+JPNktOVb5DXJ8Ik5zxvN7h670= github.com/opencontainers/go-digest v1.0.0 h1:apOUWs51W5PlhuyGyz9FCeeBIOUDA/6nW8Oi/yOhh5U= github.com/opencontainers/go-digest v1.0.0/go.mod h1:0JzlMkj0TRzQZfJkVvzbP0HBR3IKzErnv2BNG4W4MAM= -github.com/opencontainers/image-spec v1.1.0 h1:8SG7/vwALn54lVB/0yZ/MMwhFrPYtpEHQb2IpWsCzug= -github.com/opencontainers/image-spec v1.1.0/go.mod h1:W4s4sFTMaBeK1BQLXbG4AdM2szdn85PY75RI83NrTrM= +github.com/opencontainers/image-spec v1.1.1 h1:y0fUlFfIZhPF1W537XOLg0/fcx6zcHCJwooC2xJA040= +github.com/opencontainers/image-spec v1.1.1/go.mod h1:qpqAh3Dmcf36wStyyWU+kCeDgrGnAve2nCC8+7h8Q0M= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= @@ -77,15 +77,15 @@ golang.org/x/crypto v0.13.0/go.mod h1:y6Z2r+Rw4iayiXXAIxJIDAJ1zMW4yaTpebo8fPOliY golang.org/x/crypto v0.19.0/go.mod h1:Iy9bg/ha4yyC70EfRS8jz+B6ybOBKMaSxLj6P6oBDfU= golang.org/x/crypto v0.23.0/go.mod h1:CKFgDieR+mRhux2Lsu27y0fO304Db0wZe70UKqHu0v8= golang.org/x/crypto v0.31.0/go.mod h1:kDsLvtWBEx7MV9tJOj9bnXsPbxwJQ6csT/x4KIN4Ssk= -golang.org/x/crypto v0.33.0 h1:IOBPskki6Lysi0lo9qQvbxiQ+FvsCC/YWOecCHAixus= -golang.org/x/crypto v0.33.0/go.mod h1:bVdXmD7IV/4GdElGPozy6U7lWdRXA4qyRVGJV57uQ5M= +golang.org/x/crypto v0.37.0 h1:kJNSjF/Xp7kU0iB2Z+9viTPMW4EqqsrywMXLJOOsXSE= +golang.org/x/crypto v0.37.0/go.mod h1:vg+k43peMZ0pUMhYmVAWysMK35e6ioLh3wB8ZCAfbVc= golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= golang.org/x/mod v0.12.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= golang.org/x/mod v0.15.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= golang.org/x/mod v0.17.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= -golang.org/x/mod v0.23.0 h1:Zb7khfcRGKk+kqfxFaP5tZqCnDZMjC5VtUBs87Hr6QM= -golang.org/x/mod v0.23.0/go.mod h1:6SkKJ3Xj0I0BrPOZoBy3bdMptDDU9oJrpohJ3eWZ1fY= +golang.org/x/mod v0.24.0 h1:ZfthKaKaT4NrhGVZHO1/WDTwGES4De8KtWO0SIbNJMU= +golang.org/x/mod v0.24.0/go.mod h1:IXM97Txy2VM4PJ3gI61r1YEk/gAj6zAHN3AdZt6S9Ww= golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200114155413-6afb5195e5aa/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= diff --git a/test/e2e/suite/plugin/install.go b/test/e2e/suite/plugin/install.go index 746babf6a..66e828522 100644 --- a/test/e2e/suite/plugin/install.go +++ b/test/e2e/suite/plugin/install.go @@ -14,6 +14,9 @@ package plugin import ( + "encoding/base64" + "fmt" + "os" "path/filepath" . "github.com/notaryproject/notation/test/e2e/internal/notation" @@ -78,7 +81,23 @@ var _ = Describe("notation plugin install", func() { It("with zip bomb total file size exceeds 256 MiB size limit", func() { Host(nil, func(notation *utils.ExecOpts, _ *Artifact, vhost *utils.VirtualHost) { - notation.ExpectFailure().Exec("plugin", "install", "--file", filepath.Join(NotationE2EMaliciousPluginArchivePath, "zip_bomb.zip"), "-v"). + encodedFilePath := filepath.Join(NotationE2EMaliciousPluginArchivePath, "zip_bomb.zip.base64") + encoded, err := os.ReadFile(encodedFilePath) + if err != nil { + Fail(fmt.Sprintf("failed to read file %s: %v", encodedFilePath, err)) + } + // decode base64 + decoded, err := base64.StdEncoding.DecodeString(string(encoded)) + if err != nil { + Fail(fmt.Sprintf("failed to decode file %s: %v", encodedFilePath, err)) + } + targetPath := vhost.AbsolutePath(NotationDirName, "zip_bomb.zip") + err = os.WriteFile(targetPath, decoded, 0644) + if err != nil { + Fail(fmt.Sprintf("failed to write file %s: %v", targetPath, err)) + } + + notation.ExpectFailure().Exec("plugin", "install", "--file", targetPath, "-v"). MatchErrContent("Error: plugin installation failed: total file size reached the 256 MiB size limit\n") }) }) diff --git a/test/e2e/suite/plugin/list.go b/test/e2e/suite/plugin/list.go index fb6931553..3a202a0f9 100644 --- a/test/e2e/suite/plugin/list.go +++ b/test/e2e/suite/plugin/list.go @@ -14,6 +14,9 @@ package plugin import ( + "os" + "runtime" + . "github.com/notaryproject/notation/test/e2e/internal/notation" "github.com/notaryproject/notation/test/e2e/internal/utils" . "github.com/onsi/ginkgo/v2" @@ -37,4 +40,41 @@ var _ = Describe("notation plugin list", func() { MatchKeyWords("ERROR", "") }) }) + + It("missing plugin binary", func() { + Host(nil, func(notation *utils.ExecOpts, _ *Artifact, vhost *utils.VirtualHost) { + // create azure-kv plugin directory + pluginDir := vhost.AbsolutePath(NotationDirName, "plugins", "azure-kv") + if err := os.MkdirAll(pluginDir, os.ModePerm); err != nil { + Fail(err.Error()) + } + + notation.Exec("plugin", "list"). + MatchKeyWords("azure-kv"). + MatchKeyWords("not found") + }) + }) + + It("with invalid binary file", func() { + Host(nil, func(notation *utils.ExecOpts, _ *Artifact, vhost *utils.VirtualHost) { + // create azure-kv plugin directory + pluginDir := vhost.AbsolutePath(NotationDirName, "plugins", "azure-kv") + if err := os.MkdirAll(pluginDir, os.ModePerm); err != nil { + Fail(err.Error()) + } + + // create invalid plugin binary + invalidPluginBinary := vhost.AbsolutePath(NotationDirName, "plugins", "azure-kv", "notation-azure-kv") + if runtime.GOOS == "windows" { + invalidPluginBinary += ".exe" + } + if err := os.WriteFile(invalidPluginBinary, []byte("invalid"), 0755); err != nil { + Fail(err.Error()) + } + + notation.Exec("plugin", "list"). + MatchKeyWords("azure-kv"). + MatchKeyWords("not executable") + }) + }) }) diff --git a/test/e2e/suite/trustpolicy/verification_level.go b/test/e2e/suite/trustpolicy/verification_level.go index 3f6c1197c..a383b6677 100644 --- a/test/e2e/suite/trustpolicy/verification_level.go +++ b/test/e2e/suite/trustpolicy/verification_level.go @@ -174,7 +174,7 @@ var _ = Describe("notation trust policy verification level test", func() { notation.Exec("verify", artifact.ReferenceWithDigest(), "-v"). MatchErrKeyWords("Warning: authenticity was set to \"log\"", - "signature is not produced by a trusted signer"). + "the signature's certificate chain does not contain any trusted certificate"). MatchKeyWords(VerifySuccessfully) }) }) @@ -244,7 +244,7 @@ var _ = Describe("notation trust policy verification level test", func() { notation.Exec("verify", artifact.ReferenceWithDigest(), "-v"). MatchErrKeyWords("Warning: authenticity was set to \"log\"", - "signature is not produced by a trusted signer"). + "the signature's certificate chain does not contain any trusted certificate"). MatchKeyWords(VerifySuccessfully) }) }) @@ -289,7 +289,7 @@ var _ = Describe("notation trust policy verification level test", func() { notation.Exec("verify", artifact.ReferenceWithDigest(), "-v"). MatchErrKeyWords("Warning: authenticity was set to \"log\"", - "signature is not produced by a trusted signer"). + "the signature's certificate chain does not contain any trusted certificate"). MatchKeyWords(VerifySuccessfully) }) }) diff --git a/test/e2e/testdata/malicious-plugin/zip_bomb.zip b/test/e2e/testdata/malicious-plugin/zip_bomb.zip deleted file mode 100644 index b4d00682f..000000000 Binary files a/test/e2e/testdata/malicious-plugin/zip_bomb.zip and /dev/null differ diff --git a/test/e2e/testdata/malicious-plugin/zip_bomb.zip.base64 b/test/e2e/testdata/malicious-plugin/zip_bomb.zip.base64 new file mode 100644 index 000000000..ba4fc2e30 --- /dev/null +++ b/test/e2e/testdata/malicious-plugin/zip_bomb.zip.base64 @@ -0,0 +1 @@ +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AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYFBLAQIUABQAAAAIAKBsSAX7WFLolXYAAF5kTQEBAAAAAAAAAAAAAAAAAAAAAAAwUEsBAhQAFAAAAAgAoGxIBXopVj5xdgAAP2RNAQEAAAAAAAAAAAAAAAAAJAAAADFQSwECFAAUAAAACACgbEgFWD4pe012AAAgZE0BAQAAAAAAAAAAAAAAAABIAAAAMlBLAQIUABQAAAAIAKBsSAV42tlMKXYAAAFkTQEBAAAAAAAAAAAAAAAAAGwAAAAzUEsBAhQAFAAAAAgAoGxIBT6JMAMFdgAA4mNNAQEAAAAAAAAAAAAAAAAAkAAAADRQSwECFAAUAAAACACgbEgFBGlOOeF1AADDY00BAQAAAAAAAAAAAAAAAAC0AAAANVBLAQIUABQAAAAIAKBsSAUo0fzavXUAAKRjTQEBAAAAAAAAAAAAAAAAANgAAAA2UEsBAhQAFAAAAAgAoGxIBRWDn1uZdQAAhWNNAQEAAAAAAAAAAAAAAAAA/AAAADdQSwECFAAUAAAACACgbEgFZM+VWHV1AABmY00BAQAAAAAAAAAAAAAAAAAgAQAAOFBLAQIUABQAAAAIAKBsSAUhQkHmUXUAAEdjTQEBAAAAAAAAAAAAAAAAAEQBAAA5UEsBAhQAFAAAAAgAoGxIBZBu7TYtdQAAKGNNAQEAAAAAAAAAAAAAAAAAaAEAAEFQSwECFAAUAAAACACgbEgFI/b44gl1AAAJY00BAQAAAAAAAAAAAAAAAACMAQAAQlBLAQIUABQAAAAIAKBsSAWmxcTP5XQAAOpiTQEBAAAAAAAAAAAAAAAAALABAABDUEsBAhQAFAAAAAgAoGxIBeQZUUPBdAAAy2JNAQEAAAAAAAAAAAAAAAAA1AEAAERQSwECFAAUAAAACACgbEgFsou0dZ10AACsYk0BAQAAAAAAAAAAAAAAAAD4AQAARVBLAQIUABQAAAAIAKBsSAWIYPYweXQAAI1iTQEBAAAAAAAAAAAAAAAAABwCAABGUEsBAhQAFAAAAAgAoGxIBbcVZkRVdAAAbmJNAQEAAAAAAAAAAAAAAAAAQAIAAEdQSwECFAAUAAAACACgbEgFkAPNWjF0AABPYk0BAQAAAAAAAAAAAAAAAABkAgAASFBLAQIUABQAAAAIAKBsSAXPWqk7DXQAADBiTQEBAAAAAAAAAAAAAAAAAIgCAABJUEsBAhQAFAAAAAgAoGxIBepu42XpcwAAEWJNAQEAAAAAAAAAAAAAAAAArAIAAEpQSwECFAAUAAAACACgbEgFun8snMVzAADyYU0BAQAAAAAAAAAAAAAAAADQAgAAS1BLAQIUABQAAAAIAKBsSAWV+jOMoXMAANNhTQEBAAAAAAAAAAAAAAAAAPQCAABMUEsBAhQAFAAAAAgAoGxIBbwusL59cwAAtGFNAQEAAAAAAAAAAAAAAAAAGAMAAE1QSwECFAAUAAAACACgbEgFadFciFlzAACVYU0BAQAAAAAAAAAAAAAAAAA8AwAATlBLAQIUABQAAAAIAKBsSAUNhMDaNXMAAHZhTQEBAAAAAAAAAAAAAAAAAGADAABPUEsBAhQAFAAAAAgAoGxIBdyvLGIRcwAAV2FNAQEAAAAAAAAAAAAAAAAAhAMAAFBQSwECFAAUAAAACACgbEgFm/4Vje1yAAA4YU0BAQAAAAAAAAAAAAAAAACoAwAAUVBLAQIUABQAAAAIAKBsSAUnJWpGyXIAABlhTQEBAAAAAAAAAAAAAAAAAMwDAABSUEsBAhQAFAAAAAgAoGxIBaeJBTalcgAA+mBNAQEAAAAAAAAAAAAAAAAA8AMAAFNQSwECFAAUAAAACACgbEgF4GA/vYFyAADbYE0BAQAAAAAAAAAAAAAAAAAUBAAAVFBLAQIUABQAAAAIAKBsSAW6odxCXXIAALxgTQEBAAAAAAAAAAAAAAAAADgEAABVUEsBAhQAFAAAAAgAoGxIBYixpMM5cgAAnWBNAQEAAAAAAAAAAAAAAAAAXAQAAFZQSwECFAAUAAAACACgbEgFanFNjBVyAAB+YE0BAQAAAAAAAAAAAAAAAACABAAAV1BLAQIUABQAAAAIAKBsSAXRK/Ed8XEAAF9gTQEBAAAAAAAAAAAAAAAAAKQEAABYUEsBAhQAFAAAAAgAoGxIBRL4KF/NcQAAQGBNAQEAAAAAAAAAAAAAAAAAyAQAAFlQSwECFAAUAAAACACgbEgFmaxZ4qlxAAAhYE0BAQAAAAAAAAAAAAAAAADsBAAAWlBLAQIUABQAAAAIAKBsSAWz1faYhHEAAAFgTQECAAAAAAAAAAAAAAAAABAFAAAwMFBLAQIUABQAAAAIAKBsSAWw/xN+X3EAAOFfTQECAAAAAAAAAAAAAAAAADUFAAAwMVBLAQIUABQAAAAIAKBsSAUMn0k7OnEAAMFfTQECAAAAAAAAAAAAAAAAAFoFAAAwMlBLAQIUABQAAAAIAKBsSAUYL7vpFXEAAKFfTQECAAAAAAAAAAAAAAAAAH8FAAAwM1BLAQIUABQAAAAIAKBsSAWEszcM8HAAAIFfTQECAAAAAAAAAAAAAAAAAKQFAAAwNFBLAQIUABQAAAAIAKBsSAXyxlTWy3AAAGFfTQECAAAAAAAAAAAAAAAAAMkFAAAwNVBLAQIUABQAAAAIAKBsSAV1cmtYpnAAAEFfTQECAAAAAAAAAAAAAAAAAO4FAAAwNlBLAQIUABQAAAAIAKBsSAVGmyVmgXAAACFfTQECAAAAAAAAAAAAAAAAABMGAAAwN1BLAQIUABQAAAAIAKBsSAUMYg5oXHAAAAFfTQECAAAAAAAAAAAAAAAAADgGAAAwOFBLAQIUABQAAAAIAKBsSAWa6CCPN3AAAOFeTQECAAAAAAAAAAAAAAAAAF0GAAAwOVBLAQIUABQAAAAIAKBsSAWLhkcdEnAAAMFeTQECAAAAAAAAAAAAAAAAAIIGAAAwQVBLAQIUABQAAAAIAKBsSAXjL4Oj7W8AAKFeTQECAAAAAAAAAAAAAAAAAKcGAAAwQlBLAQIUABQAAAAIAKBsSAVCaCBIyG8AAIFeTQECAAAAAAAAAAAAAAAAAMwGAAAwQ1BLAQIUABQAAAAIAKBsSAW3YZnXo28AAGFeTQECAAAAAAAAAAAAAAAAAPEGAAAwRFBLAQIUABQAAAAIAKBsSAUrd1Jsfm8AAEFeTQECAAAAAAAAAAAAAAAAABYHAAAwRVBLAQIUABQAAAAIAKBsSAW8sEO3WW8AACFeTQECAAAAAAAAAAAAAAAAADsHAAAwRlBLAQIUABQAAAAIAKBsSAXDYPslNG8AAAFeTQECAAAAAAAAAAAAAAAAAGAHAAAwR1BLAQIUABQAAAAIAKBsSAUC+FijD28AAOFdTQECAAAAAAAAAAAAAAAAAIUHAAAwSFBLAQIUABQAAAAIAKBsSAUSWTcP6m4AAMFdTQECAAAAAAAAAAAAAAAAAKoHAAAwSVBLAQIUABQAAAAIAKBsSAVOUBWvxW4AAKFdTQECAAAAAAAAAAAAAAAAAM8HAAAwSlBLAQIUABQAAAAIAKBsSAVBC0K5oG4AAIFdTQECAAAAAAAAAAAAAAAAAPQHAAAwS1BLAQIUABQAAAAIAKBsSAUZZsh4e24AAGFdTQECAAAAAAAAAAAAAAAAABkIAAAwTFBLAQIUABQAAAAIAKBsSAWnsP5XVm4AAEFdTQECAAAAAAAAAAAAAAAAAD4IAAAwTVBLAQIUABQAAAAIAKBsSAXt0A2xMW4AACFdTQECAAAAAAAAAAAAAAAAAGMIAAAwTlBLAQIUABQAAAAIAKBsSAUU67rxDG4AAAFdTQECAAAAAAAAAAAAAAAAAIgIAAAwT1BLAQIUABQAAAAIAKBsSAWehUvO520AAOFcTQECAAAAAAAAAAAAAAAAAK0IAAAwUFBLAQIUABQAAAAIAKBsSAXf53ZCwm0AAMFcTQECAAAAAAAAAAAAAAAAANIIAAAwUVBLAQIUABQAAAAIAKBsSAXBkgPHnW0AAKFcTQECAAAAAAAAAAAAAAAAAPcIAAAwUlBLAQIUABQAAAAIAKBsSAUl1uKoeG0AAIFcTQECAAAAAAAAAAAAAAAAABwJAAAwU1BLAQIUABQAAAAIAKBsSAX9mXtpU20AAGFcTQECAAAAAAAAAAAAAAAAAEEJAAAwVFBLAQIUABQAAAAIAKBsSAUCBc81Lm0AAEFcTQECAAAAAAAAAAAAAAAAAGYJAAAwVVBLAQIUABQAAAAIAKBsSAUWdYghCW0AACFcTQECAAAAAAAAAAAAAAAAAIsJAAAwVlBLAQIUABQAAAAIAKBsSAXAg1Pc5GwAAAFcTQECAAAAAAAAAAAAAAAAALAJAAAwV1BLAQIUABQAAAAIAKBsSAWXmD14v2wAAOFbTQECAAAAAAAAAAAAAAAAANUJAAAwWFBLAQIUABQAAAAIAKBsSAUTTOepmmwAAMFbTQECAAAAAAAAAAAAAAAAAPoJAAAwWVBLAQIUABQAAAAIAKBsSAVUOY7WdWwAAKFbTQECAAAAAAAAAAAAAAAAAB8KAAAwWlBLAQIUABQAAAAIAKBsSAUWt6hYUGwAAIFbTQECAAAAAAAAAAAAAAAAAEQKAAAxMFBLAQIUABQAAAAIAKBsSAXUQTUhK2wAAGFbTQECAAAAAAAAAAAAAAAAAGkKAAAxMVBLAQIUABQAAAAIAKBsSAUapxqBBmwAAEFbTQECAAAAAAAAAAAAAAAAAI4KAAAxMlBLAQIUABQAAAAIAKBsSAV+/zom4WsAACFbTQECAAAAAAAAAAAAAAAAALMKAAAxM1BLAQIUABQAAAAIAKBsSAUyL5ZZvGsAAAFbTQECAAAAAAAAAAAAAAAAANgKAAAxNFBLAQIUABQAAAAIAKBsSAXaHWaAl2sAAOFaTQECAAAAAAAAAAAAAAAAAP0KAAAxNVBLAQIUABQAAAAIAKBsSAV0prWzcmsAAMFaTQECAAAAAAAAAAAAAAAAACILAAAxNlBLAQIUABQAAAAIAKBsSAXlztYNTWsAAKFaTQECAAAAAAAAAAAAAAAAAEcLAAAxN1BLAQIUABQAAAAIAKBsSAVmi/DVKGsAAIFaTQECAAAAAAAAAAAAAAAAAGwLAAAxOFBLAQIUABQAAAAIAKBsSAXL4vF4A2sAAGFaTQECAAAAAAAAAAAAAAAAAJELAAAxOVBLAQIUABQAAAAIAKBsSAV+4nwT3moAAEFaTQECAAAAAAAAAAAAAAAAALYLAAAxQVBLAQIUABQAAAAIAKBsSAU/IRksuWoAACFaTQECAAAAAAAAAAAAAAAAANsLAAAxQlBLAQIUABQAAAAIAKBsSAUKPSTNlGoAAAFaTQECAAAAAAAAAAAAAAAAAAAMAAAxQ1BLAQIUABQAAAAIAKBsSAWqj+1Rb2oAAOFZTQECAAAAAAAAAAAAAAAAACUMAAAxRFBLAQIUABQAAAAIAKBsSAWlaBbiSmoAAMFZTQECAAAAAAAAAAAAAAAAAEoMAAAxRVBLAQIUABQAAAAIAKBsSAW2hyL7JWoAAKFZTQECAAAAAAAAAAAAAAAAAG8MAAAxRlBLAQIUABQAAAAIAKBsSAXsyTDcAGoAAIFZTQECAAAAAAAAAAAAAAAAAJQMAAAxR1BLAQIUABQAAAAIAKBsSAW8usBg22kAAGFZTQECAAAAAAAAAAAAAAAAALkMAAAxSFBLAQIUABQAAAAIAKBsSAW4cVUvtmkAAEFZTQECAAAAAAAAAAAAAAAAAN4MAAAxSVBLAQIUABQAAAAIAKBsSAWDguJ7kWkAACFZTQECAAAAAAAAAAAAAAAAAAMNAAAxSlBLAQIUABQAAAAIAKBsSAXItZQ1bGkAAAFZTQECAAAAAAAAAAAAAAAAACgNAAAxS1BLAQIUABQAAAAIAKBsSAWuNq41R2kAAOFYTQECAAAAAAAAAAAAAAAAAE0NAAAxTFBLAQIUABQAAAAIAKBsSAULBIZEImkAAMFYTQECAAAAAAAAAAAAAAAAAHINAAAxTVBLAQIUABQAAAAIAKBsSAWLTtnc/WgAAKFYTQECAAAAAAAAAAAAAAAAAJcNAAAxTlBLAQIUABQAAAAIAKBsSAUSJ1w+2GgAAIFYTQECAAAAAAAAAAAAAAAAALwNAAAxT1BLAQIUABQAAAAIAKBsSAWSlouCs2gAAGFYTQECAAAAAAAAAAAAAAAAAOENAAAxUFBLAQIUABQAAAAIAKBsSAXueIiYjmgAAEFYTQECAAAAAAAAAAAAAAAAAAYOAAAxUVBLAQIUABQAAAAIAKBsSAVkITOTaWgAACFYTQECAAAAAAAAAAAAAAAAACsOAAAxUlBLAQIUABQAAAAIAKBsSAXS9glvRGgAAAFYTQECAAAAAAAAAAAAAAAAAFAOAAAxU1BLAQIUABQAAAAIAKBsSAWTtxwxH2gAAOFXTQECAAAAAAAAAAAAAAAAAHUOAAAxVFBLAQIUABQAAAAIAKBsSAUl1MGT+mcAAMFXTQECAAAAAAAAAAAAAAAAAJoOAAAxVVBLAQIUABQAAAAIAKBsSAXF7NoI1WcAAKFXTQECAAAAAAAAAAAAAAAAAL8OAAAxVlBLAQIUABQAAAAIAKBsSAUUx4Q+sGcAAIFXTQECAAAAAAAAAAAAAAAAAOQOAAAxV1BLAQIUABQAAAAIAKBsSAVOyWOri2cAAGFXTQECAAAAAAAAAAAAAAAAAAkPAAAxWFBLAQIUABQAAAAIAKBsSAUgDXWqZmcAAEFXTQECAAAAAAAAAAAAAAAAAC4PAAAxWVBLAQIUABQAAAAIAKBsSAWURmJXQWcAACFXTQECAAAAAAAAAAAAAAAAAFMPAAAxWlBLAQIUABQAAAAIAKBsSAXwMbHdHGcAAAFXTQECAAAAAAAAAAAAAAAAAHgPAAAyMFBLAQIUABQAAAAIAKBsSAV0AG4P92YAAOFWTQECAAAAAAAAAAAAAAAAAJ0PAAAyMVBLAQIUABQAAAAIAKBsSAWqhWks0mYAAMFWTQECAAAAAAAAAAAAAAAAAMIPAAAyMlBLAQIUABQAAAAIAKBsSAWuD0H5rWYAAKFWTQECAAAAAAAAAAAAAAAAAOcPAAAyM1BLAQIUABQAAAAIAKBsSAW8HvmEiGYAAIFWTQECAAAAAAAAAAAAAAAAAAwQAAAyNFBLAQIUABQAAAAIAKBsSAUumGpHY2YAAGFWTQECAAAAAAAAAAAAAAAAADEQAAAyNVBLAQIUABQAAAAIAKBsSAVffTACPmYAAEFWTQECAAAAAAAAAAAAAAAAAFYQAAAyNlBLAQIUABQAAAAIAKBsSAWsDcWuGWYAACFWTQECAAAAAAAAAAAAAAAAAHsQAAAyN1BLAQIUABQAAAAIAKBsSAU2HKxQ9GUAAAFWTQECAAAAAAAAAAAAAAAAAKAQAAAyOFBLAQIUABQAAAAIAKBsSAVzG2laz2UAAOFVTQECAAAAAAAAAAAAAAAAAMUQAAAyOVBLAQIUABQAAAAIAKBsSAWqd605qmUAAMFVTQECAAAAAAAAAAAAAAAAAOoQAAAyQVBLAQIUABQAAAAIAKBsSAUQ4GMChWUAAKFVTQECAAAAAAAAAAAAAAAAAA8RAAAyQlBLAQIUABQAAAAIAKBsSAWeEcvwYGUAAIFVTQECAAAAAAAAAAAAAAAAADQRAAAyQ1BLAQIUABQAAAAIAKBsSAUGtAbEO2UAAGFVTQECAAAAAAAAAAAAAAAAAFkRAAAyRFBLAQIUABQAAAAIAKBsSAVAktIxFmUAAEFVTQECAAAAAAAAAAAAAAAAAH4RAAAyRVBLAQIUABQAAAAIAKBsSAUZhUat8WQAACFVTQECAAAAAAAAAAAAAAAAAKMRAAAyRlBLAQIUABQAAAAIAKBsSAW9jhWuzGQAAAFVTQECAAAAAAAAAAAAAAAAAMgRAAAyR1BLAQIUABQAAAAIAKBsSAVgXduap2QAAOFUTQECAAAAAAAAAAAAAAAAAO0RAAAySFBLAQIUABQAAAAIAKBsSAXS/eo7gmQAAMFUTQECAAAAAAAAAAAAAAAAABISAAAySVBLAQIUABQAAAAIAKBsSAUxFInZXWQAAKFUTQECAAAAAAAAAAAAAAAAADcSAAAySlBLAQIUABQAAAAIAKBsSAXatmHkOGQAAIFUTQECAAAAAAAAAAAAAAAAAFwSAAAyS1BLAQIUABQAAAAIAKBsSAVWLXf3E2QAAGFUTQECAAAAAAAAAAAAAAAAAIESAAAyTFBLAQIUABQAAAAIAKBsSAXM6SWw7mMAAEFUTQECAAAAAAAAAAAAAAAAAKYSAAAyTVBLAQIUABQAAAAIAKBsSAVUUq3MyWMAACFUTQECAAAAAAAAAAAAAAAAAMsSAAAyTlBLAQIUABQAAAAIAKBsSAViWMYApGMAAAFUTQECAAAAAAAAAAAAAAAAAPASAAAyT1BLAQIUABQAAAAIAKBsSAVsG9URf2MAAOFTTQECAAAAAAAAAAAAAAAAABUTAAAyUFBLAQIUABQAAAAIAKBsSAUdJ33qWmMAAMFTTQECAAAAAAAAAAAAAAAAADoTAAAyUVBLAQIUABQAAAAIAKBsSAX/4s/XNWMAAKFTTQECAAAAAAAAAAAAAAAAAF8TAAAyUlBLAQIUABQAAAAIAKBsSAU9uv2bEGMAAIFTTQECAAAAAAAAAAAAAAAAAIQTAAAyU1BLAQIUABQAAAAIAKBsSAWWEeCV62IAAGFTTQECAAAAAAAAAAAAAAAAAKkTAAAyVFBLAQIUABQAAAAIAKBsSAUXBMYExmIAAEFTTQECAAAAAAAAAAAAAAAAAM4TAAAyVVBLAQIUABQAAAAIAKBsSAW9FcwooWIAACFTTQECAAAAAAAAAAAAAAAAAPMTAAAyVlBLAQIUABQAAAAIAKBsSAVg9k/7fGIAAAFTTQECAAAAAAAAAAAAAAAAABgUAAAyV1BLAQIUABQAAAAIAKBsSAVpQOHFV2IAAOFSTQECAAAAAAAAAAAAAAAAAD0UAAAyWFBLAQIUABQAAAAIAKBsSAVysNb1MmIAAMFSTQECAAAAAAAAAAAAAAAAAGIUAAAyWVBLAQIUABQAAAAIAKBsSAUe0qD7DWIAAKFSTQECAAAAAAAAAAAAAAAAAIcUAAAyWlBLAQIUABQAAAAIAKBsSAXRy9vi6GEAAIFSTQECAAAAAAAAAAAAAAAAAKwUAAAzMFBLAQIUABQAAAAIAKBsSAX5Lu51w2EAAGFSTQECAAAAAAAAAAAAAAAAANEUAAAzMVBLAQIUABQAAAAIAKBsSAUztMihnmEAAEFSTQECAAAAAAAAAAAAAAAAAPYUAAAzMlBLAQIUABQAAAAIAKBsSAW1we9aeWEAACFSTQECAAAAAAAAAAAAAAAAABsVAAAzM1BLAQIUABQAAAAIAKBsSAVAAlGdVGEAAAFSTQECAAAAAAAAAAAAAAAAAEAVAAAzNFBLAQIUABQAAAAIAKBsSAU50sQmL2EAAOFRTQECAAAAAAAAAAAAAAAAAGUVAAAzNVBLAQIUABQAAAAIAKBsSAX6dw0ICmEAAMFRTQECAAAAAAAAAAAAAAAAAIoVAAAzNlBLAQIUABQAAAAIAKBsSAXttLRr5WAAAKFRTQECAAAAAAAAAAAAAAAAAK8VAAAzN1BLAQIUABQAAAAIAKBsSAU2jxDTwGAAAIFRTQECAAAAAAAAAAAAAAAAANQVAAAzOFBLAQIUABQAAAAIAKBsSAVfglLMm2AAAGFRTQECAAAAAAAAAAAAAAAAAPkVAAAzOVBLAQIUABQAAAAIAKBsSAXXbcTJdmAAAEFRTQECAAAAAAAAAAAAAAAAAB4WAAAzQVBLAQIUABQAAAAIAKBsSAX2dXmKUWAAACFRTQECAAAAAAAAAAAAAAAAAEMWAAAzQlBLAQIUABQAAAAIAKBsSAW4cDHPLGAAAAFRTQECAAAAAAAAAAAAAAAAAGgWAAAzQ1BLAQIUABQAAAAIAKBsSAVVcMBAB2AAAOFQTQECAAAAAAAAAAAAAAAAAI0WAAAzRFBLAQIUABQAAAAIAKBsSAXsTwCz4l8AAMFQTQECAAAAAAAAAAAAAAAAALIWAAAzRVBLAQIUABQAAAAIAKBsSAUQnxKRvV8AAKFQTQECAAAAAAAAAAAAAAAAANcWAAAzRlBLAQIUABQAAAAIAKBsSAUrvKOImF8AAIFQTQECAAAAAAAAAAAAAAAAAPwWAAAzR1BLAQIUABQAAAAIAKBsSAVhnU3pc18AAGFQTQECAAAAAAAAAAAAAAAAACEXAAAzSFBLAQIUABQAAAAIAKBsSAXpOAIvTl8AAEFQTQECAAAAAAAAAAAAAAAAAEYXAAAzSVBLAQIUABQAAAAIAKBsSAV3FIzmKV8AACFQTQECAAAAAAAAAAAAAAAAAGsXAAAzSlBLAQIUABQAAAAIAKBsSAXQRQNsBF8AAAFQTQECAAAAAAAAAAAAAAAAAJAXAAAzS1BLAQIUABQAAAAIAKBsSAXxtOuu314AAOFPTQECAAAAAAAAAAAAAAAAALUXAAAzTFBLAQIUABQAAAAIAKBsSAXUoCdGul4AAMFPTQECAAAAAAAAAAAAAAAAANoXAAAzTVBLAQIUABQAAAAIAKBsSAVwUn3xlV4AAKFPTQECAAAAAAAAAAAAAAAAAP8XAAAzTlBLAQIUABQAAAAIAKBsSAVN3qTscF4AAIFPTQECAAAAAAAAAAAAAAAAACQYAAAzT1BLAQIUABQAAAAIAKBsSAUm9+u2S14AAGFPTQECAAAAAAAAAAAAAAAAAEkYAAAzUFBLAQIUABQAAAAIAKBsSAUA+M18Jl4AAEFPTQECAAAAAAAAAAAAAAAAAG4YAAAzUVBLAQIUABQAAAAIAKBsSAV/KPteAV4AACFPTQECAAAAAAAAAAAAAAAAAJMYAAAzUlBLAQIUABQAAAAIAKBsSAVSG5R63F0AAAFPTQECAAAAAAAAAAAAAAAAALgYAAAzU1BLAQIUABQAAAAIAKBsSAVn60k0t10AAOFOTQECAAAAAAAAAAAAAAAAAN0YAAAzVFBLAQIUABQAAAAIAKBsSAW/3R3Pkl0AAMFOTQECAAAAAAAAAAAAAAAAAAIZAAAzVVBLAQIUABQAAAAIAKBsSAXLslEqbV0AAKFOTQECAAAAAAAAAAAAAAAAACcZAAAzVlBLAQIUABQAAAAIAKBsSAW2BKjVSF0AAIFOTQECAAAAAAAAAAAAAAAAAEwZAAAzV1BLAQIUABQAAAAIAKBsSAUxAKfRI10AAGFOTQECAAAAAAAAAAAAAAAAAHEZAAAzWFBLAQIUABQAAAAIAKBsSAUejkpd/lwAAEFOTQECAAAAAAAAAAAAAAAAAJYZAAAzWVBLAQIUABQAAAAIAKBsSAX9Eciv2VwAACFOTQECAAAAAAAAAAAAAAAAALsZAAAzWlBLAQIUABQAAAAIAKBsSAVDaUeQtFwAAAFOTQECAAAAAAAAAAAAAAAAAOAZAAA0MFBLAQIUABQAAAAIAKBsSAXLCZVLj1wAAOFNTQECAAAAAAAAAAAAAAAAAAUaAAA0MVBLAQIUABQAAAAIAKBsSAWr0tCcalwAAMFNTQECAAAAAAAAAAAAAAAAACoaAAA0MlBLAQIUABQAAAAIAKBsSAUQGhjTRVwAAKFNTQECAAAAAAAAAAAAAAAAAE8aAAA0M1BLAQIUABQAAAAIAKBsSAWQtYbGIFwAAIFNTQECAAAAAAAAAAAAAAAAAHQaAAA0NFBLAQIUABQAAAAIAKBsSAXFmSwv+1sAAGFNTQECAAAAAAAAAAAAAAAAAJkaAAA0NVBLAQIUABQAAAAIAKBsSAW9MP5q1lsAAEFNTQECAAAAAAAAAAAAAAAAAL4aAAA0NlBLAQIUABQAAAAIAKBsSAVT6NSGsVsAACFNTQECAAAAAAAAAAAAAAAAAOMaAAA0N1BLAQIUABQAAAAIAKBsSAWtDV0+jFsAAAFNTQECAAAAAAAAAAAAAAAAAAgbAAA0OFBLAQIUABQAAAAIAKBsSAU66PiXZ1sAAOFMTQECAAAAAAAAAAAAAAAAAC0bAAA0OVBLAQIUABQAAAAIAKBsSAVuWz/qQlsAAMFMTQECAAAAAAAAAAAAAAAAAFIbAAA0QVBLAQIUABQAAAAIAKBsSAUpKm2XHVsAAKFMTQECAAAAAAAAAAAAAAAAAHcbAAA0QlBLAQIUABQAAAAIAKBsSAU1zFPG+FoAAIFMTQECAAAAAAAAAAAAAAAAAJwbAAA0Q1BLAQIUABQAAAAIAKBsSAWzHTU/01oAAGFMTQECAAAAAAAAAAAAAAAAAMEbAAA0RFBLAQIUABQAAAAIAKBsSAX3FpXmrloAAEFMTQECAAAAAAAAAAAAAAAAAOYbAAA0RVBLAQIUABQAAAAIAKBsSAWca8/0iVoAACFMTQECAAAAAAAAAAAAAAAAAAscAAA0RlBLAQIUABQAAAAIAKBsSAV99AeVZFoAAAFMTQECAAAAAAAAAAAAAAAAADAcAAA0R1BLAQIUABQAAAAIAKBsSAXgoY9KP1oAAOFLTQECAAAAAAAAAAAAAAAAAFUcAAA0SFBLAQIUABQAAAAIAKBsSAUY6xzCGloAAMFLTQECAAAAAAAAAAAAAAAAAHocAAA0SVBLAQIUABQAAAAIAKBsSAVEkVm89VkAAKFLTQECAAAAAAAAAAAAAAAAAJ8cAAA0SlBLAQIUABQAAAAIAKBsSAWU4s260FkAAIFLTQECAAAAAAAAAAAAAAAAAMQcAAA0S1BLAQIUABQAAAAIAKBsSAUWE4hxq1kAAGFLTQECAAAAAAAAAAAAAAAAAOkcAAA0TFBLAQIUABQAAAAIAKBsSAW/E/yihlkAAEFLTQECAAAAAAAAAAAAAAAAAA4dAAA0TVBLAQIUABQAAAAIAKBsSAVsOJNCYVkAACFLTQECAAAAAAAAAAAAAAAAADMdAAA0TlBLAQIUABQAAAAIAKBsSAVBwh2APFkAAAFLTQECAAAAAAAAAAAAAAAAAFgdAAA0T1BLAQIUABQAAAAIAKBsSAWoZblEF1kAAOFKTQECAAAAAAAAAAAAAAAAAH0dAAA0UFBLAQIUABQAAAAIAKBsSAUqV/+N8lgAAMFKTQECAAAAAAAAAAAAAAAAAKIdAAA0UVBLAQIUABQAAAAIAKBsSAVTVH2VzVgAAKFKTQECAAAAAAAAAAAAAAAAAMcdAAA0UlBLAQIUABQAAAAIAKBsSAU36Y4uqFgAAIFKTQECAAAAAAAAAAAAAAAAAOwdAAA0U1BLAQIUABQAAAAIAKBsSAW5sj6wg1gAAGFKTQECAAAAAAAAAAAAAAAAABEeAAA0VFBLAQIUABQAAAAIAKBsSAX1Bcm0XlgAAEFKTQECAAAAAAAAAAAAAAAAADYeAAA0VVBLAQIUABQAAAAIAKBsSAX7qezgOVgAACFKTQECAAAAAAAAAAAAAAAAAFseAAA0VlBLAQIUABQAAAAIAKBsSAVzNgx3FFgAAAFKTQECAAAAAAAAAAAAAAAAAIAeAAA0V1BLAQIUABQAAAAIAKBsSAXFZOly71cAAOFJTQECAAAAAAAAAAAAAAAAAKUeAAA0WFBLAQIUABQAAAAIAKBsSAWCe7YqylcAAMFJTQECAAAAAAAAAAAAAAAAAMoeAAA0WVBLAQIUABQAAAAIAKBsSAVD/s0QpVcAAKFJTQECAAAAAAAAAAAAAAAAAO8eAAA0WlBLAQIUABQAAAAIAKBsSAVqKh2PgFcAAIFJTQECAAAAAAAAAAAAAAAAABQfAAA1MFBLAQIUABQAAAAIAKBsSAXjrfCDW1cAAGFJTQECAAAAAAAAAAAAAAAAADkfAAA1MVBLAQIUABQAAAAIAKBsSAWFkLvjNlcAAEFJTQECAAAAAAAAAAAAAAAAAF4fAAA1MlBLAQIUABQAAAAIAKBsSAXnFNqnEVcAACFJTQECAAAAAAAAAAAAAAAAAIMfAAA1M1BLAQIUABQAAAAIAKBsSAXd3oPo7FYAAAFJTQECAAAAAAAAAAAAAAAAAKgfAAA1NFBLAQIUABQAAAAIAKBsSAX8Zm2Mx1YAAOFITQECAAAAAAAAAAAAAAAAAM0fAAA1NVBLAQIUABQAAAAIAKBsSAXtrUZwolYAAMFITQECAAAAAAAAAAAAAAAAAPIfAAA1NlBLAQIUABQAAAAIAKBsSAWdaDCafVYAAKFITQECAAAAAAAAAAAAAAAAABcgAAA1N1BLAQIUABQAAAAIAKBsSAXWzWSRWFYAAIFITQECAAAAAAAAAAAAAAAAADwgAAA1OFBLAQIUABQAAAAIAKBsSAWZ5obpM1YAAGFITQECAAAAAAAAAAAAAAAAAGEgAAA1OVBLAQIUABQAAAAIAKBsSAW2/4JCDlYAAEFITQECAAAAAAAAAAAAAAAAAIYgAAA1QVBLAQIUABQAAAAIAKBsSAXBUtcr6VUAACFITQECAAAAAAAAAAAAAAAAAKsgAAA1QlBLAQIUABQAAAAIAKBsSAUZDSnLxFUAAAFITQECAAAAAAAAAAAAAAAAANAgAAA1Q1BLAQIUABQAAAAIAKBsSAWqB9Ern1UAAOFHTQECAAAAAAAAAAAAAAAAAPUgAAA1RFBLAQIUABQAAAAIAKBsSAVdNI+telUAAMFHTQECAAAAAAAAAAAAAAAAABohAAA1RVBLAQIUABQAAAAIAKBsSAW39DvIVVUAAKFHTQECAAAAAAAAAAAAAAAAAD8hAAA1RlBLAQIUABQAAAAIAKBsSAXqTu1jMFUAAIFHTQECAAAAAAAAAAAAAAAAAGQhAAA1R1BLAQIUABQAAAAIAKBsSAW32Zk/C1UAAGFHTQECAAAAAAAAAAAAAAAAAIkhAAA1SFBLAQIUABQAAAAIAKBsSAWa7BPv5lQAAEFHTQECAAAAAAAAAAAAAAAAAK4hAAA1SVBLAQIUABQAAAAIAKBsSAV+lA7xwVQAACFHTQECAAAAAAAAAAAAAAAAANMhAAA1SlBLAQIUABQAAAAIAKBsSAUImdD3nFQAAAFHTQECAAAAAAAAAAAAAAAAAPghAAA1S1BLAQIUABQAAAAIAKBsSAWOFLJid1QAAOFGTQECAAAAAAAAAAAAAAAAAB0iAAA1TFBLAQIUABQAAAAIAKBsSAWhMQOmUlQAAMFGTQECAAAAAAAAAAAAAAAAAEIiAAA1TVBLAQIUABQAAAAIAKBsSAWKU6TNLVQAAKFGTQECAAAAAAAAAAAAAAAAAGciAAA1TlBLAQIUABQAAAAIAKBsSAWdDunfCFQAAIFGTQECAAAAAAAAAAAAAAAAAIwiAAA1T1BLAQIUABQAAAAIAKBsSAUbDUmq41MAAGFGTQECAAAAAAAAAAAAAAAAALEiAAA1UFBLAQIUABQAAAAIAKBsSAVrA0d6vlMAAEFGTQECAAAAAAAAAAAAAAAAANYiAAA1UVBLAQIUABQAAAAIAKBsSAXKMLSlmVMAACFGTQECAAAAAAAAAAAAAAAAAPsiAAA1UlBLAQIUABQAAAAIAKBsSAUsXrlKdFMAAAFGTQECAAAAAAAAAAAAAAAAACAjAAA1U1BLAQIUABQAAAAIAKBsSAXzHgf8T1MAAOFFTQECAAAAAAAAAAAAAAAAAEUjAAA1VFBLAQIUABQAAAAIAKBsSAVPb4yKKlMAAMFFTQECAAAAAAAAAAAAAAAAAGojAAA1VVBLAQIUABQAAAAIAKBsSAXLP36TBVMAAKFFTQECAAAAAAAAAAAAAAAAAI8jAAA1VlBLAQIUABQAAAAIAKBsSAX0LILx4FIAAIFFTQECAAAAAAAAAAAAAAAAALQjAAA1V1BLAQIUABQAAAAIAKBsSAVRuloXu1IAAGFFTQECAAAAAAAAAAAAAAAAANkjAAA1WFBLBQYAAAAA+gD6ALwuAAC0dgAAAAA= \ No newline at end of file