Setup hooks between laconic modules (#9)

- Implement auction and bond module hooks in registry module
- Code cleanup

Reviewed-on: deep-stack/laconic2d#9
Co-authored-by: Prathamesh Musale <prathamesh.musale0@gmail.com>
Co-committed-by: Prathamesh Musale <prathamesh.musale0@gmail.com>
This commit is contained in:
2024-02-28 04:34:58 +00:00
committed by ashwin
parent ba7a127d7f
commit c79b7bea7d
33 changed files with 495 additions and 2683 deletions
-6
View File
@@ -43,12 +43,6 @@ func (k *Keeper) InitGenesis(ctx sdk.Context, data *registry.GenesisState) error
if err := k.insertAuthorityExpiryQueue(ctx, authority.Name, authority.Entry.ExpiryTime); err != nil {
return err
}
// TODO
// Note: Bond genesis runs first, so bonds will already be present.
// if authority.Entry.BondId != "" {
// k.AddBondToAuthorityIndexEntry(ctx, authority.Entry.BondId, authority.Name)
// }
}
}
+28 -19
View File
@@ -11,6 +11,7 @@ import (
"cosmossdk.io/collections/indexes"
storetypes "cosmossdk.io/core/store"
errorsmod "cosmossdk.io/errors"
"cosmossdk.io/log"
"github.com/cosmos/cosmos-sdk/codec"
"github.com/cosmos/cosmos-sdk/codec/legacy"
sdk "github.com/cosmos/cosmos-sdk/types"
@@ -28,8 +29,6 @@ import (
"git.vdb.to/cerc-io/laconic2d/x/registry/helpers"
)
// TODO: Add required methods
type RecordsIndexes struct {
BondId *indexes.Multi[string, string, registrytypes.Record]
}
@@ -50,16 +49,24 @@ func newRecordIndexes(sb *collections.SchemaBuilder) RecordsIndexes {
}
}
// TODO
type AuthoritiesIndexes struct {
AuctionId *indexes.Multi[string, string, registrytypes.NameAuthority]
}
func (b AuthoritiesIndexes) IndexesList() []collections.Index[string, registrytypes.NameAuthority] {
return []collections.Index[string, registrytypes.NameAuthority]{}
func (a AuthoritiesIndexes) IndexesList() []collections.Index[string, registrytypes.NameAuthority] {
return []collections.Index[string, registrytypes.NameAuthority]{a.AuctionId}
}
func newAuthorityIndexes(sb *collections.SchemaBuilder) AuthoritiesIndexes {
return AuthoritiesIndexes{}
return AuthoritiesIndexes{
AuctionId: indexes.NewMulti(
sb, registrytypes.AuthoritiesByAuctionIdIndexPrefix, "authorities_by_auction_id",
collections.StringKey, collections.StringKey,
func(name string, v registrytypes.NameAuthority) (string, error) {
return v.AuctionId, nil
},
),
}
}
type NameRecordsIndexes struct {
@@ -87,9 +94,8 @@ type Keeper struct {
accountKeeper auth.AccountKeeper
bankKeeper bank.Keeper
recordKeeper RecordKeeper
bondKeeper bondkeeper.Keeper
auctionKeeper auctionkeeper.Keeper
bondKeeper *bondkeeper.Keeper
auctionKeeper *auctionkeeper.Keeper
// state management
Schema collections.Schema
@@ -107,16 +113,14 @@ func NewKeeper(
storeService storetypes.KVStoreService,
accountKeeper auth.AccountKeeper,
bankKeeper bank.Keeper,
recordKeeper RecordKeeper,
bondKeeper bondkeeper.Keeper,
auctionKeeper auctionkeeper.Keeper,
bondKeeper *bondkeeper.Keeper,
auctionKeeper *auctionkeeper.Keeper,
) Keeper {
sb := collections.NewSchemaBuilder(storeService)
k := Keeper{
cdc: cdc,
accountKeeper: accountKeeper,
bankKeeper: bankKeeper,
recordKeeper: recordKeeper,
bondKeeper: bondKeeper,
auctionKeeper: auctionKeeper,
Params: collections.NewItem(sb, registrytypes.ParamsPrefix, "params", codec.CollValue[registrytypes.Params](cdc)),
@@ -155,6 +159,15 @@ func NewKeeper(
return k
}
// Logger returns a module-specific logger.
func (k Keeper) Logger(ctx sdk.Context) log.Logger {
return logger(ctx)
}
func logger(ctx sdk.Context) log.Logger {
return ctx.Logger().With("module", registrytypes.ModuleName)
}
// HasRecord - checks if a record by the given id exists.
func (k Keeper) HasRecord(ctx sdk.Context, id string) (bool, error) {
has, err := k.Records.Has(ctx, id)
@@ -230,9 +243,6 @@ func (k Keeper) RecordsFromAttributes(ctx sdk.Context, attributes []*registrytyp
// PutRecord - saves a record to the store.
func (k Keeper) SaveRecord(ctx sdk.Context, record registrytypes.Record) error {
return k.Records.Set(ctx, record.Id, record)
// TODO
// k.updateBlockChangeSetForRecord(ctx, record.Id)
}
// ProcessSetRecord creates a record.
@@ -274,7 +284,7 @@ func (k Keeper) SetRecord(ctx sdk.Context, msg registrytypes.MsgSetRecord) (*reg
// Sort owners list.
sort.Strings(record.Owners)
sdkErr := k.processRecord(ctx, &record, false)
sdkErr := k.processRecord(ctx, &record)
if sdkErr != nil {
return nil, sdkErr
}
@@ -282,7 +292,7 @@ func (k Keeper) SetRecord(ctx sdk.Context, msg registrytypes.MsgSetRecord) (*reg
return &record, nil
}
func (k Keeper) processRecord(ctx sdk.Context, record *registrytypes.ReadableRecord, isRenewal bool) error {
func (k Keeper) processRecord(ctx sdk.Context, record *registrytypes.ReadableRecord) error {
params, err := k.GetParams(ctx)
if err != nil {
return err
@@ -420,7 +430,6 @@ func (k Keeper) GetModuleBalances(ctx sdk.Context) []*registrytypes.AccountBalan
// ProcessRecordExpiryQueue tries to renew expiring records (by collecting rent) else marks them as deleted.
func (k Keeper) ProcessRecordExpiryQueue(ctx sdk.Context) error {
// TODO: process expired records
cids, err := k.getAllExpiredRecords(ctx, ctx.BlockHeader().Time)
if err != nil {
return err
+9 -37
View File
@@ -132,16 +132,7 @@ func (k Keeper) SaveNameRecord(ctx sdk.Context, crn string, id string) error {
Height: uint64(ctx.BlockHeight()),
}
// TODO: Check if index gets updated on entry updates
if err := k.NameRecords.Set(ctx, crn, nameRecord); err != nil {
return err
}
// TODO
// Update changeSet for name.
// k.updateBlockChangeSetForName(ctx, crn)
return nil
return k.NameRecords.Set(ctx, crn, nameRecord)
}
// SetName creates a CRN -> Record ID mapping.
@@ -169,9 +160,6 @@ func (k Keeper) SetName(ctx sdk.Context, msg registrytypes.MsgSetName) error {
// SaveNameAuthority creates the NameAuthority record.
func (k Keeper) SaveNameAuthority(ctx sdk.Context, name string, authority *registrytypes.NameAuthority) error {
return k.Authorities.Set(ctx, name, *authority)
// TODO
// updateBlockChangeSetForNameAuthority(ctx, codec, store, name)
}
// ReserveAuthority reserves a name authority.
@@ -282,12 +270,9 @@ func (k Keeper) createAuthority(ctx sdk.Context, name string, owner string, isRo
// If auctions are enabled, clear out owner fields. They will be set after a winner is picked.
authority.OwnerAddress = ""
authority.OwnerPublicKey = ""
// Reset bond ID if required.
if authority.BondId != "" || len(authority.BondId) != 0 {
// TODO
// k.RemoveBondToAuthorityIndexEntry(ctx, authority.BondId, name)
authority.BondId = ""
}
authority.BondId = ""
params := auctiontypes.Params{
CommitsDuration: moduleParams.AuthorityAuctionCommitsDuration,
@@ -305,10 +290,6 @@ func (k Keeper) createAuthority(ctx sdk.Context, name string, owner string, isRo
return sdkErr
}
// TODO
// Create auction ID -> authority name index.
// k.AddAuctionToAuthorityMapping(ctx, auction.Id, name)
authority.Status = registrytypes.AuthorityUnderAuction
authority.AuctionId = auction.Id
authority.ExpiryTime = auction.RevealsEndTime.Add(moduleParams.AuthorityGracePeriod)
@@ -362,22 +343,12 @@ func (k Keeper) SetAuthorityBond(ctx sdk.Context, msg registrytypes.MsgSetAuthor
return nil
}
// TODO
// Remove old bond ID mapping, if any.
// if authority.BondId != "" {
// k.RemoveBondToAuthorityIndexEntry(ctx, authority.BondId, name)
// }
// Update bond id and save name authority in store.
authority.BondId = bond.Id
if err = k.SaveNameAuthority(ctx, name, &authority); err != nil {
return err
}
// TODO
// Add new bond ID mapping.
// k.AddBondToAuthorityIndexEntry(ctx, authority.BondId, name)
return nil
}
@@ -546,8 +517,7 @@ func (k Keeper) ProcessAuthorityExpiryQueue(ctx sdk.Context) error {
return err
}
// TODO: Setup logger
// k.Logger(ctx).Info(fmt.Sprintf("Marking authority expired as no bond present: %s", name))
k.Logger(ctx).Info(fmt.Sprintf("Marking authority expired as no bond present: %s", name))
return nil
}
@@ -620,7 +590,7 @@ func (k Keeper) deleteAuthorityExpiryQueue(ctx sdk.Context, name string, authori
// tryTakeAuthorityRent tries to take rent from the authority bond.
func (k Keeper) tryTakeAuthorityRent(ctx sdk.Context, name string, authority registrytypes.NameAuthority) error {
// k.Logger(ctx).Info(fmt.Sprintf("Trying to take rent for authority: %s", name))
k.Logger(ctx).Info(fmt.Sprintf("Trying to take rent for authority: %s", name))
params, err := k.GetParams(ctx)
if err != nil {
@@ -636,7 +606,8 @@ func (k Keeper) tryTakeAuthorityRent(ctx sdk.Context, name string, authority reg
return err
}
// k.Logger(ctx).Info(fmt.Sprintf("Insufficient funds in owner account to pay authority rent, marking as expired: %s", name))
k.Logger(ctx).Info(fmt.Sprintf("Insufficient funds in owner account to pay authority rent, marking as expired: %s", name))
return k.deleteAuthorityExpiryQueue(ctx, name, authority)
}
@@ -653,7 +624,8 @@ func (k Keeper) tryTakeAuthorityRent(ctx sdk.Context, name string, authority reg
// Save authority.
authority.Status = registrytypes.AuthorityActive
// k.Logger(ctx).Info(fmt.Sprintf("Authority rent paid successfully: %s", name))
k.Logger(ctx).Info(fmt.Sprintf("Authority rent paid successfully: %s", name))
return k.SaveNameAuthority(ctx, name, &authority)
}
+117 -4
View File
@@ -1,24 +1,137 @@
package keeper
import (
"errors"
"fmt"
"time"
"cosmossdk.io/collections"
errorsmod "cosmossdk.io/errors"
"github.com/cosmos/cosmos-sdk/codec"
sdk "github.com/cosmos/cosmos-sdk/types"
sdkerrors "github.com/cosmos/cosmos-sdk/types/errors"
auctiontypes "git.vdb.to/cerc-io/laconic2d/x/auction"
auctionkeeper "git.vdb.to/cerc-io/laconic2d/x/auction/keeper"
bondtypes "git.vdb.to/cerc-io/laconic2d/x/bond"
registrytypes "git.vdb.to/cerc-io/laconic2d/x/registry"
)
// TODO: Add methods
// Record keeper implements the bond usage keeper interface.
var (
_ auctiontypes.AuctionUsageKeeper = RecordKeeper{}
_ bondtypes.BondUsageKeeper = RecordKeeper{}
)
// RecordKeeper exposes the bare minimal read-only API for other modules.
type RecordKeeper struct {
cdc codec.BinaryCodec // The wire codec for binary encoding/decoding.
auctionKeeper auctionkeeper.Keeper
// storeKey storetypes.StoreKey // Unexposed key to access store from sdk.Context
k *Keeper
auctionKeeper *auctionkeeper.Keeper
}
// NewRecordKeeper creates new instances of the registry RecordKeeper
func NewRecordKeeper(cdc codec.BinaryCodec, k *Keeper, auctionKeeper *auctionkeeper.Keeper) RecordKeeper {
return RecordKeeper{
cdc: cdc,
k: k,
auctionKeeper: auctionKeeper,
}
}
// ModuleName returns the module name.
func (rk RecordKeeper) ModuleName() string {
return registrytypes.ModuleName
}
func (rk RecordKeeper) UsesAuction(ctx sdk.Context, auctionId string) bool {
iter, err := rk.k.Authorities.Indexes.AuctionId.MatchExact(ctx, auctionId)
if err != nil {
panic(err)
}
return iter.Valid()
}
func (rk RecordKeeper) OnAuctionWinnerSelected(ctx sdk.Context, auctionId string) {
// Update authority status based on auction status/winner.
iter, err := rk.k.Authorities.Indexes.AuctionId.MatchExact(ctx, auctionId)
if err != nil && !errors.Is(err, collections.ErrNotFound) {
panic(err)
}
names, err := iter.PrimaryKeys()
if err != nil {
panic(err)
}
if len(names) == 0 {
// We don't know about this auction, ignore.
logger(ctx).Info(fmt.Sprintf("Ignoring auction notification, name mapping not found: %s", auctionId))
return
}
// Take the first one as an auction (non-empty) will map to only one name
// MultiIndex being used as there can be multiple entries with empty auction id ("")
name := names[0]
if has, err := rk.k.HasNameAuthority(ctx, name); !has {
if err != nil {
panic(err)
}
// We don't know about this authority, ignore.
logger(ctx).Info(fmt.Sprintf("Ignoring auction notification, authority not found: %s", auctionId))
return
}
authority, err := rk.k.GetNameAuthority(ctx, name)
if err != nil {
panic(err)
}
auctionObj, err := rk.auctionKeeper.GetAuctionById(ctx, auctionId)
if err != nil {
panic(err)
}
if auctionObj.Status == auctiontypes.AuctionStatusCompleted {
if auctionObj.WinnerAddress != "" {
// Mark authority owner and change status to active.
authority.OwnerAddress = auctionObj.WinnerAddress
authority.Status = registrytypes.AuthorityActive
// Reset bond id if required, as owner has changed.
authority.BondId = ""
// Update height for updated/changed authority (owner).
// Can be used to check if names are older than the authority itself (stale names).
authority.Height = uint64(ctx.BlockHeight())
logger(ctx).Info(fmt.Sprintf("Winner selected, marking authority as active: %s", name))
} else {
// Mark as expired.
authority.Status = registrytypes.AuthorityExpired
logger(ctx).Info(fmt.Sprintf("No winner, marking authority as expired: %s", name))
}
// Forget about this auction now, we no longer need it.
authority.AuctionId = ""
if err = rk.k.SaveNameAuthority(ctx, name, &authority); err != nil {
panic(err)
}
} else {
logger(ctx).Info(fmt.Sprintf("Ignoring auction notification, status: %s", auctionObj.Status))
}
}
// UsesBond returns true if the bond has associated records.
func (rk RecordKeeper) UsesBond(ctx sdk.Context, bondId string) bool {
iter, err := rk.k.Records.Indexes.BondId.MatchExact(ctx, bondId)
if err != nil {
panic(err)
}
return iter.Valid()
}
// RenewRecord renews a record.
@@ -46,7 +159,7 @@ func (k Keeper) RenewRecord(ctx sdk.Context, msg registrytypes.MsgRenewRecord) e
}
readableRecord := record.ToReadableRecord()
return k.processRecord(ctx, &readableRecord, true)
return k.processRecord(ctx, &readableRecord)
}
// AssociateBond associates a record with a bond.
+14 -4
View File
@@ -10,7 +10,9 @@ import (
bank "github.com/cosmos/cosmos-sdk/x/bank/keeper"
modulev1 "git.vdb.to/cerc-io/laconic2d/api/cerc/registry/module/v1"
"git.vdb.to/cerc-io/laconic2d/x/auction"
auctionkeeper "git.vdb.to/cerc-io/laconic2d/x/auction/keeper"
"git.vdb.to/cerc-io/laconic2d/x/bond"
bondkeeper "git.vdb.to/cerc-io/laconic2d/x/bond/keeper"
"git.vdb.to/cerc-io/laconic2d/x/registry/keeper"
)
@@ -39,8 +41,8 @@ type ModuleInputs struct {
AccountKeeper auth.AccountKeeper
BankKeeper bank.Keeper
BondKeeper bondkeeper.Keeper
AuctionKeeper auctionkeeper.Keeper
BondKeeper *bondkeeper.Keeper
AuctionKeeper *auctionkeeper.Keeper
}
type ModuleOutputs struct {
@@ -48,6 +50,9 @@ type ModuleOutputs struct {
Keeper keeper.Keeper
Module appmodule.AppModule
AuctionHooks auction.AuctionHooksWrapper
BondHooks bond.BondHooksWrapper
}
func ProvideModule(in ModuleInputs) ModuleOutputs {
@@ -56,11 +61,16 @@ func ProvideModule(in ModuleInputs) ModuleOutputs {
in.StoreService,
in.AccountKeeper,
in.BankKeeper,
keeper.RecordKeeper{},
in.BondKeeper,
in.AuctionKeeper,
)
m := NewAppModule(in.Cdc, k)
return ModuleOutputs{Module: m, Keeper: k}
recordKeeper := keeper.NewRecordKeeper(in.Cdc, &k, in.AuctionKeeper)
return ModuleOutputs{
Module: m, Keeper: k,
AuctionHooks: auction.AuctionHooksWrapper{AuctionUsageKeeper: recordKeeper},
BondHooks: bond.BondHooksWrapper{BondUsageKeeper: recordKeeper},
}
}
+79 -747
View File
@@ -624,144 +624,6 @@ func (m *Signature) GetPubKey() string {
return ""
}
// BlockChangeSet
type BlockChangeSet struct {
Height int64 `protobuf:"varint,1,opt,name=height,proto3" json:"height,omitempty"`
Records []string `protobuf:"bytes,2,rep,name=records,proto3" json:"records,omitempty"`
Auctions []string `protobuf:"bytes,3,rep,name=auctions,proto3" json:"auctions,omitempty"`
AuctionBids []*AuctionBidInfo `protobuf:"bytes,4,rep,name=auction_bids,json=auctionBids,proto3" json:"auction_bids,omitempty" json:"auction_bids" yaml:"auction_bids"`
Authorities []string `protobuf:"bytes,5,rep,name=authorities,proto3" json:"authorities,omitempty"`
Names []string `protobuf:"bytes,6,rep,name=names,proto3" json:"names,omitempty"`
}
func (m *BlockChangeSet) Reset() { *m = BlockChangeSet{} }
func (m *BlockChangeSet) String() string { return proto.CompactTextString(m) }
func (*BlockChangeSet) ProtoMessage() {}
func (*BlockChangeSet) Descriptor() ([]byte, []int) {
return fileDescriptor_d792f2373089b5b9, []int{8}
}
func (m *BlockChangeSet) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
}
func (m *BlockChangeSet) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
if deterministic {
return xxx_messageInfo_BlockChangeSet.Marshal(b, m, deterministic)
} else {
b = b[:cap(b)]
n, err := m.MarshalToSizedBuffer(b)
if err != nil {
return nil, err
}
return b[:n], nil
}
}
func (m *BlockChangeSet) XXX_Merge(src proto.Message) {
xxx_messageInfo_BlockChangeSet.Merge(m, src)
}
func (m *BlockChangeSet) XXX_Size() int {
return m.Size()
}
func (m *BlockChangeSet) XXX_DiscardUnknown() {
xxx_messageInfo_BlockChangeSet.DiscardUnknown(m)
}
var xxx_messageInfo_BlockChangeSet proto.InternalMessageInfo
func (m *BlockChangeSet) GetHeight() int64 {
if m != nil {
return m.Height
}
return 0
}
func (m *BlockChangeSet) GetRecords() []string {
if m != nil {
return m.Records
}
return nil
}
func (m *BlockChangeSet) GetAuctions() []string {
if m != nil {
return m.Auctions
}
return nil
}
func (m *BlockChangeSet) GetAuctionBids() []*AuctionBidInfo {
if m != nil {
return m.AuctionBids
}
return nil
}
func (m *BlockChangeSet) GetAuthorities() []string {
if m != nil {
return m.Authorities
}
return nil
}
func (m *BlockChangeSet) GetNames() []string {
if m != nil {
return m.Names
}
return nil
}
// AuctionBidInfo
type AuctionBidInfo struct {
AuctionId string `protobuf:"bytes,1,opt,name=auction_id,json=auctionId,proto3" json:"auction_id,omitempty" json:"auction_id" yaml:"auction_id"`
BidderAddress string `protobuf:"bytes,2,opt,name=bidder_address,json=bidderAddress,proto3" json:"bidder_address,omitempty" json:"bidder_address" yaml:"bidder_address"`
}
func (m *AuctionBidInfo) Reset() { *m = AuctionBidInfo{} }
func (m *AuctionBidInfo) String() string { return proto.CompactTextString(m) }
func (*AuctionBidInfo) ProtoMessage() {}
func (*AuctionBidInfo) Descriptor() ([]byte, []int) {
return fileDescriptor_d792f2373089b5b9, []int{9}
}
func (m *AuctionBidInfo) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
}
func (m *AuctionBidInfo) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
if deterministic {
return xxx_messageInfo_AuctionBidInfo.Marshal(b, m, deterministic)
} else {
b = b[:cap(b)]
n, err := m.MarshalToSizedBuffer(b)
if err != nil {
return nil, err
}
return b[:n], nil
}
}
func (m *AuctionBidInfo) XXX_Merge(src proto.Message) {
xxx_messageInfo_AuctionBidInfo.Merge(m, src)
}
func (m *AuctionBidInfo) XXX_Size() int {
return m.Size()
}
func (m *AuctionBidInfo) XXX_DiscardUnknown() {
xxx_messageInfo_AuctionBidInfo.DiscardUnknown(m)
}
var xxx_messageInfo_AuctionBidInfo proto.InternalMessageInfo
func (m *AuctionBidInfo) GetAuctionId() string {
if m != nil {
return m.AuctionId
}
return ""
}
func (m *AuctionBidInfo) GetBidderAddress() string {
if m != nil {
return m.BidderAddress
}
return ""
}
// ExpiryQueue: record / authority expiry queue type
// id: expiry time
// value: array of ids (record cids / authority names)
@@ -774,7 +636,7 @@ func (m *ExpiryQueue) Reset() { *m = ExpiryQueue{} }
func (m *ExpiryQueue) String() string { return proto.CompactTextString(m) }
func (*ExpiryQueue) ProtoMessage() {}
func (*ExpiryQueue) Descriptor() ([]byte, []int) {
return fileDescriptor_d792f2373089b5b9, []int{10}
return fileDescriptor_d792f2373089b5b9, []int{8}
}
func (m *ExpiryQueue) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -826,101 +688,90 @@ func init() {
proto.RegisterType((*NameRecord)(nil), "cerc.registry.v1.NameRecord")
proto.RegisterType((*NameRecordEntry)(nil), "cerc.registry.v1.NameRecordEntry")
proto.RegisterType((*Signature)(nil), "cerc.registry.v1.Signature")
proto.RegisterType((*BlockChangeSet)(nil), "cerc.registry.v1.BlockChangeSet")
proto.RegisterType((*AuctionBidInfo)(nil), "cerc.registry.v1.AuctionBidInfo")
proto.RegisterType((*ExpiryQueue)(nil), "cerc.registry.v1.ExpiryQueue")
}
func init() { proto.RegisterFile("cerc/registry/v1/registry.proto", fileDescriptor_d792f2373089b5b9) }
var fileDescriptor_d792f2373089b5b9 = []byte{
// 1365 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xa4, 0x57, 0x4f, 0x6f, 0x1b, 0x45,
0x14, 0xcf, 0xc6, 0x89, 0x13, 0x3f, 0x37, 0xa1, 0x1a, 0xd2, 0xd6, 0x09, 0xad, 0x37, 0x35, 0x42,
0x69, 0x55, 0xd5, 0xab, 0x34, 0x42, 0x55, 0x5b, 0x71, 0xc8, 0x86, 0x34, 0x0a, 0x15, 0xd0, 0x4e,
0x2a, 0x0e, 0x20, 0x64, 0xed, 0x9f, 0xa9, 0x33, 0xd4, 0xbb, 0x6b, 0xed, 0xce, 0x9a, 0xfa, 0x88,
0xc4, 0x01, 0x6e, 0x3d, 0xf6, 0xc0, 0x37, 0xe0, 0x00, 0xdf, 0x82, 0x1e, 0x7b, 0xe4, 0x82, 0x41,
0x8d, 0xc4, 0x07, 0xf0, 0x27, 0x40, 0xf3, 0x67, 0xff, 0xda, 0xae, 0x81, 0xde, 0xf6, 0xfd, 0xfb,
0xcd, 0x6f, 0xde, 0xbc, 0xf7, 0x66, 0x16, 0x74, 0x87, 0x84, 0x8e, 0x11, 0x92, 0x2e, 0x8d, 0x58,
0x38, 0x34, 0x06, 0xbb, 0xe9, 0x77, 0xbb, 0x1f, 0x06, 0x2c, 0x40, 0xe7, 0xb9, 0x43, 0x3b, 0x55,
0x0e, 0x76, 0xb7, 0x9a, 0xdd, 0x20, 0xe8, 0xf6, 0x88, 0x21, 0xec, 0x76, 0xfc, 0xc4, 0x70, 0xe3,
0xd0, 0x62, 0x34, 0xf0, 0x65, 0xc4, 0x96, 0x5e, 0xb6, 0x33, 0xea, 0x91, 0x88, 0x59, 0x5e, 0x5f,
0x39, 0x6c, 0x74, 0x83, 0x6e, 0x20, 0x3e, 0x0d, 0xfe, 0xa5, 0xb4, 0x4d, 0x27, 0x88, 0xbc, 0x20,
0x32, 0x6c, 0x2b, 0x22, 0xc6, 0x60, 0xd7, 0x26, 0xcc, 0xda, 0x35, 0x9c, 0x80, 0x2a, 0xd8, 0xd6,
0x1f, 0x6b, 0x50, 0x7d, 0x68, 0x85, 0x96, 0x17, 0x21, 0x0a, 0xf5, 0x90, 0x38, 0x41, 0xe8, 0x76,
0x42, 0xe2, 0xb3, 0x86, 0xb6, 0xad, 0x5d, 0xab, 0xdf, 0xda, 0x6c, 0x4b, 0x80, 0x36, 0x07, 0x68,
0x2b, 0x80, 0xf6, 0x41, 0x40, 0x7d, 0xf3, 0xe6, 0xcb, 0x91, 0xbe, 0x30, 0x1e, 0xe9, 0x1f, 0x7c,
0x13, 0x05, 0xfe, 0xdd, 0x56, 0x2e, 0xb6, 0xb5, 0x3d, 0xb4, 0xbc, 0x5e, 0x51, 0x85, 0x41, 0x4a,
0x98, 0xf8, 0x0c, 0x3d, 0xd7, 0x60, 0x23, 0x67, 0xec, 0x24, 0x7b, 0x6d, 0x2c, 0xaa, 0x45, 0xe5,
0x66, 0xdb, 0xc9, 0x66, 0xdb, 0x1f, 0x2b, 0x07, 0xf3, 0x40, 0x2d, 0x7a, 0x7b, 0x62, 0xd1, 0x14,
0x64, 0xca, 0xea, 0x99, 0xed, 0xc5, 0x9f, 0xba, 0x86, 0x51, 0x46, 0x25, 0x01, 0x46, 0x31, 0xac,
0x5b, 0x31, 0x3b, 0x0d, 0x42, 0xca, 0x86, 0x32, 0x01, 0x95, 0x79, 0x09, 0xd8, 0x53, 0x5c, 0x6e,
0x48, 0x2e, 0xc5, 0xf0, 0x84, 0x45, 0x49, 0x8b, 0xd7, 0x52, 0x85, 0xc8, 0xc4, 0x4f, 0x1a, 0x5c,
0x2a, 0xba, 0x64, 0xc9, 0x58, 0x9a, 0x97, 0x8c, 0x63, 0x45, 0xe0, 0xa3, 0x69, 0x04, 0x26, 0xf2,
0x31, 0xcb, 0x2c, 0x52, 0x72, 0xa1, 0x40, 0x2b, 0xcd, 0xca, 0x0b, 0x0d, 0x2e, 0x66, 0x71, 0xdd,
0xd0, 0x72, 0x48, 0xa7, 0x4f, 0x42, 0x1a, 0xb8, 0x8d, 0xe5, 0x79, 0xec, 0x8e, 0x14, 0xbb, 0x7b,
0x65, 0x76, 0x79, 0x98, 0x49, 0x72, 0x05, 0xab, 0xe0, 0xb6, 0x91, 0x1a, 0x8f, 0xb8, 0xed, 0xa1,
0x30, 0xa1, 0xef, 0x34, 0xd8, 0xcc, 0xa2, 0xac, 0xd8, 0xe1, 0x8b, 0x76, 0x88, 0x6f, 0xd9, 0x3d,
0xe2, 0x36, 0xaa, 0xdb, 0xda, 0xb5, 0x55, 0xf3, 0x70, 0x3c, 0xd2, 0xf7, 0xcb, 0xcb, 0x97, 0x5c,
0x27, 0x19, 0x94, 0x1d, 0x70, 0x76, 0x42, 0xfb, 0xd2, 0x74, 0x28, 0x2d, 0xe8, 0x37, 0x0d, 0xa6,
0xc4, 0x39, 0x81, 0xe7, 0x51, 0x16, 0x65, 0x07, 0xb9, 0x32, 0x2f, 0x55, 0x1d, 0x95, 0xaa, 0x93,
0x59, 0x5c, 0xcb, 0x90, 0xb3, 0x49, 0x4f, 0x78, 0x8a, 0x14, 0xea, 0xe5, 0x1d, 0x1c, 0x48, 0xb7,
0xf4, 0xa0, 0xa7, 0xef, 0x24, 0x24, 0x03, 0x62, 0xf5, 0x72, 0x3b, 0x59, 0x7d, 0xeb, 0x9d, 0x94,
0x21, 0x67, 0xef, 0x64, 0xc2, 0x73, 0xfa, 0x4e, 0xb0, 0x74, 0x4b, 0x77, 0xf2, 0xb3, 0x06, 0x97,
0x67, 0xa5, 0xa5, 0xf3, 0x84, 0x90, 0x46, 0x6d, 0x5e, 0x5f, 0x7f, 0xae, 0xf6, 0x70, 0xf4, 0xe6,
0xd3, 0xe0, 0x60, 0xf3, 0xce, 0x41, 0xf8, 0xe0, 0xcd, 0xe9, 0xd9, 0xbf, 0x4f, 0xc8, 0x0c, 0xb6,
0x72, 0xeb, 0x82, 0x2d, 0xbc, 0x35, 0xdb, 0x0c, 0x6c, 0x5e, 0xae, 0x67, 0xb0, 0x95, 0x19, 0xe6,
0x6c, 0x7f, 0xd1, 0xe0, 0xca, 0x64, 0xb0, 0x47, 0x7d, 0xea, 0xc5, 0x5e, 0xc7, 0xa6, 0x6e, 0xa3,
0x3e, 0x8f, 0xee, 0x23, 0x45, 0xf7, 0x78, 0x16, 0xdd, 0x1c, 0xda, 0x6c, 0xbe, 0x79, 0x27, 0xbc,
0x55, 0x26, 0xfc, 0xa9, 0xb4, 0x9a, 0xd4, 0x6d, 0xfd, 0xb8, 0x04, 0x55, 0x2c, 0xa6, 0x3d, 0xda,
0x81, 0x45, 0xea, 0x8a, 0x6b, 0xad, 0x66, 0x5e, 0x1a, 0x8f, 0xf4, 0x77, 0x25, 0x83, 0x6c, 0x19,
0x8e, 0xb5, 0x48, 0x5d, 0x74, 0x17, 0x56, 0xec, 0xc0, 0x77, 0x3b, 0xd4, 0x15, 0xf7, 0x51, 0xcd,
0xbc, 0x3a, 0x1e, 0xe9, 0x57, 0xa4, 0xb7, 0x32, 0x24, 0x21, 0x89, 0x88, 0xab, 0xfc, 0xeb, 0xd8,
0x45, 0x9f, 0x40, 0xdd, 0x09, 0x89, 0xc5, 0x48, 0x87, 0xdf, 0xcf, 0xe2, 0x0e, 0xa9, 0x99, 0xd7,
0xb3, 0x5b, 0x32, 0x67, 0x4c, 0x30, 0xf2, 0x2a, 0x0c, 0x52, 0x7a, 0x4c, 0x3d, 0xc2, 0xb1, 0xc8,
0xb3, 0x3e, 0x0d, 0x87, 0x12, 0x6b, 0xa9, 0x8c, 0x95, 0x33, 0x26, 0x58, 0x79, 0x15, 0x06, 0x29,
0x09, 0xac, 0x06, 0xac, 0xb8, 0xa4, 0x47, 0x18, 0x91, 0x83, 0x7b, 0x15, 0x27, 0x22, 0xba, 0x0d,
0xd5, 0xe0, 0x5b, 0x9f, 0x84, 0x51, 0xa3, 0xba, 0x5d, 0xb9, 0x56, 0x33, 0xf5, 0xf1, 0x48, 0x7f,
0x4f, 0x2e, 0x20, 0xf5, 0x09, 0xb6, 0x92, 0xb0, 0x72, 0x47, 0x47, 0x00, 0x16, 0x63, 0x21, 0xb5,
0x63, 0x46, 0x22, 0x31, 0xe3, 0xce, 0x99, 0x3b, 0xe3, 0x91, 0xfe, 0xbe, 0x3a, 0xd9, 0xd4, 0x96,
0x1e, 0x63, 0xa6, 0xc1, 0xb9, 0x50, 0xb4, 0x07, 0xcb, 0xbe, 0xe5, 0x91, 0xa8, 0xb1, 0x2a, 0x08,
0x5c, 0x19, 0x8f, 0xf4, 0x4d, 0x89, 0x21, 0xd4, 0x49, 0xb8, 0x14, 0xb0, 0xf4, 0x45, 0xbb, 0xb0,
0xc4, 0x86, 0x7d, 0xd9, 0xcd, 0x85, 0x18, 0xae, 0x4d, 0x63, 0xa4, 0x80, 0x85, 0x6b, 0xeb, 0x2b,
0x58, 0xdf, 0x4f, 0x2a, 0xe5, 0xd0, 0x67, 0xe1, 0x10, 0x21, 0x58, 0xe2, 0x68, 0xb2, 0x28, 0xb0,
0xf8, 0x46, 0x1f, 0xc2, 0x32, 0xe1, 0x46, 0xf5, 0x16, 0xd1, 0xdb, 0xe5, 0xa7, 0x5a, 0xfb, 0x33,
0xcb, 0x23, 0x29, 0x10, 0x96, 0xde, 0xad, 0xbf, 0x2b, 0xb0, 0x56, 0x30, 0xa0, 0xaf, 0xe1, 0xbc,
0xc8, 0x54, 0xa7, 0x1f, 0xdb, 0x3d, 0xea, 0x74, 0x9e, 0x92, 0xa1, 0xaa, 0xbe, 0xbd, 0xf1, 0x48,
0x37, 0x72, 0x29, 0xce, 0x79, 0x14, 0x92, 0x9d, 0xd7, 0xe3, 0x75, 0xa1, 0x7a, 0x28, 0x34, 0x0f,
0xc8, 0x10, 0x61, 0x58, 0x93, 0x4e, 0x96, 0xeb, 0x86, 0x24, 0x8a, 0x54, 0xad, 0xde, 0x1c, 0x8f,
0xf4, 0xeb, 0x79, 0x6c, 0x65, 0x2e, 0x02, 0x27, 0x4a, 0x7c, 0x4e, 0xc8, 0xfb, 0x52, 0x44, 0x17,
0xa1, 0x7a, 0x4a, 0x68, 0xf7, 0x54, 0x3e, 0x7e, 0x96, 0xb0, 0x92, 0xb8, 0x3e, 0x62, 0x16, 0x8b,
0x23, 0x59, 0x84, 0x58, 0x49, 0xe8, 0x3e, 0x40, 0xd2, 0x91, 0x54, 0x16, 0x56, 0xad, 0x50, 0x02,
0xa9, 0x2d, 0xeb, 0xe4, 0x54, 0x83, 0x6b, 0x4a, 0x38, 0x2e, 0x74, 0x5c, 0xf5, 0xbf, 0x76, 0x9c,
0x5f, 0xec, 0x12, 0x79, 0xd7, 0x6e, 0x4d, 0xdc, 0x50, 0x8f, 0x93, 0xe7, 0xb2, 0xb9, 0x5b, 0x7c,
0xb7, 0xce, 0xe9, 0xa2, 0xe7, 0xfc, 0xd2, 0xc9, 0x75, 0x52, 0xeb, 0x04, 0x6a, 0xfc, 0x9c, 0x67,
0x17, 0xd0, 0xad, 0x62, 0x01, 0x5d, 0x9e, 0x5e, 0x40, 0x72, 0x28, 0x25, 0xd5, 0xf3, 0xbd, 0x06,
0x90, 0x69, 0xd1, 0x1d, 0xa8, 0xf6, 0x2c, 0x46, 0xa2, 0xe4, 0x15, 0x7e, 0xf5, 0x4d, 0x18, 0x82,
0x09, 0x56, 0x01, 0xe8, 0x1e, 0xac, 0x9c, 0xd2, 0x88, 0x05, 0x62, 0xfd, 0xca, 0xbf, 0x8b, 0x4d,
0x22, 0x5a, 0x77, 0xe0, 0x9d, 0x92, 0x0d, 0xad, 0x67, 0x53, 0x53, 0x0c, 0xc7, 0xac, 0x44, 0x16,
0xf3, 0x25, 0xd2, 0x62, 0x50, 0x3b, 0xa1, 0x5d, 0xdf, 0x62, 0x71, 0x48, 0xd0, 0x0d, 0xa8, 0x44,
0xb4, 0xab, 0xaa, 0x7d, 0x73, 0x3c, 0xd2, 0x2f, 0xc8, 0x5c, 0x47, 0xb4, 0x9b, 0xe4, 0x98, 0x7f,
0x62, 0xee, 0xc5, 0x0f, 0xbf, 0x1f, 0xdb, 0xa2, 0x3d, 0x26, 0xc6, 0xad, 0x32, 0x24, 0x41, 0x89,
0x88, 0xab, 0xfd, 0xd8, 0x7e, 0x40, 0x86, 0xad, 0x1f, 0x16, 0x61, 0xdd, 0xec, 0x05, 0xce, 0xd3,
0x83, 0x53, 0xcb, 0xef, 0x92, 0x13, 0xc2, 0x72, 0x04, 0xf9, 0xf2, 0x95, 0xb4, 0x86, 0x1b, 0xb0,
0x22, 0x9f, 0xfd, 0x91, 0x48, 0x4c, 0x0d, 0x27, 0x22, 0xda, 0x82, 0x55, 0x55, 0x8a, 0x51, 0xa3,
0x22, 0x4c, 0xa9, 0x8c, 0xfa, 0x70, 0x2e, 0xa9, 0x59, 0x9b, 0xba, 0xbc, 0xfe, 0x79, 0x4e, 0xb7,
0x27, 0x73, 0xaa, 0xae, 0x1e, 0x93, 0xba, 0xc7, 0xfe, 0x93, 0xc0, 0xbc, 0x31, 0x1e, 0xe9, 0x3b,
0xc5, 0x2e, 0xe0, 0xf1, 0xe5, 0x3e, 0x10, 0x3a, 0x5c, 0xb7, 0xd2, 0xe0, 0x08, 0x6d, 0x43, 0x3d,
0xb9, 0xcf, 0x28, 0x89, 0x1a, 0xcb, 0x82, 0x50, 0x5e, 0x85, 0x36, 0x92, 0x79, 0x29, 0x06, 0xb6,
0x1a, 0x88, 0xad, 0x5f, 0x35, 0x3e, 0xde, 0xf2, 0x24, 0x4a, 0xed, 0xa9, 0xfd, 0xef, 0xf6, 0xfc,
0x02, 0xd6, 0x6d, 0xea, 0xba, 0x13, 0xb3, 0xc6, 0xc8, 0x7e, 0x7e, 0x8a, 0xf6, 0xb4, 0x59, 0x8b,
0x5a, 0xbc, 0x26, 0x15, 0x6a, 0xdc, 0xb4, 0xf6, 0xa0, 0x7e, 0x28, 0x1a, 0xeb, 0x51, 0x4c, 0x62,
0x32, 0x51, 0x6a, 0x1b, 0xb0, 0x3c, 0xb0, 0x7a, 0x31, 0x51, 0xe7, 0x25, 0x05, 0x73, 0xff, 0xe5,
0xeb, 0xa6, 0xf6, 0xea, 0x75, 0x53, 0xfb, 0xeb, 0x75, 0x53, 0x7b, 0x7e, 0xd6, 0x5c, 0x78, 0x75,
0xd6, 0x5c, 0xf8, 0xfd, 0xac, 0xb9, 0xf0, 0xe5, 0x4e, 0x97, 0xb2, 0xf6, 0xc0, 0xb5, 0xdb, 0x2c,
0x30, 0xf8, 0xf9, 0xdc, 0xa4, 0x81, 0xd1, 0xb3, 0x9c, 0xc0, 0xa7, 0xce, 0x2d, 0xd7, 0x78, 0x96,
0xfe, 0x83, 0xdb, 0x55, 0x31, 0x15, 0xf6, 0xfe, 0x09, 0x00, 0x00, 0xff, 0xff, 0xa4, 0x85, 0xe1,
0xaf, 0xa7, 0x0f, 0x00, 0x00,
// 1221 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xa4, 0x57, 0xcb, 0x6e, 0xdb, 0x46,
0x17, 0x36, 0x6d, 0x59, 0xb6, 0x8e, 0x63, 0xff, 0xc1, 0xfc, 0x4e, 0x22, 0xbb, 0xb1, 0xe8, 0xa8,
0x28, 0xec, 0x20, 0x30, 0x09, 0xd9, 0x28, 0x82, 0x24, 0xe8, 0xc2, 0x72, 0x1d, 0xc3, 0x0d, 0xda,
0x3a, 0xe3, 0xac, 0x5a, 0x14, 0x02, 0x2f, 0x13, 0x79, 0x5a, 0x91, 0x14, 0xc8, 0xa1, 0x1a, 0x2d,
0x0b, 0x74, 0xd3, 0x9d, 0x97, 0x59, 0xf4, 0x0d, 0xba, 0xe8, 0x63, 0x34, 0xcb, 0x2c, 0xbb, 0x29,
0x5b, 0xd8, 0x40, 0x1f, 0x40, 0x4f, 0x50, 0x70, 0x66, 0x78, 0x95, 0x14, 0xb5, 0xc8, 0x8e, 0xe7,
0xf6, 0xcd, 0x37, 0xdf, 0x9c, 0xb9, 0x10, 0x54, 0x8b, 0xf8, 0x96, 0xee, 0x93, 0x2e, 0x0d, 0x98,
0x3f, 0xd4, 0x07, 0xad, 0xf4, 0x5b, 0xeb, 0xfb, 0x1e, 0xf3, 0xd0, 0xcd, 0x38, 0x41, 0x4b, 0x9d,
0x83, 0xd6, 0x66, 0xa3, 0xeb, 0x79, 0xdd, 0x1e, 0xd1, 0x79, 0xdc, 0x0c, 0x5f, 0xea, 0x76, 0xe8,
0x1b, 0x8c, 0x7a, 0xae, 0xa8, 0xd8, 0x54, 0xcb, 0x71, 0x46, 0x1d, 0x12, 0x30, 0xc3, 0xe9, 0xcb,
0x84, 0xf5, 0xae, 0xd7, 0xf5, 0xf8, 0xa7, 0x1e, 0x7f, 0x49, 0x6f, 0xc3, 0xf2, 0x02, 0xc7, 0x0b,
0x74, 0xd3, 0x08, 0x88, 0x3e, 0x68, 0x99, 0x84, 0x19, 0x2d, 0xdd, 0xf2, 0xa8, 0x84, 0x6d, 0xfe,
0xb1, 0x0a, 0xd5, 0x33, 0xc3, 0x37, 0x9c, 0x00, 0x51, 0x58, 0xf1, 0x89, 0xe5, 0xf9, 0x76, 0xc7,
0x27, 0x2e, 0xab, 0x2b, 0xdb, 0xca, 0xee, 0xca, 0xfe, 0x86, 0x26, 0x00, 0xb4, 0x18, 0x40, 0x93,
0x00, 0xda, 0x91, 0x47, 0xdd, 0xf6, 0xde, 0x9b, 0x48, 0x9d, 0x1b, 0x45, 0xea, 0x47, 0xdf, 0x06,
0x9e, 0xfb, 0xb8, 0x99, 0xab, 0x6d, 0x6e, 0x0f, 0x0d, 0xa7, 0x57, 0x74, 0x61, 0x10, 0x16, 0x26,
0x2e, 0x43, 0x97, 0x0a, 0xac, 0xe7, 0x82, 0x9d, 0x64, 0xae, 0xf5, 0x79, 0x39, 0xa8, 0x98, 0xac,
0x96, 0x4c, 0x56, 0xfb, 0x54, 0x26, 0xb4, 0x8f, 0xe4, 0xa0, 0x0f, 0xc7, 0x06, 0x4d, 0x41, 0x26,
0x8c, 0x9e, 0xc5, 0x5e, 0xff, 0xa9, 0x2a, 0x18, 0x65, 0x54, 0x12, 0x60, 0x14, 0xc2, 0x9a, 0x11,
0xb2, 0x0b, 0xcf, 0xa7, 0x6c, 0x28, 0x04, 0x58, 0x98, 0x25, 0xc0, 0x81, 0xe4, 0xf2, 0x40, 0x70,
0x29, 0x96, 0x27, 0x2c, 0x4a, 0x5e, 0xbc, 0x9a, 0x3a, 0xb8, 0x12, 0x3f, 0x2b, 0x70, 0xa7, 0x98,
0x92, 0x89, 0x51, 0x99, 0x25, 0xc6, 0xa9, 0x24, 0xf0, 0xc9, 0x24, 0x02, 0x63, 0x7a, 0x4c, 0x0b,
0x73, 0x49, 0x6e, 0x15, 0x68, 0xa5, 0xaa, 0xbc, 0x56, 0xe0, 0x76, 0x56, 0xd7, 0xf5, 0x0d, 0x8b,
0x74, 0xfa, 0xc4, 0xa7, 0x9e, 0x5d, 0x5f, 0x9c, 0xc5, 0xee, 0x44, 0xb2, 0x7b, 0x52, 0x66, 0x97,
0x87, 0x19, 0x27, 0x57, 0x88, 0x72, 0x6e, 0xeb, 0x69, 0xf0, 0x24, 0x8e, 0x9d, 0xf1, 0x10, 0xfa,
0x41, 0x81, 0x8d, 0xac, 0xca, 0x08, 0xad, 0x78, 0xd0, 0x0e, 0x71, 0x0d, 0xb3, 0x47, 0xec, 0x7a,
0x75, 0x5b, 0xd9, 0x5d, 0x6e, 0x1f, 0x8f, 0x22, 0xf5, 0xb0, 0x3c, 0x7c, 0x29, 0x75, 0x9c, 0x41,
0x39, 0x01, 0x67, 0x2b, 0x74, 0x28, 0x42, 0xc7, 0x22, 0x82, 0x7e, 0x53, 0x60, 0x42, 0x9d, 0xe5,
0x39, 0x0e, 0x65, 0x41, 0xb6, 0x90, 0x4b, 0xb3, 0xa4, 0xea, 0x48, 0xa9, 0xce, 0xa7, 0x71, 0x2d,
0x43, 0x4e, 0x27, 0x3d, 0x96, 0xc9, 0x25, 0x54, 0xcb, 0x33, 0x38, 0x12, 0x69, 0xe9, 0x42, 0x4f,
0x9e, 0x89, 0x4f, 0x06, 0xc4, 0xe8, 0xe5, 0x66, 0xb2, 0xfc, 0xde, 0x33, 0x29, 0x43, 0x4e, 0x9f,
0xc9, 0x58, 0xe6, 0xe4, 0x99, 0x60, 0x91, 0x96, 0xce, 0xe4, 0x17, 0x05, 0xee, 0x4e, 0x93, 0xa5,
0xf3, 0x92, 0x90, 0x7a, 0x6d, 0xd6, 0xbe, 0xfe, 0x52, 0xce, 0xe1, 0xe4, 0xdd, 0xab, 0x11, 0x83,
0xcd, 0x5a, 0x07, 0x9e, 0x83, 0x37, 0x26, 0xab, 0xff, 0x94, 0x90, 0x29, 0x6c, 0xc5, 0xd4, 0x39,
0x5b, 0x78, 0x6f, 0xb6, 0x19, 0xd8, 0x2c, 0xad, 0xa7, 0xb0, 0x15, 0x0a, 0xc7, 0x6c, 0x7f, 0x55,
0x60, 0x6b, 0xbc, 0xd8, 0xa1, 0x2e, 0x75, 0x42, 0xa7, 0x63, 0x52, 0xbb, 0xbe, 0x32, 0x8b, 0xee,
0x73, 0x49, 0xf7, 0x74, 0x1a, 0xdd, 0x1c, 0xda, 0x74, 0xbe, 0xf9, 0x24, 0xbc, 0x59, 0x26, 0xfc,
0xb9, 0x88, 0xb6, 0xa9, 0xdd, 0xfc, 0xa9, 0x02, 0x55, 0xcc, 0x4f, 0x7b, 0xb4, 0x03, 0xf3, 0xd4,
0xe6, 0xd7, 0x5a, 0xad, 0x7d, 0x67, 0x14, 0xa9, 0xff, 0x17, 0x0c, 0xb2, 0x61, 0x62, 0xac, 0x79,
0x6a, 0xa3, 0xc7, 0xb0, 0x64, 0x7a, 0xae, 0xdd, 0xa1, 0x36, 0xbf, 0x8f, 0x6a, 0xed, 0x7b, 0xa3,
0x48, 0xdd, 0x12, 0xd9, 0x32, 0x90, 0x94, 0x24, 0x26, 0xae, 0xc6, 0x5f, 0xa7, 0x36, 0xfa, 0x0c,
0x56, 0x2c, 0x9f, 0x18, 0x8c, 0x74, 0xe2, 0xfb, 0x99, 0xdf, 0x21, 0xb5, 0xf6, 0xfd, 0xec, 0x96,
0xcc, 0x05, 0x13, 0x8c, 0xbc, 0x0b, 0x83, 0xb0, 0x5e, 0x50, 0x87, 0xc4, 0x58, 0xe4, 0x55, 0x9f,
0xfa, 0x43, 0x81, 0x55, 0x29, 0x63, 0xe5, 0x82, 0x09, 0x56, 0xde, 0x85, 0x41, 0x58, 0x1c, 0xab,
0x0e, 0x4b, 0x36, 0xe9, 0x11, 0x46, 0xc4, 0xc1, 0xbd, 0x8c, 0x13, 0x13, 0x3d, 0x84, 0xaa, 0xf7,
0xbd, 0x4b, 0xfc, 0xa0, 0x5e, 0xdd, 0x5e, 0xd8, 0xad, 0xb5, 0xd5, 0x51, 0xa4, 0x7e, 0x20, 0x06,
0x10, 0xfe, 0x04, 0x5b, 0x5a, 0x58, 0xa6, 0xa3, 0x13, 0x00, 0x83, 0x31, 0x9f, 0x9a, 0x21, 0x23,
0x01, 0x3f, 0xe3, 0x6e, 0xb4, 0x77, 0x46, 0x91, 0xfa, 0xa1, 0x5c, 0xd9, 0x34, 0x96, 0x2e, 0x63,
0xe6, 0xc1, 0xb9, 0x52, 0x74, 0x00, 0x8b, 0xae, 0xe1, 0x90, 0xa0, 0xbe, 0xcc, 0x09, 0x6c, 0x8d,
0x22, 0x75, 0x43, 0x60, 0x70, 0x77, 0x52, 0x2e, 0x0c, 0x2c, 0x72, 0x51, 0x0b, 0x2a, 0x6c, 0xd8,
0x17, 0xbb, 0xb9, 0x50, 0x13, 0x7b, 0xd3, 0x1a, 0x61, 0x60, 0x9e, 0xda, 0xfc, 0x1a, 0xd6, 0x0e,
0x93, 0x4e, 0x39, 0x76, 0x99, 0x3f, 0x44, 0x08, 0x2a, 0x31, 0x9a, 0x68, 0x0a, 0xcc, 0xbf, 0xd1,
0xc7, 0xb0, 0x48, 0xe2, 0xa0, 0x7c, 0x8b, 0xa8, 0x5a, 0xf9, 0xa9, 0xa6, 0x7d, 0x61, 0x38, 0x24,
0x05, 0xc2, 0x22, 0xbb, 0xf9, 0xf7, 0x02, 0xac, 0x16, 0x02, 0xe8, 0x1b, 0xb8, 0xc9, 0x95, 0xea,
0xf4, 0x43, 0xb3, 0x47, 0xad, 0xce, 0x77, 0x64, 0x28, 0xbb, 0xef, 0x60, 0x14, 0xa9, 0x7a, 0x4e,
0xe2, 0x5c, 0x46, 0x41, 0xec, 0xbc, 0x1f, 0xaf, 0x71, 0xd7, 0x19, 0xf7, 0x3c, 0x23, 0x43, 0x84,
0x61, 0x55, 0x24, 0x19, 0xb6, 0xed, 0x93, 0x20, 0x90, 0xbd, 0xba, 0x37, 0x8a, 0xd4, 0xfb, 0x79,
0x6c, 0x19, 0x2e, 0x02, 0x27, 0x4e, 0x7c, 0x83, 0xdb, 0x87, 0xc2, 0x44, 0xb7, 0xa1, 0x7a, 0x41,
0x68, 0xf7, 0x42, 0x3c, 0x7e, 0x2a, 0x58, 0x5a, 0xb1, 0x3f, 0x60, 0x06, 0x0b, 0x03, 0xd1, 0x84,
0x58, 0x5a, 0xe8, 0x29, 0x40, 0xb2, 0x23, 0xa9, 0x68, 0xac, 0x5a, 0xa1, 0x05, 0xd2, 0x58, 0xb6,
0x93, 0x53, 0x0f, 0xae, 0x49, 0xe3, 0xb4, 0xb0, 0xe3, 0xaa, 0xff, 0x75, 0xc7, 0xb9, 0xc5, 0x5d,
0x22, 0xee, 0xda, 0xcd, 0xb1, 0x1b, 0xea, 0x45, 0xf2, 0x5c, 0x6e, 0xb7, 0x8a, 0xef, 0xd6, 0x19,
0xbb, 0xe8, 0x32, 0xbe, 0x74, 0x72, 0x3b, 0xa9, 0x79, 0x0e, 0xb5, 0x78, 0x9d, 0xa7, 0x37, 0xd0,
0x7e, 0xb1, 0x81, 0xee, 0x4e, 0x6e, 0x20, 0x71, 0x28, 0x25, 0xdd, 0xf3, 0xa3, 0x02, 0x90, 0x79,
0xd1, 0x23, 0xa8, 0xf6, 0x0c, 0x46, 0x82, 0xe4, 0x15, 0x7e, 0xef, 0x5d, 0x18, 0x9c, 0x09, 0x96,
0x05, 0xe8, 0x09, 0x2c, 0x5d, 0xd0, 0x80, 0x79, 0x7c, 0xfc, 0x85, 0x7f, 0x57, 0x9b, 0x54, 0x34,
0x1f, 0xc1, 0xff, 0x4a, 0x31, 0xb4, 0x96, 0x9d, 0x9a, 0xfc, 0x70, 0xcc, 0x5a, 0x64, 0x3e, 0xdf,
0x22, 0x4d, 0x06, 0xb5, 0x73, 0xda, 0x75, 0x0d, 0x16, 0xfa, 0x04, 0x3d, 0x80, 0x85, 0x80, 0x76,
0x65, 0xb7, 0x6f, 0x8c, 0x22, 0xf5, 0x96, 0xd0, 0x3a, 0xa0, 0xdd, 0x44, 0xe3, 0xf8, 0x13, 0xc7,
0x59, 0xf1, 0xe2, 0xf7, 0x43, 0x93, 0x6f, 0x8f, 0xb1, 0xe3, 0x56, 0x06, 0x92, 0xa2, 0xc4, 0xc4,
0xd5, 0x7e, 0x68, 0x3e, 0x23, 0xc3, 0xe6, 0x01, 0xac, 0x1c, 0xf3, 0xa5, 0x79, 0x1e, 0x92, 0x90,
0x8c, 0x91, 0x5d, 0x87, 0xc5, 0x81, 0xd1, 0x0b, 0x09, 0x97, 0xa2, 0x86, 0x85, 0xd1, 0x3e, 0x7c,
0x73, 0xd5, 0x50, 0xde, 0x5e, 0x35, 0x94, 0xbf, 0xae, 0x1a, 0xca, 0xe5, 0x75, 0x63, 0xee, 0xed,
0x75, 0x63, 0xee, 0xf7, 0xeb, 0xc6, 0xdc, 0x57, 0x3b, 0x5d, 0xca, 0xb4, 0x81, 0x6d, 0x6a, 0xcc,
0xd3, 0x63, 0xd5, 0xf6, 0xa8, 0xa7, 0xf7, 0x0c, 0xcb, 0x73, 0xa9, 0xb5, 0x6f, 0xeb, 0xaf, 0xd2,
0xbf, 0x38, 0xb3, 0xca, 0xfb, 0xea, 0xe0, 0x9f, 0x00, 0x00, 0x00, 0xff, 0xff, 0xd2, 0xef, 0x57,
0x0f, 0xe9, 0x0d, 0x00, 0x00,
}
func (m *Params) Marshal() (dAtA []byte, err error) {
@@ -1415,121 +1266,6 @@ func (m *Signature) MarshalToSizedBuffer(dAtA []byte) (int, error) {
return len(dAtA) - i, nil
}
func (m *BlockChangeSet) Marshal() (dAtA []byte, err error) {
size := m.Size()
dAtA = make([]byte, size)
n, err := m.MarshalToSizedBuffer(dAtA[:size])
if err != nil {
return nil, err
}
return dAtA[:n], nil
}
func (m *BlockChangeSet) MarshalTo(dAtA []byte) (int, error) {
size := m.Size()
return m.MarshalToSizedBuffer(dAtA[:size])
}
func (m *BlockChangeSet) MarshalToSizedBuffer(dAtA []byte) (int, error) {
i := len(dAtA)
_ = i
var l int
_ = l
if len(m.Names) > 0 {
for iNdEx := len(m.Names) - 1; iNdEx >= 0; iNdEx-- {
i -= len(m.Names[iNdEx])
copy(dAtA[i:], m.Names[iNdEx])
i = encodeVarintRegistry(dAtA, i, uint64(len(m.Names[iNdEx])))
i--
dAtA[i] = 0x32
}
}
if len(m.Authorities) > 0 {
for iNdEx := len(m.Authorities) - 1; iNdEx >= 0; iNdEx-- {
i -= len(m.Authorities[iNdEx])
copy(dAtA[i:], m.Authorities[iNdEx])
i = encodeVarintRegistry(dAtA, i, uint64(len(m.Authorities[iNdEx])))
i--
dAtA[i] = 0x2a
}
}
if len(m.AuctionBids) > 0 {
for iNdEx := len(m.AuctionBids) - 1; iNdEx >= 0; iNdEx-- {
{
size, err := m.AuctionBids[iNdEx].MarshalToSizedBuffer(dAtA[:i])
if err != nil {
return 0, err
}
i -= size
i = encodeVarintRegistry(dAtA, i, uint64(size))
}
i--
dAtA[i] = 0x22
}
}
if len(m.Auctions) > 0 {
for iNdEx := len(m.Auctions) - 1; iNdEx >= 0; iNdEx-- {
i -= len(m.Auctions[iNdEx])
copy(dAtA[i:], m.Auctions[iNdEx])
i = encodeVarintRegistry(dAtA, i, uint64(len(m.Auctions[iNdEx])))
i--
dAtA[i] = 0x1a
}
}
if len(m.Records) > 0 {
for iNdEx := len(m.Records) - 1; iNdEx >= 0; iNdEx-- {
i -= len(m.Records[iNdEx])
copy(dAtA[i:], m.Records[iNdEx])
i = encodeVarintRegistry(dAtA, i, uint64(len(m.Records[iNdEx])))
i--
dAtA[i] = 0x12
}
}
if m.Height != 0 {
i = encodeVarintRegistry(dAtA, i, uint64(m.Height))
i--
dAtA[i] = 0x8
}
return len(dAtA) - i, nil
}
func (m *AuctionBidInfo) Marshal() (dAtA []byte, err error) {
size := m.Size()
dAtA = make([]byte, size)
n, err := m.MarshalToSizedBuffer(dAtA[:size])
if err != nil {
return nil, err
}
return dAtA[:n], nil
}
func (m *AuctionBidInfo) MarshalTo(dAtA []byte) (int, error) {
size := m.Size()
return m.MarshalToSizedBuffer(dAtA[:size])
}
func (m *AuctionBidInfo) MarshalToSizedBuffer(dAtA []byte) (int, error) {
i := len(dAtA)
_ = i
var l int
_ = l
if len(m.BidderAddress) > 0 {
i -= len(m.BidderAddress)
copy(dAtA[i:], m.BidderAddress)
i = encodeVarintRegistry(dAtA, i, uint64(len(m.BidderAddress)))
i--
dAtA[i] = 0x12
}
if len(m.AuctionId) > 0 {
i -= len(m.AuctionId)
copy(dAtA[i:], m.AuctionId)
i = encodeVarintRegistry(dAtA, i, uint64(len(m.AuctionId)))
i--
dAtA[i] = 0xa
}
return len(dAtA) - i, nil
}
func (m *ExpiryQueue) Marshal() (dAtA []byte, err error) {
size := m.Size()
dAtA = make([]byte, size)
@@ -1780,65 +1516,6 @@ func (m *Signature) Size() (n int) {
return n
}
func (m *BlockChangeSet) Size() (n int) {
if m == nil {
return 0
}
var l int
_ = l
if m.Height != 0 {
n += 1 + sovRegistry(uint64(m.Height))
}
if len(m.Records) > 0 {
for _, s := range m.Records {
l = len(s)
n += 1 + l + sovRegistry(uint64(l))
}
}
if len(m.Auctions) > 0 {
for _, s := range m.Auctions {
l = len(s)
n += 1 + l + sovRegistry(uint64(l))
}
}
if len(m.AuctionBids) > 0 {
for _, e := range m.AuctionBids {
l = e.Size()
n += 1 + l + sovRegistry(uint64(l))
}
}
if len(m.Authorities) > 0 {
for _, s := range m.Authorities {
l = len(s)
n += 1 + l + sovRegistry(uint64(l))
}
}
if len(m.Names) > 0 {
for _, s := range m.Names {
l = len(s)
n += 1 + l + sovRegistry(uint64(l))
}
}
return n
}
func (m *AuctionBidInfo) Size() (n int) {
if m == nil {
return 0
}
var l int
_ = l
l = len(m.AuctionId)
if l > 0 {
n += 1 + l + sovRegistry(uint64(l))
}
l = len(m.BidderAddress)
if l > 0 {
n += 1 + l + sovRegistry(uint64(l))
}
return n
}
func (m *ExpiryQueue) Size() (n int) {
if m == nil {
return 0
@@ -3425,351 +3102,6 @@ func (m *Signature) Unmarshal(dAtA []byte) error {
}
return nil
}
func (m *BlockChangeSet) Unmarshal(dAtA []byte) error {
l := len(dAtA)
iNdEx := 0
for iNdEx < l {
preIndex := iNdEx
var wire uint64
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return ErrIntOverflowRegistry
}
if iNdEx >= l {
return io.ErrUnexpectedEOF
}
b := dAtA[iNdEx]
iNdEx++
wire |= uint64(b&0x7F) << shift
if b < 0x80 {
break
}
}
fieldNum := int32(wire >> 3)
wireType := int(wire & 0x7)
if wireType == 4 {
return fmt.Errorf("proto: BlockChangeSet: wiretype end group for non-group")
}
if fieldNum <= 0 {
return fmt.Errorf("proto: BlockChangeSet: illegal tag %d (wire type %d)", fieldNum, wire)
}
switch fieldNum {
case 1:
if wireType != 0 {
return fmt.Errorf("proto: wrong wireType = %d for field Height", wireType)
}
m.Height = 0
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return ErrIntOverflowRegistry
}
if iNdEx >= l {
return io.ErrUnexpectedEOF
}
b := dAtA[iNdEx]
iNdEx++
m.Height |= int64(b&0x7F) << shift
if b < 0x80 {
break
}
}
case 2:
if wireType != 2 {
return fmt.Errorf("proto: wrong wireType = %d for field Records", wireType)
}
var stringLen uint64
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return ErrIntOverflowRegistry
}
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 ErrInvalidLengthRegistry
}
postIndex := iNdEx + intStringLen
if postIndex < 0 {
return ErrInvalidLengthRegistry
}
if postIndex > l {
return io.ErrUnexpectedEOF
}
m.Records = append(m.Records, string(dAtA[iNdEx:postIndex]))
iNdEx = postIndex
case 3:
if wireType != 2 {
return fmt.Errorf("proto: wrong wireType = %d for field Auctions", wireType)
}
var stringLen uint64
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return ErrIntOverflowRegistry
}
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 ErrInvalidLengthRegistry
}
postIndex := iNdEx + intStringLen
if postIndex < 0 {
return ErrInvalidLengthRegistry
}
if postIndex > l {
return io.ErrUnexpectedEOF
}
m.Auctions = append(m.Auctions, string(dAtA[iNdEx:postIndex]))
iNdEx = postIndex
case 4:
if wireType != 2 {
return fmt.Errorf("proto: wrong wireType = %d for field AuctionBids", wireType)
}
var msglen int
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return ErrIntOverflowRegistry
}
if iNdEx >= l {
return io.ErrUnexpectedEOF
}
b := dAtA[iNdEx]
iNdEx++
msglen |= int(b&0x7F) << shift
if b < 0x80 {
break
}
}
if msglen < 0 {
return ErrInvalidLengthRegistry
}
postIndex := iNdEx + msglen
if postIndex < 0 {
return ErrInvalidLengthRegistry
}
if postIndex > l {
return io.ErrUnexpectedEOF
}
m.AuctionBids = append(m.AuctionBids, &AuctionBidInfo{})
if err := m.AuctionBids[len(m.AuctionBids)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
return err
}
iNdEx = postIndex
case 5:
if wireType != 2 {
return fmt.Errorf("proto: wrong wireType = %d for field Authorities", wireType)
}
var stringLen uint64
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return ErrIntOverflowRegistry
}
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 ErrInvalidLengthRegistry
}
postIndex := iNdEx + intStringLen
if postIndex < 0 {
return ErrInvalidLengthRegistry
}
if postIndex > l {
return io.ErrUnexpectedEOF
}
m.Authorities = append(m.Authorities, string(dAtA[iNdEx:postIndex]))
iNdEx = postIndex
case 6:
if wireType != 2 {
return fmt.Errorf("proto: wrong wireType = %d for field Names", wireType)
}
var stringLen uint64
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return ErrIntOverflowRegistry
}
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 ErrInvalidLengthRegistry
}
postIndex := iNdEx + intStringLen
if postIndex < 0 {
return ErrInvalidLengthRegistry
}
if postIndex > l {
return io.ErrUnexpectedEOF
}
m.Names = append(m.Names, string(dAtA[iNdEx:postIndex]))
iNdEx = postIndex
default:
iNdEx = preIndex
skippy, err := skipRegistry(dAtA[iNdEx:])
if err != nil {
return err
}
if (skippy < 0) || (iNdEx+skippy) < 0 {
return ErrInvalidLengthRegistry
}
if (iNdEx + skippy) > l {
return io.ErrUnexpectedEOF
}
iNdEx += skippy
}
}
if iNdEx > l {
return io.ErrUnexpectedEOF
}
return nil
}
func (m *AuctionBidInfo) Unmarshal(dAtA []byte) error {
l := len(dAtA)
iNdEx := 0
for iNdEx < l {
preIndex := iNdEx
var wire uint64
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return ErrIntOverflowRegistry
}
if iNdEx >= l {
return io.ErrUnexpectedEOF
}
b := dAtA[iNdEx]
iNdEx++
wire |= uint64(b&0x7F) << shift
if b < 0x80 {
break
}
}
fieldNum := int32(wire >> 3)
wireType := int(wire & 0x7)
if wireType == 4 {
return fmt.Errorf("proto: AuctionBidInfo: wiretype end group for non-group")
}
if fieldNum <= 0 {
return fmt.Errorf("proto: AuctionBidInfo: illegal tag %d (wire type %d)", fieldNum, wire)
}
switch fieldNum {
case 1:
if wireType != 2 {
return fmt.Errorf("proto: wrong wireType = %d for field AuctionId", wireType)
}
var stringLen uint64
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return ErrIntOverflowRegistry
}
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 ErrInvalidLengthRegistry
}
postIndex := iNdEx + intStringLen
if postIndex < 0 {
return ErrInvalidLengthRegistry
}
if postIndex > l {
return io.ErrUnexpectedEOF
}
m.AuctionId = string(dAtA[iNdEx:postIndex])
iNdEx = postIndex
case 2:
if wireType != 2 {
return fmt.Errorf("proto: wrong wireType = %d for field BidderAddress", wireType)
}
var stringLen uint64
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return ErrIntOverflowRegistry
}
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 ErrInvalidLengthRegistry
}
postIndex := iNdEx + intStringLen
if postIndex < 0 {
return ErrInvalidLengthRegistry
}
if postIndex > l {
return io.ErrUnexpectedEOF
}
m.BidderAddress = string(dAtA[iNdEx:postIndex])
iNdEx = postIndex
default:
iNdEx = preIndex
skippy, err := skipRegistry(dAtA[iNdEx:])
if err != nil {
return err
}
if (skippy < 0) || (iNdEx+skippy) < 0 {
return ErrInvalidLengthRegistry
}
if (iNdEx + skippy) > l {
return io.ErrUnexpectedEOF
}
iNdEx += skippy
}
}
if iNdEx > l {
return io.ErrUnexpectedEOF
}
return nil
}
func (m *ExpiryQueue) Unmarshal(dAtA []byte) error {
l := len(dAtA)
iNdEx := 0