From 9b41ba7fb5ecf2316806010d6f2352a082e19d30 Mon Sep 17 00:00:00 2001 From: Hanjun Kim Date: Wed, 7 Apr 2021 19:31:39 +0900 Subject: [PATCH] Use Docker to generate swagger files (#9064) * use docker for proto-swagger-gen fixes #7933 * fix deprecated commands and flags see https://docs.buf.build/faq/ for detail * run proto-gen and proto-swagger-gen * add changelog entry --- CHANGELOG.md | 1 + Makefile | 6 +- client/docs/swagger-ui/swagger.yaml | 92 +++++++++++ contrib/devtools/dockerfile | 6 + docs/core/proto-docs.md | 6 + .../grpc/reflection/v2alpha1/reflection.pb.go | 152 +++++++++--------- 6 files changed, 184 insertions(+), 79 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 99dff3b43a..661d3f2ddd 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -100,6 +100,7 @@ Ref: https://keepachangelog.com/en/1.0.0/ * (types) [\#8962](https://github.com/cosmos/cosmos-sdk/issues/8962) Add `Abs()` method to `sdk.Int`. * (x/bank) [\#8950](https://github.com/cosmos/cosmos-sdk/pull/8950) Improve efficiency on supply updates. * (store) [\#8012](https://github.com/cosmos/cosmos-sdk/pull/8012) Implementation of ADR-038 WriteListener and listen.KVStore +* (makefile) [\#7933](https://github.com/cosmos/cosmos-sdk/issues/7933) Use Docker to generate swagger files. ### Bug Fixes diff --git a/Makefile b/Makefile index d7b8a1fa8c..a26681ea8e 100644 --- a/Makefile +++ b/Makefile @@ -386,13 +386,13 @@ proto-gen-any: $(DOCKER) run --rm -v $(CURDIR):/workspace --workdir /workspace tendermintdev/sdk-proto-gen sh ./scripts/protocgen-any.sh proto-swagger-gen: - @./scripts/protoc-swagger-gen.sh + $(DOCKER) run --rm -v $(CURDIR):/workspace --workdir /workspace tendermintdev/sdk-proto-gen sh ./scripts/protoc-swagger-gen.sh proto-lint: - @$(DOCKER_BUF) check lint --error-format=json + @$(DOCKER_BUF) lint --error-format=json proto-check-breaking: - @$(DOCKER_BUF) check breaking --against-input $(HTTPS_GIT)#branch=master + @$(DOCKER_BUF) breaking --against $(HTTPS_GIT)#branch=master TM_URL = https://raw.githubusercontent.com/tendermint/tendermint/v0.34.0-rc6/proto/tendermint GOGO_PROTO_URL = https://raw.githubusercontent.com/regen-network/protobuf/cosmos diff --git a/client/docs/swagger-ui/swagger.yaml b/client/docs/swagger-ui/swagger.yaml index 0a96bc1d79..1fbc6279ee 100644 --- a/client/docs/swagger-ui/swagger.yaml +++ b/client/docs/swagger-ui/swagger.yaml @@ -6265,6 +6265,24 @@ paths: signatures required by gogoproto. title: supply is the supply of the coins + pagination: + description: pagination defines the pagination in the response. + type: object + properties: + next_key: + type: string + format: byte + title: |- + next_key is the key to be passed to PageRequest.key to + query the next page most efficiently + total: + type: string + format: uint64 + title: >- + total is total number of results available if + PageRequest.count_total + + was set, its value is undefined otherwise title: >- QueryTotalSupplyResponse is the response type for the Query/TotalSupply RPC @@ -6292,6 +6310,62 @@ paths: value: type: string format: byte + parameters: + - name: pagination.key + description: |- + key is a value returned in PageResponse.next_key to begin + querying the next page most efficiently. Only one of offset or key + should be set. + in: query + required: false + type: string + format: byte + - name: pagination.offset + description: >- + offset is a numeric offset that can be used when key is unavailable. + + It is less efficient than using key. Only one of offset or key + should + + be set. + in: query + required: false + type: string + format: uint64 + - name: pagination.limit + description: >- + limit is the total number of results to be returned in the result + page. + + If left empty it will default to a value to be set by each app. + in: query + required: false + type: string + format: uint64 + - name: pagination.count_total + description: >- + count_total is set to true to indicate that the result set should + include + + a count of the total number of items available for pagination in + UIs. + + count_total is only respected when offset is used. It is ignored + when key + + is set. + in: query + required: false + type: boolean + format: boolean + - name: pagination.reverse + description: >- + reverse is set to true indicates that, results to be returned in the + descending order. + in: query + required: false + type: boolean + format: boolean tags: - Query '/cosmos/bank/v1beta1/supply/{denom}': @@ -24029,6 +24103,24 @@ definitions: NOTE: The amount field is an Int which implements the custom method signatures required by gogoproto. title: supply is the supply of the coins + pagination: + description: pagination defines the pagination in the response. + type: object + properties: + next_key: + type: string + format: byte + title: |- + next_key is the key to be passed to PageRequest.key to + query the next page most efficiently + total: + type: string + format: uint64 + title: >- + total is total number of results available if + PageRequest.count_total + + was set, its value is undefined otherwise title: >- QueryTotalSupplyResponse is the response type for the Query/TotalSupply RPC diff --git a/contrib/devtools/dockerfile b/contrib/devtools/dockerfile index 565e66ea33..10be413453 100644 --- a/contrib/devtools/dockerfile +++ b/contrib/devtools/dockerfile @@ -18,4 +18,10 @@ RUN GO111MODULE=on go get \ RUN GO111MODULE=on go get -u github.com/pseudomuto/protoc-gen-doc/cmd/protoc-gen-doc +RUN apk add --no-cache \ + nodejs \ + npm + +RUN npm install -g swagger-combine + COPY --from=BUILDER /usr/local/bin /usr/local/bin diff --git a/docs/core/proto-docs.md b/docs/core/proto-docs.md index 22e023eecb..219c8bf9d4 100644 --- a/docs/core/proto-docs.md +++ b/docs/core/proto-docs.md @@ -1871,6 +1871,11 @@ QueryTotalSupplyRequest is the request type for the Query/TotalSupply RPC method. +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| `pagination` | [cosmos.base.query.v1beta1.PageRequest](#cosmos.base.query.v1beta1.PageRequest) | | pagination defines an optional pagination for the request. | + + @@ -1885,6 +1890,7 @@ method | Field | Type | Label | Description | | ----- | ---- | ----- | ----------- | | `supply` | [cosmos.base.v1beta1.Coin](#cosmos.base.v1beta1.Coin) | repeated | supply is the supply of the coins | +| `pagination` | [cosmos.base.query.v1beta1.PageResponse](#cosmos.base.query.v1beta1.PageResponse) | | pagination defines the pagination in the response. | diff --git a/server/grpc/reflection/v2alpha1/reflection.pb.go b/server/grpc/reflection/v2alpha1/reflection.pb.go index 338d9ce23c..abe503b344 100644 --- a/server/grpc/reflection/v2alpha1/reflection.pb.go +++ b/server/grpc/reflection/v2alpha1/reflection.pb.go @@ -1466,85 +1466,85 @@ func init() { } var fileDescriptor_15c91f0b8d6bf3d0 = []byte{ - // 1245 bytes of a gzipped FileDescriptorProto + // 1243 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x58, 0xcf, 0x6f, 0x1b, 0xc5, 0x17, 0xcf, 0xda, 0xf9, 0xf9, 0xd2, 0xc4, 0xed, 0x7c, 0x9b, 0xc4, 0x75, 0xfb, 0x75, 0xdb, 0x8d, - 0x84, 0x82, 0x50, 0xed, 0x26, 0x0d, 0x69, 0x05, 0x2d, 0x91, 0xd3, 0xd0, 0x12, 0x89, 0xa0, 0xe0, - 0xa4, 0xa2, 0x20, 0xd4, 0xd5, 0x7a, 0x77, 0xbc, 0x1e, 0xe1, 0xfd, 0x91, 0x9d, 0xdd, 0xe0, 0x5c, + 0x84, 0x82, 0x50, 0xed, 0x26, 0x0d, 0x69, 0x05, 0x29, 0x95, 0xd3, 0xd0, 0x12, 0x89, 0xa0, 0xe0, + 0xa4, 0x50, 0x21, 0xd4, 0xd5, 0x7a, 0x77, 0xbc, 0x1e, 0xe1, 0xfd, 0x91, 0x9d, 0xdd, 0xe0, 0x5c, 0x39, 0x70, 0x06, 0xf1, 0x27, 0x70, 0xe0, 0xce, 0x9d, 0x3b, 0x82, 0x4b, 0x25, 0x2e, 0x1c, 0x51, - 0x82, 0xc4, 0x01, 0xfe, 0x08, 0x34, 0x3f, 0xd6, 0x5e, 0x6f, 0xd6, 0xf6, 0x26, 0xe1, 0xd4, 0xce, - 0xbc, 0xcf, 0xfb, 0xbc, 0xcf, 0x9b, 0x99, 0xbc, 0xf7, 0xd6, 0x70, 0xdf, 0x70, 0xa9, 0xed, 0xd2, - 0x6a, 0x43, 0xa7, 0xb8, 0xea, 0xe3, 0x66, 0x1b, 0x1b, 0x01, 0x71, 0x9d, 0xea, 0xd1, 0x9a, 0xde, - 0xf6, 0x5a, 0xfa, 0x6a, 0x6c, 0xaf, 0xe2, 0xf9, 0x6e, 0xe0, 0xa2, 0xdb, 0xc2, 0xa3, 0xc2, 0x3c, - 0x2a, 0x31, 0x6b, 0xe4, 0x51, 0xba, 0x65, 0xb9, 0xae, 0xd5, 0xc6, 0x55, 0xdd, 0x23, 0x55, 0xdd, - 0x71, 0xdc, 0x40, 0x67, 0x76, 0x2a, 0xdc, 0xd5, 0xbf, 0xf2, 0x30, 0x57, 0xf3, 0xbc, 0x6d, 0x4c, - 0x0d, 0x9f, 0x78, 0x81, 0xeb, 0xa3, 0x67, 0x30, 0xa1, 0x87, 0x41, 0xcb, 0x29, 0x2a, 0x77, 0x94, - 0x95, 0xd9, 0xb5, 0xfb, 0x95, 0x11, 0x01, 0x2a, 0x35, 0x86, 0xee, 0x11, 0xd4, 0x85, 0x3b, 0xe3, - 0x31, 0x5a, 0x3a, 0x71, 0x8a, 0xb9, 0x8c, 0x3c, 0x4f, 0x19, 0x3a, 0xce, 0xc3, 0xdd, 0x39, 0x8f, - 0x6b, 0x62, 0xa3, 0x98, 0xcf, 0xca, 0xc3, 0xd0, 0x7d, 0x3c, 0x6c, 0x03, 0xbd, 0x82, 0x39, 0xc3, - 0x75, 0x9a, 0xc4, 0x0a, 0x7d, 0x7e, 0x02, 0xc5, 0x71, 0xce, 0xf7, 0x28, 0x03, 0x5f, 0xcc, 0x2b, - 0xc6, 0xdb, 0x4f, 0x87, 0x34, 0x98, 0x3f, 0x0c, 0xb1, 0x7f, 0xac, 0x51, 0xec, 0x1f, 0x11, 0x03, - 0xd3, 0xe2, 0x44, 0xc6, 0x00, 0x1f, 0x33, 0xb7, 0x7d, 0xe9, 0x15, 0x0f, 0x70, 0x18, 0x37, 0xa0, - 0x27, 0x90, 0x0b, 0x3a, 0xc5, 0x49, 0x4e, 0x7a, 0x6f, 0x24, 0xe9, 0x41, 0x27, 0xc6, 0x94, 0x0b, - 0x3a, 0xaa, 0x03, 0x57, 0xe2, 0x7b, 0xa8, 0x04, 0xd3, 0xcd, 0xb0, 0xdd, 0x76, 0x74, 0x1b, 0xf3, - 0xab, 0x9e, 0xa9, 0x77, 0xd7, 0x68, 0x0b, 0xc6, 0x6d, 0x6a, 0xd1, 0x62, 0xee, 0x4e, 0x7e, 0x65, - 0x76, 0xad, 0x32, 0x32, 0xd8, 0x2e, 0xb5, 0x62, 0xd1, 0xb8, 0xaf, 0xda, 0x82, 0x42, 0xe2, 0x65, - 0xa0, 0x17, 0x00, 0x94, 0x58, 0x8e, 0x66, 0xbb, 0x26, 0xa6, 0x45, 0x85, 0x93, 0x6f, 0x8c, 0x24, - 0xdf, 0x27, 0x96, 0x43, 0x1c, 0x6b, 0xd7, 0x35, 0x71, 0x2c, 0xc8, 0x0c, 0x63, 0x62, 0x7b, 0x54, - 0xfd, 0x56, 0x81, 0x85, 0x54, 0x10, 0x42, 0x30, 0x1e, 0xcb, 0x8f, 0xff, 0x1f, 0x2d, 0xc2, 0xa4, - 0x13, 0xda, 0x0d, 0xec, 0xf3, 0x87, 0x39, 0x51, 0x97, 0x2b, 0xf4, 0x21, 0x2c, 0xf3, 0x87, 0xab, - 0x11, 0xa7, 0xe9, 0x6a, 0x9e, 0xef, 0x1e, 0x11, 0x13, 0xfb, 0x9a, 0x8d, 0x83, 0x96, 0x6b, 0x6a, - 0xdd, 0xa3, 0xca, 0x73, 0xaa, 0xdb, 0x1c, 0xba, 0xe3, 0x34, 0xdd, 0x3d, 0x09, 0xdc, 0xe5, 0xb8, - 0x67, 0x12, 0xa6, 0xde, 0x85, 0x42, 0xe2, 0x3d, 0xa3, 0x79, 0xc8, 0x11, 0x53, 0x4a, 0xc9, 0x11, - 0x53, 0xb5, 0xa0, 0x90, 0x78, 0xaa, 0xe8, 0x00, 0x80, 0x38, 0x01, 0xf6, 0x9b, 0xba, 0xd1, 0x3d, - 0xa0, 0xf5, 0x91, 0x07, 0xb4, 0x13, 0xb9, 0xc4, 0x8e, 0x27, 0xc6, 0xa3, 0xfe, 0x98, 0x83, 0xff, - 0xa5, 0x60, 0x86, 0xbe, 0x80, 0xaf, 0x15, 0xb8, 0xd5, 0xa5, 0xd0, 0x74, 0xc3, 0xc0, 0x5e, 0x40, - 0x1c, 0x4b, 0xb3, 0x31, 0xa5, 0xba, 0x85, 0xa3, 0xa7, 0xb1, 0x9d, 0x5d, 0x5c, 0x2d, 0xe2, 0xd8, - 0x15, 0x14, 0x31, 0xb1, 0x25, 0x32, 0x08, 0x44, 0xd1, 0x11, 0x2c, 0xf6, 0x74, 0x10, 0xdb, 0x6b, - 0x63, 0x1b, 0xb3, 0x35, 0x2d, 0xe6, 0xb9, 0x82, 0xcd, 0xec, 0x0a, 0x76, 0x7a, 0xde, 0xb1, 0xe0, - 0x0b, 0x24, 0xc5, 0x4e, 0xd5, 0x4f, 0xa0, 0x3c, 0xdc, 0x71, 0xe8, 0xf1, 0xdd, 0x80, 0xe9, 0xe0, - 0xd8, 0xc3, 0x5a, 0xe8, 0xb7, 0xf9, 0x33, 0x9b, 0xa9, 0x4f, 0xb1, 0xf5, 0x0b, 0xbf, 0xad, 0x7e, - 0x09, 0xcb, 0x19, 0xce, 0x64, 0x28, 0xfb, 0x3a, 0x2c, 0x36, 0x09, 0x6e, 0x9b, 0x9a, 0xd9, 0xc5, - 0x6b, 0xcc, 0x20, 0x6e, 0x65, 0xa6, 0x7e, 0x9d, 0x5b, 0x7b, 0x64, 0x1f, 0x31, 0x9b, 0xfa, 0x39, - 0x2c, 0x0d, 0x28, 0x65, 0xa8, 0x06, 0xff, 0x6f, 0x60, 0xa3, 0xf5, 0x60, 0x8d, 0xdd, 0xb4, 0x1b, - 0x3a, 0x81, 0xa6, 0x9b, 0xa6, 0x8f, 0x29, 0xd5, 0x3c, 0x1f, 0x37, 0x49, 0x47, 0x2a, 0x28, 0x09, - 0x50, 0x4d, 0x60, 0x6a, 0x02, 0xb2, 0xc7, 0x11, 0xaa, 0x07, 0x73, 0x7d, 0x55, 0x00, 0xbd, 0x84, - 0x59, 0x59, 0x09, 0x35, 0x9b, 0x5a, 0xb2, 0x9b, 0xbc, 0x3d, 0xfa, 0xaf, 0x5d, 0xf8, 0xf4, 0x71, - 0x7d, 0x30, 0x56, 0x07, 0xda, 0xdd, 0xdf, 0x9a, 0x80, 0xbc, 0x4d, 0x2d, 0xf5, 0x27, 0x05, 0xae, - 0xa7, 0xa1, 0xd1, 0x9b, 0x70, 0xd5, 0xc7, 0x87, 0x21, 0xa6, 0x81, 0x96, 0x38, 0xc2, 0x82, 0xdc, - 0x8f, 0xfe, 0x4c, 0xd1, 0x32, 0xcc, 0x45, 0x50, 0xdf, 0x0d, 0x03, 0x2c, 0x2f, 0xeb, 0x8a, 0xdc, - 0xac, 0xb3, 0x3d, 0xb4, 0xd2, 0xe3, 0xeb, 0x5e, 0xaa, 0x28, 0x03, 0xf3, 0x72, 0xff, 0x40, 0xdc, - 0x2d, 0x7a, 0x0b, 0xae, 0xf9, 0x98, 0x7a, 0xae, 0x43, 0x71, 0x2f, 0xf4, 0x38, 0x87, 0x5e, 0x8d, - 0x0c, 0xdd, 0x12, 0x71, 0x13, 0x6e, 0x3c, 0xc7, 0x41, 0xb2, 0x7b, 0x0a, 0x42, 0xd5, 0x84, 0x52, - 0x9a, 0x51, 0x50, 0xfc, 0x57, 0x3d, 0x5a, 0x4a, 0x48, 0x36, 0xde, 0x3e, 0x09, 0x67, 0x8c, 0x3d, - 0x09, 0xa2, 0xbd, 0x2b, 0x97, 0x6a, 0xef, 0x91, 0x84, 0x44, 0xcf, 0xee, 0x97, 0x90, 0x34, 0xc6, - 0x24, 0xf0, 0xc9, 0x40, 0xb9, 0xd4, 0x64, 0xa0, 0x2e, 0xc3, 0x5d, 0x1e, 0x25, 0xbd, 0xcd, 0x4b, - 0x29, 0x47, 0xa0, 0x0e, 0x03, 0x49, 0x49, 0x7b, 0x30, 0x29, 0xa6, 0x02, 0xa9, 0xe9, 0xe2, 0xd3, - 0x85, 0xe4, 0x91, 0xe2, 0x06, 0x8d, 0x08, 0x52, 0x5c, 0x87, 0x8b, 0x1b, 0x08, 0x92, 0xe2, 0xea, - 0x30, 0xc5, 0x26, 0x0a, 0xc2, 0x5b, 0xcb, 0xe5, 0x46, 0x93, 0x88, 0x48, 0x2d, 0xc2, 0xe2, 0x73, - 0x1c, 0xf4, 0x0d, 0x1b, 0x52, 0xd3, 0x4b, 0x58, 0x3a, 0x63, 0x91, 0x42, 0xc4, 0x24, 0xa3, 0x5c, - 0x74, 0x92, 0x39, 0x86, 0xa5, 0x01, 0xba, 0xd0, 0xab, 0x33, 0x43, 0x98, 0x68, 0xa2, 0x0f, 0xcf, - 0x95, 0xe9, 0xc0, 0x19, 0x4c, 0xfd, 0x5e, 0x81, 0xc5, 0x74, 0xe4, 0xd0, 0x82, 0x7d, 0x13, 0x66, - 0x08, 0x65, 0x63, 0x4f, 0xd8, 0x16, 0x25, 0x66, 0xba, 0x3e, 0x4d, 0xe8, 0x2e, 0x5f, 0xa3, 0x3d, - 0x98, 0x12, 0x43, 0x46, 0xd4, 0xd2, 0x36, 0xb2, 0x89, 0x15, 0x13, 0x47, 0xfc, 0x52, 0x24, 0x8d, - 0xba, 0x0f, 0x0b, 0xa9, 0x88, 0xd4, 0x79, 0xe8, 0x0d, 0x28, 0x30, 0x9d, 0x9a, 0x38, 0x37, 0x4f, - 0x0f, 0x5a, 0xb2, 0x08, 0xce, 0xb1, 0x6d, 0xce, 0xb3, 0xa7, 0x07, 0xad, 0xb5, 0x1f, 0x00, 0xae, - 0xd5, 0xbb, 0x5a, 0x64, 0xfe, 0xe8, 0x57, 0x05, 0xd0, 0xd9, 0x42, 0x85, 0xde, 0x19, 0x99, 0xc2, - 0xc0, 0xd2, 0x57, 0x7a, 0xf7, 0x42, 0xbe, 0xe2, 0x69, 0xa9, 0x8f, 0xbf, 0xfa, 0xed, 0xcf, 0xef, - 0x72, 0x1b, 0x68, 0xbd, 0x3a, 0xe8, 0x4b, 0x6a, 0xb5, 0x81, 0x03, 0x7d, 0xb5, 0xaa, 0x7b, 0x5e, - 0xac, 0x7d, 0x56, 0xc5, 0x37, 0x8b, 0xcc, 0x26, 0x39, 0xb9, 0x65, 0xca, 0x26, 0xbd, 0x8a, 0x66, - 0xcb, 0x66, 0x40, 0x91, 0xbd, 0x70, 0x36, 0xe2, 0xcb, 0x29, 0xca, 0x26, 0x31, 0x64, 0x66, 0xcb, - 0x26, 0xb5, 0x20, 0x67, 0xcc, 0x26, 0xbd, 0x5e, 0x5f, 0x3c, 0x1b, 0xfe, 0xfd, 0xf6, 0xb7, 0x22, - 0x9b, 0x41, 0xfa, 0x08, 0xb3, 0x95, 0x4d, 0xd9, 0xb0, 0x1a, 0x5f, 0x7a, 0x7a, 0x29, 0x0e, 0x99, - 0xe5, 0x36, 0xcf, 0xf2, 0x3d, 0xf4, 0xf8, 0xdc, 0x59, 0xc6, 0xbf, 0x26, 0xff, 0x11, 0xd9, 0x0e, - 0xaa, 0x73, 0x99, 0xb2, 0x1d, 0xde, 0x34, 0xb2, 0x65, 0x3b, 0xa2, 0xa7, 0xa8, 0xef, 0xf3, 0x6c, - 0x37, 0xd1, 0x93, 0x73, 0x66, 0xdb, 0x5f, 0xa5, 0xd1, 0x2f, 0x0a, 0x14, 0x12, 0xdd, 0x02, 0x3d, - 0xcc, 0xa2, 0x2f, 0xa5, 0xf3, 0x94, 0x1e, 0x9d, 0xdf, 0xf1, 0x92, 0x77, 0x17, 0x74, 0x62, 0xab, - 0xad, 0x4f, 0x7f, 0x3e, 0x29, 0x2b, 0xaf, 0x4f, 0xca, 0xca, 0x1f, 0x27, 0x65, 0xe5, 0x9b, 0xd3, - 0xf2, 0xd8, 0xeb, 0xd3, 0xf2, 0xd8, 0xef, 0xa7, 0xe5, 0xb1, 0xcf, 0x36, 0x2d, 0x12, 0xb4, 0xc2, - 0x46, 0xc5, 0x70, 0xed, 0x28, 0x82, 0xf8, 0xe7, 0x1e, 0x35, 0xbf, 0xa8, 0xb2, 0xd3, 0xc0, 0x7e, - 0xd5, 0xf2, 0x3d, 0x83, 0x05, 0x48, 0xf9, 0xf9, 0xa7, 0x31, 0xc9, 0x7f, 0xb5, 0x79, 0xf0, 0x6f, - 0x00, 0x00, 0x00, 0xff, 0xff, 0xe3, 0xdd, 0xd8, 0x11, 0x28, 0x12, 0x00, 0x00, + 0x82, 0xc4, 0x01, 0xfe, 0x08, 0xb4, 0x33, 0xb3, 0xf6, 0x78, 0xb3, 0xb6, 0x37, 0x09, 0xa7, 0x64, + 0xe6, 0x7d, 0xde, 0x67, 0x3e, 0x6f, 0x66, 0xfc, 0xde, 0x9b, 0x85, 0xfb, 0x86, 0x4b, 0x6d, 0x97, + 0x56, 0x1b, 0x3a, 0xc5, 0x55, 0x1f, 0x37, 0xdb, 0xd8, 0x08, 0x88, 0xeb, 0x54, 0x8f, 0xd6, 0xf4, + 0xb6, 0xd7, 0xd2, 0x57, 0xa5, 0xb9, 0x8a, 0xe7, 0xbb, 0x81, 0x8b, 0x6e, 0x73, 0x8f, 0x4a, 0xe4, + 0x51, 0x91, 0xac, 0xb1, 0x47, 0xe9, 0x96, 0xe5, 0xba, 0x56, 0x1b, 0x57, 0x75, 0x8f, 0x54, 0x75, + 0xc7, 0x71, 0x03, 0x3d, 0xb2, 0x53, 0xee, 0xae, 0xfe, 0x95, 0x87, 0xb9, 0x9a, 0xe7, 0x6d, 0x63, + 0x6a, 0xf8, 0xc4, 0x0b, 0x5c, 0x1f, 0x3d, 0x83, 0x09, 0x3d, 0x0c, 0x5a, 0x4e, 0x51, 0xb9, 0xa3, + 0xac, 0xcc, 0xae, 0xdd, 0xaf, 0x8c, 0x58, 0xa0, 0x52, 0x8b, 0xd0, 0x3d, 0x82, 0x3a, 0x77, 0x8f, + 0x78, 0x8c, 0x96, 0x4e, 0x9c, 0x62, 0x2e, 0x23, 0xcf, 0xd3, 0x08, 0x2d, 0xf3, 0x30, 0x77, 0xc6, + 0xe3, 0x9a, 0xd8, 0x28, 0xe6, 0xb3, 0xf2, 0x44, 0xe8, 0x3e, 0x9e, 0x68, 0x02, 0xbd, 0x82, 0x39, + 0xc3, 0x75, 0x9a, 0xc4, 0x0a, 0x7d, 0xb6, 0x03, 0xc5, 0x71, 0xc6, 0xf7, 0x28, 0x03, 0x9f, 0xe4, + 0x25, 0xf1, 0xf6, 0xd3, 0x21, 0x0d, 0xe6, 0x0f, 0x43, 0xec, 0x1f, 0x6b, 0x14, 0xfb, 0x47, 0xc4, + 0xc0, 0xb4, 0x38, 0x91, 0x71, 0x81, 0x8f, 0x23, 0xb7, 0x7d, 0xe1, 0x25, 0x2f, 0x70, 0x28, 0x1b, + 0xd0, 0x63, 0xc8, 0x05, 0x9d, 0xe2, 0x24, 0x23, 0xbd, 0x37, 0x92, 0xf4, 0xa0, 0x23, 0x31, 0xe5, + 0x82, 0x8e, 0xea, 0xc0, 0x15, 0x79, 0x0e, 0x95, 0x60, 0xba, 0x19, 0xb6, 0xdb, 0x8e, 0x6e, 0x63, + 0x76, 0xd4, 0x33, 0xf5, 0xee, 0x18, 0x6d, 0xc1, 0xb8, 0x4d, 0x2d, 0x5a, 0xcc, 0xdd, 0xc9, 0xaf, + 0xcc, 0xae, 0x55, 0x46, 0x2e, 0xb6, 0x4b, 0x2d, 0x69, 0x35, 0xe6, 0xab, 0xb6, 0xa0, 0x90, 0xb8, + 0x19, 0xe8, 0x05, 0x00, 0x25, 0x96, 0xa3, 0xd9, 0xae, 0x89, 0x69, 0x51, 0x61, 0xe4, 0x1b, 0x23, + 0xc9, 0xf7, 0x89, 0xe5, 0x10, 0xc7, 0xda, 0x75, 0x4d, 0x2c, 0x2d, 0x32, 0x13, 0x31, 0x45, 0x73, + 0x54, 0xfd, 0x56, 0x81, 0x85, 0x54, 0x10, 0x42, 0x30, 0x2e, 0xc5, 0xc7, 0xfe, 0x47, 0x8b, 0x30, + 0xe9, 0x84, 0x76, 0x03, 0xfb, 0xec, 0x62, 0x4e, 0xd4, 0xc5, 0x08, 0x7d, 0x08, 0xcb, 0xec, 0xe2, + 0x6a, 0xc4, 0x69, 0xba, 0x9a, 0xe7, 0xbb, 0x47, 0xc4, 0xc4, 0xbe, 0x66, 0xe3, 0xa0, 0xe5, 0x9a, + 0x5a, 0x77, 0xab, 0xf2, 0x8c, 0xea, 0x36, 0x83, 0xee, 0x38, 0x4d, 0x77, 0x4f, 0x00, 0x77, 0x19, + 0xee, 0x99, 0x80, 0xa9, 0x77, 0xa1, 0x90, 0xb8, 0xcf, 0x68, 0x1e, 0x72, 0xc4, 0x14, 0x52, 0x72, + 0xc4, 0x54, 0x2d, 0x28, 0x24, 0xae, 0x2a, 0x3a, 0x00, 0x20, 0x4e, 0x80, 0xfd, 0xa6, 0x6e, 0x74, + 0x37, 0x68, 0x7d, 0xe4, 0x06, 0xed, 0xc4, 0x2e, 0xd2, 0xf6, 0x48, 0x3c, 0xea, 0x8f, 0x39, 0xf8, + 0x5f, 0x0a, 0x66, 0xe8, 0x0d, 0xf8, 0x5a, 0x81, 0x5b, 0x5d, 0x0a, 0x4d, 0x37, 0x0c, 0xec, 0x05, + 0xc4, 0xb1, 0x34, 0x1b, 0x53, 0xaa, 0x5b, 0x38, 0xbe, 0x1a, 0xdb, 0xd9, 0xc5, 0xd5, 0x62, 0x8e, + 0x5d, 0x4e, 0x21, 0x89, 0x2d, 0x91, 0x41, 0x20, 0x8a, 0x8e, 0x60, 0xb1, 0xa7, 0x83, 0xd8, 0x5e, + 0x1b, 0xdb, 0x38, 0x1a, 0xd3, 0x62, 0x9e, 0x29, 0x78, 0x92, 0x5d, 0xc1, 0x4e, 0xcf, 0x5b, 0x5a, + 0x7c, 0x81, 0xa4, 0xd8, 0xa9, 0xfa, 0x29, 0x94, 0x87, 0x3b, 0x0e, 0xdd, 0xbe, 0x1b, 0x30, 0x1d, + 0x1c, 0x7b, 0x58, 0x0b, 0xfd, 0x36, 0xbb, 0x66, 0x33, 0xf5, 0xa9, 0x68, 0xfc, 0xc2, 0x6f, 0xab, + 0x5f, 0xc2, 0x72, 0x86, 0x3d, 0x19, 0xca, 0xbe, 0x0e, 0x8b, 0x4d, 0x82, 0xdb, 0xa6, 0x66, 0x76, + 0xf1, 0x5a, 0x64, 0xe0, 0xa7, 0x32, 0x53, 0xbf, 0xce, 0xac, 0x3d, 0xb2, 0x8f, 0x22, 0x9b, 0xfa, + 0x39, 0x2c, 0x0d, 0x48, 0x65, 0xa8, 0x06, 0xff, 0x6f, 0x60, 0xa3, 0xf5, 0x60, 0x2d, 0x3a, 0x69, + 0x37, 0x74, 0x02, 0x4d, 0x37, 0x4d, 0x1f, 0x53, 0xaa, 0x79, 0x3e, 0x6e, 0x92, 0x8e, 0x50, 0x50, + 0xe2, 0xa0, 0x1a, 0xc7, 0xd4, 0x38, 0x64, 0x8f, 0x21, 0x54, 0x0f, 0xe6, 0xfa, 0xb2, 0x00, 0x7a, + 0x09, 0xb3, 0x22, 0x13, 0x6a, 0x36, 0xb5, 0x44, 0x35, 0x79, 0x7b, 0xf4, 0xaf, 0x9d, 0xfb, 0xf4, + 0x71, 0x7d, 0x30, 0x56, 0x07, 0xda, 0x9d, 0xdf, 0x9a, 0x80, 0xbc, 0x4d, 0x2d, 0xf5, 0x27, 0x05, + 0xae, 0xa7, 0xa1, 0xd1, 0x9b, 0x70, 0xd5, 0xc7, 0x87, 0x21, 0xa6, 0x81, 0x96, 0xd8, 0xc2, 0x82, + 0x98, 0x8f, 0x7f, 0xa6, 0x68, 0x19, 0xe6, 0x62, 0xa8, 0xef, 0x86, 0x01, 0x16, 0x87, 0x75, 0x45, + 0x4c, 0xd6, 0xa3, 0x39, 0xb4, 0xd2, 0xe3, 0xeb, 0x1e, 0x2a, 0x4f, 0x03, 0xf3, 0x62, 0xfe, 0x80, + 0x9f, 0x2d, 0x7a, 0x0b, 0xae, 0xf9, 0x98, 0x7a, 0xae, 0x43, 0x71, 0x6f, 0xe9, 0x71, 0x06, 0xbd, + 0x1a, 0x1b, 0xba, 0x29, 0xe2, 0x26, 0xdc, 0x78, 0x8e, 0x83, 0x64, 0xf5, 0xe4, 0x84, 0xaa, 0x09, + 0xa5, 0x34, 0x23, 0xa7, 0xf8, 0xaf, 0x6a, 0xb4, 0x90, 0x90, 0x2c, 0xbc, 0x7d, 0x12, 0xce, 0x18, + 0x7b, 0x12, 0x78, 0x79, 0x57, 0x2e, 0x55, 0xde, 0x63, 0x09, 0x89, 0x9a, 0xdd, 0x2f, 0x21, 0x69, + 0x94, 0x24, 0xb0, 0xce, 0x40, 0xb9, 0x54, 0x67, 0xa0, 0x2e, 0xc3, 0x5d, 0xb6, 0x4a, 0x7a, 0x99, + 0x17, 0x52, 0x8e, 0x40, 0x1d, 0x06, 0x12, 0x92, 0xf6, 0x60, 0x92, 0x77, 0x05, 0x42, 0xd3, 0xc5, + 0xbb, 0x0b, 0xc1, 0x23, 0xc4, 0x0d, 0x6a, 0x11, 0x84, 0xb8, 0x0e, 0x13, 0x37, 0x10, 0x24, 0xc4, + 0xd5, 0x61, 0x2a, 0xea, 0x28, 0x08, 0x2b, 0x2d, 0x97, 0x6b, 0x4d, 0x62, 0x22, 0xb5, 0x08, 0x8b, + 0xcf, 0x71, 0xd0, 0xd7, 0x6c, 0x08, 0x4d, 0x2f, 0x61, 0xe9, 0x8c, 0x45, 0x08, 0xe1, 0x9d, 0x8c, + 0x72, 0xd1, 0x4e, 0xe6, 0x18, 0x96, 0x06, 0xe8, 0x42, 0xaf, 0xce, 0x34, 0x61, 0xbc, 0x88, 0x3e, + 0x3c, 0x57, 0xa4, 0x03, 0x7b, 0x30, 0xf5, 0x7b, 0x05, 0x16, 0xd3, 0x91, 0x43, 0x13, 0xf6, 0x4d, + 0x98, 0x21, 0x34, 0x6a, 0x7b, 0xc2, 0x36, 0x4f, 0x31, 0xd3, 0xf5, 0x69, 0x42, 0x77, 0xd9, 0x18, + 0xed, 0xc1, 0x14, 0x6f, 0x32, 0xe2, 0x92, 0xb6, 0x91, 0x4d, 0x2c, 0xef, 0x38, 0xe4, 0x43, 0x11, + 0x34, 0xea, 0x3e, 0x2c, 0xa4, 0x22, 0x52, 0xfb, 0xa1, 0x37, 0xa0, 0x10, 0xe9, 0xd4, 0xf8, 0xbe, + 0x79, 0x7a, 0xd0, 0x12, 0x49, 0x70, 0x2e, 0x9a, 0x66, 0x3c, 0x7b, 0x7a, 0xd0, 0x5a, 0xfb, 0x01, + 0xe0, 0x5a, 0xbd, 0xab, 0x45, 0xc4, 0x8f, 0x7e, 0x55, 0x00, 0x9d, 0x4d, 0x54, 0xe8, 0x9d, 0x91, + 0x21, 0x0c, 0x4c, 0x7d, 0xa5, 0x77, 0x2f, 0xe4, 0xcb, 0xaf, 0x96, 0xba, 0xf9, 0xd5, 0x6f, 0x7f, + 0x7e, 0x97, 0xdb, 0x40, 0xeb, 0xd5, 0x41, 0x2f, 0xa9, 0xd5, 0x06, 0x0e, 0xf4, 0xd5, 0xaa, 0xee, + 0x79, 0x52, 0xf9, 0xac, 0xf2, 0x37, 0x8b, 0x88, 0x26, 0xd9, 0xb9, 0x65, 0x8a, 0x26, 0x3d, 0x8b, + 0x66, 0x8b, 0x66, 0x40, 0x92, 0xbd, 0x70, 0x34, 0xfc, 0xe5, 0x14, 0x47, 0x93, 0x68, 0x32, 0xb3, + 0x45, 0x93, 0x9a, 0x90, 0x33, 0x46, 0x93, 0x9e, 0xaf, 0x2f, 0x1e, 0x0d, 0x7b, 0xbf, 0xfd, 0xad, + 0x88, 0x62, 0x90, 0xde, 0xc2, 0x6c, 0x65, 0x53, 0x36, 0x2c, 0xc7, 0x97, 0x9e, 0x5e, 0x8a, 0x43, + 0x44, 0xb9, 0xcd, 0xa2, 0x7c, 0x0f, 0x6d, 0x9e, 0x3b, 0x4a, 0xf9, 0x35, 0xf9, 0x0f, 0x8f, 0x76, + 0x50, 0x9e, 0xcb, 0x14, 0xed, 0xf0, 0xa2, 0x91, 0x2d, 0xda, 0x11, 0x35, 0x45, 0x7d, 0x9f, 0x45, + 0xfb, 0x04, 0x3d, 0x3e, 0x67, 0xb4, 0xfd, 0x59, 0x1a, 0xfd, 0xa2, 0x40, 0x21, 0x51, 0x2d, 0xd0, + 0xc3, 0x2c, 0xfa, 0x52, 0x2a, 0x4f, 0xe9, 0xd1, 0xf9, 0x1d, 0x2f, 0x79, 0x76, 0x41, 0x47, 0x1a, + 0x6d, 0x7d, 0xf2, 0xf3, 0x49, 0x59, 0x79, 0x7d, 0x52, 0x56, 0xfe, 0x38, 0x29, 0x2b, 0xdf, 0x9c, + 0x96, 0xc7, 0x5e, 0x9f, 0x96, 0xc7, 0x7e, 0x3f, 0x2d, 0x8f, 0x7d, 0xb6, 0x69, 0x91, 0xa0, 0x15, + 0x36, 0x2a, 0x86, 0x6b, 0xc7, 0x2b, 0xf0, 0x3f, 0xf7, 0xa8, 0xf9, 0x45, 0x35, 0xda, 0x0d, 0xec, + 0x57, 0x2d, 0xdf, 0x33, 0xd2, 0xbe, 0xfd, 0x34, 0x26, 0xd9, 0x27, 0x9b, 0x07, 0xff, 0x06, 0x00, + 0x00, 0xff, 0xff, 0x52, 0x36, 0x45, 0xcc, 0x25, 0x12, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used.