From 6486e415e74180fdc3658a278fab9370cbe5185a Mon Sep 17 00:00:00 2001 From: MSalopek Date: Wed, 31 Jan 2024 14:55:38 +0100 Subject: [PATCH] fix(x/gov): backport 18146: min amount per deposit Backport: https://github.com/cosmos/cosmos-sdk/pull/18146 --- api/cosmos/gov/v1/gov.pulsar.go | 152 ++++++-- api/cosmos/staking/v1beta1/tx.pulsar.go | 442 ++++++++++++------------ proto/cosmos/gov/v1/gov.proto | 8 + tests/e2e/gov/deposits.go | 27 -- tests/e2e/gov/tx.go | 14 +- x/bank/app_test.go | 7 +- x/gov/abci_test.go | 10 +- x/gov/keeper/deposit.go | 49 ++- x/gov/keeper/deposit_test.go | 78 +++++ x/gov/keeper/msg_server.go | 15 + x/gov/keeper/msg_server_test.go | 27 +- x/gov/migrations/v4/json.go | 3 + x/gov/migrations/v4/json_test.go | 1 + x/gov/migrations/v4/store.go | 3 + x/gov/migrations/v4/store_test.go | 1 + x/gov/simulation/genesis.go | 13 +- x/gov/simulation/operations.go | 12 +- x/gov/simulation/operations_test.go | 6 +- x/gov/types/v1/gov.pb.go | 222 +++++++----- x/gov/types/v1/params.go | 12 +- x/staking/types/tx.pb.go | 193 +++++------ 21 files changed, 796 insertions(+), 499 deletions(-) diff --git a/api/cosmos/gov/v1/gov.pulsar.go b/api/cosmos/gov/v1/gov.pulsar.go index ceb82da18d45..f961a3d21f86 100644 --- a/api/cosmos/gov/v1/gov.pulsar.go +++ b/api/cosmos/gov/v1/gov.pulsar.go @@ -5373,6 +5373,7 @@ var ( fd_Params_burn_vote_quorum protoreflect.FieldDescriptor fd_Params_burn_proposal_deposit_prevote protoreflect.FieldDescriptor fd_Params_burn_vote_veto protoreflect.FieldDescriptor + fd_Params_min_deposit_ratio protoreflect.FieldDescriptor ) func init() { @@ -5388,6 +5389,7 @@ func init() { fd_Params_burn_vote_quorum = md_Params.Fields().ByName("burn_vote_quorum") fd_Params_burn_proposal_deposit_prevote = md_Params.Fields().ByName("burn_proposal_deposit_prevote") fd_Params_burn_vote_veto = md_Params.Fields().ByName("burn_vote_veto") + fd_Params_min_deposit_ratio = md_Params.Fields().ByName("min_deposit_ratio") } var _ protoreflect.Message = (*fastReflection_Params)(nil) @@ -5515,6 +5517,12 @@ func (x *fastReflection_Params) Range(f func(protoreflect.FieldDescriptor, proto return } } + if x.MinDepositRatio != "" { + value := protoreflect.ValueOfString(x.MinDepositRatio) + if !f(fd_Params_min_deposit_ratio, value) { + return + } + } } // Has reports whether a field is populated. @@ -5550,6 +5558,8 @@ func (x *fastReflection_Params) Has(fd protoreflect.FieldDescriptor) bool { return x.BurnProposalDepositPrevote != false case "cosmos.gov.v1.Params.burn_vote_veto": return x.BurnVoteVeto != false + case "cosmos.gov.v1.Params.min_deposit_ratio": + return x.MinDepositRatio != "" default: if fd.IsExtension() { panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.gov.v1.Params")) @@ -5586,6 +5596,8 @@ func (x *fastReflection_Params) Clear(fd protoreflect.FieldDescriptor) { x.BurnProposalDepositPrevote = false case "cosmos.gov.v1.Params.burn_vote_veto": x.BurnVoteVeto = false + case "cosmos.gov.v1.Params.min_deposit_ratio": + x.MinDepositRatio = "" default: if fd.IsExtension() { panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.gov.v1.Params")) @@ -5635,6 +5647,9 @@ func (x *fastReflection_Params) Get(descriptor protoreflect.FieldDescriptor) pro case "cosmos.gov.v1.Params.burn_vote_veto": value := x.BurnVoteVeto return protoreflect.ValueOfBool(value) + case "cosmos.gov.v1.Params.min_deposit_ratio": + value := x.MinDepositRatio + return protoreflect.ValueOfString(value) default: if descriptor.IsExtension() { panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.gov.v1.Params")) @@ -5677,6 +5692,8 @@ func (x *fastReflection_Params) Set(fd protoreflect.FieldDescriptor, value proto x.BurnProposalDepositPrevote = value.Bool() case "cosmos.gov.v1.Params.burn_vote_veto": x.BurnVoteVeto = value.Bool() + case "cosmos.gov.v1.Params.min_deposit_ratio": + x.MinDepositRatio = value.Interface().(string) default: if fd.IsExtension() { panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.gov.v1.Params")) @@ -5727,6 +5744,8 @@ func (x *fastReflection_Params) Mutable(fd protoreflect.FieldDescriptor) protore panic(fmt.Errorf("field burn_proposal_deposit_prevote of message cosmos.gov.v1.Params is not mutable")) case "cosmos.gov.v1.Params.burn_vote_veto": panic(fmt.Errorf("field burn_vote_veto of message cosmos.gov.v1.Params is not mutable")) + case "cosmos.gov.v1.Params.min_deposit_ratio": + panic(fmt.Errorf("field min_deposit_ratio of message cosmos.gov.v1.Params is not mutable")) default: if fd.IsExtension() { panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.gov.v1.Params")) @@ -5763,6 +5782,8 @@ func (x *fastReflection_Params) NewField(fd protoreflect.FieldDescriptor) protor return protoreflect.ValueOfBool(false) case "cosmos.gov.v1.Params.burn_vote_veto": return protoreflect.ValueOfBool(false) + case "cosmos.gov.v1.Params.min_deposit_ratio": + return protoreflect.ValueOfString("") default: if fd.IsExtension() { panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.gov.v1.Params")) @@ -5871,6 +5892,10 @@ func (x *fastReflection_Params) ProtoMethods() *protoiface.Methods { if x.BurnVoteVeto { n += 2 } + l = len(x.MinDepositRatio) + if l > 0 { + n += 2 + l + runtime.Sov(uint64(l)) + } if x.unknownFields != nil { n += len(x.unknownFields) } @@ -5900,6 +5925,15 @@ func (x *fastReflection_Params) ProtoMethods() *protoiface.Methods { i -= len(x.unknownFields) copy(dAtA[i:], x.unknownFields) } + if len(x.MinDepositRatio) > 0 { + i -= len(x.MinDepositRatio) + copy(dAtA[i:], x.MinDepositRatio) + i = runtime.EncodeVarint(dAtA, i, uint64(len(x.MinDepositRatio))) + i-- + dAtA[i] = 0x1 + i-- + dAtA[i] = 0x82 + } if x.BurnVoteVeto { i-- if x.BurnVoteVeto { @@ -6345,6 +6379,38 @@ func (x *fastReflection_Params) ProtoMethods() *protoiface.Methods { } } x.BurnVoteVeto = bool(v != 0) + case 16: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field MinDepositRatio", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + x.MinDepositRatio = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex default: iNdEx = preIndex skippy, err := runtime.Skip(dAtA[iNdEx:]) @@ -7082,6 +7148,13 @@ type Params struct { BurnProposalDepositPrevote bool `protobuf:"varint,14,opt,name=burn_proposal_deposit_prevote,json=burnProposalDepositPrevote,proto3" json:"burn_proposal_deposit_prevote,omitempty"` // burn deposits if quorum with vote type no_veto is met BurnVoteVeto bool `protobuf:"varint,15,opt,name=burn_vote_veto,json=burnVoteVeto,proto3" json:"burn_vote_veto,omitempty"` + // The ratio representing the proportion of the deposit value minimum that must be met when making a deposit. + // Default value: 0.01. Meaning that for a chain with a min_deposit of 100stake, a deposit of 1stake would be + // required. + // + // Since: cosmos-sdk 0.50 + // NOTE: backported from v50 (https://github.com/cosmos/cosmos-sdk/pull/18146) + MinDepositRatio string `protobuf:"bytes,16,opt,name=min_deposit_ratio,json=minDepositRatio,proto3" json:"min_deposit_ratio,omitempty"` } func (x *Params) Reset() { @@ -7174,6 +7247,13 @@ func (x *Params) GetBurnVoteVeto() bool { return false } +func (x *Params) GetMinDepositRatio() string { + if x != nil { + return x.MinDepositRatio + } + return "" +} + var File_cosmos_gov_v1_gov_proto protoreflect.FileDescriptor var file_cosmos_gov_v1_gov_proto_rawDesc = []byte{ @@ -7307,7 +7387,7 @@ var file_cosmos_gov_v1_gov_proto_rawDesc = []byte{ 0x65, 0x74, 0x6f, 0x5f, 0x74, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0e, 0xd2, 0xb4, 0x2d, 0x0a, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x44, 0x65, 0x63, 0x52, 0x0d, 0x76, 0x65, 0x74, 0x6f, 0x54, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, - 0x6c, 0x64, 0x22, 0xcf, 0x04, 0x0a, 0x06, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x45, 0x0a, + 0x6c, 0x64, 0x22, 0x8b, 0x05, 0x0a, 0x06, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x45, 0x0a, 0x0b, 0x6d, 0x69, 0x6e, 0x5f, 0x64, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x43, 0x6f, 0x69, 0x6e, 0x42, 0x09, 0xc8, @@ -7344,39 +7424,43 @@ var file_cosmos_gov_v1_gov_proto_rawDesc = []byte{ 0x44, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x50, 0x72, 0x65, 0x76, 0x6f, 0x74, 0x65, 0x12, 0x24, 0x0a, 0x0e, 0x62, 0x75, 0x72, 0x6e, 0x5f, 0x76, 0x6f, 0x74, 0x65, 0x5f, 0x76, 0x65, 0x74, 0x6f, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x62, 0x75, 0x72, 0x6e, 0x56, 0x6f, 0x74, 0x65, - 0x56, 0x65, 0x74, 0x6f, 0x2a, 0x89, 0x01, 0x0a, 0x0a, 0x56, 0x6f, 0x74, 0x65, 0x4f, 0x70, 0x74, - 0x69, 0x6f, 0x6e, 0x12, 0x1b, 0x0a, 0x17, 0x56, 0x4f, 0x54, 0x45, 0x5f, 0x4f, 0x50, 0x54, 0x49, - 0x4f, 0x4e, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, - 0x12, 0x13, 0x0a, 0x0f, 0x56, 0x4f, 0x54, 0x45, 0x5f, 0x4f, 0x50, 0x54, 0x49, 0x4f, 0x4e, 0x5f, - 0x59, 0x45, 0x53, 0x10, 0x01, 0x12, 0x17, 0x0a, 0x13, 0x56, 0x4f, 0x54, 0x45, 0x5f, 0x4f, 0x50, - 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x41, 0x42, 0x53, 0x54, 0x41, 0x49, 0x4e, 0x10, 0x02, 0x12, 0x12, - 0x0a, 0x0e, 0x56, 0x4f, 0x54, 0x45, 0x5f, 0x4f, 0x50, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x4e, 0x4f, - 0x10, 0x03, 0x12, 0x1c, 0x0a, 0x18, 0x56, 0x4f, 0x54, 0x45, 0x5f, 0x4f, 0x50, 0x54, 0x49, 0x4f, - 0x4e, 0x5f, 0x4e, 0x4f, 0x5f, 0x57, 0x49, 0x54, 0x48, 0x5f, 0x56, 0x45, 0x54, 0x4f, 0x10, 0x04, - 0x2a, 0xce, 0x01, 0x0a, 0x0e, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x53, 0x74, 0x61, - 0x74, 0x75, 0x73, 0x12, 0x1f, 0x0a, 0x1b, 0x50, 0x52, 0x4f, 0x50, 0x4f, 0x53, 0x41, 0x4c, 0x5f, - 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, - 0x45, 0x44, 0x10, 0x00, 0x12, 0x22, 0x0a, 0x1e, 0x50, 0x52, 0x4f, 0x50, 0x4f, 0x53, 0x41, 0x4c, - 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x44, 0x45, 0x50, 0x4f, 0x53, 0x49, 0x54, 0x5f, - 0x50, 0x45, 0x52, 0x49, 0x4f, 0x44, 0x10, 0x01, 0x12, 0x21, 0x0a, 0x1d, 0x50, 0x52, 0x4f, 0x50, - 0x4f, 0x53, 0x41, 0x4c, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x56, 0x4f, 0x54, 0x49, - 0x4e, 0x47, 0x5f, 0x50, 0x45, 0x52, 0x49, 0x4f, 0x44, 0x10, 0x02, 0x12, 0x1a, 0x0a, 0x16, 0x50, - 0x52, 0x4f, 0x50, 0x4f, 0x53, 0x41, 0x4c, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x50, - 0x41, 0x53, 0x53, 0x45, 0x44, 0x10, 0x03, 0x12, 0x1c, 0x0a, 0x18, 0x50, 0x52, 0x4f, 0x50, 0x4f, - 0x53, 0x41, 0x4c, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x52, 0x45, 0x4a, 0x45, 0x43, - 0x54, 0x45, 0x44, 0x10, 0x04, 0x12, 0x1a, 0x0a, 0x16, 0x50, 0x52, 0x4f, 0x50, 0x4f, 0x53, 0x41, - 0x4c, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x46, 0x41, 0x49, 0x4c, 0x45, 0x44, 0x10, - 0x05, 0x42, 0x99, 0x01, 0x0a, 0x11, 0x63, 0x6f, 0x6d, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, - 0x2e, 0x67, 0x6f, 0x76, 0x2e, 0x76, 0x31, 0x42, 0x08, 0x47, 0x6f, 0x76, 0x50, 0x72, 0x6f, 0x74, - 0x6f, 0x50, 0x01, 0x5a, 0x24, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x73, 0x64, 0x6b, 0x2e, 0x69, - 0x6f, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2f, 0x67, 0x6f, 0x76, - 0x2f, 0x76, 0x31, 0x3b, 0x67, 0x6f, 0x76, 0x76, 0x31, 0xa2, 0x02, 0x03, 0x43, 0x47, 0x58, 0xaa, - 0x02, 0x0d, 0x43, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x47, 0x6f, 0x76, 0x2e, 0x56, 0x31, 0xca, - 0x02, 0x0d, 0x43, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x5c, 0x47, 0x6f, 0x76, 0x5c, 0x56, 0x31, 0xe2, - 0x02, 0x19, 0x43, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x5c, 0x47, 0x6f, 0x76, 0x5c, 0x56, 0x31, 0x5c, - 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x0f, 0x43, 0x6f, - 0x73, 0x6d, 0x6f, 0x73, 0x3a, 0x3a, 0x47, 0x6f, 0x76, 0x3a, 0x3a, 0x56, 0x31, 0x62, 0x06, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x56, 0x65, 0x74, 0x6f, 0x12, 0x3a, 0x0a, 0x11, 0x6d, 0x69, 0x6e, 0x5f, 0x64, 0x65, 0x70, 0x6f, + 0x73, 0x69, 0x74, 0x5f, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x18, 0x10, 0x20, 0x01, 0x28, 0x09, 0x42, + 0x0e, 0xd2, 0xb4, 0x2d, 0x0a, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x44, 0x65, 0x63, 0x52, + 0x0f, 0x6d, 0x69, 0x6e, 0x44, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x52, 0x61, 0x74, 0x69, 0x6f, + 0x2a, 0x89, 0x01, 0x0a, 0x0a, 0x56, 0x6f, 0x74, 0x65, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, + 0x1b, 0x0a, 0x17, 0x56, 0x4f, 0x54, 0x45, 0x5f, 0x4f, 0x50, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x55, + 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x13, 0x0a, 0x0f, + 0x56, 0x4f, 0x54, 0x45, 0x5f, 0x4f, 0x50, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x59, 0x45, 0x53, 0x10, + 0x01, 0x12, 0x17, 0x0a, 0x13, 0x56, 0x4f, 0x54, 0x45, 0x5f, 0x4f, 0x50, 0x54, 0x49, 0x4f, 0x4e, + 0x5f, 0x41, 0x42, 0x53, 0x54, 0x41, 0x49, 0x4e, 0x10, 0x02, 0x12, 0x12, 0x0a, 0x0e, 0x56, 0x4f, + 0x54, 0x45, 0x5f, 0x4f, 0x50, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x4e, 0x4f, 0x10, 0x03, 0x12, 0x1c, + 0x0a, 0x18, 0x56, 0x4f, 0x54, 0x45, 0x5f, 0x4f, 0x50, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x4e, 0x4f, + 0x5f, 0x57, 0x49, 0x54, 0x48, 0x5f, 0x56, 0x45, 0x54, 0x4f, 0x10, 0x04, 0x2a, 0xce, 0x01, 0x0a, + 0x0e, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, + 0x1f, 0x0a, 0x1b, 0x50, 0x52, 0x4f, 0x50, 0x4f, 0x53, 0x41, 0x4c, 0x5f, 0x53, 0x54, 0x41, 0x54, + 0x55, 0x53, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, + 0x12, 0x22, 0x0a, 0x1e, 0x50, 0x52, 0x4f, 0x50, 0x4f, 0x53, 0x41, 0x4c, 0x5f, 0x53, 0x54, 0x41, + 0x54, 0x55, 0x53, 0x5f, 0x44, 0x45, 0x50, 0x4f, 0x53, 0x49, 0x54, 0x5f, 0x50, 0x45, 0x52, 0x49, + 0x4f, 0x44, 0x10, 0x01, 0x12, 0x21, 0x0a, 0x1d, 0x50, 0x52, 0x4f, 0x50, 0x4f, 0x53, 0x41, 0x4c, + 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x56, 0x4f, 0x54, 0x49, 0x4e, 0x47, 0x5f, 0x50, + 0x45, 0x52, 0x49, 0x4f, 0x44, 0x10, 0x02, 0x12, 0x1a, 0x0a, 0x16, 0x50, 0x52, 0x4f, 0x50, 0x4f, + 0x53, 0x41, 0x4c, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x50, 0x41, 0x53, 0x53, 0x45, + 0x44, 0x10, 0x03, 0x12, 0x1c, 0x0a, 0x18, 0x50, 0x52, 0x4f, 0x50, 0x4f, 0x53, 0x41, 0x4c, 0x5f, + 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x52, 0x45, 0x4a, 0x45, 0x43, 0x54, 0x45, 0x44, 0x10, + 0x04, 0x12, 0x1a, 0x0a, 0x16, 0x50, 0x52, 0x4f, 0x50, 0x4f, 0x53, 0x41, 0x4c, 0x5f, 0x53, 0x54, + 0x41, 0x54, 0x55, 0x53, 0x5f, 0x46, 0x41, 0x49, 0x4c, 0x45, 0x44, 0x10, 0x05, 0x42, 0x99, 0x01, + 0x0a, 0x11, 0x63, 0x6f, 0x6d, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x67, 0x6f, 0x76, + 0x2e, 0x76, 0x31, 0x42, 0x08, 0x47, 0x6f, 0x76, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, + 0x24, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x73, 0x64, 0x6b, 0x2e, 0x69, 0x6f, 0x2f, 0x61, 0x70, + 0x69, 0x2f, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2f, 0x67, 0x6f, 0x76, 0x2f, 0x76, 0x31, 0x3b, + 0x67, 0x6f, 0x76, 0x76, 0x31, 0xa2, 0x02, 0x03, 0x43, 0x47, 0x58, 0xaa, 0x02, 0x0d, 0x43, 0x6f, + 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x47, 0x6f, 0x76, 0x2e, 0x56, 0x31, 0xca, 0x02, 0x0d, 0x43, 0x6f, + 0x73, 0x6d, 0x6f, 0x73, 0x5c, 0x47, 0x6f, 0x76, 0x5c, 0x56, 0x31, 0xe2, 0x02, 0x19, 0x43, 0x6f, + 0x73, 0x6d, 0x6f, 0x73, 0x5c, 0x47, 0x6f, 0x76, 0x5c, 0x56, 0x31, 0x5c, 0x47, 0x50, 0x42, 0x4d, + 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x0f, 0x43, 0x6f, 0x73, 0x6d, 0x6f, 0x73, + 0x3a, 0x3a, 0x47, 0x6f, 0x76, 0x3a, 0x3a, 0x56, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x33, } var ( diff --git a/api/cosmos/staking/v1beta1/tx.pulsar.go b/api/cosmos/staking/v1beta1/tx.pulsar.go index b29de2b47ba3..c5dbc4edc964 100644 --- a/api/cosmos/staking/v1beta1/tx.pulsar.go +++ b/api/cosmos/staking/v1beta1/tx.pulsar.go @@ -14550,249 +14550,249 @@ var file_cosmos_staking_v1beta1_tx_proto_rawDesc = []byte{ 0x2d, 0x73, 0x64, 0x6b, 0x2f, 0x78, 0x2f, 0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2f, 0x4d, 0x73, 0x67, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x22, 0x19, 0x0a, 0x17, 0x4d, 0x73, 0x67, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x50, 0x61, 0x72, 0x61, 0x6d, - 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x99, 0x01, 0x0a, 0x12, 0x4d, 0x73, + 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x8f, 0x01, 0x0a, 0x12, 0x4d, 0x73, 0x67, 0x55, 0x6e, 0x62, 0x6f, 0x6e, 0x64, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x12, 0x3f, 0x0a, 0x11, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x12, 0xf2, 0xde, 0x1f, 0x0e, 0x79, 0x61, 0x6d, 0x6c, 0x3a, 0x22, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x22, 0x52, 0x10, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, - 0x73, 0x3a, 0x42, 0x82, 0xe7, 0xb0, 0x2a, 0x11, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, - 0x72, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x8a, 0xe7, 0xb0, 0x2a, 0x27, 0x63, 0x6f, - 0x73, 0x6d, 0x6f, 0x73, 0x2d, 0x73, 0x64, 0x6b, 0x2f, 0x78, 0x2f, 0x73, 0x74, 0x61, 0x6b, 0x69, - 0x6e, 0x67, 0x2f, 0x4d, 0x73, 0x67, 0x55, 0x6e, 0x62, 0x6f, 0x6e, 0x64, 0x56, 0x61, 0x6c, 0x69, - 0x64, 0x61, 0x74, 0x6f, 0x72, 0x22, 0x1c, 0x0a, 0x1a, 0x4d, 0x73, 0x67, 0x55, 0x6e, 0x62, 0x6f, - 0x6e, 0x64, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x22, 0xd7, 0x02, 0x0a, 0x11, 0x4d, 0x73, 0x67, 0x54, 0x6f, 0x6b, 0x65, 0x6e, - 0x69, 0x7a, 0x65, 0x53, 0x68, 0x61, 0x72, 0x65, 0x73, 0x12, 0x49, 0x0a, 0x11, 0x64, 0x65, 0x6c, - 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x42, 0x1c, 0xf2, 0xde, 0x1f, 0x18, 0x79, 0x61, 0x6d, 0x6c, 0x3a, 0x22, - 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, - 0x73, 0x22, 0x52, 0x10, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x41, 0x64, 0x64, - 0x72, 0x65, 0x73, 0x73, 0x12, 0x49, 0x0a, 0x11, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, - 0x72, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, - 0x1c, 0xf2, 0xde, 0x1f, 0x18, 0x79, 0x61, 0x6d, 0x6c, 0x3a, 0x22, 0x76, 0x61, 0x6c, 0x69, 0x64, - 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x22, 0x52, 0x10, 0x76, - 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, - 0x37, 0x0a, 0x06, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x19, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x76, 0x31, - 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x43, 0x6f, 0x69, 0x6e, 0x42, 0x04, 0xc8, 0xde, 0x1f, 0x00, - 0x52, 0x06, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x32, 0x0a, 0x15, 0x74, 0x6f, 0x6b, 0x65, - 0x6e, 0x69, 0x7a, 0x65, 0x64, 0x5f, 0x73, 0x68, 0x61, 0x72, 0x65, 0x5f, 0x6f, 0x77, 0x6e, 0x65, - 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x13, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x69, 0x7a, - 0x65, 0x64, 0x53, 0x68, 0x61, 0x72, 0x65, 0x4f, 0x77, 0x6e, 0x65, 0x72, 0x3a, 0x3f, 0x88, 0xa0, - 0x1f, 0x00, 0xe8, 0xa0, 0x1f, 0x00, 0x82, 0xe7, 0xb0, 0x2a, 0x11, 0x64, 0x65, 0x6c, 0x65, 0x67, - 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x8a, 0xe7, 0xb0, 0x2a, - 0x1c, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2d, 0x73, 0x64, 0x6b, 0x2f, 0x4d, 0x73, 0x67, 0x54, - 0x6f, 0x6b, 0x65, 0x6e, 0x69, 0x7a, 0x65, 0x53, 0x68, 0x61, 0x72, 0x65, 0x73, 0x22, 0x54, 0x0a, - 0x19, 0x4d, 0x73, 0x67, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x69, 0x7a, 0x65, 0x53, 0x68, 0x61, 0x72, - 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x37, 0x0a, 0x06, 0x61, 0x6d, - 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x63, 0x6f, 0x73, - 0x6d, 0x6f, 0x73, 0x2e, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, - 0x2e, 0x43, 0x6f, 0x69, 0x6e, 0x42, 0x04, 0xc8, 0xde, 0x1f, 0x00, 0x52, 0x06, 0x61, 0x6d, 0x6f, - 0x75, 0x6e, 0x74, 0x22, 0xe6, 0x01, 0x0a, 0x18, 0x4d, 0x73, 0x67, 0x52, 0x65, 0x64, 0x65, 0x65, - 0x6d, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x73, 0x46, 0x6f, 0x72, 0x53, 0x68, 0x61, 0x72, 0x65, 0x73, - 0x12, 0x49, 0x0a, 0x11, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x61, 0x64, - 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x1c, 0xf2, 0xde, 0x1f, - 0x18, 0x79, 0x61, 0x6d, 0x6c, 0x3a, 0x22, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, - 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x22, 0x52, 0x10, 0x64, 0x65, 0x6c, 0x65, 0x67, - 0x61, 0x74, 0x6f, 0x72, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x37, 0x0a, 0x06, 0x61, - 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x63, 0x6f, - 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, - 0x31, 0x2e, 0x43, 0x6f, 0x69, 0x6e, 0x42, 0x04, 0xc8, 0xde, 0x1f, 0x00, 0x52, 0x06, 0x61, 0x6d, - 0x6f, 0x75, 0x6e, 0x74, 0x3a, 0x46, 0x88, 0xa0, 0x1f, 0x00, 0xe8, 0xa0, 0x1f, 0x00, 0x82, 0xe7, - 0xb0, 0x2a, 0x11, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x61, 0x64, 0x64, - 0x72, 0x65, 0x73, 0x73, 0x8a, 0xe7, 0xb0, 0x2a, 0x23, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2d, - 0x73, 0x64, 0x6b, 0x2f, 0x4d, 0x73, 0x67, 0x52, 0x65, 0x64, 0x65, 0x65, 0x6d, 0x54, 0x6f, 0x6b, - 0x65, 0x6e, 0x73, 0x46, 0x6f, 0x72, 0x53, 0x68, 0x61, 0x72, 0x65, 0x73, 0x22, 0x5b, 0x0a, 0x20, - 0x4d, 0x73, 0x67, 0x52, 0x65, 0x64, 0x65, 0x65, 0x6d, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x73, 0x46, - 0x6f, 0x72, 0x53, 0x68, 0x61, 0x72, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x73, 0x3a, 0x38, 0x82, 0xe7, 0xb0, 0x2a, 0x11, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, + 0x72, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x8a, 0xe7, 0xb0, 0x2a, 0x1d, 0x63, 0x6f, + 0x73, 0x6d, 0x6f, 0x73, 0x2d, 0x73, 0x64, 0x6b, 0x2f, 0x4d, 0x73, 0x67, 0x55, 0x6e, 0x62, 0x6f, + 0x6e, 0x64, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x22, 0x1c, 0x0a, 0x1a, 0x4d, + 0x73, 0x67, 0x55, 0x6e, 0x62, 0x6f, 0x6e, 0x64, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, + 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0xd7, 0x02, 0x0a, 0x11, 0x4d, 0x73, + 0x67, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x69, 0x7a, 0x65, 0x53, 0x68, 0x61, 0x72, 0x65, 0x73, 0x12, + 0x49, 0x0a, 0x11, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x61, 0x64, 0x64, + 0x72, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x1c, 0xf2, 0xde, 0x1f, 0x18, + 0x79, 0x61, 0x6d, 0x6c, 0x3a, 0x22, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x5f, + 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x22, 0x52, 0x10, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, + 0x74, 0x6f, 0x72, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x49, 0x0a, 0x11, 0x76, 0x61, + 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x1c, 0xf2, 0xde, 0x1f, 0x18, 0x79, 0x61, 0x6d, 0x6c, 0x3a, + 0x22, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, + 0x73, 0x73, 0x22, 0x52, 0x10, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x41, 0x64, + 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x37, 0x0a, 0x06, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x62, + 0x61, 0x73, 0x65, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x43, 0x6f, 0x69, 0x6e, + 0x42, 0x04, 0xc8, 0xde, 0x1f, 0x00, 0x52, 0x06, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x32, + 0x0a, 0x15, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x69, 0x7a, 0x65, 0x64, 0x5f, 0x73, 0x68, 0x61, 0x72, + 0x65, 0x5f, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x13, 0x74, + 0x6f, 0x6b, 0x65, 0x6e, 0x69, 0x7a, 0x65, 0x64, 0x53, 0x68, 0x61, 0x72, 0x65, 0x4f, 0x77, 0x6e, + 0x65, 0x72, 0x3a, 0x3f, 0x88, 0xa0, 0x1f, 0x00, 0xe8, 0xa0, 0x1f, 0x00, 0x82, 0xe7, 0xb0, 0x2a, + 0x11, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, + 0x73, 0x73, 0x8a, 0xe7, 0xb0, 0x2a, 0x1c, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2d, 0x73, 0x64, + 0x6b, 0x2f, 0x4d, 0x73, 0x67, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x69, 0x7a, 0x65, 0x53, 0x68, 0x61, + 0x72, 0x65, 0x73, 0x22, 0x54, 0x0a, 0x19, 0x4d, 0x73, 0x67, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x69, + 0x7a, 0x65, 0x53, 0x68, 0x61, 0x72, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x37, 0x0a, 0x06, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x43, 0x6f, 0x69, 0x6e, 0x42, 0x04, 0xc8, 0xde, 0x1f, - 0x00, 0x52, 0x06, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x22, 0xd1, 0x01, 0x0a, 0x1e, 0x4d, 0x73, - 0x67, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x65, 0x72, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x69, 0x7a, - 0x65, 0x53, 0x68, 0x61, 0x72, 0x65, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x12, 0x37, 0x0a, 0x18, - 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x69, 0x7a, 0x65, 0x5f, 0x73, 0x68, 0x61, 0x72, 0x65, 0x5f, 0x72, - 0x65, 0x63, 0x6f, 0x72, 0x64, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x15, - 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x69, 0x7a, 0x65, 0x53, 0x68, 0x61, 0x72, 0x65, 0x52, 0x65, 0x63, - 0x6f, 0x72, 0x64, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x12, 0x1b, 0x0a, - 0x09, 0x6e, 0x65, 0x77, 0x5f, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x08, 0x6e, 0x65, 0x77, 0x4f, 0x77, 0x6e, 0x65, 0x72, 0x3a, 0x41, 0x88, 0xa0, 0x1f, 0x00, - 0xe8, 0xa0, 0x1f, 0x00, 0x82, 0xe7, 0xb0, 0x2a, 0x06, 0x73, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x8a, - 0xe7, 0xb0, 0x2a, 0x29, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2d, 0x73, 0x64, 0x6b, 0x2f, 0x4d, - 0x73, 0x67, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x65, 0x72, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x69, - 0x7a, 0x65, 0x53, 0x68, 0x61, 0x72, 0x65, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x22, 0x28, 0x0a, - 0x26, 0x4d, 0x73, 0x67, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x65, 0x72, 0x54, 0x6f, 0x6b, 0x65, - 0x6e, 0x69, 0x7a, 0x65, 0x53, 0x68, 0x61, 0x72, 0x65, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0xad, 0x01, 0x0a, 0x18, 0x4d, 0x73, 0x67, 0x44, - 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x69, 0x7a, 0x65, 0x53, 0x68, - 0x61, 0x72, 0x65, 0x73, 0x12, 0x49, 0x0a, 0x11, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, - 0x72, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, - 0x1c, 0xf2, 0xde, 0x1f, 0x18, 0x79, 0x61, 0x6d, 0x6c, 0x3a, 0x22, 0x64, 0x65, 0x6c, 0x65, 0x67, - 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x22, 0x52, 0x10, 0x64, - 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x3a, - 0x46, 0x88, 0xa0, 0x1f, 0x00, 0xe8, 0xa0, 0x1f, 0x00, 0x82, 0xe7, 0xb0, 0x2a, 0x11, 0x64, 0x65, - 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x8a, - 0xe7, 0xb0, 0x2a, 0x23, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2d, 0x73, 0x64, 0x6b, 0x2f, 0x4d, - 0x73, 0x67, 0x44, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x69, 0x7a, - 0x65, 0x53, 0x68, 0x61, 0x72, 0x65, 0x73, 0x22, 0x22, 0x0a, 0x20, 0x4d, 0x73, 0x67, 0x44, 0x69, - 0x73, 0x61, 0x62, 0x6c, 0x65, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x69, 0x7a, 0x65, 0x53, 0x68, 0x61, - 0x72, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0xab, 0x01, 0x0a, 0x17, - 0x4d, 0x73, 0x67, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x69, 0x7a, - 0x65, 0x53, 0x68, 0x61, 0x72, 0x65, 0x73, 0x12, 0x49, 0x0a, 0x11, 0x64, 0x65, 0x6c, 0x65, 0x67, - 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x42, 0x1c, 0xf2, 0xde, 0x1f, 0x18, 0x79, 0x61, 0x6d, 0x6c, 0x3a, 0x22, 0x64, 0x65, - 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x22, - 0x52, 0x10, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x41, 0x64, 0x64, 0x72, 0x65, - 0x73, 0x73, 0x3a, 0x45, 0x88, 0xa0, 0x1f, 0x00, 0xe8, 0xa0, 0x1f, 0x00, 0x82, 0xe7, 0xb0, 0x2a, + 0x00, 0x52, 0x06, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x22, 0xe6, 0x01, 0x0a, 0x18, 0x4d, 0x73, + 0x67, 0x52, 0x65, 0x64, 0x65, 0x65, 0x6d, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x73, 0x46, 0x6f, 0x72, + 0x53, 0x68, 0x61, 0x72, 0x65, 0x73, 0x12, 0x49, 0x0a, 0x11, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, + 0x74, 0x6f, 0x72, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x42, 0x1c, 0xf2, 0xde, 0x1f, 0x18, 0x79, 0x61, 0x6d, 0x6c, 0x3a, 0x22, 0x64, 0x65, 0x6c, + 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x22, 0x52, + 0x10, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, + 0x73, 0x12, 0x37, 0x0a, 0x06, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x19, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x62, 0x61, 0x73, 0x65, 0x2e, + 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x43, 0x6f, 0x69, 0x6e, 0x42, 0x04, 0xc8, 0xde, + 0x1f, 0x00, 0x52, 0x06, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x3a, 0x46, 0x88, 0xa0, 0x1f, 0x00, + 0xe8, 0xa0, 0x1f, 0x00, 0x82, 0xe7, 0xb0, 0x2a, 0x11, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, + 0x6f, 0x72, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x8a, 0xe7, 0xb0, 0x2a, 0x23, 0x63, + 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2d, 0x73, 0x64, 0x6b, 0x2f, 0x4d, 0x73, 0x67, 0x52, 0x65, 0x64, + 0x65, 0x65, 0x6d, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x73, 0x46, 0x6f, 0x72, 0x53, 0x68, 0x61, 0x72, + 0x65, 0x73, 0x22, 0x5b, 0x0a, 0x20, 0x4d, 0x73, 0x67, 0x52, 0x65, 0x64, 0x65, 0x65, 0x6d, 0x54, + 0x6f, 0x6b, 0x65, 0x6e, 0x73, 0x46, 0x6f, 0x72, 0x53, 0x68, 0x61, 0x72, 0x65, 0x73, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x37, 0x0a, 0x06, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, + 0x62, 0x61, 0x73, 0x65, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x43, 0x6f, 0x69, + 0x6e, 0x42, 0x04, 0xc8, 0xde, 0x1f, 0x00, 0x52, 0x06, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x22, + 0xd1, 0x01, 0x0a, 0x1e, 0x4d, 0x73, 0x67, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x65, 0x72, 0x54, + 0x6f, 0x6b, 0x65, 0x6e, 0x69, 0x7a, 0x65, 0x53, 0x68, 0x61, 0x72, 0x65, 0x52, 0x65, 0x63, 0x6f, + 0x72, 0x64, 0x12, 0x37, 0x0a, 0x18, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x69, 0x7a, 0x65, 0x5f, 0x73, + 0x68, 0x61, 0x72, 0x65, 0x5f, 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x5f, 0x69, 0x64, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x04, 0x52, 0x15, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x69, 0x7a, 0x65, 0x53, 0x68, + 0x61, 0x72, 0x65, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x73, + 0x65, 0x6e, 0x64, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x65, 0x6e, + 0x64, 0x65, 0x72, 0x12, 0x1b, 0x0a, 0x09, 0x6e, 0x65, 0x77, 0x5f, 0x6f, 0x77, 0x6e, 0x65, 0x72, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6e, 0x65, 0x77, 0x4f, 0x77, 0x6e, 0x65, 0x72, + 0x3a, 0x41, 0x88, 0xa0, 0x1f, 0x00, 0xe8, 0xa0, 0x1f, 0x00, 0x82, 0xe7, 0xb0, 0x2a, 0x06, 0x73, + 0x65, 0x6e, 0x64, 0x65, 0x72, 0x8a, 0xe7, 0xb0, 0x2a, 0x29, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, + 0x2d, 0x73, 0x64, 0x6b, 0x2f, 0x4d, 0x73, 0x67, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x65, 0x72, + 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x69, 0x7a, 0x65, 0x53, 0x68, 0x61, 0x72, 0x65, 0x52, 0x65, 0x63, + 0x6f, 0x72, 0x64, 0x22, 0x28, 0x0a, 0x26, 0x4d, 0x73, 0x67, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, + 0x65, 0x72, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x69, 0x7a, 0x65, 0x53, 0x68, 0x61, 0x72, 0x65, 0x52, + 0x65, 0x63, 0x6f, 0x72, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0xad, 0x01, + 0x0a, 0x18, 0x4d, 0x73, 0x67, 0x44, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x54, 0x6f, 0x6b, 0x65, + 0x6e, 0x69, 0x7a, 0x65, 0x53, 0x68, 0x61, 0x72, 0x65, 0x73, 0x12, 0x49, 0x0a, 0x11, 0x64, 0x65, + 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x1c, 0xf2, 0xde, 0x1f, 0x18, 0x79, 0x61, 0x6d, 0x6c, 0x3a, + 0x22, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, + 0x73, 0x73, 0x22, 0x52, 0x10, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x41, 0x64, + 0x64, 0x72, 0x65, 0x73, 0x73, 0x3a, 0x46, 0x88, 0xa0, 0x1f, 0x00, 0xe8, 0xa0, 0x1f, 0x00, 0x82, + 0xe7, 0xb0, 0x2a, 0x11, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x61, 0x64, + 0x64, 0x72, 0x65, 0x73, 0x73, 0x8a, 0xe7, 0xb0, 0x2a, 0x23, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, + 0x2d, 0x73, 0x64, 0x6b, 0x2f, 0x4d, 0x73, 0x67, 0x44, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x54, + 0x6f, 0x6b, 0x65, 0x6e, 0x69, 0x7a, 0x65, 0x53, 0x68, 0x61, 0x72, 0x65, 0x73, 0x22, 0x22, 0x0a, + 0x20, 0x4d, 0x73, 0x67, 0x44, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x54, 0x6f, 0x6b, 0x65, 0x6e, + 0x69, 0x7a, 0x65, 0x53, 0x68, 0x61, 0x72, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x22, 0xab, 0x01, 0x0a, 0x17, 0x4d, 0x73, 0x67, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x54, + 0x6f, 0x6b, 0x65, 0x6e, 0x69, 0x7a, 0x65, 0x53, 0x68, 0x61, 0x72, 0x65, 0x73, 0x12, 0x49, 0x0a, 0x11, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, - 0x73, 0x73, 0x8a, 0xe7, 0xb0, 0x2a, 0x22, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2d, 0x73, 0x64, - 0x6b, 0x2f, 0x4d, 0x73, 0x67, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x54, 0x6f, 0x6b, 0x65, 0x6e, - 0x69, 0x7a, 0x65, 0x53, 0x68, 0x61, 0x72, 0x65, 0x73, 0x22, 0x70, 0x0a, 0x1f, 0x4d, 0x73, 0x67, - 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x69, 0x7a, 0x65, 0x53, 0x68, - 0x61, 0x72, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4d, 0x0a, 0x0f, - 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, - 0x70, 0x42, 0x08, 0xc8, 0xde, 0x1f, 0x00, 0x90, 0xdf, 0x1f, 0x01, 0x52, 0x0e, 0x63, 0x6f, 0x6d, - 0x70, 0x6c, 0x65, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x69, 0x6d, 0x65, 0x22, 0xe8, 0x01, 0x0a, 0x10, + 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x1c, 0xf2, 0xde, 0x1f, 0x18, 0x79, 0x61, + 0x6d, 0x6c, 0x3a, 0x22, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x61, 0x64, + 0x64, 0x72, 0x65, 0x73, 0x73, 0x22, 0x52, 0x10, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, + 0x72, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x3a, 0x45, 0x88, 0xa0, 0x1f, 0x00, 0xe8, 0xa0, + 0x1f, 0x00, 0x82, 0xe7, 0xb0, 0x2a, 0x11, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, + 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x8a, 0xe7, 0xb0, 0x2a, 0x22, 0x63, 0x6f, 0x73, + 0x6d, 0x6f, 0x73, 0x2d, 0x73, 0x64, 0x6b, 0x2f, 0x4d, 0x73, 0x67, 0x45, 0x6e, 0x61, 0x62, 0x6c, + 0x65, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x69, 0x7a, 0x65, 0x53, 0x68, 0x61, 0x72, 0x65, 0x73, 0x22, + 0x70, 0x0a, 0x1f, 0x4d, 0x73, 0x67, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x54, 0x6f, 0x6b, 0x65, + 0x6e, 0x69, 0x7a, 0x65, 0x53, 0x68, 0x61, 0x72, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x12, 0x4d, 0x0a, 0x0f, 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x69, 0x6f, 0x6e, + 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, + 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, + 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x42, 0x08, 0xc8, 0xde, 0x1f, 0x00, 0x90, 0xdf, 0x1f, + 0x01, 0x52, 0x0e, 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x69, 0x6d, + 0x65, 0x22, 0xe8, 0x01, 0x0a, 0x10, 0x4d, 0x73, 0x67, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, + 0x6f, 0x72, 0x42, 0x6f, 0x6e, 0x64, 0x12, 0x49, 0x0a, 0x11, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, + 0x74, 0x6f, 0x72, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x42, 0x1c, 0xf2, 0xde, 0x1f, 0x18, 0x79, 0x61, 0x6d, 0x6c, 0x3a, 0x22, 0x64, 0x65, 0x6c, + 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x22, 0x52, + 0x10, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, + 0x73, 0x12, 0x49, 0x0a, 0x11, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x61, + 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x1c, 0xf2, 0xde, + 0x1f, 0x18, 0x79, 0x61, 0x6d, 0x6c, 0x3a, 0x22, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, + 0x72, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x22, 0x52, 0x10, 0x76, 0x61, 0x6c, 0x69, + 0x64, 0x61, 0x74, 0x6f, 0x72, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x3a, 0x3e, 0x88, 0xa0, + 0x1f, 0x00, 0xe8, 0xa0, 0x1f, 0x00, 0x82, 0xe7, 0xb0, 0x2a, 0x11, 0x64, 0x65, 0x6c, 0x65, 0x67, + 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x8a, 0xe7, 0xb0, 0x2a, + 0x1b, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2d, 0x73, 0x64, 0x6b, 0x2f, 0x4d, 0x73, 0x67, 0x56, + 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x42, 0x6f, 0x6e, 0x64, 0x22, 0x1a, 0x0a, 0x18, 0x4d, 0x73, 0x67, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x42, 0x6f, 0x6e, 0x64, - 0x12, 0x49, 0x0a, 0x11, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x61, 0x64, - 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x1c, 0xf2, 0xde, 0x1f, - 0x18, 0x79, 0x61, 0x6d, 0x6c, 0x3a, 0x22, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, - 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x22, 0x52, 0x10, 0x64, 0x65, 0x6c, 0x65, 0x67, - 0x61, 0x74, 0x6f, 0x72, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x49, 0x0a, 0x11, 0x76, - 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x1c, 0xf2, 0xde, 0x1f, 0x18, 0x79, 0x61, 0x6d, 0x6c, - 0x3a, 0x22, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x61, 0x64, 0x64, 0x72, - 0x65, 0x73, 0x73, 0x22, 0x52, 0x10, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x41, - 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x3a, 0x3e, 0x88, 0xa0, 0x1f, 0x00, 0xe8, 0xa0, 0x1f, 0x00, - 0x82, 0xe7, 0xb0, 0x2a, 0x11, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x61, - 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x8a, 0xe7, 0xb0, 0x2a, 0x1b, 0x63, 0x6f, 0x73, 0x6d, 0x6f, - 0x73, 0x2d, 0x73, 0x64, 0x6b, 0x2f, 0x4d, 0x73, 0x67, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, - 0x6f, 0x72, 0x42, 0x6f, 0x6e, 0x64, 0x22, 0x1a, 0x0a, 0x18, 0x4d, 0x73, 0x67, 0x56, 0x61, 0x6c, - 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x42, 0x6f, 0x6e, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x32, 0x94, 0x0d, 0x0a, 0x03, 0x4d, 0x73, 0x67, 0x12, 0x71, 0x0a, 0x0f, 0x43, 0x72, - 0x65, 0x61, 0x74, 0x65, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x12, 0x2a, 0x2e, - 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, - 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, - 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x1a, 0x32, 0x2e, 0x63, 0x6f, 0x73, 0x6d, - 0x6f, 0x73, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, - 0x61, 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x56, 0x61, 0x6c, 0x69, - 0x64, 0x61, 0x74, 0x6f, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x6b, 0x0a, - 0x0d, 0x45, 0x64, 0x69, 0x74, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x12, 0x28, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x32, 0x94, 0x0d, 0x0a, 0x03, 0x4d, 0x73, 0x67, + 0x12, 0x71, 0x0a, 0x0f, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, + 0x74, 0x6f, 0x72, 0x12, 0x2a, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x73, 0x74, 0x61, + 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4d, 0x73, 0x67, + 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x1a, + 0x32, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, + 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x43, 0x72, 0x65, 0x61, + 0x74, 0x65, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x12, 0x6b, 0x0a, 0x0d, 0x45, 0x64, 0x69, 0x74, 0x56, 0x61, 0x6c, 0x69, 0x64, + 0x61, 0x74, 0x6f, 0x72, 0x12, 0x28, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x73, 0x74, + 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4d, 0x73, + 0x67, 0x45, 0x64, 0x69, 0x74, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x1a, 0x30, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x45, 0x64, 0x69, 0x74, 0x56, - 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x1a, 0x30, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, - 0x73, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, - 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x45, 0x64, 0x69, 0x74, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, - 0x6f, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x5c, 0x0a, 0x08, 0x44, 0x65, - 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x12, 0x23, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, - 0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, - 0x4d, 0x73, 0x67, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x1a, 0x2b, 0x2e, 0x63, 0x6f, - 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, - 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x71, 0x0a, 0x0f, 0x42, 0x65, 0x67, 0x69, - 0x6e, 0x52, 0x65, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x12, 0x2a, 0x2e, 0x63, 0x6f, - 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, - 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x42, 0x65, 0x67, 0x69, 0x6e, 0x52, 0x65, 0x64, - 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x1a, 0x32, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, - 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, - 0x2e, 0x4d, 0x73, 0x67, 0x42, 0x65, 0x67, 0x69, 0x6e, 0x52, 0x65, 0x64, 0x65, 0x6c, 0x65, 0x67, - 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x62, 0x0a, 0x0a, 0x55, - 0x6e, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x12, 0x25, 0x2e, 0x63, 0x6f, 0x73, 0x6d, - 0x6f, 0x73, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, - 0x61, 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x55, 0x6e, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, - 0x1a, 0x2d, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e, - 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x55, 0x6e, 0x64, - 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, - 0x8f, 0x01, 0x0a, 0x19, 0x43, 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x55, 0x6e, 0x62, 0x6f, 0x6e, 0x64, - 0x69, 0x6e, 0x67, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x34, 0x2e, + 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x12, 0x5c, 0x0a, 0x08, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x12, 0x23, 0x2e, 0x63, + 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, + 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, + 0x65, 0x1a, 0x2b, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x69, + 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x44, 0x65, + 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x71, + 0x0a, 0x0f, 0x42, 0x65, 0x67, 0x69, 0x6e, 0x52, 0x65, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, + 0x65, 0x12, 0x2a, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x69, + 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x42, 0x65, + 0x67, 0x69, 0x6e, 0x52, 0x65, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x1a, 0x32, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, - 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x43, 0x61, 0x6e, 0x63, 0x65, 0x6c, + 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x42, 0x65, 0x67, 0x69, 0x6e, 0x52, + 0x65, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x12, 0x62, 0x0a, 0x0a, 0x55, 0x6e, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x12, + 0x25, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, + 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x55, 0x6e, 0x64, 0x65, + 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x1a, 0x2d, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, + 0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, + 0x4d, 0x73, 0x67, 0x55, 0x6e, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x8f, 0x01, 0x0a, 0x19, 0x43, 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x55, 0x6e, 0x62, 0x6f, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x1a, 0x3c, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x73, 0x74, 0x61, + 0x69, 0x6f, 0x6e, 0x12, 0x34, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x43, 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x55, 0x6e, 0x62, 0x6f, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x44, - 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x68, 0x0a, 0x0c, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x50, 0x61, 0x72, 0x61, 0x6d, - 0x73, 0x12, 0x27, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x69, - 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x55, 0x70, - 0x64, 0x61, 0x74, 0x65, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x1a, 0x2f, 0x2e, 0x63, 0x6f, 0x73, - 0x6d, 0x6f, 0x73, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, - 0x74, 0x61, 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x50, 0x61, 0x72, - 0x61, 0x6d, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x71, 0x0a, 0x0f, 0x55, - 0x6e, 0x62, 0x6f, 0x6e, 0x64, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x12, 0x2a, + 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x1a, 0x3c, 0x2e, 0x63, 0x6f, 0x73, 0x6d, + 0x6f, 0x73, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, + 0x61, 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x43, 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x55, 0x6e, 0x62, 0x6f, + 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x68, 0x0a, 0x0c, 0x55, 0x70, 0x64, 0x61, 0x74, + 0x65, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x27, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, + 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, + 0x2e, 0x4d, 0x73, 0x67, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, + 0x1a, 0x2f, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e, + 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x55, 0x70, 0x64, + 0x61, 0x74, 0x65, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x12, 0x71, 0x0a, 0x0f, 0x55, 0x6e, 0x62, 0x6f, 0x6e, 0x64, 0x56, 0x61, 0x6c, 0x69, 0x64, + 0x61, 0x74, 0x6f, 0x72, 0x12, 0x2a, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x73, 0x74, + 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4d, 0x73, + 0x67, 0x55, 0x6e, 0x62, 0x6f, 0x6e, 0x64, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, + 0x1a, 0x32, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e, + 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x55, 0x6e, 0x62, + 0x6f, 0x6e, 0x64, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x6e, 0x0a, 0x0e, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x69, 0x7a, 0x65, + 0x53, 0x68, 0x61, 0x72, 0x65, 0x73, 0x12, 0x29, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, + 0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, + 0x4d, 0x73, 0x67, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x69, 0x7a, 0x65, 0x53, 0x68, 0x61, 0x72, 0x65, + 0x73, 0x1a, 0x31, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x69, + 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x54, 0x6f, + 0x6b, 0x65, 0x6e, 0x69, 0x7a, 0x65, 0x53, 0x68, 0x61, 0x72, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x83, 0x01, 0x0a, 0x15, 0x52, 0x65, 0x64, 0x65, 0x65, 0x6d, 0x54, + 0x6f, 0x6b, 0x65, 0x6e, 0x73, 0x46, 0x6f, 0x72, 0x53, 0x68, 0x61, 0x72, 0x65, 0x73, 0x12, 0x30, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2e, - 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x55, 0x6e, 0x62, 0x6f, 0x6e, - 0x64, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x1a, 0x32, 0x2e, 0x63, 0x6f, 0x73, - 0x6d, 0x6f, 0x73, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, - 0x74, 0x61, 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x55, 0x6e, 0x62, 0x6f, 0x6e, 0x64, 0x56, 0x61, 0x6c, - 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x6e, - 0x0a, 0x0e, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x69, 0x7a, 0x65, 0x53, 0x68, 0x61, 0x72, 0x65, 0x73, - 0x12, 0x29, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e, - 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x54, 0x6f, 0x6b, - 0x65, 0x6e, 0x69, 0x7a, 0x65, 0x53, 0x68, 0x61, 0x72, 0x65, 0x73, 0x1a, 0x31, 0x2e, 0x63, 0x6f, - 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, - 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x69, 0x7a, 0x65, - 0x53, 0x68, 0x61, 0x72, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x83, - 0x01, 0x0a, 0x15, 0x52, 0x65, 0x64, 0x65, 0x65, 0x6d, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x73, 0x46, - 0x6f, 0x72, 0x53, 0x68, 0x61, 0x72, 0x65, 0x73, 0x12, 0x30, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, - 0x73, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, - 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x52, 0x65, 0x64, 0x65, 0x65, 0x6d, 0x54, 0x6f, 0x6b, 0x65, 0x6e, - 0x73, 0x46, 0x6f, 0x72, 0x53, 0x68, 0x61, 0x72, 0x65, 0x73, 0x1a, 0x38, 0x2e, 0x63, 0x6f, 0x73, + 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x52, 0x65, 0x64, 0x65, 0x65, + 0x6d, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x73, 0x46, 0x6f, 0x72, 0x53, 0x68, 0x61, 0x72, 0x65, 0x73, + 0x1a, 0x38, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e, + 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x52, 0x65, 0x64, + 0x65, 0x65, 0x6d, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x73, 0x46, 0x6f, 0x72, 0x53, 0x68, 0x61, 0x72, + 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x95, 0x01, 0x0a, 0x1b, 0x54, + 0x72, 0x61, 0x6e, 0x73, 0x66, 0x65, 0x72, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x69, 0x7a, 0x65, 0x53, + 0x68, 0x61, 0x72, 0x65, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x12, 0x36, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, - 0x74, 0x61, 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x52, 0x65, 0x64, 0x65, 0x65, 0x6d, 0x54, 0x6f, 0x6b, - 0x65, 0x6e, 0x73, 0x46, 0x6f, 0x72, 0x53, 0x68, 0x61, 0x72, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x95, 0x01, 0x0a, 0x1b, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x65, - 0x72, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x69, 0x7a, 0x65, 0x53, 0x68, 0x61, 0x72, 0x65, 0x52, 0x65, - 0x63, 0x6f, 0x72, 0x64, 0x12, 0x36, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x73, 0x74, - 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4d, 0x73, - 0x67, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x65, 0x72, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x69, 0x7a, - 0x65, 0x53, 0x68, 0x61, 0x72, 0x65, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x1a, 0x3e, 0x2e, 0x63, + 0x74, 0x61, 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x65, 0x72, 0x54, + 0x6f, 0x6b, 0x65, 0x6e, 0x69, 0x7a, 0x65, 0x53, 0x68, 0x61, 0x72, 0x65, 0x52, 0x65, 0x63, 0x6f, + 0x72, 0x64, 0x1a, 0x3e, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x73, 0x74, 0x61, 0x6b, + 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x54, + 0x72, 0x61, 0x6e, 0x73, 0x66, 0x65, 0x72, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x69, 0x7a, 0x65, 0x53, + 0x68, 0x61, 0x72, 0x65, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x12, 0x83, 0x01, 0x0a, 0x15, 0x44, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x54, 0x6f, + 0x6b, 0x65, 0x6e, 0x69, 0x7a, 0x65, 0x53, 0x68, 0x61, 0x72, 0x65, 0x73, 0x12, 0x30, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, - 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x65, - 0x72, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x69, 0x7a, 0x65, 0x53, 0x68, 0x61, 0x72, 0x65, 0x52, 0x65, - 0x63, 0x6f, 0x72, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x83, 0x01, 0x0a, - 0x15, 0x44, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x69, 0x7a, 0x65, - 0x53, 0x68, 0x61, 0x72, 0x65, 0x73, 0x12, 0x30, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, - 0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, - 0x4d, 0x73, 0x67, 0x44, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x69, - 0x7a, 0x65, 0x53, 0x68, 0x61, 0x72, 0x65, 0x73, 0x1a, 0x38, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, - 0x73, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, - 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x44, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x54, 0x6f, 0x6b, 0x65, - 0x6e, 0x69, 0x7a, 0x65, 0x53, 0x68, 0x61, 0x72, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x12, 0x80, 0x01, 0x0a, 0x14, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x54, 0x6f, 0x6b, - 0x65, 0x6e, 0x69, 0x7a, 0x65, 0x53, 0x68, 0x61, 0x72, 0x65, 0x73, 0x12, 0x2f, 0x2e, 0x63, 0x6f, - 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, - 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x54, 0x6f, - 0x6b, 0x65, 0x6e, 0x69, 0x7a, 0x65, 0x53, 0x68, 0x61, 0x72, 0x65, 0x73, 0x1a, 0x37, 0x2e, 0x63, + 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x44, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, + 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x69, 0x7a, 0x65, 0x53, 0x68, 0x61, 0x72, 0x65, 0x73, 0x1a, 0x38, + 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2e, + 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x44, 0x69, 0x73, 0x61, 0x62, + 0x6c, 0x65, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x69, 0x7a, 0x65, 0x53, 0x68, 0x61, 0x72, 0x65, 0x73, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x80, 0x01, 0x0a, 0x14, 0x45, 0x6e, 0x61, + 0x62, 0x6c, 0x65, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x69, 0x7a, 0x65, 0x53, 0x68, 0x61, 0x72, 0x65, + 0x73, 0x12, 0x2f, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x69, + 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x45, 0x6e, + 0x61, 0x62, 0x6c, 0x65, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x69, 0x7a, 0x65, 0x53, 0x68, 0x61, 0x72, + 0x65, 0x73, 0x1a, 0x37, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x73, 0x74, 0x61, 0x6b, + 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x45, + 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x69, 0x7a, 0x65, 0x53, 0x68, 0x61, + 0x72, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x6b, 0x0a, 0x0d, 0x56, + 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x42, 0x6f, 0x6e, 0x64, 0x12, 0x28, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, - 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x54, - 0x6f, 0x6b, 0x65, 0x6e, 0x69, 0x7a, 0x65, 0x53, 0x68, 0x61, 0x72, 0x65, 0x73, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x6b, 0x0a, 0x0d, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, - 0x6f, 0x72, 0x42, 0x6f, 0x6e, 0x64, 0x12, 0x28, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, + 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, + 0x6f, 0x72, 0x42, 0x6f, 0x6e, 0x64, 0x1a, 0x30, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x42, 0x6f, 0x6e, 0x64, - 0x1a, 0x30, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e, - 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x56, 0x61, 0x6c, - 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x42, 0x6f, 0x6e, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x1a, 0x05, 0x80, 0xe7, 0xb0, 0x2a, 0x01, 0x42, 0xd7, 0x01, 0x0a, 0x1a, 0x63, 0x6f, - 0x6d, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, - 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x42, 0x07, 0x54, 0x78, 0x50, 0x72, 0x6f, 0x74, - 0x6f, 0x50, 0x01, 0x5a, 0x36, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x73, 0x64, 0x6b, 0x2e, 0x69, - 0x6f, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2f, 0x73, 0x74, 0x61, - 0x6b, 0x69, 0x6e, 0x67, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x3b, 0x73, 0x74, 0x61, - 0x6b, 0x69, 0x6e, 0x67, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0xa2, 0x02, 0x03, 0x43, 0x53, - 0x58, 0xaa, 0x02, 0x16, 0x43, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x53, 0x74, 0x61, 0x6b, 0x69, - 0x6e, 0x67, 0x2e, 0x56, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0xca, 0x02, 0x16, 0x43, 0x6f, 0x73, - 0x6d, 0x6f, 0x73, 0x5c, 0x53, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x5c, 0x56, 0x31, 0x62, 0x65, - 0x74, 0x61, 0x31, 0xe2, 0x02, 0x22, 0x43, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x5c, 0x53, 0x74, 0x61, - 0x6b, 0x69, 0x6e, 0x67, 0x5c, 0x56, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x5c, 0x47, 0x50, 0x42, - 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x18, 0x43, 0x6f, 0x73, 0x6d, 0x6f, - 0x73, 0x3a, 0x3a, 0x53, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x3a, 0x3a, 0x56, 0x31, 0x62, 0x65, - 0x74, 0x61, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x1a, 0x05, 0x80, 0xe7, 0xb0, 0x2a, 0x01, 0x42, + 0xd7, 0x01, 0x0a, 0x1a, 0x63, 0x6f, 0x6d, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x73, + 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x42, 0x07, + 0x54, 0x78, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x36, 0x63, 0x6f, 0x73, 0x6d, 0x6f, + 0x73, 0x73, 0x64, 0x6b, 0x2e, 0x69, 0x6f, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x63, 0x6f, 0x73, 0x6d, + 0x6f, 0x73, 0x2f, 0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, + 0x61, 0x31, 0x3b, 0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, + 0x31, 0xa2, 0x02, 0x03, 0x43, 0x53, 0x58, 0xaa, 0x02, 0x16, 0x43, 0x6f, 0x73, 0x6d, 0x6f, 0x73, + 0x2e, 0x53, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x56, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, + 0xca, 0x02, 0x16, 0x43, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x5c, 0x53, 0x74, 0x61, 0x6b, 0x69, 0x6e, + 0x67, 0x5c, 0x56, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0xe2, 0x02, 0x22, 0x43, 0x6f, 0x73, 0x6d, + 0x6f, 0x73, 0x5c, 0x53, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x5c, 0x56, 0x31, 0x62, 0x65, 0x74, + 0x61, 0x31, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, + 0x18, 0x43, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x3a, 0x3a, 0x53, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, + 0x3a, 0x3a, 0x56, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x33, } var ( diff --git a/proto/cosmos/gov/v1/gov.proto b/proto/cosmos/gov/v1/gov.proto index 49bfcc264b49..0fe1681eb874 100644 --- a/proto/cosmos/gov/v1/gov.proto +++ b/proto/cosmos/gov/v1/gov.proto @@ -217,4 +217,12 @@ message Params { // burn deposits if quorum with vote type no_veto is met bool burn_vote_veto = 15; + + // The ratio representing the proportion of the deposit value minimum that must be met when making a deposit. + // Default value: 0.01. Meaning that for a chain with a min_deposit of 100stake, a deposit of 1stake would be + // required. + // + // Since: cosmos-sdk 0.50 + // NOTE: backported from v50 (https://github.com/cosmos/cosmos-sdk/pull/18146) + string min_deposit_ratio = 16 [(cosmos_proto.scalar) = "cosmos.Dec"]; } diff --git a/tests/e2e/gov/deposits.go b/tests/e2e/gov/deposits.go index 0e8f5e6ed0b4..ebbbeccc4f6b 100644 --- a/tests/e2e/gov/deposits.go +++ b/tests/e2e/gov/deposits.go @@ -72,33 +72,6 @@ func (s *DepositTestSuite) TearDownSuite() { s.network.Cleanup() } -func (s *DepositTestSuite) TestQueryDepositsWithoutInitialDeposit() { - val := s.network.Validators[0] - clientCtx := val.ClientCtx - - // submit proposal without initial deposit - id := s.submitProposal(val, sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(0)), "TestQueryDepositsWithoutInitialDeposit") - proposalID := strconv.FormatUint(id, 10) - - // deposit amount - depositAmount := sdk.NewCoin(s.cfg.BondDenom, v1.DefaultMinDepositTokens.Add(sdk.NewInt(50))).String() - _, err := govclitestutil.MsgDeposit(clientCtx, val.Address.String(), proposalID, depositAmount) - s.Require().NoError(err) - s.Require().NoError(s.network.WaitForNextBlock()) - - // query deposit - deposit := s.queryDeposit(val, proposalID, false, "") - s.Require().NotNil(deposit) - s.Require().Equal(sdk.Coins(deposit.Amount).String(), depositAmount) - - // query deposits - deposits := s.queryDeposits(val, proposalID, false, "") - s.Require().NotNil(deposits) - s.Require().Len(deposits.Deposits, 1) - // verify initial deposit - s.Require().Equal(sdk.Coins(deposits.Deposits[0].Amount).String(), depositAmount) -} - func (s *DepositTestSuite) TestQueryDepositsWithInitialDeposit() { val := s.network.Validators[0] depositAmount := sdk.NewCoin(s.cfg.BondDenom, v1.DefaultMinDepositTokens) diff --git a/tests/e2e/gov/tx.go b/tests/e2e/gov/tx.go index 6a5cf913ba7f..f728701badb6 100644 --- a/tests/e2e/gov/tx.go +++ b/tests/e2e/gov/tx.go @@ -54,9 +54,11 @@ func (s *E2ETestSuite) SetupSuite() { s.Require().NoError(err) s.Require().NoError(s.network.WaitForNextBlock()) - // create a proposal without deposit + // create a proposal with a small deposit + minimumAcceptedDep := v1.DefaultMinDepositTokens.ToLegacyDec().Mul(v1.DefaultMinDepositRatio).Ceil().TruncateInt() _, err = govclitestutil.MsgSubmitLegacyProposal(val.ClientCtx, val.Address.String(), - "Text Proposal 2", "Where is the title!?", v1beta1.ProposalTypeText) + "Text Proposal 2", "Where is the title!?", v1beta1.ProposalTypeText, + fmt.Sprintf("--%s=%s", cli.FlagDeposit, sdk.NewCoin(s.cfg.BondDenom, minimumAcceptedDep).String())) s.Require().NoError(err) s.Require().NoError(s.network.WaitForNextBlock()) @@ -111,7 +113,7 @@ func (s *E2ETestSuite) TestNewCmdSubmitProposal() { "summary": "My awesome description", "metadata": "%s", "deposit": "%s" -}`, authtypes.NewModuleAddress(types.ModuleName), base64.StdEncoding.EncodeToString(propMetadata), sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(5431))) + }`, authtypes.NewModuleAddress(types.ModuleName), base64.StdEncoding.EncodeToString(propMetadata), sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(100000))) validPropFile := testutil.WriteToNewTempFile(s.T(), validProp) defer validPropFile.Close() @@ -179,7 +181,7 @@ func (s *E2ETestSuite) TestNewCmdSubmitLegacyProposal() { "description": "Hello, World!", "type": "Text", "deposit": "%s" - }`, sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(5431))) + }`, sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(154310))) validPropFile := testutil.WriteToNewTempFile(s.T(), validProp) defer validPropFile.Close() @@ -205,7 +207,7 @@ func (s *E2ETestSuite) TestNewCmdSubmitLegacyProposal() { []string{ fmt.Sprintf("--%s='Where is the title!?'", cli.FlagDescription), //nolint:staticcheck // we are intentionally using a deprecated flag here. fmt.Sprintf("--%s=%s", cli.FlagProposalType, v1beta1.ProposalTypeText), //nolint:staticcheck // we are intentionally using a deprecated flag here. - fmt.Sprintf("--%s=%s", cli.FlagDeposit, sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(5431)).String()), + fmt.Sprintf("--%s=%s", cli.FlagDeposit, sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10000)).String()), fmt.Sprintf("--%s=%s", flags.FlagFrom, val.Address.String()), fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation), fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10))).String()), @@ -230,7 +232,7 @@ func (s *E2ETestSuite) TestNewCmdSubmitLegacyProposal() { fmt.Sprintf("--%s='Text Proposal'", cli.FlagTitle), //nolint:staticcheck // we are intentionally using a deprecated flag here. fmt.Sprintf("--%s='Where is the title!?'", cli.FlagDescription), //nolint:staticcheck // we are intentionally using a deprecated flag here. fmt.Sprintf("--%s=%s", cli.FlagProposalType, v1beta1.ProposalTypeText), //nolint:staticcheck // we are intentionally using a deprecated flag here. - fmt.Sprintf("--%s=%s", cli.FlagDeposit, sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(5431)).String()), + fmt.Sprintf("--%s=%s", cli.FlagDeposit, sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(100000)).String()), fmt.Sprintf("--%s=%s", flags.FlagFrom, val.Address.String()), fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation), fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastSync), diff --git a/x/bank/app_test.go b/x/bank/app_test.go index 19a33d2a6461..a19d7b2731f1 100644 --- a/x/bank/app_test.go +++ b/x/bank/app_test.go @@ -349,14 +349,15 @@ func TestMsgSetSendEnabled(t *testing.T) { s := createTestSuite(t, genAccs) ctx := s.App.BaseApp.NewContext(false, tmproto.Header{}) - require.NoError(t, testutil.FundAccount(s.BankKeeper, ctx, addr1, sdk.NewCoins(sdk.NewInt64Coin("stake", 101)))) + require.NoError(t, testutil.FundAccount(s.BankKeeper, ctx, addr1, sdk.NewCoins(sdk.NewInt64Coin("foocoin", 101)))) + require.NoError(t, testutil.FundAccount(s.BankKeeper, ctx, addr1, sdk.NewCoins(sdk.NewInt64Coin("stake", 100000)))) addr1Str := addr1.String() govAddr := s.BankKeeper.GetAuthority() goodGovProp, err := govv1.NewMsgSubmitProposal( []sdk.Msg{ types.NewMsgSetSendEnabled(govAddr, nil, nil), }, - sdk.Coins{{"stake", sdk.NewInt(5)}}, + sdk.Coins{{Denom: "stake", Amount: sdk.NewInt(100000)}}, addr1Str, "set default send enabled to true", "Change send enabled", @@ -367,7 +368,7 @@ func TestMsgSetSendEnabled(t *testing.T) { []sdk.Msg{ types.NewMsgSetSendEnabled(govAddr, []*types.SendEnabled{{"bad coin name!", true}}, nil), }, - sdk.Coins{{"foocoin", sdk.NewInt(5)}}, + sdk.Coins{{Denom: "foocoin", Amount: sdk.NewInt(5)}}, addr1Str, "set default send enabled to true", "Change send enabled", diff --git a/x/gov/abci_test.go b/x/gov/abci_test.go index 084aed370fa4..19df1494a5b2 100644 --- a/x/gov/abci_test.go +++ b/x/gov/abci_test.go @@ -38,7 +38,7 @@ func TestTickExpiredDepositPeriod(t *testing.T) { newProposalMsg, err := v1.NewMsgSubmitProposal( []sdk.Msg{mkTestLegacyContent(t)}, - sdk.Coins{sdk.NewInt64Coin(sdk.DefaultBondDenom, 5)}, + sdk.Coins{sdk.NewInt64Coin(sdk.DefaultBondDenom, 100000)}, addrs[0].String(), "", "Proposal", @@ -94,7 +94,7 @@ func TestTickMultipleExpiredDepositPeriod(t *testing.T) { newProposalMsg, err := v1.NewMsgSubmitProposal( []sdk.Msg{mkTestLegacyContent(t)}, - sdk.Coins{sdk.NewInt64Coin(sdk.DefaultBondDenom, 5)}, + sdk.Coins{sdk.NewInt64Coin(sdk.DefaultBondDenom, 100000)}, addrs[0].String(), "", "Proposal", @@ -120,7 +120,7 @@ func TestTickMultipleExpiredDepositPeriod(t *testing.T) { newProposalMsg2, err := v1.NewMsgSubmitProposal( []sdk.Msg{mkTestLegacyContent(t)}, - sdk.Coins{sdk.NewInt64Coin(sdk.DefaultBondDenom, 5)}, + sdk.Coins{sdk.NewInt64Coin(sdk.DefaultBondDenom, 100000)}, addrs[0].String(), "", "Proposal", @@ -181,7 +181,7 @@ func TestTickPassedDepositPeriod(t *testing.T) { newProposalMsg, err := v1.NewMsgSubmitProposal( []sdk.Msg{mkTestLegacyContent(t)}, - sdk.Coins{sdk.NewInt64Coin(sdk.DefaultBondDenom, 5)}, + sdk.Coins{sdk.NewInt64Coin(sdk.DefaultBondDenom, 100000)}, addrs[0].String(), "", "Proposal", @@ -207,7 +207,7 @@ func TestTickPassedDepositPeriod(t *testing.T) { require.False(t, inactiveQueue.Valid()) inactiveQueue.Close() - newDepositMsg := v1.NewMsgDeposit(addrs[1], proposalID, sdk.Coins{sdk.NewInt64Coin(sdk.DefaultBondDenom, 5)}) + newDepositMsg := v1.NewMsgDeposit(addrs[1], proposalID, sdk.Coins{sdk.NewInt64Coin(sdk.DefaultBondDenom, 100000)}) res1, err := govMsgSvr.Deposit(sdk.WrapSDKContext(ctx), newDepositMsg) require.NoError(t, err) diff --git a/x/gov/keeper/deposit.go b/x/gov/keeper/deposit.go index 775117eb21fd..bee247d71b15 100644 --- a/x/gov/keeper/deposit.go +++ b/x/gov/keeper/deposit.go @@ -2,6 +2,7 @@ package keeper import ( "fmt" + "strings" sdk "github.com/cosmos/cosmos-sdk/types" sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" @@ -120,12 +121,52 @@ func (keeper Keeper) AddDeposit(ctx sdk.Context, proposalID uint64, depositorAdd // Check coins to be deposited match the proposal's deposit params params := keeper.GetParams(ctx) + + // NOTE: backported from v50 + // v47 does not have expedited proposals so we always use params.MinDeposit + minDepositAmount := params.MinDeposit + minDepositRatio, err := sdk.NewDecFromStr(params.GetMinDepositRatio()) + if err != nil { + return false, err + } + if err := keeper.validateDepositDenom(ctx, params, depositAmount); err != nil { return false, err } + // If minDepositRatio is set, the deposit must be equal or greater than minDepositAmount*minDepositRatio + // for at least one denom. If minDepositRatio is zero we skip this check. + if !minDepositRatio.IsZero() { + var ( + depositThresholdMet bool + thresholds []string + ) + for _, minDep := range minDepositAmount { + // calculate the threshold for this denom, and hold a list to later return a useful error message + threshold := sdk.NewCoin(minDep.GetDenom(), minDep.Amount.ToLegacyDec().Mul(minDepositRatio).TruncateInt()) + thresholds = append(thresholds, threshold.String()) + + found, deposit := depositAmount.Find(minDep.Denom) + if !found { // if not found, continue, as we know the deposit contains at least 1 valid denom + continue + } + + // Once we know at least one threshold has been met, we can break. The deposit + // might contain other denoms but we don't care. + if deposit.IsGTE(threshold) { + depositThresholdMet = true + break + } + } + + // the threshold must be met with at least one denom, if not, return the list of minimum deposits + if !depositThresholdMet { + return false, sdkerrors.Wrapf(types.ErrMinDepositTooSmall, "received %s but need at least one of the following: %s", depositAmount, strings.Join(thresholds, ",")) + } + } + // update the governance module's account coins pool - err := keeper.bankKeeper.SendCoinsFromAccountToModule(ctx, depositorAddr, types.ModuleName, depositAmount) + err = keeper.bankKeeper.SendCoinsFromAccountToModule(ctx, depositorAddr, types.ModuleName, depositAmount) if err != nil { return false, err } @@ -192,6 +233,10 @@ func (keeper Keeper) RefundAndDeleteDeposits(ctx sdk.Context, proposalID uint64) // required at the time of proposal submission. This threshold amount is determined by // the deposit parameters. Returns nil on success, error otherwise. func (keeper Keeper) validateInitialDeposit(ctx sdk.Context, params v1.Params, initialDeposit sdk.Coins) error { + if !initialDeposit.IsValid() || initialDeposit.IsAnyNegative() { + return sdkerrors.Wrapf(sdkerrors.ErrInvalidCoins, initialDeposit.String()) + } + minInitialDepositRatio, err := sdk.NewDecFromStr(params.MinInitialDepositRatio) if err != nil { return err @@ -220,7 +265,7 @@ func (keeper Keeper) validateDepositDenom(ctx sdk.Context, params v1.Params, dep for _, coin := range depositAmount { if _, ok := acceptedDenoms[coin.Denom]; !ok { - return sdkerrors.Wrapf(types.ErrInvalidDepositDenom, "deposited %s, but gov accepts only the following denom(s): %v", coin, denoms) + return sdkerrors.Wrapf(types.ErrInvalidDepositDenom, "deposited %s, but gov accepts only the following denom(s): %v", depositAmount, denoms) } } diff --git a/x/gov/keeper/deposit_test.go b/x/gov/keeper/deposit_test.go index 204dc66508ee..d87825cd3144 100644 --- a/x/gov/keeper/deposit_test.go +++ b/x/gov/keeper/deposit_test.go @@ -116,6 +116,84 @@ func TestDeposits(t *testing.T) { require.Equal(t, addr0Initial.Sub(fourStake...), bankKeeper.GetAllBalances(ctx, TestAddrs[0])) } +func TestDepositAmount(t *testing.T) { + testcases := []struct { + name string + deposit sdk.Coins + minDepositRatio string + err string + }{ + { + name: "good amount and denoms", + deposit: sdk.NewCoins(sdk.NewInt64Coin("stake", 10000)), + minDepositRatio: "0.001", + }, + { + name: "good amount and denoms but not enough balance for zcoin", + deposit: sdk.NewCoins(sdk.NewInt64Coin("stake", 10000), sdk.NewInt64Coin("zcoin", 1)), + minDepositRatio: "0.001", + err: "not enough balance", + }, + { + name: "too small amount", + deposit: sdk.NewCoins(sdk.NewInt64Coin("stake", 10)), + minDepositRatio: "0.001", + err: "received 10stake but need at least one of the following: 10000stake,10zcoin: minimum deposit is too small", + }, + { + name: "too small amount with another coin", + deposit: sdk.NewCoins(sdk.NewInt64Coin("zcoin", 1)), + minDepositRatio: "0.001", + err: "received 1zcoin but need at least one of the following: 10000stake,10zcoin: minimum deposit is too small", + }, + { + name: "bad denom", + deposit: sdk.NewCoins(sdk.NewInt64Coin("euro", 10000)), + minDepositRatio: "0.001", + err: "deposited 10000euro, but gov accepts only the following denom(s): [stake zcoin]: invalid deposit denom", + }, + { + name: "mix containing bad and good denom", + deposit: sdk.NewCoins(sdk.NewInt64Coin("stake", 10000), sdk.NewInt64Coin("euro", 10000)), + minDepositRatio: "0.001", + err: "deposited 10000euro,10000stake, but gov accepts only the following denom(s): [stake zcoin]: invalid deposit denom", + }, + { + name: "minDepositRatio is zero", + deposit: sdk.NewCoins(sdk.NewInt64Coin("stake", 10)), + minDepositRatio: "0.0", + }, + } + + for _, tc := range testcases { + t.Run(tc.name, func(t *testing.T) { + govKeeper, _, bankKeeper, stakingKeeper, _, ctx := setupGovKeeper(t) + trackMockBalances(bankKeeper) + + testAddrs := simtestutil.AddTestAddrsIncremental(bankKeeper, stakingKeeper, ctx, 2, sdk.NewInt(1000000000000000)) + + params := v1.DefaultParams() + params.MinDepositRatio = tc.minDepositRatio + params.MinDeposit = sdk.NewCoins(params.MinDeposit...).Add(sdk.NewCoin("zcoin", sdk.NewInt(10000))) // coins must be sorted by denom + err := govKeeper.SetParams(ctx, params) + require.NoError(t, err) + + tp := TestProposal + proposal, err := govKeeper.SubmitProposal(ctx, tp, "", "title", "summary", testAddrs[0]) + require.NoError(t, err) + proposalID := proposal.Id + + _, err = govKeeper.AddDeposit(ctx, proposalID, testAddrs[0], tc.deposit) + if tc.err != "" { + require.Error(t, err) + require.Equal(t, tc.err, err.Error()) + } else { + require.NoError(t, err) + } + }) + } +} + func TestValidateInitialDeposit(t *testing.T) { testcases := map[string]struct { minDeposit sdk.Coins diff --git a/x/gov/keeper/msg_server.go b/x/gov/keeper/msg_server.go index b242b7d21676..e54bade006c5 100644 --- a/x/gov/keeper/msg_server.go +++ b/x/gov/keeper/msg_server.go @@ -6,6 +6,7 @@ import ( "cosmossdk.io/errors" sdk "github.com/cosmos/cosmos-sdk/types" + sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" govtypes "github.com/cosmos/cosmos-sdk/x/gov/types" v1 "github.com/cosmos/cosmos-sdk/x/gov/types/v1" "github.com/cosmos/cosmos-sdk/x/gov/types/v1beta1" @@ -147,6 +148,11 @@ func (k msgServer) Deposit(goCtx context.Context, msg *v1.MsgDeposit) (*v1.MsgDe if err != nil { return nil, err } + + if err := validateDeposit(msg.Amount); err != nil { + return nil, err + } + votingStarted, err := k.Keeper.AddDeposit(ctx, msg.ProposalId, accAddr, msg.Amount) if err != nil { return nil, err @@ -164,6 +170,15 @@ func (k msgServer) Deposit(goCtx context.Context, msg *v1.MsgDeposit) (*v1.MsgDe return &v1.MsgDepositResponse{}, nil } +// validateDeposit validates the deposit amount, do not use for initial deposit. +func validateDeposit(amount sdk.Coins) error { + if !amount.IsValid() || !amount.IsAllPositive() { + return sdkerrors.ErrInvalidCoins.Wrap(amount.String()) + } + + return nil +} + // UpdateParams implements the MsgServer.UpdateParams method. func (k msgServer) UpdateParams(goCtx context.Context, msg *v1.MsgUpdateParams) (*v1.MsgUpdateParamsResponse, error) { if k.authority != msg.Authority { diff --git a/x/gov/keeper/msg_server_test.go b/x/gov/keeper/msg_server_test.go index 9c60f5220f5a..8e6b4a4f3de5 100644 --- a/x/gov/keeper/msg_server_test.go +++ b/x/gov/keeper/msg_server_test.go @@ -18,7 +18,7 @@ func (suite *KeeperTestSuite) TestSubmitProposalReq() { addrs := suite.addrs proposer := addrs[0] - coins := sdk.NewCoins(sdk.NewCoin("stake", sdk.NewInt(100))) + coins := sdk.NewCoins(sdk.NewCoin("stake", sdk.NewInt(100000))) initialDeposit := coins minDeposit := suite.govKeeper.GetParams(suite.ctx).MinDeposit bankMsg := &banktypes.MsgSend{ @@ -106,7 +106,7 @@ func (suite *KeeperTestSuite) TestSubmitProposalReq() { preRun: func() (*v1.MsgSubmitProposal, error) { return v1.NewMsgSubmitProposal( []sdk.Msg{bankMsg}, - append(initialDeposit, sdk.NewCoin("invalid", sdk.NewInt(100))), + initialDeposit.Add(sdk.NewCoin("invalid", sdk.NewInt(100))), proposer.String(), "", "Proposal", @@ -114,7 +114,7 @@ func (suite *KeeperTestSuite) TestSubmitProposalReq() { ) }, expErr: true, - expErrMsg: "deposited 100invalid, but gov accepts only the following denom(s): [stake]: invalid deposit denom", + expErrMsg: "deposited 100invalid,100000stake, but gov accepts only the following denom(s): [stake]: invalid deposit denom", }, "all good": { preRun: func() (*v1.MsgSubmitProposal, error) { @@ -166,7 +166,7 @@ func (suite *KeeperTestSuite) TestVoteReq() { addrs := suite.addrs proposer := addrs[0] - coins := sdk.NewCoins(sdk.NewCoin("stake", sdk.NewInt(100))) + coins := sdk.NewCoins(sdk.NewCoin("stake", sdk.NewInt(100000))) minDeposit := suite.govKeeper.GetParams(suite.ctx).MinDeposit bankMsg := &banktypes.MsgSend{ FromAddress: govAcct.String(), @@ -285,7 +285,7 @@ func (suite *KeeperTestSuite) TestVoteWeightedReq() { addrs := suite.addrs proposer := addrs[0] - coins := sdk.NewCoins(sdk.NewCoin("stake", sdk.NewInt(100))) + coins := sdk.NewCoins(sdk.NewCoin("stake", sdk.NewInt(100000))) minDeposit := suite.govKeeper.GetParams(suite.ctx).MinDeposit bankMsg := &banktypes.MsgSend{ FromAddress: govAcct.String(), @@ -404,8 +404,8 @@ func (suite *KeeperTestSuite) TestDepositReq() { addrs := suite.addrs proposer := addrs[0] - coins := sdk.NewCoins(sdk.NewCoin("stake", sdk.NewInt(100))) - minDeposit := suite.govKeeper.GetParams(suite.ctx).MinDeposit + coins := sdk.NewCoins(sdk.NewCoin("stake", sdk.NewInt(100000))) + minDeposit := sdk.Coins(suite.govKeeper.GetParams(suite.ctx).MinDeposit) bankMsg := &banktypes.MsgSend{ FromAddress: govAcct.String(), ToAddress: proposer.String(), @@ -449,9 +449,8 @@ func (suite *KeeperTestSuite) TestDepositReq() { return pId }, depositor: proposer, - deposit: []sdk.Coin{sdk.NewCoin("ibc/badcoin", sdk.NewInt(1000))}, - expErr: true, - options: v1.NewNonSplitVoteOption(v1.OptionYes), + deposit: minDeposit.Add(sdk.NewCoin("ibc/badcoin", sdk.NewInt(1000))), expErr: true, + options: v1.NewNonSplitVoteOption(v1.OptionYes), }, "invalid deposited coin (multiple)": { preRun: func() uint64 { @@ -492,7 +491,7 @@ func (suite *KeeperTestSuite) TestLegacyMsgSubmitProposal() { addrs := suite.addrs proposer := addrs[0] - coins := sdk.NewCoins(sdk.NewCoin("stake", sdk.NewInt(100))) + coins := sdk.NewCoins(sdk.NewCoin("stake", sdk.NewInt(100000))) initialDeposit := coins minDeposit := suite.govKeeper.GetParams(suite.ctx).MinDeposit @@ -542,7 +541,7 @@ func (suite *KeeperTestSuite) TestLegacyMsgVote() { addrs := suite.addrs proposer := addrs[0] - coins := sdk.NewCoins(sdk.NewCoin("stake", sdk.NewInt(100))) + coins := sdk.NewCoins(sdk.NewCoin("stake", sdk.NewInt(100000))) minDeposit := suite.govKeeper.GetParams(suite.ctx).MinDeposit bankMsg := &banktypes.MsgSend{ FromAddress: govAcct.String(), @@ -651,7 +650,7 @@ func (suite *KeeperTestSuite) TestLegacyVoteWeighted() { addrs := suite.addrs proposer := addrs[0] - coins := sdk.NewCoins(sdk.NewCoin("stake", sdk.NewInt(100))) + coins := sdk.NewCoins(sdk.NewCoin("stake", sdk.NewInt(100000))) minDeposit := suite.govKeeper.GetParams(suite.ctx).MinDeposit bankMsg := &banktypes.MsgSend{ FromAddress: govAcct.String(), @@ -760,7 +759,7 @@ func (suite *KeeperTestSuite) TestLegacyMsgDeposit() { addrs := suite.addrs proposer := addrs[0] - coins := sdk.NewCoins(sdk.NewCoin("stake", sdk.NewInt(100))) + coins := sdk.NewCoins(sdk.NewCoin("stake", sdk.NewInt(100000))) minDeposit := suite.govKeeper.GetParams(suite.ctx).MinDeposit bankMsg := &banktypes.MsgSend{ FromAddress: govAcct.String(), diff --git a/x/gov/migrations/v4/json.go b/x/gov/migrations/v4/json.go index 8006aae5e0f8..3797e0a36ce7 100644 --- a/x/gov/migrations/v4/json.go +++ b/x/gov/migrations/v4/json.go @@ -24,6 +24,9 @@ func MigrateJSON(oldState *v1.GenesisState) (*v1.GenesisState, error) { defaultParams.BurnProposalDepositPrevote, defaultParams.BurnVoteQuorum, defaultParams.BurnVoteVeto, + + // NOTE: backport from v50 + defaultParams.MinDepositRatio, ) return &v1.GenesisState{ diff --git a/x/gov/migrations/v4/json_test.go b/x/gov/migrations/v4/json_test.go index b16247f43ea6..cb32ada39842 100644 --- a/x/gov/migrations/v4/json_test.go +++ b/x/gov/migrations/v4/json_test.go @@ -69,6 +69,7 @@ func TestMigrateJSON(t *testing.T) { "denom": "stake" } ], + "min_deposit_ratio": "0.010000000000000000", "min_initial_deposit_ratio": "0.000000000000000000", "quorum": "0.334000000000000000", "threshold": "0.500000000000000000", diff --git a/x/gov/migrations/v4/store.go b/x/gov/migrations/v4/store.go index e81dde5f1427..d0f3b3532735 100644 --- a/x/gov/migrations/v4/store.go +++ b/x/gov/migrations/v4/store.go @@ -36,6 +36,9 @@ func migrateParams(ctx sdk.Context, storeKey storetypes.StoreKey, legacySubspace defaultParams.BurnProposalDepositPrevote, defaultParams.BurnVoteQuorum, defaultParams.BurnVoteVeto, + + // NOTE: backport from v50 + defaultParams.MinDepositRatio, ) bz, err := cdc.Marshal(¶ms) diff --git a/x/gov/migrations/v4/store_test.go b/x/gov/migrations/v4/store_test.go index 8547204b86b2..858b11c86cd6 100644 --- a/x/gov/migrations/v4/store_test.go +++ b/x/gov/migrations/v4/store_test.go @@ -104,6 +104,7 @@ func TestMigrateStore(t *testing.T) { require.Equal(t, legacySubspace.tp.Threshold, params.Threshold) require.Equal(t, legacySubspace.tp.VetoThreshold, params.VetoThreshold) require.Equal(t, sdk.ZeroDec().String(), params.MinInitialDepositRatio) + require.Equal(t, sdk.MustNewDecFromStr("0.01").String(), params.MinDepositRatio) // Check proposals' status var migratedProp1 v1.Proposal diff --git a/x/gov/simulation/genesis.go b/x/gov/simulation/genesis.go index b6c4e1e0d84c..c44071de674f 100644 --- a/x/gov/simulation/genesis.go +++ b/x/gov/simulation/genesis.go @@ -26,6 +26,9 @@ const ( TallyParamsQuorum = "tally_params_quorum" TallyParamsThreshold = "tally_params_threshold" TallyParamsVeto = "tally_params_veto" + + // NOTE: backport from v50 + MinDepositRatio = "min_deposit_ratio" ) // GenDepositParamsDepositPeriod returns randomized DepositParamsDepositPeriod @@ -63,6 +66,11 @@ func GenTallyParamsVeto(r *rand.Rand) math.LegacyDec { return sdk.NewDecWithPrec(int64(simulation.RandIntBetween(r, 250, 334)), 3) } +// GenMinDepositRatio returns randomized DepositMinRatio +func GenMinDepositRatio(r *rand.Rand) math.LegacyDec { + return math.LegacyMustNewDecFromStr("0.01") +} + // RandomizedGenState generates a random GenesisState for gov func RandomizedGenState(simState *module.SimulationState) { startingProposalID := uint64(simState.Rand.Intn(100)) @@ -109,9 +117,12 @@ func RandomizedGenState(simState *module.SimulationState) { func(r *rand.Rand) { veto = GenTallyParamsVeto(r) }, ) + var minDepositRatio math.LegacyDec + simState.AppParams.GetOrGenerate(simState.Cdc, MinDepositRatio, &minDepositRatio, simState.Rand, func(r *rand.Rand) { minDepositRatio = GenMinDepositRatio(r) }) + govGenesis := v1.NewGenesisState( startingProposalID, - v1.NewParams(minDeposit, depositPeriod, votingPeriod, quorum.String(), threshold.String(), veto.String(), minInitialDepositRatio.String(), simState.Rand.Intn(2) == 0, simState.Rand.Intn(2) == 0, simState.Rand.Intn(2) == 0), + v1.NewParams(minDeposit, depositPeriod, votingPeriod, quorum.String(), threshold.String(), veto.String(), minInitialDepositRatio.String(), simState.Rand.Intn(2) == 0, simState.Rand.Intn(2) == 0, simState.Rand.Intn(2) == 0, minDepositRatio.String()), ) bz, err := json.MarshalIndent(&govGenesis, "", " ") diff --git a/x/gov/simulation/operations.go b/x/gov/simulation/operations.go index 8cf1af8a5130..5ad4f3700bfc 100644 --- a/x/gov/simulation/operations.go +++ b/x/gov/simulation/operations.go @@ -451,6 +451,13 @@ func randomDeposit( minDepositAmount := minDeposit[denomIndex].Amount + minDepositRatio, err := sdk.NewDecFromStr(params.GetMinDepositRatio()) + if err != nil { + return nil, false, err + } + + threshold := minDepositAmount.ToLegacyDec().Mul(minDepositRatio).TruncateInt() + minAmount := sdk.ZeroInt() if useMinAmount { minDepositPercent, err := sdk.NewDecFromStr(params.MinInitialDepositRatio) @@ -467,7 +474,10 @@ func randomDeposit( } amount = amount.Add(minAmount) - if amount.GT(spendableBalance) { + // NOTE: backport from v50 + amount = amount.MulRaw(3) // 3x what's required // TODO: this is a hack, we need to be able to calculate the correct amount using params + + if amount.GT(spendableBalance) || amount.LT(threshold) { return nil, true, nil } diff --git a/x/gov/simulation/operations_test.go b/x/gov/simulation/operations_test.go index 4e5ee7665754..b7dfb41cc42f 100644 --- a/x/gov/simulation/operations_test.go +++ b/x/gov/simulation/operations_test.go @@ -152,7 +152,7 @@ func TestSimulateMsgSubmitProposal(t *testing.T) { require.True(t, operationMsg.OK) require.Equal(t, "cosmos1ghekyjucln7y67ntx7cf27m9dpuxxemn4c8g4r", msg.Proposer) require.NotEqual(t, len(msg.InitialDeposit), 0) - require.Equal(t, "560969stake", msg.InitialDeposit[0].String()) + require.Equal(t, "1682907stake", msg.InitialDeposit[0].String()) require.Equal(t, simulation.TypeMsgSubmitProposal, sdk.MsgTypeURL(&msg)) } @@ -182,7 +182,7 @@ func TestSimulateMsgSubmitLegacyProposal(t *testing.T) { require.True(t, operationMsg.OK) require.Equal(t, "cosmos1p8wcgrjr4pjju90xg6u9cgq55dxwq8j7u4x9a0", msg.Proposer) require.NotEqual(t, len(msg.InitialDeposit), 0) - require.Equal(t, "2686011stake", msg.InitialDeposit[0].String()) + require.Equal(t, "8058033stake", msg.InitialDeposit[0].String()) require.Equal(t, "title-3: ZBSpYuLyYggwexjxusrBqDOTtGTOWeLrQKjLxzIivHSlcxgdXhhuTSkuxKGLwQvuyNhYFmBZHeAerqyNEUzXPFGkqEGqiQWIXnku", msg.Messages[0].GetCachedValue().(*v1.MsgExecLegacyContent).Content.GetCachedValue().(v1beta1.Content).GetTitle()) require.Equal(t, "description-3: NJWzHdBNpAXKJPHWQdrGYcAHSctgVlqwqHoLfHsXUdStwfefwzqLuKEhmMyYLdbZrcPgYqjNHxPexsruwEGStAneKbWkQDDIlCWBLSiAASNhZqNFlPtfqPJoxKsgMdzjWqLWdqKQuJqWPMvwPQWZUtVMOTMYKJbfdlZsjdsomuScvDmbDkgRualsxDvRJuCAmPOXitIbcyWsKGSdrEunFAOdmXnsuyFVgJqEjbklvmwrUlsxjRSfKZxGcpayDdgoFcnVSutxjRgOSFzPwidAjubMncNweqpbxhXGchpZUxuFDOtpnhNUycJICRYqsPhPSCjPTWZFLkstHWJxvdPEAyEIxXgLwbNOjrgzmaujiBABBIXvcXpLrbcEWNNQsbjvgJFgJkflpRohHUutvnaUqoopuKjTDaemDeSdqbnOzcfJpcTuAQtZoiLZOoAIlboFDAeGmSNwkvObPRvRWQgWkGkxwtPauYgdkmypLjbqhlHJIQTntgWjXwZdOyYEdQRRLfMSdnxqppqUofqLbLQDUjwKVKfZJUJQPsWIPwIVaSTrmKskoAhvmZyJgeRpkaTfGgrJzAigcxtfshmiDCFkuiluqtMOkidknnTBtumyJYlIsWLnCQclqdVmikUoMOPdPWwYbJxXyqUVicNxFxyqJTenNblyyKSdlCbiXxUiYUiMwXZASYfvMDPFgxniSjWaZTjHkqlJvtBsXqwPpyVxnJVGFWhfSxgOcduoxkiopJvFjMmFabrGYeVtTXLhxVUEiGwYUvndjFGzDVntUvibiyZhfMQdMhgsiuysLMiePBNXifRLMsSmXPkwlPloUbJveCvUlaalhZHuvdkCnkSHbMbmOnrfEGPwQiACiPlnihiaOdbjPqPiTXaHDoJXjSlZmltGqNHHNrcKdlFSCdmVOuvDcBLdSklyGJmcLTbSFtALdGlPkqqecJrpLCXNPWefoTJNgEJlyMEPneVaxxduAAEqQpHWZodWyRkDAxzyMnFMcjSVqeRXLqsNyNtQBbuRvunZflWSbbvXXdkyLikYqutQhLPONXbvhcQZJPSWnOulqQaXmbfFxAkqfYeseSHOQidHwbcsOaMnSrrmGjjRmEMQNuknupMxJiIeVjmgZvbmjPIQTEhQFULQLBMPrxcFPvBinaOPYWGvYGRKxLZdwamfRQQFngcdSlvwjfaPbURasIsGJVHtcEAxnIIrhSriiXLOlbEBLXFElXJFGxHJczRBIxAuPKtBisjKBwfzZFagdNmjdwIRvwzLkFKWRTDPxJCmpzHUcrPiiXXHnOIlqNVoGSXZewdnCRhuxeYGPVTfrNTQNOxZmxInOazUYNTNDgzsxlgiVEHPKMfbesvPHUqpNkUqbzeuzfdrsuLDpKHMUbBMKczKKWOdYoIXoPYtEjfOnlQLoGnbQUCuERdEFaptwnsHzTJDsuZkKtzMpFaZobynZdzNydEeJJHDYaQcwUxcqvwfWwNUsCiLvkZQiSfzAHftYgAmVsXgtmcYgTqJIawstRYJrZdSxlfRiqTufgEQVambeZZmaAyRQbcmdjVUZZCgqDrSeltJGXPMgZnGDZqISrGDOClxXCxMjmKqEPwKHoOfOeyGmqWqihqjINXLqnyTesZePQRqaWDQNqpLgNrAUKulklmckTijUltQKuWQDwpLmDyxLppPVMwsmBIpOwQttYFMjgJQZLYFPmxWFLIeZihkRNnkzoypBICIxgEuYsVWGIGRbbxqVasYnstWomJnHwmtOhAFSpttRYYzBmyEtZXiCthvKvWszTXDbiJbGXMcrYpKAgvUVFtdKUfvdMfhAryctklUCEdjetjuGNfJjajZtvzdYaqInKtFPPLYmRaXPdQzxdSQfmZDEVHlHGEGNSPRFJuIfKLLfUmnHxHnRjmzQPNlqrXgifUdzAGKVabYqvcDeYoTYgPsBUqehrBhmQUgTvDnsdpuhUoxskDdppTsYMcnDIPSwKIqhXDCIxOuXrywahvVavvHkPuaenjLmEbMgrkrQLHEAwrhHkPRNvonNQKqprqOFVZKAtpRSpvQUxMoXCMZLSSbnLEFsjVfANdQNQVwTmGxqVjVqRuxREAhuaDrFgEZpYKhwWPEKBevBfsOIcaZKyykQafzmGPLRAKDtTcJxJVgiiuUkmyMYuDUNEUhBEdoBLJnamtLmMJQgmLiUELIhLpiEvpOXOvXCPUeldLFqkKOwfacqIaRcnnZvERKRMCKUkMABbDHytQqQblrvoxOZkwzosQfDKGtIdfcXRJNqlBNwOCWoQBcEWyqrMlYZIAXYJmLfnjoJepgSFvrgajaBAIksoyeHqgqbGvpAstMIGmIhRYGGNPRIfOQKsGoKgxtsidhTaAePRCBFqZgPDWCIkqOJezGVkjfYUCZTlInbxBXwUAVRsxHTQtJFnnpmMvXDYCVlEmnZBKhmmxQOIQzxFWpJQkQoSAYzTEiDWEOsVLNrbfzeHFRyeYATakQQWmFDLPbVMCJcWjFGJjfqCoVzlbNNEsqxdSmNPjTjHYOkuEMFLkXYGaoJlraLqayMeCsTjWNRDPBywBJLAPVkGQqTwApVVwYAetlwSbzsdHWsTwSIcctkyKDuRWYDQikRqsKTMJchrliONJeaZIzwPQrNbTwxsGdwuduvibtYndRwpdsvyCktRHFalvUuEKMqXbItfGcNGWsGzubdPMYayOUOINjpcFBeESdwpdlTYmrPsLsVDhpTzoMegKrytNVZkfJRPuDCUXxSlSthOohmsuxmIZUedzxKmowKOdXTMcEtdpHaPWgIsIjrViKrQOCONlSuazmLuCUjLltOGXeNgJKedTVrrVCpWYWHyVrdXpKgNaMJVjbXxnVMSChdWKuZdqpisvrkBJPoURDYxWOtpjzZoOpWzyUuYNhCzRoHsMjmmWDcXzQiHIyjwdhPNwiPqFxeUfMVFQGImhykFgMIlQEoZCaRoqSBXTSWAeDumdbsOGtATwEdZlLfoBKiTvodQBGOEcuATWXfiinSjPmJKcWgQrTVYVrwlyMWhxqNbCMpIQNoSMGTiWfPTCezUjYcdWppnsYJihLQCqbNLRGgqrwHuIvsazapTpoPZIyZyeeSueJuTIhpHMEJfJpScshJubJGfkusuVBgfTWQoywSSliQQSfbvaHKiLnyjdSbpMkdBgXepoSsHnCQaYuHQqZsoEOmJCiuQUpJkmfyfbIShzlZpHFmLCsbknEAkKXKfRTRnuwdBeuOGgFbJLbDksHVapaRayWzwoYBEpmrlAxrUxYMUekKbpjPNfjUCjhbdMAnJmYQVZBQZkFVweHDAlaqJjRqoQPoOMLhyvYCzqEuQsAFoxWrzRnTVjStPadhsESlERnKhpEPsfDxNvxqcOyIulaCkmPdambLHvGhTZzysvqFauEgkFRItPfvisehFmoBhQqmkfbHVsgfHXDPJVyhwPllQpuYLRYvGodxKjkarnSNgsXoKEMlaSKxKdcVgvOkuLcfLFfdtXGTclqfPOfeoVLbqcjcXCUEBgAGplrkgsmIEhWRZLlGPGCwKWRaCKMkBHTAcypUrYjWwCLtOPVygMwMANGoQwFnCqFrUGMCRZUGJKTZIGPyldsifauoMnJPLTcDHmilcmahlqOELaAUYDBuzsVywnDQfwRLGIWozYaOAilMBcObErwgTDNGWnwQMUgFFSKtPDMEoEQCTKVREqrXZSGLqwTMcxHfWotDllNkIJPMbXzjDVjPOOjCFuIvTyhXKLyhUScOXvYthRXpPfKwMhptXaxIxgqBoUqzrWbaoLTVpQoottZyPFfNOoMioXHRuFwMRYUiKvcWPkrayyTLOCFJlAyslDameIuqVAuxErqFPEWIScKpBORIuZqoXlZuTvAjEdlEWDODFRregDTqGNoFBIHxvimmIZwLfFyKUfEWAnNBdtdzDmTPXtpHRGdIbuucfTjOygZsTxPjfweXhSUkMhPjMaxKlMIJMOXcnQfyzeOcbWwNbeH", msg.Messages[0].GetCachedValue().(*v1.MsgExecLegacyContent).Content.GetCachedValue().(v1beta1.Content).GetDescription()) require.Equal(t, "gov", msg.Route()) @@ -231,7 +231,7 @@ func TestSimulateMsgDeposit(t *testing.T) { require.Equal(t, uint64(1), msg.ProposalId) require.Equal(t, "cosmos1ghekyjucln7y67ntx7cf27m9dpuxxemn4c8g4r", msg.Depositor) require.NotEqual(t, len(msg.Amount), 0) - require.Equal(t, "560969stake", msg.Amount[0].String()) + require.Equal(t, "1682907stake", msg.Amount[0].String()) require.Equal(t, "gov", msg.Route()) require.Equal(t, simulation.TypeMsgDeposit, msg.Type()) } diff --git a/x/gov/types/v1/gov.pb.go b/x/gov/types/v1/gov.pb.go index 747eab5c4ca6..3adf4af91017 100644 --- a/x/gov/types/v1/gov.pb.go +++ b/x/gov/types/v1/gov.pb.go @@ -745,6 +745,13 @@ type Params struct { BurnProposalDepositPrevote bool `protobuf:"varint,14,opt,name=burn_proposal_deposit_prevote,json=burnProposalDepositPrevote,proto3" json:"burn_proposal_deposit_prevote,omitempty"` // burn deposits if quorum with vote type no_veto is met BurnVoteVeto bool `protobuf:"varint,15,opt,name=burn_vote_veto,json=burnVoteVeto,proto3" json:"burn_vote_veto,omitempty"` + // The ratio representing the proportion of the deposit value minimum that must be met when making a deposit. + // Default value: 0.01. Meaning that for a chain with a min_deposit of 100stake, a deposit of 1stake would be + // required. + // + // Since: cosmos-sdk 0.50 + // NOTE: backported from v50 (https://github.com/cosmos/cosmos-sdk/pull/18146) + MinDepositRatio string `protobuf:"bytes,16,opt,name=min_deposit_ratio,json=minDepositRatio,proto3" json:"min_deposit_ratio,omitempty"` } func (m *Params) Reset() { *m = Params{} } @@ -850,6 +857,13 @@ func (m *Params) GetBurnVoteVeto() bool { return false } +func (m *Params) GetMinDepositRatio() string { + if m != nil { + return m.MinDepositRatio + } + return "" +} + func init() { proto.RegisterEnum("cosmos.gov.v1.VoteOption", VoteOption_name, VoteOption_value) proto.RegisterEnum("cosmos.gov.v1.ProposalStatus", ProposalStatus_name, ProposalStatus_value) @@ -867,87 +881,88 @@ func init() { func init() { proto.RegisterFile("cosmos/gov/v1/gov.proto", fileDescriptor_e05cb1c0d030febb) } var fileDescriptor_e05cb1c0d030febb = []byte{ - // 1276 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x57, 0xcf, 0x73, 0xd3, 0xc6, - 0x17, 0x8f, 0x6c, 0xd9, 0x71, 0x9e, 0x63, 0x47, 0x2c, 0xf9, 0x82, 0x12, 0x88, 0x1d, 0x3c, 0x0c, - 0x93, 0x2f, 0x3f, 0xec, 0x6f, 0xe0, 0x4b, 0x2f, 0xf4, 0xe2, 0xc4, 0xa2, 0x88, 0xa1, 0xb1, 0x2b, - 0x8b, 0x30, 0xf4, 0xa2, 0x91, 0xa3, 0xc5, 0xd9, 0xa9, 0xa5, 0x75, 0xa5, 0xb5, 0xc1, 0x7f, 0x42, - 0x6f, 0x1c, 0x3b, 0x3d, 0xf5, 0xd8, 0x63, 0x0f, 0x4c, 0xef, 0xbd, 0x71, 0x6a, 0x19, 0x2e, 0x6d, - 0x2f, 0xb4, 0x03, 0x87, 0xce, 0xf0, 0x57, 0x74, 0x76, 0xb5, 0xb2, 0x1d, 0xc7, 0x9d, 0x04, 0x2e, - 0xb1, 0xf4, 0xde, 0xe7, 0xf3, 0xde, 0xdb, 0xf7, 0x6b, 0x15, 0x38, 0x7f, 0x40, 0x23, 0x9f, 0x46, - 0xb5, 0x2e, 0x1d, 0xd6, 0x86, 0xdb, 0xfc, 0xa7, 0xda, 0x0f, 0x29, 0xa3, 0xa8, 0x10, 0x2b, 0xaa, - 0x5c, 0x32, 0xdc, 0x5e, 0x2f, 0x49, 0x5c, 0xc7, 0x8d, 0x70, 0x6d, 0xb8, 0xdd, 0xc1, 0xcc, 0xdd, - 0xae, 0x1d, 0x50, 0x12, 0xc4, 0xf0, 0xf5, 0xd5, 0x2e, 0xed, 0x52, 0xf1, 0x58, 0xe3, 0x4f, 0x52, - 0x5a, 0xee, 0x52, 0xda, 0xed, 0xe1, 0x9a, 0x78, 0xeb, 0x0c, 0x9e, 0xd4, 0x18, 0xf1, 0x71, 0xc4, - 0x5c, 0xbf, 0x2f, 0x01, 0x6b, 0xb3, 0x00, 0x37, 0x18, 0x49, 0x55, 0x69, 0x56, 0xe5, 0x0d, 0x42, - 0x97, 0x11, 0x9a, 0x78, 0x5c, 0x8b, 0x23, 0x72, 0x62, 0xa7, 0x32, 0xda, 0x58, 0x75, 0xc6, 0xf5, - 0x49, 0x40, 0x6b, 0xe2, 0x6f, 0x2c, 0xaa, 0x50, 0x40, 0x8f, 0x30, 0xe9, 0x1e, 0x32, 0xec, 0xed, - 0x53, 0x86, 0x9b, 0x7d, 0x6e, 0x09, 0x6d, 0x43, 0x96, 0x8a, 0x27, 0x5d, 0xd9, 0x54, 0xb6, 0x8a, - 0x37, 0xd7, 0xaa, 0x47, 0x4e, 0x5d, 0x9d, 0x40, 0x2d, 0x09, 0x44, 0x57, 0x20, 0xfb, 0x54, 0x18, - 0xd2, 0x53, 0x9b, 0xca, 0xd6, 0xd2, 0x4e, 0xf1, 0xf5, 0x8b, 0x1b, 0x20, 0x59, 0x0d, 0x7c, 0x60, - 0x49, 0x6d, 0xe5, 0x7b, 0x05, 0x16, 0x1b, 0xb8, 0x4f, 0x23, 0xc2, 0x50, 0x19, 0xf2, 0xfd, 0x90, - 0xf6, 0x69, 0xe4, 0xf6, 0x1c, 0xe2, 0x09, 0x5f, 0xaa, 0x05, 0x89, 0xc8, 0xf4, 0xd0, 0x27, 0xb0, - 0xe4, 0xc5, 0x58, 0x1a, 0x4a, 0xbb, 0xfa, 0xeb, 0x17, 0x37, 0x56, 0xa5, 0xdd, 0xba, 0xe7, 0x85, - 0x38, 0x8a, 0xda, 0x2c, 0x24, 0x41, 0xd7, 0x9a, 0x40, 0xd1, 0xa7, 0x90, 0x75, 0x7d, 0x3a, 0x08, - 0x98, 0x9e, 0xde, 0x4c, 0x6f, 0xe5, 0x27, 0xf1, 0xf3, 0x32, 0x55, 0x65, 0x99, 0xaa, 0xbb, 0x94, - 0x04, 0x3b, 0x4b, 0x2f, 0xdf, 0x94, 0x17, 0x7e, 0xf8, 0xfb, 0xc7, 0xab, 0x8a, 0x25, 0x39, 0x95, - 0x9f, 0x33, 0x90, 0x6b, 0xc9, 0x20, 0x50, 0x11, 0x52, 0xe3, 0xd0, 0x52, 0xc4, 0x43, 0xff, 0x83, - 0x9c, 0x8f, 0xa3, 0xc8, 0xed, 0xe2, 0x48, 0x4f, 0x09, 0xe3, 0xab, 0xd5, 0xb8, 0x22, 0xd5, 0xa4, - 0x22, 0xd5, 0x7a, 0x30, 0xb2, 0xc6, 0x28, 0x74, 0x1b, 0xb2, 0x11, 0x73, 0xd9, 0x20, 0xd2, 0xd3, - 0x22, 0x99, 0x1b, 0x33, 0xc9, 0x4c, 0x5c, 0xb5, 0x05, 0xc8, 0x92, 0x60, 0x74, 0x0f, 0xd0, 0x13, - 0x12, 0xb8, 0x3d, 0x87, 0xb9, 0xbd, 0xde, 0xc8, 0x09, 0x71, 0x34, 0xe8, 0x31, 0x5d, 0xdd, 0x54, - 0xb6, 0xf2, 0x37, 0xd7, 0x67, 0x4c, 0xd8, 0x1c, 0x62, 0x09, 0x84, 0xa5, 0x09, 0xd6, 0x94, 0x04, - 0xd5, 0x21, 0x1f, 0x0d, 0x3a, 0x3e, 0x61, 0x0e, 0x6f, 0x33, 0x3d, 0x23, 0x4d, 0xcc, 0x46, 0x6d, - 0x27, 0x3d, 0xb8, 0xa3, 0x3e, 0xff, 0xb3, 0xac, 0x58, 0x10, 0x93, 0xb8, 0x18, 0xdd, 0x07, 0x4d, - 0x66, 0xd7, 0xc1, 0x81, 0x17, 0xdb, 0xc9, 0x9e, 0xd2, 0x4e, 0x51, 0x32, 0x8d, 0xc0, 0x13, 0xb6, - 0x4c, 0x28, 0x30, 0xca, 0xdc, 0x9e, 0x23, 0xe5, 0xfa, 0xe2, 0x07, 0xd4, 0x68, 0x59, 0x50, 0x93, - 0x06, 0x7a, 0x00, 0x67, 0x86, 0x94, 0x91, 0xa0, 0xeb, 0x44, 0xcc, 0x0d, 0xe5, 0xf9, 0x72, 0xa7, - 0x8c, 0x6b, 0x25, 0xa6, 0xb6, 0x39, 0x53, 0x04, 0x76, 0x0f, 0xa4, 0x68, 0x72, 0xc6, 0xa5, 0x53, - 0xda, 0x2a, 0xc4, 0xc4, 0xe4, 0x88, 0xeb, 0xbc, 0x49, 0x98, 0xeb, 0xb9, 0xcc, 0xd5, 0x81, 0xb7, - 0xad, 0x35, 0x7e, 0x47, 0xab, 0x90, 0x61, 0x84, 0xf5, 0xb0, 0x9e, 0x17, 0x8a, 0xf8, 0x05, 0xe9, - 0xb0, 0x18, 0x0d, 0x7c, 0xdf, 0x0d, 0x47, 0xfa, 0xb2, 0x90, 0x27, 0xaf, 0xe8, 0xff, 0x90, 0x8b, - 0x27, 0x02, 0x87, 0x7a, 0xe1, 0x84, 0x11, 0x18, 0x23, 0x2b, 0xbf, 0x29, 0x90, 0x9f, 0xee, 0x81, - 0x6b, 0xb0, 0x34, 0xc2, 0x91, 0x73, 0x20, 0x86, 0x42, 0x39, 0x36, 0xa1, 0x66, 0xc0, 0xac, 0xdc, - 0x08, 0x47, 0xbb, 0x5c, 0x8f, 0x6e, 0x41, 0xc1, 0xed, 0x44, 0xcc, 0x25, 0x81, 0x24, 0xa4, 0xe6, - 0x12, 0x96, 0x25, 0x28, 0x26, 0xfd, 0x17, 0x72, 0x01, 0x95, 0xf8, 0xf4, 0x5c, 0xfc, 0x62, 0x40, - 0x63, 0xe8, 0x1d, 0x40, 0x01, 0x75, 0x9e, 0x12, 0x76, 0xe8, 0x0c, 0x31, 0x4b, 0x48, 0xea, 0x5c, - 0xd2, 0x4a, 0x40, 0x1f, 0x11, 0x76, 0xb8, 0x8f, 0x59, 0x4c, 0xae, 0xfc, 0xa4, 0x80, 0xca, 0xf7, - 0xcf, 0xc9, 0xdb, 0xa3, 0x0a, 0x99, 0x21, 0x65, 0xf8, 0xe4, 0xcd, 0x11, 0xc3, 0xd0, 0x1d, 0x58, - 0x8c, 0x97, 0x59, 0xa4, 0xab, 0xa2, 0x25, 0x2f, 0xcd, 0x8c, 0xd9, 0xf1, 0x4d, 0x69, 0x25, 0x8c, - 0x23, 0x25, 0xcf, 0x1c, 0x2d, 0xf9, 0x7d, 0x35, 0x97, 0xd6, 0xd4, 0xca, 0x1f, 0x0a, 0x14, 0x64, - 0xe3, 0xb6, 0xdc, 0xd0, 0xf5, 0x23, 0xf4, 0x18, 0xf2, 0x3e, 0x09, 0xc6, 0x73, 0xa0, 0x9c, 0x34, - 0x07, 0x1b, 0x7c, 0x0e, 0xde, 0xbf, 0x29, 0xff, 0x67, 0x8a, 0x75, 0x9d, 0xfa, 0x84, 0x61, 0xbf, - 0xcf, 0x46, 0x16, 0xf8, 0x24, 0x48, 0x26, 0xc3, 0x07, 0xe4, 0xbb, 0xcf, 0x12, 0x90, 0xd3, 0xc7, - 0x21, 0xa1, 0x9e, 0x48, 0x04, 0xf7, 0x30, 0xdb, 0xce, 0x0d, 0x79, 0x85, 0xec, 0x5c, 0x7e, 0xff, - 0xa6, 0x7c, 0xf1, 0x38, 0x71, 0xe2, 0xe4, 0x5b, 0xde, 0xed, 0x9a, 0xef, 0x3e, 0x4b, 0x4e, 0x22, - 0xf4, 0x15, 0x1b, 0x96, 0xf7, 0xc5, 0x04, 0xc8, 0x93, 0x35, 0x40, 0x4e, 0x44, 0xe2, 0x59, 0x39, - 0xc9, 0xb3, 0x2a, 0x2c, 0x2f, 0xc7, 0x2c, 0x69, 0xf5, 0xbb, 0xa4, 0x89, 0xa5, 0xd5, 0x2b, 0x90, - 0xfd, 0x7a, 0x40, 0xc3, 0x81, 0x3f, 0xa7, 0x83, 0xc5, 0x1d, 0x13, 0x6b, 0xd1, 0x75, 0x58, 0x62, - 0x87, 0x21, 0x8e, 0x0e, 0x69, 0xcf, 0xfb, 0x97, 0xeb, 0x68, 0x02, 0x40, 0xb7, 0xa1, 0x28, 0xba, - 0x70, 0x42, 0x49, 0xcf, 0xa5, 0x14, 0x38, 0xca, 0x4e, 0x40, 0x95, 0x5f, 0x55, 0xc8, 0xca, 0xb8, - 0x8c, 0x0f, 0xac, 0xe3, 0xd4, 0x3e, 0x9b, 0xae, 0xd9, 0xe7, 0x1f, 0x57, 0x33, 0x75, 0x7e, 0x4d, - 0x8e, 0xd7, 0x20, 0xfd, 0x11, 0x35, 0x98, 0xca, 0xb9, 0x7a, 0xfa, 0x9c, 0x67, 0x3e, 0x3c, 0xe7, - 0xd9, 0x53, 0xe4, 0x1c, 0x99, 0xb0, 0xc6, 0x13, 0x4d, 0x02, 0xc2, 0xc8, 0xe4, 0x02, 0x71, 0x44, - 0xf8, 0xfa, 0xe2, 0x5c, 0x0b, 0xe7, 0x7c, 0x12, 0x98, 0x31, 0x5e, 0xa6, 0xc7, 0xe2, 0x68, 0xb4, - 0x05, 0x5a, 0x67, 0x10, 0x06, 0x0e, 0x1f, 0x7d, 0x47, 0x9e, 0x90, 0xaf, 0xd7, 0x9c, 0x55, 0xe4, - 0x72, 0x3e, 0xe2, 0x5f, 0xc4, 0x27, 0xab, 0xc3, 0x86, 0x40, 0x8e, 0x97, 0xcd, 0xb8, 0x40, 0x21, - 0xe6, 0x6c, 0xbd, 0x28, 0x68, 0xeb, 0x1c, 0x94, 0xdc, 0xe5, 0x49, 0x25, 0x62, 0x04, 0xba, 0x0c, - 0xc5, 0x89, 0x33, 0x7e, 0x24, 0x7d, 0x45, 0x70, 0x96, 0x13, 0x57, 0x7c, 0xbd, 0x5d, 0xfd, 0x46, - 0x01, 0x98, 0xfa, 0x08, 0xbb, 0x00, 0xe7, 0xf7, 0x9b, 0xb6, 0xe1, 0x34, 0x5b, 0xb6, 0xd9, 0xdc, - 0x73, 0x1e, 0xee, 0xb5, 0x5b, 0xc6, 0xae, 0x79, 0xd7, 0x34, 0x1a, 0xda, 0x02, 0x3a, 0x0b, 0x2b, - 0xd3, 0xca, 0xc7, 0x46, 0x5b, 0x53, 0xd0, 0x79, 0x38, 0x3b, 0x2d, 0xac, 0xef, 0xb4, 0xed, 0xba, - 0xb9, 0xa7, 0xa5, 0x10, 0x82, 0xe2, 0xb4, 0x62, 0xaf, 0xa9, 0xa5, 0xd1, 0x45, 0xd0, 0x8f, 0xca, - 0x9c, 0x47, 0xa6, 0x7d, 0xcf, 0xd9, 0x37, 0xec, 0xa6, 0xa6, 0x5e, 0xfd, 0x45, 0x81, 0xe2, 0xd1, - 0x0f, 0x13, 0x54, 0x86, 0x0b, 0x2d, 0xab, 0xd9, 0x6a, 0xb6, 0xeb, 0x0f, 0x9c, 0xb6, 0x5d, 0xb7, - 0x1f, 0xb6, 0x67, 0x62, 0xaa, 0x40, 0x69, 0x16, 0xd0, 0x30, 0x5a, 0xcd, 0xb6, 0x69, 0x3b, 0x2d, - 0xc3, 0x32, 0x9b, 0x0d, 0x4d, 0x41, 0x97, 0x60, 0x63, 0x16, 0xb3, 0xdf, 0xb4, 0xcd, 0xbd, 0xcf, - 0x12, 0x48, 0x0a, 0xad, 0xc3, 0xb9, 0x59, 0x48, 0xab, 0xde, 0x6e, 0x1b, 0x8d, 0x38, 0xe8, 0x59, - 0x9d, 0x65, 0xdc, 0x37, 0x76, 0x6d, 0xa3, 0xa1, 0xa9, 0xf3, 0x98, 0x77, 0xeb, 0xe6, 0x03, 0xa3, - 0xa1, 0x65, 0x76, 0x8c, 0x97, 0x6f, 0x4b, 0xca, 0xab, 0xb7, 0x25, 0xe5, 0xaf, 0xb7, 0x25, 0xe5, - 0xf9, 0xbb, 0xd2, 0xc2, 0xab, 0x77, 0xa5, 0x85, 0xdf, 0xdf, 0x95, 0x16, 0xbe, 0xbc, 0xd6, 0x25, - 0xec, 0x70, 0xd0, 0xa9, 0x1e, 0x50, 0x5f, 0x7e, 0x2e, 0xcb, 0x9f, 0x1b, 0x91, 0xf7, 0x55, 0xed, - 0x99, 0xf8, 0x17, 0x80, 0x8d, 0xfa, 0x38, 0xe2, 0xdf, 0xf7, 0x59, 0x31, 0x35, 0xb7, 0xfe, 0x09, - 0x00, 0x00, 0xff, 0xff, 0xbc, 0x24, 0x6f, 0xb5, 0x20, 0x0c, 0x00, 0x00, + // 1294 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x57, 0x4f, 0x73, 0xd3, 0xd6, + 0x16, 0x8f, 0x6c, 0xd9, 0x71, 0x8e, 0x63, 0x47, 0x5c, 0xf2, 0x40, 0x09, 0xc4, 0x0e, 0x1e, 0x86, + 0xc9, 0xe3, 0x8f, 0xfd, 0x02, 0x8f, 0xb7, 0x78, 0x74, 0xe3, 0xc4, 0xa2, 0x88, 0xa1, 0xb1, 0x2b, + 0x8b, 0x30, 0x74, 0xa3, 0x91, 0xa3, 0x8b, 0x73, 0xa7, 0x96, 0xae, 0x2b, 0x5d, 0x1b, 0xfc, 0x11, + 0x3a, 0xdd, 0xb0, 0xec, 0x74, 0xd5, 0x65, 0x97, 0x5d, 0x30, 0xdd, 0x77, 0xc7, 0xaa, 0xc3, 0xb0, + 0x69, 0xbb, 0xa1, 0x1d, 0x58, 0x74, 0x86, 0x4f, 0xd1, 0xb9, 0x57, 0x57, 0xb6, 0xe3, 0xb8, 0x93, + 0xc0, 0x26, 0x91, 0xce, 0xf9, 0xfd, 0xce, 0xff, 0x73, 0xaf, 0x0c, 0xe7, 0x0f, 0x68, 0xe4, 0xd3, + 0xa8, 0xd6, 0xa5, 0xc3, 0xda, 0x70, 0x9b, 0xff, 0xab, 0xf6, 0x43, 0xca, 0x28, 0x2a, 0xc4, 0x8a, + 0x2a, 0x97, 0x0c, 0xb7, 0xd7, 0x4b, 0x12, 0xd7, 0x71, 0x23, 0x5c, 0x1b, 0x6e, 0x77, 0x30, 0x73, + 0xb7, 0x6b, 0x07, 0x94, 0x04, 0x31, 0x7c, 0x7d, 0xb5, 0x4b, 0xbb, 0x54, 0x3c, 0xd6, 0xf8, 0x93, + 0x94, 0x96, 0xbb, 0x94, 0x76, 0x7b, 0xb8, 0x26, 0xde, 0x3a, 0x83, 0x27, 0x35, 0x46, 0x7c, 0x1c, + 0x31, 0xd7, 0xef, 0x4b, 0xc0, 0xda, 0x2c, 0xc0, 0x0d, 0x46, 0x52, 0x55, 0x9a, 0x55, 0x79, 0x83, + 0xd0, 0x65, 0x84, 0x26, 0x1e, 0xd7, 0xe2, 0x88, 0x9c, 0xd8, 0xa9, 0x8c, 0x36, 0x56, 0x9d, 0x71, + 0x7d, 0x12, 0xd0, 0x9a, 0xf8, 0x1b, 0x8b, 0x2a, 0x14, 0xd0, 0x23, 0x4c, 0xba, 0x87, 0x0c, 0x7b, + 0xfb, 0x94, 0xe1, 0x66, 0x9f, 0x5b, 0x42, 0xdb, 0x90, 0xa5, 0xe2, 0x49, 0x57, 0x36, 0x95, 0xad, + 0xe2, 0xcd, 0xb5, 0xea, 0x91, 0xac, 0xab, 0x13, 0xa8, 0x25, 0x81, 0xe8, 0x0a, 0x64, 0x9f, 0x0a, + 0x43, 0x7a, 0x6a, 0x53, 0xd9, 0x5a, 0xda, 0x29, 0xbe, 0x7e, 0x71, 0x03, 0x24, 0xab, 0x81, 0x0f, + 0x2c, 0xa9, 0xad, 0x7c, 0xaf, 0xc0, 0x62, 0x03, 0xf7, 0x69, 0x44, 0x18, 0x2a, 0x43, 0xbe, 0x1f, + 0xd2, 0x3e, 0x8d, 0xdc, 0x9e, 0x43, 0x3c, 0xe1, 0x4b, 0xb5, 0x20, 0x11, 0x99, 0x1e, 0xfa, 0x1f, + 0x2c, 0x79, 0x31, 0x96, 0x86, 0xd2, 0xae, 0xfe, 0xfa, 0xc5, 0x8d, 0x55, 0x69, 0xb7, 0xee, 0x79, + 0x21, 0x8e, 0xa2, 0x36, 0x0b, 0x49, 0xd0, 0xb5, 0x26, 0x50, 0xf4, 0x09, 0x64, 0x5d, 0x9f, 0x0e, + 0x02, 0xa6, 0xa7, 0x37, 0xd3, 0x5b, 0xf9, 0x49, 0xfc, 0xbc, 0x4d, 0x55, 0xd9, 0xa6, 0xea, 0x2e, + 0x25, 0xc1, 0xce, 0xd2, 0xcb, 0x37, 0xe5, 0x85, 0x1f, 0xfe, 0xfa, 0xf1, 0xaa, 0x62, 0x49, 0x4e, + 0xe5, 0xe7, 0x0c, 0xe4, 0x5a, 0x32, 0x08, 0x54, 0x84, 0xd4, 0x38, 0xb4, 0x14, 0xf1, 0xd0, 0x7f, + 0x20, 0xe7, 0xe3, 0x28, 0x72, 0xbb, 0x38, 0xd2, 0x53, 0xc2, 0xf8, 0x6a, 0x35, 0xee, 0x48, 0x35, + 0xe9, 0x48, 0xb5, 0x1e, 0x8c, 0xac, 0x31, 0x0a, 0xdd, 0x86, 0x6c, 0xc4, 0x5c, 0x36, 0x88, 0xf4, + 0xb4, 0x28, 0xe6, 0xc6, 0x4c, 0x31, 0x13, 0x57, 0x6d, 0x01, 0xb2, 0x24, 0x18, 0xdd, 0x03, 0xf4, + 0x84, 0x04, 0x6e, 0xcf, 0x61, 0x6e, 0xaf, 0x37, 0x72, 0x42, 0x1c, 0x0d, 0x7a, 0x4c, 0x57, 0x37, + 0x95, 0xad, 0xfc, 0xcd, 0xf5, 0x19, 0x13, 0x36, 0x87, 0x58, 0x02, 0x61, 0x69, 0x82, 0x35, 0x25, + 0x41, 0x75, 0xc8, 0x47, 0x83, 0x8e, 0x4f, 0x98, 0xc3, 0xc7, 0x4c, 0xcf, 0x48, 0x13, 0xb3, 0x51, + 0xdb, 0xc9, 0x0c, 0xee, 0xa8, 0xcf, 0xff, 0x28, 0x2b, 0x16, 0xc4, 0x24, 0x2e, 0x46, 0xf7, 0x41, + 0x93, 0xd5, 0x75, 0x70, 0xe0, 0xc5, 0x76, 0xb2, 0xa7, 0xb4, 0x53, 0x94, 0x4c, 0x23, 0xf0, 0x84, + 0x2d, 0x13, 0x0a, 0x8c, 0x32, 0xb7, 0xe7, 0x48, 0xb9, 0xbe, 0xf8, 0x01, 0x3d, 0x5a, 0x16, 0xd4, + 0x64, 0x80, 0x1e, 0xc0, 0x99, 0x21, 0x65, 0x24, 0xe8, 0x3a, 0x11, 0x73, 0x43, 0x99, 0x5f, 0xee, + 0x94, 0x71, 0xad, 0xc4, 0xd4, 0x36, 0x67, 0x8a, 0xc0, 0xee, 0x81, 0x14, 0x4d, 0x72, 0x5c, 0x3a, + 0xa5, 0xad, 0x42, 0x4c, 0x4c, 0x52, 0x5c, 0xe7, 0x43, 0xc2, 0x5c, 0xcf, 0x65, 0xae, 0x0e, 0x7c, + 0x6c, 0xad, 0xf1, 0x3b, 0x5a, 0x85, 0x0c, 0x23, 0xac, 0x87, 0xf5, 0xbc, 0x50, 0xc4, 0x2f, 0x48, + 0x87, 0xc5, 0x68, 0xe0, 0xfb, 0x6e, 0x38, 0xd2, 0x97, 0x85, 0x3c, 0x79, 0x45, 0xff, 0x85, 0x5c, + 0xbc, 0x11, 0x38, 0xd4, 0x0b, 0x27, 0xac, 0xc0, 0x18, 0x59, 0xf9, 0x55, 0x81, 0xfc, 0xf4, 0x0c, + 0x5c, 0x83, 0xa5, 0x11, 0x8e, 0x9c, 0x03, 0xb1, 0x14, 0xca, 0xb1, 0x0d, 0x35, 0x03, 0x66, 0xe5, + 0x46, 0x38, 0xda, 0xe5, 0x7a, 0x74, 0x0b, 0x0a, 0x6e, 0x27, 0x62, 0x2e, 0x09, 0x24, 0x21, 0x35, + 0x97, 0xb0, 0x2c, 0x41, 0x31, 0xe9, 0xdf, 0x90, 0x0b, 0xa8, 0xc4, 0xa7, 0xe7, 0xe2, 0x17, 0x03, + 0x1a, 0x43, 0xef, 0x00, 0x0a, 0xa8, 0xf3, 0x94, 0xb0, 0x43, 0x67, 0x88, 0x59, 0x42, 0x52, 0xe7, + 0x92, 0x56, 0x02, 0xfa, 0x88, 0xb0, 0xc3, 0x7d, 0xcc, 0x62, 0x72, 0xe5, 0x27, 0x05, 0x54, 0x7e, + 0xfe, 0x9c, 0x7c, 0x7a, 0x54, 0x21, 0x33, 0xa4, 0x0c, 0x9f, 0x7c, 0x72, 0xc4, 0x30, 0x74, 0x07, + 0x16, 0xe3, 0xc3, 0x2c, 0xd2, 0x55, 0x31, 0x92, 0x97, 0x66, 0xd6, 0xec, 0xf8, 0x49, 0x69, 0x25, + 0x8c, 0x23, 0x2d, 0xcf, 0x1c, 0x6d, 0xf9, 0x7d, 0x35, 0x97, 0xd6, 0xd4, 0xca, 0xef, 0x0a, 0x14, + 0xe4, 0xe0, 0xb6, 0xdc, 0xd0, 0xf5, 0x23, 0xf4, 0x18, 0xf2, 0x3e, 0x09, 0xc6, 0x7b, 0xa0, 0x9c, + 0xb4, 0x07, 0x1b, 0x7c, 0x0f, 0xde, 0xbf, 0x29, 0xff, 0x6b, 0x8a, 0x75, 0x9d, 0xfa, 0x84, 0x61, + 0xbf, 0xcf, 0x46, 0x16, 0xf8, 0x24, 0x48, 0x36, 0xc3, 0x07, 0xe4, 0xbb, 0xcf, 0x12, 0x90, 0xd3, + 0xc7, 0x21, 0xa1, 0x9e, 0x28, 0x04, 0xf7, 0x30, 0x3b, 0xce, 0x0d, 0x79, 0x85, 0xec, 0x5c, 0x7e, + 0xff, 0xa6, 0x7c, 0xf1, 0x38, 0x71, 0xe2, 0xe4, 0x5b, 0x3e, 0xed, 0x9a, 0xef, 0x3e, 0x4b, 0x32, + 0x11, 0xfa, 0x8a, 0x0d, 0xcb, 0xfb, 0x62, 0x03, 0x64, 0x66, 0x0d, 0x90, 0x1b, 0x91, 0x78, 0x56, + 0x4e, 0xf2, 0xac, 0x0a, 0xcb, 0xcb, 0x31, 0x4b, 0x5a, 0xfd, 0x2e, 0x19, 0x62, 0x69, 0xf5, 0x0a, + 0x64, 0xbf, 0x1a, 0xd0, 0x70, 0xe0, 0xcf, 0x99, 0x60, 0x71, 0xc7, 0xc4, 0x5a, 0x74, 0x1d, 0x96, + 0xd8, 0x61, 0x88, 0xa3, 0x43, 0xda, 0xf3, 0xfe, 0xe1, 0x3a, 0x9a, 0x00, 0xd0, 0x6d, 0x28, 0x8a, + 0x29, 0x9c, 0x50, 0xd2, 0x73, 0x29, 0x05, 0x8e, 0xb2, 0x13, 0x50, 0xe5, 0x9b, 0x0c, 0x64, 0x65, + 0x5c, 0xc6, 0x07, 0xf6, 0x71, 0xea, 0x3c, 0x9b, 0xee, 0xd9, 0x67, 0x1f, 0xd7, 0x33, 0x75, 0x7e, + 0x4f, 0x8e, 0xf7, 0x20, 0xfd, 0x11, 0x3d, 0x98, 0xaa, 0xb9, 0x7a, 0xfa, 0x9a, 0x67, 0x3e, 0xbc, + 0xe6, 0xd9, 0x53, 0xd4, 0x1c, 0x99, 0xb0, 0xc6, 0x0b, 0x4d, 0x02, 0xc2, 0xc8, 0xe4, 0x02, 0x71, + 0x44, 0xf8, 0xfa, 0xe2, 0x5c, 0x0b, 0xe7, 0x7c, 0x12, 0x98, 0x31, 0x5e, 0x96, 0xc7, 0xe2, 0x68, + 0xb4, 0x05, 0x5a, 0x67, 0x10, 0x06, 0x0e, 0x5f, 0x7d, 0x47, 0x66, 0xc8, 0x8f, 0xd7, 0x9c, 0x55, + 0xe4, 0x72, 0xbe, 0xe2, 0x9f, 0xc7, 0x99, 0xd5, 0x61, 0x43, 0x20, 0xc7, 0x87, 0xcd, 0xb8, 0x41, + 0x21, 0xe6, 0x6c, 0xbd, 0x28, 0x68, 0xeb, 0x1c, 0x94, 0xdc, 0xe5, 0x49, 0x27, 0x62, 0x04, 0xba, + 0x0c, 0xc5, 0x89, 0x33, 0x9e, 0x92, 0xbe, 0x22, 0x38, 0xcb, 0x89, 0x2b, 0x7e, 0xbc, 0xa1, 0xff, + 0xc3, 0x99, 0xa9, 0x31, 0x92, 0x59, 0x69, 0x73, 0xb3, 0x5a, 0x99, 0x8c, 0x8d, 0x48, 0xe7, 0xea, + 0xd7, 0x0a, 0xc0, 0xd4, 0x07, 0xdc, 0x05, 0x38, 0xbf, 0xdf, 0xb4, 0x0d, 0xa7, 0xd9, 0xb2, 0xcd, + 0xe6, 0x9e, 0xf3, 0x70, 0xaf, 0xdd, 0x32, 0x76, 0xcd, 0xbb, 0xa6, 0xd1, 0xd0, 0x16, 0xd0, 0x59, + 0x58, 0x99, 0x56, 0x3e, 0x36, 0xda, 0x9a, 0x82, 0xce, 0xc3, 0xd9, 0x69, 0x61, 0x7d, 0xa7, 0x6d, + 0xd7, 0xcd, 0x3d, 0x2d, 0x85, 0x10, 0x14, 0xa7, 0x15, 0x7b, 0x4d, 0x2d, 0x8d, 0x2e, 0x82, 0x7e, + 0x54, 0xe6, 0x3c, 0x32, 0xed, 0x7b, 0xce, 0xbe, 0x61, 0x37, 0x35, 0xf5, 0xea, 0x2f, 0x0a, 0x14, + 0x8f, 0x7e, 0xd4, 0xa0, 0x32, 0x5c, 0x68, 0x59, 0xcd, 0x56, 0xb3, 0x5d, 0x7f, 0xe0, 0xb4, 0xed, + 0xba, 0xfd, 0xb0, 0x3d, 0x13, 0x53, 0x05, 0x4a, 0xb3, 0x80, 0x86, 0xd1, 0x6a, 0xb6, 0x4d, 0xdb, + 0x69, 0x19, 0x96, 0xd9, 0x6c, 0x68, 0x0a, 0xba, 0x04, 0x1b, 0xb3, 0x98, 0xfd, 0xa6, 0x6d, 0xee, + 0x7d, 0x9a, 0x40, 0x52, 0x68, 0x1d, 0xce, 0xcd, 0x42, 0x5a, 0xf5, 0x76, 0xdb, 0x68, 0xc4, 0x41, + 0xcf, 0xea, 0x2c, 0xe3, 0xbe, 0xb1, 0x6b, 0x1b, 0x0d, 0x4d, 0x9d, 0xc7, 0xbc, 0x5b, 0x37, 0x1f, + 0x18, 0x0d, 0x2d, 0xb3, 0x63, 0xbc, 0x7c, 0x5b, 0x52, 0x5e, 0xbd, 0x2d, 0x29, 0x7f, 0xbe, 0x2d, + 0x29, 0xcf, 0xdf, 0x95, 0x16, 0x5e, 0xbd, 0x2b, 0x2d, 0xfc, 0xf6, 0xae, 0xb4, 0xf0, 0xc5, 0xb5, + 0x2e, 0x61, 0x87, 0x83, 0x4e, 0xf5, 0x80, 0xfa, 0xf2, 0x53, 0x5b, 0xfe, 0xbb, 0x11, 0x79, 0x5f, + 0xd6, 0x9e, 0x89, 0x9f, 0x0f, 0x6c, 0xd4, 0xc7, 0x11, 0xff, 0x6d, 0x90, 0x15, 0x1b, 0x77, 0xeb, + 0xef, 0x00, 0x00, 0x00, 0xff, 0xff, 0x4c, 0x82, 0xde, 0x1e, 0x5c, 0x0c, 0x00, 0x00, } func (m *WeightedVoteOption) Marshal() (dAtA []byte, err error) { @@ -1426,6 +1441,15 @@ func (m *Params) MarshalToSizedBuffer(dAtA []byte) (int, error) { _ = i var l int _ = l + if len(m.MinDepositRatio) > 0 { + i -= len(m.MinDepositRatio) + copy(dAtA[i:], m.MinDepositRatio) + i = encodeVarintGov(dAtA, i, uint64(len(m.MinDepositRatio))) + i-- + dAtA[i] = 0x1 + i-- + dAtA[i] = 0x82 + } if m.BurnVoteVeto { i-- if m.BurnVoteVeto { @@ -1782,6 +1806,10 @@ func (m *Params) Size() (n int) { if m.BurnVoteVeto { n += 2 } + l = len(m.MinDepositRatio) + if l > 0 { + n += 2 + l + sovGov(uint64(l)) + } return n } @@ -3511,6 +3539,38 @@ func (m *Params) Unmarshal(dAtA []byte) error { } } m.BurnVoteVeto = bool(v != 0) + case 16: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field MinDepositRatio", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGov + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGov + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGov + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.MinDepositRatio = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipGov(dAtA[iNdEx:]) diff --git a/x/gov/types/v1/params.go b/x/gov/types/v1/params.go index ef72de653412..1eefbf85ad38 100644 --- a/x/gov/types/v1/params.go +++ b/x/gov/types/v1/params.go @@ -21,9 +21,11 @@ var ( DefaultThreshold = sdk.NewDecWithPrec(5, 1) DefaultVetoThreshold = sdk.NewDecWithPrec(334, 3) DefaultMinInitialDepositRatio = sdk.ZeroDec() - DefaultBurnProposalPrevote = false // set to false to replicate behavior of when this change was made (0.47) - DefaultBurnVoteQuorom = false // set to false to replicate behavior of when this change was made (0.47) - DefaultBurnVoteVeto = true // set to true to replicate behavior of when this change was made (0.47) + DefaultBurnProposalPrevote = false // set to false to replicate behavior of when this change was made (0.47) + DefaultBurnVoteQuorom = false // set to false to replicate behavior of when this change was made (0.47) + DefaultBurnVoteVeto = true // set to true to replicate behavior of when this change was made (0.47) + DefaultMinDepositRatio = sdk.MustNewDecFromStr("0.01") // NOTE: backport from v50 + ) // Deprecated: NewDepositParams creates a new DepositParams object @@ -53,7 +55,7 @@ func NewVotingParams(votingPeriod *time.Duration) VotingParams { // NewParams creates a new Params instance with given values. func NewParams( minDeposit sdk.Coins, maxDepositPeriod, votingPeriod time.Duration, - quorum, threshold, vetoThreshold, minInitialDepositRatio string, burnProposalDeposit, burnVoteQuorum, burnVoteVeto bool, + quorum, threshold, vetoThreshold, minInitialDepositRatio string, burnProposalDeposit, burnVoteQuorum, burnVoteVeto bool, minDepositRatio string, ) Params { return Params{ MinDeposit: minDeposit, @@ -66,6 +68,7 @@ func NewParams( BurnProposalDepositPrevote: burnProposalDeposit, BurnVoteQuorum: burnVoteQuorum, BurnVoteVeto: burnVoteVeto, + MinDepositRatio: minDepositRatio, } } @@ -82,6 +85,7 @@ func DefaultParams() Params { DefaultBurnProposalPrevote, DefaultBurnVoteQuorom, DefaultBurnVoteVeto, + DefaultMinDepositRatio.String(), ) } diff --git a/x/staking/types/tx.pb.go b/x/staking/types/tx.pb.go index 5a96cc98a8e7..c7cd12c07527 100644 --- a/x/staking/types/tx.pb.go +++ b/x/staking/types/tx.pb.go @@ -1240,107 +1240,106 @@ func init() { func init() { proto.RegisterFile("cosmos/staking/v1beta1/tx.proto", fileDescriptor_0926ef28816b35ab) } var fileDescriptor_0926ef28816b35ab = []byte{ - // 1588 bytes of a gzipped FileDescriptorProto + // 1584 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xdc, 0x58, 0x4d, 0x6c, 0xdc, 0xc4, 0x17, 0x8f, 0x37, 0x1f, 0xff, 0x66, 0xfa, 0x4f, 0xd2, 0x38, 0x49, 0xbb, 0x71, 0xc3, 0x6e, 0xe5, 0x96, 0x26, 0x0d, 0x64, 0x97, 0x06, 0xd4, 0x94, 0xa5, 0x6a, 0xc9, 0x36, 0x89, 0x08, 0xb0, 0xa2, 0x72, 0xda, 0x1e, 0x00, 0x69, 0xe5, 0xb5, 0x27, 0x8e, 0x95, 0xf5, 0x78, 0xeb, 0xf1, 0xb6, 0x5d, - 0x4e, 0x15, 0x5c, 0x10, 0x17, 0x7a, 0x28, 0x12, 0xdc, 0x7a, 0x44, 0x42, 0x48, 0x3d, 0xf4, 0xcc, - 0x0d, 0xa9, 0xe2, 0x54, 0x7a, 0x01, 0x71, 0x48, 0x51, 0x2b, 0xd1, 0x9e, 0x7b, 0xe1, 0x8a, 0x3c, - 0x1e, 0x8f, 0x3f, 0xd6, 0xf6, 0xee, 0x86, 0x44, 0x02, 0x2e, 0xf9, 0x98, 0x79, 0xef, 0xcd, 0x7b, - 0xbf, 0xdf, 0x7b, 0x6f, 0xde, 0x18, 0xe4, 0x15, 0x13, 0x1b, 0x26, 0x2e, 0x62, 0x5b, 0xde, 0xd6, - 0x91, 0x56, 0xbc, 0x7e, 0xba, 0x06, 0x6d, 0xf9, 0x74, 0xd1, 0xbe, 0x59, 0x68, 0x58, 0xa6, 0x6d, - 0xf2, 0x87, 0x5d, 0x81, 0x02, 0x15, 0x28, 0x50, 0x01, 0x61, 0x5a, 0x33, 0x4d, 0xad, 0x0e, 0x8b, - 0x44, 0xaa, 0xd6, 0xdc, 0x2c, 0xca, 0xa8, 0xe5, 0xaa, 0x08, 0xf9, 0xe8, 0x96, 0xad, 0x1b, 0x10, - 0xdb, 0xb2, 0xd1, 0xa0, 0x02, 0x93, 0x9a, 0xa9, 0x99, 0xe4, 0xcf, 0xa2, 0xf3, 0x17, 0x5d, 0x9d, - 0x76, 0x4f, 0xaa, 0xba, 0x1b, 0xf4, 0x58, 0x77, 0x2b, 0x47, 0xbd, 0xac, 0xc9, 0x18, 0x32, 0x17, - 0x15, 0x53, 0x47, 0x74, 0xff, 0x44, 0x42, 0x14, 0x9e, 0xd3, 0xae, 0xd4, 0x11, 0x2a, 0x65, 0x60, - 0x47, 0xc2, 0xf9, 0x45, 0x37, 0xc6, 0x65, 0x43, 0x47, 0x66, 0x91, 0xfc, 0x74, 0x97, 0xc4, 0x3b, - 0x83, 0x80, 0xaf, 0x60, 0xed, 0xa2, 0x05, 0x65, 0x1b, 0x5e, 0x95, 0xeb, 0xba, 0x2a, 0xdb, 0xa6, - 0xc5, 0x5f, 0x02, 0x07, 0x55, 0x88, 0x15, 0x4b, 0x6f, 0xd8, 0xba, 0x89, 0xb2, 0xdc, 0x31, 0x6e, - 0xee, 0xe0, 0xe2, 0xf1, 0x42, 0x3c, 0x46, 0x85, 0x15, 0x5f, 0xb4, 0x3c, 0xfc, 0x60, 0x27, 0xdf, - 0xf7, 0xed, 0xb3, 0x7b, 0xf3, 0x9c, 0x14, 0x34, 0xc1, 0x4b, 0x00, 0x28, 0xa6, 0x61, 0xe8, 0x18, - 0x3b, 0x06, 0x33, 0xc4, 0xe0, 0x6c, 0x92, 0xc1, 0x8b, 0x4c, 0x52, 0x92, 0x6d, 0x88, 0x83, 0x46, - 0x03, 0x56, 0x78, 0x04, 0x26, 0x0c, 0x1d, 0x55, 0x31, 0xac, 0x6f, 0x56, 0x55, 0x58, 0x87, 0x9a, - 0x4c, 0xbc, 0xed, 0x3f, 0xc6, 0xcd, 0x0d, 0x97, 0xcf, 0x3b, 0x3a, 0xbf, 0xed, 0xe4, 0x4f, 0x6a, - 0xba, 0xbd, 0xd5, 0xac, 0x15, 0x14, 0xd3, 0xa0, 0x60, 0xd3, 0x5f, 0x0b, 0x58, 0xdd, 0x2e, 0xda, - 0xad, 0x06, 0xc4, 0x85, 0x75, 0x64, 0x3f, 0xba, 0xbf, 0x00, 0xa8, 0x37, 0xeb, 0xc8, 0xce, 0x72, - 0xd2, 0xb8, 0xa1, 0xa3, 0x0d, 0x58, 0xdf, 0x5c, 0x61, 0x86, 0xf9, 0x55, 0x30, 0x4e, 0x8f, 0x31, - 0xad, 0xaa, 0xac, 0xaa, 0x16, 0xc4, 0x38, 0x3b, 0x40, 0x4e, 0xcb, 0x3e, 0xba, 0xbf, 0x30, 0x49, - 0xf5, 0x97, 0xdd, 0x9d, 0x0d, 0xdb, 0xd2, 0x91, 0x26, 0x1d, 0x62, 0x2a, 0x74, 0xdd, 0x31, 0x73, - 0xdd, 0x43, 0x9a, 0x99, 0x19, 0xec, 0x64, 0x86, 0xa9, 0x78, 0x66, 0xd6, 0xc0, 0x50, 0xa3, 0x59, - 0xdb, 0x86, 0xad, 0xec, 0x10, 0x41, 0x73, 0xb2, 0xe0, 0xe6, 0x63, 0xc1, 0xcb, 0xc7, 0xc2, 0x32, - 0x6a, 0x95, 0xb3, 0x3f, 0xf9, 0x16, 0x15, 0xab, 0xd5, 0xb0, 0xcd, 0xc2, 0xa5, 0x66, 0xed, 0x3d, - 0xd8, 0x92, 0xa8, 0x36, 0x5f, 0x02, 0x83, 0xd7, 0xe5, 0x7a, 0x13, 0x66, 0xff, 0x47, 0xcc, 0x4c, - 0x7b, 0xa4, 0x38, 0x49, 0x18, 0x60, 0x44, 0x0f, 0x71, 0xeb, 0xaa, 0x94, 0xae, 0x7e, 0x7e, 0x37, - 0xdf, 0xf7, 0xfc, 0x6e, 0xbe, 0xef, 0xd3, 0x67, 0xf7, 0xe6, 0xdb, 0xc1, 0x21, 0xab, 0x6d, 0xb1, - 0x7e, 0xf1, 0xec, 0xde, 0xfc, 0x4b, 0x01, 0x0e, 0xda, 0xf3, 0x4f, 0x9c, 0x01, 0x42, 0xfb, 0xaa, - 0x04, 0x71, 0xc3, 0x44, 0x18, 0x8a, 0x3f, 0xf4, 0x83, 0x43, 0x15, 0xac, 0xad, 0xaa, 0xba, 0xbd, - 0x9f, 0x29, 0x1b, 0xcb, 0x53, 0xa6, 0x67, 0x9e, 0x64, 0x30, 0xe6, 0xe7, 0x6c, 0xd5, 0x92, 0x6d, - 0x48, 0x33, 0xf4, 0x6c, 0x97, 0xd9, 0xb9, 0x02, 0x95, 0x40, 0x76, 0xae, 0x40, 0x45, 0x1a, 0x55, - 0x42, 0x05, 0x92, 0x54, 0x08, 0x03, 0xfb, 0x54, 0x08, 0xa5, 0xf3, 0x21, 0xda, 0x63, 0x09, 0x3e, - 0x1a, 0x26, 0x38, 0xc4, 0x95, 0x28, 0x80, 0x6c, 0x74, 0x8d, 0x91, 0x7b, 0x27, 0x03, 0x0e, 0x56, - 0xb0, 0x46, 0x4f, 0x83, 0xf1, 0x45, 0xc7, 0xed, 0x4d, 0xd1, 0xf5, 0x4e, 0xe6, 0x39, 0x30, 0x24, - 0x1b, 0x66, 0x13, 0xd9, 0x84, 0xc3, 0x6e, 0xab, 0x85, 0xea, 0x94, 0xde, 0x4c, 0x2f, 0x17, 0x07, - 0xb7, 0xc3, 0x61, 0xdc, 0x3c, 0x18, 0xc4, 0x29, 0x30, 0x11, 0xf8, 0x97, 0xa1, 0xf5, 0x67, 0x86, - 0xf4, 0xef, 0x32, 0xd4, 0x74, 0x24, 0x41, 0x75, 0x8f, 0x41, 0x7b, 0x1f, 0x4c, 0xf9, 0xa0, 0x61, - 0x4b, 0xe9, 0x1a, 0xb8, 0x09, 0xa6, 0xb6, 0x61, 0x29, 0xb1, 0xd6, 0x54, 0x6c, 0x33, 0x6b, 0xfd, - 0x5d, 0x5b, 0x5b, 0xc1, 0x76, 0x3b, 0x13, 0x03, 0xbb, 0x60, 0xe2, 0xed, 0xce, 0x4c, 0x44, 0x5a, - 0x54, 0x04, 0x62, 0xb1, 0x41, 0x5a, 0x54, 0x64, 0xd5, 0xe3, 0x85, 0x97, 0x48, 0xd1, 0x37, 0xea, - 0xd0, 0xa9, 0x97, 0xaa, 0x33, 0x18, 0xd0, 0x8e, 0x24, 0xb4, 0x75, 0xe9, 0xcb, 0xde, 0xd4, 0x50, - 0x1e, 0x71, 0xfc, 0xbc, 0xfd, 0x38, 0xcf, 0xb9, 0xbe, 0x8e, 0xfa, 0x16, 0x1c, 0x19, 0xf1, 0xeb, - 0x0c, 0x18, 0xa9, 0x60, 0xed, 0x0a, 0x52, 0xff, 0x8b, 0xb5, 0xf1, 0x56, 0x67, 0x46, 0xb2, 0x61, - 0x46, 0x7c, 0x20, 0xc4, 0x6d, 0x30, 0x15, 0x5a, 0xd8, 0x57, 0x1e, 0x1e, 0x67, 0xc0, 0x8c, 0x73, - 0x3b, 0xc9, 0x48, 0x81, 0xf5, 0x2b, 0xa8, 0x66, 0x22, 0x55, 0x47, 0x5a, 0xa7, 0x39, 0xe1, 0xdf, - 0x49, 0x0b, 0x3f, 0x0b, 0xc6, 0x14, 0xe7, 0x1a, 0x76, 0xe0, 0xdb, 0x82, 0xba, 0xb6, 0xe5, 0xd6, - 0x5b, 0xbf, 0x34, 0xea, 0x2d, 0xbf, 0x43, 0x56, 0x4b, 0xef, 0x76, 0xe6, 0x6f, 0x36, 0x72, 0xe9, - 0x27, 0x01, 0x28, 0x9e, 0x04, 0x27, 0xd2, 0xf6, 0x59, 0xf7, 0xfb, 0x91, 0x03, 0x63, 0x0e, 0xef, - 0x0d, 0x55, 0xb6, 0xe1, 0x25, 0xd9, 0x92, 0x0d, 0xcc, 0x9f, 0x01, 0xc3, 0x72, 0xd3, 0xde, 0x32, - 0x2d, 0xdd, 0x6e, 0x75, 0x04, 0xdd, 0x17, 0xe5, 0x97, 0xc1, 0x50, 0x83, 0x58, 0xa0, 0xc3, 0x69, - 0x2e, 0x69, 0x74, 0x70, 0xcf, 0x09, 0x61, 0xe5, 0x2a, 0x96, 0x96, 0x9c, 0xd0, 0x7d, 0x93, 0x4e, - 0xc8, 0x27, 0x02, 0x21, 0xdf, 0x64, 0x73, 0x7b, 0xc4, 0x67, 0x71, 0x1a, 0x1c, 0x89, 0x2c, 0xb1, - 0x10, 0xbf, 0xe1, 0x48, 0x83, 0x77, 0x51, 0xf0, 0xa7, 0x9d, 0x0b, 0x71, 0xb9, 0xe1, 0x46, 0xcb, - 0xbf, 0xd8, 0xc9, 0x8f, 0xb6, 0x64, 0xa3, 0x5e, 0x12, 0xe9, 0x86, 0xd8, 0x9e, 0x15, 0xa5, 0x72, - 0xf2, 0xd5, 0x3d, 0x9b, 0xe8, 0x73, 0xd8, 0x09, 0x3a, 0xa5, 0x45, 0x56, 0x99, 0xe7, 0xbf, 0x64, - 0xc0, 0x78, 0x05, 0x6b, 0x97, 0xcd, 0x6d, 0x88, 0xf4, 0x4f, 0xe0, 0xc6, 0x96, 0x6c, 0x41, 0xcc, - 0xaf, 0x27, 0xd7, 0xc6, 0xcc, 0x8b, 0x9d, 0x7c, 0xd6, 0x75, 0xbc, 0x4d, 0x44, 0x8c, 0xa9, 0x8f, - 0xf5, 0xe4, 0xfa, 0x08, 0x98, 0x6a, 0x13, 0x89, 0x41, 0x83, 0x5f, 0xea, 0xbe, 0x46, 0x06, 0x1c, - 0xde, 0x59, 0x79, 0x2c, 0x82, 0x29, 0x9b, 0x06, 0xa8, 0x56, 0xb1, 0x13, 0x62, 0xd5, 0xbc, 0x81, - 0xa0, 0xe5, 0xce, 0x5e, 0xd2, 0x04, 0xdb, 0x24, 0xe1, 0x7f, 0xe0, 0x6c, 0x95, 0x2e, 0x74, 0xae, - 0x94, 0x99, 0x70, 0xa5, 0x84, 0x31, 0x14, 0x2f, 0x83, 0xe9, 0xb6, 0x45, 0xd6, 0xf1, 0xfc, 0x50, - 0xb8, 0x9e, 0x42, 0x11, 0xff, 0xe0, 0xc8, 0x54, 0xe6, 0x5c, 0x66, 0xd0, 0x20, 0xc6, 0xf1, 0x9a, - 0x69, 0xed, 0x3d, 0x6d, 0xbe, 0x83, 0x99, 0x9e, 0x1c, 0x2c, 0xad, 0x75, 0xc6, 0xed, 0x78, 0x18, - 0xb7, 0xd8, 0x58, 0xc4, 0x8f, 0xc0, 0xb1, 0xa4, 0xbd, 0xbf, 0x8f, 0xe2, 0xcf, 0x1c, 0xc8, 0x39, - 0xe4, 0x58, 0x32, 0xc2, 0x9b, 0xd0, 0x0a, 0x91, 0x24, 0x41, 0xc5, 0xb4, 0x54, 0x7e, 0x09, 0x64, - 0xbd, 0xb4, 0xa0, 0x29, 0x63, 0x91, 0x8d, 0xaa, 0xae, 0x92, 0xd3, 0x06, 0x24, 0x96, 0x53, 0x01, - 0xb5, 0x75, 0x95, 0x3f, 0x0c, 0x86, 0x30, 0x44, 0x2a, 0xb4, 0xdc, 0x2c, 0x97, 0xe8, 0x7f, 0xfc, - 0x51, 0x30, 0x8c, 0xe0, 0x0d, 0x9a, 0x78, 0x64, 0x98, 0x92, 0x0e, 0x20, 0x78, 0xc3, 0xcd, 0xb6, - 0xe5, 0x20, 0x6a, 0x54, 0xc3, 0x81, 0xea, 0x54, 0x24, 0xc5, 0x92, 0x1d, 0x16, 0xe7, 0xc0, 0xc9, - 0x74, 0x09, 0x56, 0xf3, 0xdf, 0xbb, 0x39, 0xb4, 0xa2, 0x63, 0xb9, 0x56, 0x87, 0xfb, 0x56, 0xfa, - 0xbb, 0x48, 0x85, 0x58, 0x97, 0x44, 0x91, 0xa4, 0x42, 0xec, 0x1e, 0x8b, 0xe9, 0x3b, 0x8e, 0x74, - 0xe7, 0x55, 0xb4, 0xbf, 0x21, 0xad, 0x76, 0x0e, 0x49, 0x8c, 0xbc, 0xa9, 0x62, 0x3c, 0x12, 0x1b, - 0x20, 0x9f, 0xb0, 0xc5, 0x72, 0xbb, 0xb2, 0x9b, 0x99, 0xe8, 0x80, 0x37, 0x13, 0xb5, 0x8d, 0x43, - 0xcf, 0x39, 0xf2, 0x1a, 0x67, 0x17, 0x40, 0xd9, 0x44, 0xea, 0x3f, 0xb3, 0xcd, 0x47, 0xde, 0xad, - 0xb1, 0x18, 0x47, 0xde, 0xad, 0xa1, 0xa8, 0xe8, 0xbb, 0x35, 0xb4, 0xe6, 0xa1, 0xba, 0x78, 0x67, - 0x04, 0xf4, 0x57, 0xb0, 0xc6, 0x5f, 0x03, 0x63, 0xd1, 0xaf, 0x69, 0xf3, 0x49, 0xa3, 0x44, 0xfb, - 0x37, 0x0e, 0x61, 0xb1, 0x7b, 0x59, 0x46, 0xe8, 0x36, 0x18, 0x09, 0x7f, 0x0b, 0x99, 0x4b, 0x31, - 0x12, 0x92, 0x14, 0x5e, 0xeb, 0x56, 0x92, 0x1d, 0xf6, 0x31, 0x38, 0xc0, 0xde, 0xe6, 0xc7, 0x53, - 0xb4, 0x3d, 0x21, 0xe1, 0x95, 0x2e, 0x84, 0x98, 0xf5, 0x6b, 0x60, 0x2c, 0xfa, 0x96, 0x4d, 0x43, - 0x2f, 0x22, 0x9b, 0x8a, 0x5e, 0xd2, 0x53, 0xad, 0x06, 0x40, 0xe0, 0x49, 0xf5, 0x72, 0x8a, 0x05, - 0x5f, 0x4c, 0x58, 0xe8, 0x4a, 0x8c, 0x9d, 0xf1, 0x25, 0x07, 0xa6, 0x93, 0xdf, 0x0b, 0x6f, 0xa4, - 0x71, 0x9e, 0xa4, 0x25, 0x9c, 0xdb, 0x8d, 0x16, 0xf3, 0x68, 0x0b, 0xfc, 0x3f, 0x34, 0x36, 0xcf, - 0xa6, 0x05, 0x14, 0x10, 0x14, 0x8a, 0x5d, 0x0a, 0x06, 0x29, 0x8d, 0x4e, 0xaf, 0xf3, 0xa9, 0xe8, - 0x85, 0x64, 0x53, 0x29, 0x4d, 0x18, 0x3d, 0x79, 0x04, 0x46, 0x23, 0x8d, 0xfa, 0x54, 0x8a, 0x95, - 0xb0, 0xa8, 0x70, 0xba, 0x6b, 0x51, 0x76, 0xde, 0x67, 0x1c, 0x98, 0x8a, 0x9f, 0x9b, 0xd2, 0xea, - 0x2b, 0x56, 0x43, 0x38, 0xdb, 0xab, 0x06, 0xf3, 0xe2, 0x2b, 0x0e, 0x1c, 0x4d, 0x9b, 0x3b, 0xce, - 0xa4, 0x05, 0x96, 0xac, 0x27, 0x9c, 0xdf, 0x9d, 0x5e, 0x08, 0x9d, 0xf8, 0x89, 0x20, 0x0d, 0x9d, - 0x58, 0x8d, 0x54, 0x74, 0x52, 0xaf, 0x71, 0xfe, 0x16, 0x07, 0x26, 0x63, 0xef, 0xf0, 0xb4, 0x84, - 0x8e, 0x53, 0x10, 0x96, 0x7a, 0x54, 0x08, 0xf6, 0xe9, 0xf0, 0x2d, 0x99, 0xd6, 0xa7, 0x43, 0x92, - 0xa9, 0x7d, 0x3a, 0xf6, 0x3e, 0x12, 0x06, 0x6f, 0x39, 0x6f, 0xd3, 0xf2, 0xda, 0x83, 0x27, 0x39, - 0xee, 0xe1, 0x93, 0x1c, 0xf7, 0xfb, 0x93, 0x1c, 0x77, 0xfb, 0x69, 0xae, 0xef, 0xe1, 0xd3, 0x5c, - 0xdf, 0xaf, 0x4f, 0x73, 0x7d, 0x1f, 0xbe, 0x9a, 0xfa, 0x3d, 0xd8, 0x7f, 0xf8, 0x91, 0x2f, 0xc3, - 0xb5, 0x21, 0x32, 0x13, 0xbc, 0xfe, 0x57, 0x00, 0x00, 0x00, 0xff, 0xff, 0x74, 0x7c, 0x2c, 0xaa, - 0x49, 0x1b, 0x00, 0x00, + 0x4e, 0x15, 0x5c, 0x10, 0x97, 0xf6, 0x50, 0x24, 0x8e, 0x3d, 0x22, 0x21, 0xa4, 0x1e, 0x7a, 0xe6, + 0x86, 0x54, 0x71, 0x2a, 0xbd, 0x80, 0x38, 0xa4, 0xa8, 0x95, 0x68, 0xcf, 0xbd, 0x70, 0x45, 0x1e, + 0x8f, 0xc7, 0x1f, 0x6b, 0x7b, 0x77, 0x43, 0x22, 0x01, 0x97, 0x7c, 0xcc, 0xbc, 0xf7, 0xe6, 0xbd, + 0xdf, 0xef, 0xbd, 0x37, 0x6f, 0x0c, 0xf2, 0x8a, 0x89, 0x0d, 0x13, 0x17, 0xb1, 0x2d, 0x6f, 0xeb, + 0x48, 0x2b, 0x5e, 0x3f, 0x5d, 0x83, 0xb6, 0x7c, 0xba, 0x68, 0xdf, 0x2c, 0x34, 0x2c, 0xd3, 0x36, + 0xf9, 0xc3, 0xae, 0x40, 0x81, 0x0a, 0x14, 0xa8, 0x80, 0x30, 0xad, 0x99, 0xa6, 0x56, 0x87, 0x45, + 0x22, 0x55, 0x6b, 0x6e, 0x16, 0x65, 0xd4, 0x72, 0x55, 0x84, 0x7c, 0x74, 0xcb, 0xd6, 0x0d, 0x88, + 0x6d, 0xd9, 0x68, 0x50, 0x81, 0x49, 0xcd, 0xd4, 0x4c, 0xf2, 0x67, 0xd1, 0xf9, 0x8b, 0xae, 0x4e, + 0xbb, 0x27, 0x55, 0xdd, 0x0d, 0x7a, 0xac, 0xbb, 0x95, 0xa3, 0x5e, 0xd6, 0x64, 0x0c, 0x99, 0x8b, + 0x8a, 0xa9, 0x23, 0xba, 0x7f, 0x22, 0x21, 0x0a, 0xcf, 0x69, 0x57, 0xea, 0x08, 0x95, 0x32, 0xb0, + 0x23, 0xe1, 0xfc, 0xa2, 0x1b, 0xe3, 0xb2, 0xa1, 0x23, 0xb3, 0x48, 0x7e, 0xba, 0x4b, 0xe2, 0xdd, + 0x41, 0xc0, 0x57, 0xb0, 0x76, 0xd1, 0x82, 0xb2, 0x0d, 0xaf, 0xca, 0x75, 0x5d, 0x95, 0x6d, 0xd3, + 0xe2, 0x2f, 0x81, 0x83, 0x2a, 0xc4, 0x8a, 0xa5, 0x37, 0x6c, 0xdd, 0x44, 0x59, 0xee, 0x18, 0x37, + 0x77, 0x70, 0xf1, 0x78, 0x21, 0x1e, 0xa3, 0xc2, 0x8a, 0x2f, 0x5a, 0x1e, 0x7e, 0xb8, 0x93, 0xef, + 0xfb, 0xf6, 0xf9, 0xfd, 0x79, 0x4e, 0x0a, 0x9a, 0xe0, 0x25, 0x00, 0x14, 0xd3, 0x30, 0x74, 0x8c, + 0x1d, 0x83, 0x19, 0x62, 0x70, 0x36, 0xc9, 0xe0, 0x45, 0x26, 0x29, 0xc9, 0x36, 0xc4, 0x41, 0xa3, + 0x01, 0x2b, 0x3c, 0x02, 0x13, 0x86, 0x8e, 0xaa, 0x18, 0xd6, 0x37, 0xab, 0x2a, 0xac, 0x43, 0x4d, + 0x26, 0xde, 0xf6, 0x1f, 0xe3, 0xe6, 0x86, 0xcb, 0xe7, 0x1d, 0x9d, 0xdf, 0x76, 0xf2, 0x27, 0x35, + 0xdd, 0xde, 0x6a, 0xd6, 0x0a, 0x8a, 0x69, 0x50, 0xb0, 0xe9, 0xaf, 0x05, 0xac, 0x6e, 0x17, 0xed, + 0x56, 0x03, 0xe2, 0xc2, 0x3a, 0xb2, 0x1f, 0x3f, 0x58, 0x00, 0xd4, 0x9b, 0x75, 0x64, 0x67, 0x39, + 0x69, 0xdc, 0xd0, 0xd1, 0x06, 0xac, 0x6f, 0xae, 0x30, 0xc3, 0xfc, 0x2a, 0x18, 0xa7, 0xc7, 0x98, + 0x56, 0x55, 0x56, 0x55, 0x0b, 0x62, 0x9c, 0x1d, 0x20, 0xa7, 0x65, 0x1f, 0x3f, 0x58, 0x98, 0xa4, + 0xfa, 0xcb, 0xee, 0xce, 0x86, 0x6d, 0xe9, 0x48, 0x93, 0x0e, 0x31, 0x15, 0xba, 0xee, 0x98, 0xb9, + 0xee, 0x21, 0xcd, 0xcc, 0x0c, 0x76, 0x32, 0xc3, 0x54, 0x3c, 0x33, 0x6b, 0x60, 0xa8, 0xd1, 0xac, + 0x6d, 0xc3, 0x56, 0x76, 0x88, 0xa0, 0x39, 0x59, 0x70, 0xf3, 0xb1, 0xe0, 0xe5, 0x63, 0x61, 0x19, + 0xb5, 0xca, 0xd9, 0x9f, 0x7c, 0x8b, 0x8a, 0xd5, 0x6a, 0xd8, 0x66, 0xe1, 0x52, 0xb3, 0xf6, 0x01, + 0x6c, 0x49, 0x54, 0x9b, 0x2f, 0x81, 0xc1, 0xeb, 0x72, 0xbd, 0x09, 0xb3, 0xff, 0x23, 0x66, 0xa6, + 0x3d, 0x52, 0x9c, 0x24, 0x0c, 0x30, 0xa2, 0x87, 0xb8, 0x75, 0x55, 0x4a, 0x57, 0xbf, 0xbc, 0x97, + 0xef, 0x7b, 0x71, 0x2f, 0xdf, 0xf7, 0xf9, 0xf3, 0xfb, 0xf3, 0xed, 0xe0, 0x90, 0xd5, 0xb6, 0x58, + 0xbf, 0x7a, 0x7e, 0x7f, 0xfe, 0x95, 0x00, 0x07, 0xed, 0xf9, 0x27, 0xce, 0x00, 0xa1, 0x7d, 0x55, + 0x82, 0xb8, 0x61, 0x22, 0x0c, 0xc5, 0x1f, 0xfa, 0xc1, 0xa1, 0x0a, 0xd6, 0x56, 0x55, 0xdd, 0xde, + 0xcf, 0x94, 0x8d, 0xe5, 0x29, 0xd3, 0x33, 0x4f, 0x32, 0x18, 0xf3, 0x73, 0xb6, 0x6a, 0xc9, 0x36, + 0xa4, 0x19, 0x7a, 0xb6, 0xcb, 0xec, 0x5c, 0x81, 0x4a, 0x20, 0x3b, 0x57, 0xa0, 0x22, 0x8d, 0x2a, + 0xa1, 0x02, 0x49, 0x2a, 0x84, 0x81, 0x7d, 0x2a, 0x84, 0xd2, 0xf9, 0x10, 0xed, 0xb1, 0x04, 0x1f, + 0x0d, 0x13, 0x1c, 0xe2, 0x4a, 0x14, 0x40, 0x36, 0xba, 0xc6, 0xc8, 0xbd, 0x9b, 0x01, 0x07, 0x2b, + 0x58, 0xa3, 0xa7, 0xc1, 0xf8, 0xa2, 0xe3, 0xf6, 0xa6, 0xe8, 0x7a, 0x27, 0xf3, 0x1c, 0x18, 0x92, + 0x0d, 0xb3, 0x89, 0x6c, 0xc2, 0x61, 0xb7, 0xd5, 0x42, 0x75, 0x4a, 0x6f, 0xa7, 0x97, 0x8b, 0x83, + 0xdb, 0xe1, 0x30, 0x6e, 0x1e, 0x0c, 0xe2, 0x14, 0x98, 0x08, 0xfc, 0xcb, 0xd0, 0xfa, 0x33, 0x43, + 0xfa, 0x77, 0x19, 0x6a, 0x3a, 0x92, 0xa0, 0xba, 0xc7, 0xa0, 0x7d, 0x08, 0xa6, 0x7c, 0xd0, 0xb0, + 0xa5, 0x74, 0x0d, 0xdc, 0x04, 0x53, 0xdb, 0xb0, 0x94, 0x58, 0x6b, 0x2a, 0xb6, 0x99, 0xb5, 0xfe, + 0xae, 0xad, 0xad, 0x60, 0xbb, 0x9d, 0x89, 0x81, 0x5d, 0x30, 0xf1, 0x6e, 0x67, 0x26, 0x22, 0x2d, + 0x2a, 0x02, 0xb1, 0xd8, 0x20, 0x2d, 0x2a, 0xb2, 0xea, 0xf1, 0xc2, 0x4b, 0xa4, 0xe8, 0x1b, 0x75, + 0xe8, 0xd4, 0x4b, 0xd5, 0x19, 0x0c, 0x68, 0x47, 0x12, 0xda, 0xba, 0xf4, 0x65, 0x6f, 0x6a, 0x28, + 0x8f, 0x38, 0x7e, 0xde, 0x79, 0x92, 0xe7, 0x5c, 0x5f, 0x47, 0x7d, 0x0b, 0x8e, 0x8c, 0xf8, 0x4d, + 0x06, 0x8c, 0x54, 0xb0, 0x76, 0x05, 0xa9, 0xff, 0xc5, 0xda, 0x78, 0xa7, 0x33, 0x23, 0xd9, 0x30, + 0x23, 0x3e, 0x10, 0xe2, 0x36, 0x98, 0x0a, 0x2d, 0xec, 0x2b, 0x0f, 0x4f, 0x32, 0x60, 0xc6, 0xb9, + 0x9d, 0x64, 0xa4, 0xc0, 0xfa, 0x15, 0x54, 0x33, 0x91, 0xaa, 0x23, 0xad, 0xd3, 0x9c, 0xf0, 0xef, + 0xa4, 0x85, 0x9f, 0x05, 0x63, 0x8a, 0x73, 0x0d, 0x3b, 0xf0, 0x6d, 0x41, 0x5d, 0xdb, 0x72, 0xeb, + 0xad, 0x5f, 0x1a, 0xf5, 0x96, 0xdf, 0x23, 0xab, 0xa5, 0xf7, 0x3b, 0xf3, 0x37, 0x1b, 0xb9, 0xf4, + 0x93, 0x00, 0x14, 0x4f, 0x82, 0x13, 0x69, 0xfb, 0xac, 0xfb, 0xfd, 0xc8, 0x81, 0x31, 0x87, 0xf7, + 0x86, 0x2a, 0xdb, 0xf0, 0x92, 0x6c, 0xc9, 0x06, 0xe6, 0xcf, 0x80, 0x61, 0xb9, 0x69, 0x6f, 0x99, + 0x96, 0x6e, 0xb7, 0x3a, 0x82, 0xee, 0x8b, 0xf2, 0xcb, 0x60, 0xa8, 0x41, 0x2c, 0xd0, 0xe1, 0x34, + 0x97, 0x34, 0x3a, 0xb8, 0xe7, 0x84, 0xb0, 0x72, 0x15, 0x4b, 0x4b, 0x4e, 0xe8, 0xbe, 0x49, 0x27, + 0xe4, 0x13, 0x81, 0x90, 0x6f, 0xb2, 0xb9, 0x3d, 0xe2, 0xb3, 0x38, 0x0d, 0x8e, 0x44, 0x96, 0x58, + 0x88, 0xb7, 0x39, 0xd2, 0xe0, 0x5d, 0x14, 0xfc, 0x69, 0xe7, 0x42, 0x5c, 0x6e, 0xb8, 0xd1, 0xf2, + 0x2f, 0x77, 0xf2, 0xa3, 0x2d, 0xd9, 0xa8, 0x97, 0x44, 0xba, 0x21, 0xb6, 0x67, 0x45, 0xe9, 0x6c, + 0xd7, 0xb3, 0x59, 0xe4, 0x68, 0x3a, 0x9b, 0x45, 0x56, 0x99, 0xbf, 0xbf, 0x64, 0xc0, 0x78, 0x05, + 0x6b, 0x97, 0xcd, 0x6d, 0x88, 0xf4, 0xcf, 0xe0, 0xc6, 0x96, 0x6c, 0x41, 0xcc, 0xaf, 0x27, 0x57, + 0xc4, 0xcc, 0xcb, 0x9d, 0x7c, 0xd6, 0x75, 0xb7, 0x4d, 0x44, 0x8c, 0xa9, 0x8a, 0xf5, 0xe4, 0xaa, + 0x08, 0x98, 0x6a, 0x13, 0x89, 0xc1, 0x80, 0x5f, 0xea, 0xbe, 0x32, 0x06, 0x1c, 0xb6, 0x59, 0x51, + 0x2c, 0x82, 0x29, 0x9b, 0x06, 0xa8, 0x56, 0xb1, 0x13, 0x62, 0xd5, 0xbc, 0x81, 0xa0, 0xe5, 0x4e, + 0x5c, 0xd2, 0x04, 0xdb, 0x24, 0xe1, 0x7f, 0xe4, 0x6c, 0x95, 0x2e, 0x74, 0xae, 0x8f, 0x99, 0x30, + 0xf0, 0x61, 0x0c, 0xc5, 0xcb, 0x60, 0xba, 0x6d, 0x91, 0xf5, 0x39, 0x3f, 0x14, 0xae, 0xa7, 0x50, + 0xc4, 0x3f, 0x38, 0x32, 0x8b, 0x39, 0x57, 0x18, 0x34, 0x88, 0x71, 0xbc, 0x66, 0x5a, 0x7b, 0x4f, + 0x9b, 0xef, 0x60, 0xa6, 0x27, 0x07, 0x4b, 0x6b, 0x9d, 0x71, 0x3b, 0x1e, 0xc6, 0x2d, 0x36, 0x16, + 0xf1, 0x13, 0x70, 0x2c, 0x69, 0xef, 0xef, 0xa3, 0xf8, 0x33, 0x07, 0x72, 0x0e, 0x39, 0x96, 0x8c, + 0xf0, 0x26, 0xb4, 0x42, 0x24, 0x49, 0x50, 0x31, 0x2d, 0x95, 0x5f, 0x02, 0x59, 0x2f, 0x2d, 0x68, + 0xca, 0x58, 0x64, 0xa3, 0xaa, 0xab, 0xe4, 0xb4, 0x01, 0x89, 0xe5, 0x54, 0x40, 0x6d, 0x5d, 0xe5, + 0x0f, 0x83, 0x21, 0x0c, 0x91, 0x0a, 0x2d, 0x37, 0xcb, 0x25, 0xfa, 0x1f, 0x7f, 0x14, 0x0c, 0x23, + 0x78, 0x83, 0x26, 0x1e, 0x19, 0xa1, 0xa4, 0x03, 0x08, 0xde, 0x70, 0xb3, 0x6d, 0x39, 0x88, 0x1a, + 0xd5, 0x70, 0xa0, 0x3a, 0x15, 0x49, 0xb1, 0x64, 0x87, 0xc5, 0x39, 0x70, 0x32, 0x5d, 0x82, 0xd5, + 0xfc, 0xf7, 0x6e, 0x0e, 0xad, 0xe8, 0x58, 0xae, 0xd5, 0xe1, 0xbe, 0x95, 0xfe, 0x2e, 0x52, 0x21, + 0xd6, 0x25, 0x51, 0x24, 0xa9, 0x10, 0xbb, 0xc7, 0x62, 0xfa, 0x8e, 0x23, 0x3d, 0x79, 0x15, 0xed, + 0x6f, 0x48, 0xab, 0x9d, 0x43, 0x12, 0x23, 0x2f, 0xa9, 0x18, 0x8f, 0xc4, 0x06, 0xc8, 0x27, 0x6c, + 0xb1, 0xdc, 0xae, 0xec, 0x66, 0x12, 0x3a, 0xe0, 0x4d, 0x42, 0x6d, 0x43, 0xd0, 0x0b, 0x8e, 0xbc, + 0xc1, 0xd9, 0x05, 0x50, 0x36, 0x91, 0xfa, 0xcf, 0x6c, 0xf3, 0x91, 0xd7, 0x6a, 0x2c, 0xc6, 0x91, + 0xd7, 0x6a, 0x28, 0x2a, 0xfa, 0x5a, 0x0d, 0xad, 0x79, 0xa8, 0x2e, 0xde, 0x1d, 0x01, 0xfd, 0x15, + 0xac, 0xf1, 0xd7, 0xc0, 0x58, 0xf4, 0x1b, 0xda, 0x7c, 0xd2, 0x00, 0xd1, 0xfe, 0x65, 0x43, 0x58, + 0xec, 0x5e, 0x96, 0x11, 0xba, 0x0d, 0x46, 0xc2, 0x5f, 0x40, 0xe6, 0x52, 0x8c, 0x84, 0x24, 0x85, + 0x37, 0xba, 0x95, 0x64, 0x87, 0x7d, 0x0a, 0x0e, 0xb0, 0x17, 0xf9, 0xf1, 0x14, 0x6d, 0x4f, 0x48, + 0x78, 0xad, 0x0b, 0x21, 0x66, 0xfd, 0x1a, 0x18, 0x8b, 0xbe, 0x60, 0xd3, 0xd0, 0x8b, 0xc8, 0xa6, + 0xa2, 0x97, 0xf4, 0x40, 0xab, 0x01, 0x10, 0x78, 0x48, 0xbd, 0x9a, 0x62, 0xc1, 0x17, 0x13, 0x16, + 0xba, 0x12, 0x63, 0x67, 0xdc, 0xe6, 0xc0, 0x74, 0xf2, 0x2b, 0xe1, 0xad, 0x34, 0xce, 0x93, 0xb4, + 0x84, 0x73, 0xbb, 0xd1, 0x62, 0x1e, 0x6d, 0x81, 0xff, 0x87, 0x86, 0xe5, 0xd9, 0xb4, 0x80, 0x02, + 0x82, 0x42, 0xb1, 0x4b, 0xc1, 0x20, 0xa5, 0xd1, 0x99, 0x75, 0x3e, 0x15, 0xbd, 0x90, 0x6c, 0x2a, + 0xa5, 0x09, 0xa3, 0x27, 0x8f, 0xc0, 0x68, 0xa4, 0x51, 0x9f, 0x4a, 0xb1, 0x12, 0x16, 0x15, 0x4e, + 0x77, 0x2d, 0xca, 0xce, 0xfb, 0x82, 0x03, 0x53, 0xf1, 0x73, 0x53, 0x5a, 0x7d, 0xc5, 0x6a, 0x08, + 0x67, 0x7b, 0xd5, 0x60, 0x5e, 0x7c, 0xcd, 0x81, 0xa3, 0x69, 0x73, 0xc7, 0x99, 0xb4, 0xc0, 0x92, + 0xf5, 0x84, 0xf3, 0xbb, 0xd3, 0x0b, 0xa1, 0x13, 0x3f, 0x11, 0xa4, 0xa1, 0x13, 0xab, 0x91, 0x8a, + 0x4e, 0xea, 0x35, 0xce, 0xdf, 0xe2, 0xc0, 0x64, 0xec, 0x1d, 0x9e, 0x96, 0xd0, 0x71, 0x0a, 0xc2, + 0x52, 0x8f, 0x0a, 0xc1, 0x3e, 0x1d, 0xbe, 0x25, 0xd3, 0xfa, 0x74, 0x48, 0x32, 0xb5, 0x4f, 0xc7, + 0xde, 0x47, 0xc2, 0xe0, 0x2d, 0xe7, 0x45, 0x5a, 0x5e, 0x7b, 0xf8, 0x34, 0xc7, 0x3d, 0x7a, 0x9a, + 0xe3, 0x7e, 0x7f, 0x9a, 0xe3, 0xee, 0x3c, 0xcb, 0xf5, 0x3d, 0x7a, 0x96, 0xeb, 0xfb, 0xf5, 0x59, + 0xae, 0xef, 0xe3, 0xd7, 0x53, 0xbf, 0x02, 0xfb, 0x4f, 0x54, 0xf2, 0x3d, 0xb8, 0x36, 0x44, 0x66, + 0x82, 0x37, 0xff, 0x0a, 0x00, 0x00, 0xff, 0xff, 0xcf, 0xf8, 0x33, 0xb7, 0x3f, 0x1b, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used.