From db131c5cfc16c8aa1872ff82116ab2e7a2058c1e Mon Sep 17 00:00:00 2001 From: zemyblue Date: Mon, 16 Jan 2023 19:12:34 +0900 Subject: [PATCH 01/17] featremove custom proto changes of genesis and types --- docs/proto/proto-docs.md | 81 ++- proto/cosmwasm/wasm/v1/genesis.proto | 3 - proto/cosmwasm/wasm/v1/tx.proto | 2 +- proto/cosmwasm/wasm/v1/types.proto | 3 - proto/lbm/wasm/v1/genesis.proto | 30 + proto/lbm/wasm/v1/types.proto | 24 + x/wasm/genesis_test.go | 4 +- x/wasm/keeper/api.go | 38 +- x/wasm/keeper/contract_keeper.go | 18 +- x/wasm/keeper/contract_keeper_test.go | 2 +- x/wasm/keeper/gas_register.go | 109 ++++ x/wasm/keeper/genesis.go | 28 +- x/wasm/keeper/genesis_test.go | 5 +- x/wasm/keeper/handler_plugin_test.go | 2 +- x/wasm/keeper/keeper.go | 263 +++++---- x/wasm/keeper/keeper_extension.go | 130 ++--- x/wasm/keeper/keeper_test.go | 207 ++++--- x/wasm/keeper/legacy_querier.go | 36 +- x/wasm/keeper/legacy_querier_test.go | 8 +- x/wasm/keeper/proposal_handler.go | 99 ++-- x/wasm/keeper/proposal_integration_test.go | 140 ++--- x/wasm/keeper/querier.go | 89 ++- x/wasm/keeper/querier_test.go | 110 ++-- x/wasm/keeper/query_plugins.go | 25 +- x/wasm/keeper/query_plugins_test.go | 3 +- x/wasm/keeper/recurse_test.go | 2 +- x/wasm/keeper/reflect_test.go | 16 +- x/wasm/keeper/relay.go | 12 +- x/wasm/keeper/relay_test.go | 16 +- x/wasm/keeper/staking_test.go | 18 +- x/wasm/keeper/submsg_test.go | 20 +- x/wasm/keeper/test_common.go | 2 +- x/wasm/lbmtypes/genesis.go | 38 ++ x/wasm/lbmtypes/genesis.pb.go | 638 +++++++++++++++++++++ x/wasm/lbmtypes/params.go | 114 ++++ x/wasm/lbmtypes/types.pb.go | 476 +++++++++++++++ x/wasm/module.go | 2 +- x/wasm/module_test.go | 10 +- x/wasm/simulation/params.go | 3 - x/wasm/types/exported_keepers.go | 14 +- x/wasm/types/genesis.go | 10 +- x/wasm/types/genesis.pb.go | 142 ++--- x/wasm/types/params.go | 72 --- x/wasm/types/params_test.go | 35 +- x/wasm/types/tx.pb.go | 112 ++-- x/wasm/types/types.pb.go | 249 +++----- 46 files changed, 2326 insertions(+), 1134 deletions(-) create mode 100644 proto/lbm/wasm/v1/genesis.proto create mode 100644 proto/lbm/wasm/v1/types.proto create mode 100644 x/wasm/lbmtypes/genesis.go create mode 100644 x/wasm/lbmtypes/genesis.pb.go create mode 100644 x/wasm/lbmtypes/params.go create mode 100644 x/wasm/lbmtypes/types.pb.go diff --git a/docs/proto/proto-docs.md b/docs/proto/proto-docs.md index 1635f6ca19..52fde349b7 100644 --- a/docs/proto/proto-docs.md +++ b/docs/proto/proto-docs.md @@ -88,6 +88,12 @@ - [EventActivateContractProposal](#lbm.wasm.v1.EventActivateContractProposal) - [EventDeactivateContractProposal](#lbm.wasm.v1.EventDeactivateContractProposal) +- [lbm/wasm/v1/types.proto](#lbm/wasm/v1/types.proto) + - [Params](#lbm.wasm.v1.Params) + +- [lbm/wasm/v1/genesis.proto](#lbm/wasm/v1/genesis.proto) + - [GenesisState](#lbm.wasm.v1.GenesisState) + - [lbm/wasm/v1/proposal.proto](#lbm/wasm/v1/proposal.proto) - [ActivateContractProposal](#lbm.wasm.v1.ActivateContractProposal) - [DeactivateContractProposal](#lbm.wasm.v1.DeactivateContractProposal) @@ -248,9 +254,6 @@ Params defines the set of wasm parameters. | ----- | ---- | ----- | ----------- | | `code_upload_access` | [AccessConfig](#cosmwasm.wasm.v1.AccessConfig) | | | | `instantiate_default_permission` | [AccessType](#cosmwasm.wasm.v1.AccessType) | | | -| `gas_multiplier` | [uint64](#uint64) | | | -| `instance_cost` | [uint64](#uint64) | | | -| `compile_cost` | [uint64](#uint64) | | | @@ -610,7 +613,6 @@ GenesisState - genesis state of x/wasm | `contracts` | [Contract](#cosmwasm.wasm.v1.Contract) | repeated | | | `sequences` | [Sequence](#cosmwasm.wasm.v1.Sequence) | repeated | | | `gen_msgs` | [GenesisState.GenMsgs](#cosmwasm.wasm.v1.GenesisState.GenMsgs) | repeated | | -| `inactive_contract_addresses` | [string](#string) | repeated | InactiveContractAddresses is a list of contract address that set inactive | @@ -1345,6 +1347,77 @@ EventDeactivateContractProposal is the event that is emitted when the contract i + + + + + + + + + + + +

Top

+ +## lbm/wasm/v1/types.proto + + + + + +### Params +Params defines the set of wasm parameters. + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| `code_upload_access` | [cosmwasm.wasm.v1.AccessConfig](#cosmwasm.wasm.v1.AccessConfig) | | | +| `instantiate_default_permission` | [cosmwasm.wasm.v1.AccessType](#cosmwasm.wasm.v1.AccessType) | | | +| `gas_multiplier` | [uint64](#uint64) | | | +| `instance_cost` | [uint64](#uint64) | | | +| `compile_cost` | [uint64](#uint64) | | | + + + + + + + + + + + + + + + + +

Top

+ +## lbm/wasm/v1/genesis.proto + + + + + +### GenesisState +GenesisState - genesis state of x/wasm + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| `params` | [Params](#lbm.wasm.v1.Params) | | | +| `codes` | [cosmwasm.wasm.v1.Code](#cosmwasm.wasm.v1.Code) | repeated | | +| `contracts` | [cosmwasm.wasm.v1.Contract](#cosmwasm.wasm.v1.Contract) | repeated | | +| `sequences` | [cosmwasm.wasm.v1.Sequence](#cosmwasm.wasm.v1.Sequence) | repeated | | +| `gen_msgs` | [cosmwasm.wasm.v1.GenesisState.GenMsgs](#cosmwasm.wasm.v1.GenesisState.GenMsgs) | repeated | | +| `inactive_contract_addresses` | [string](#string) | repeated | InactiveContractAddresses is a list of contract address that set inactive | + + + + + diff --git a/proto/cosmwasm/wasm/v1/genesis.proto b/proto/cosmwasm/wasm/v1/genesis.proto index c3c6deaccf..9ef1b304ca 100644 --- a/proto/cosmwasm/wasm/v1/genesis.proto +++ b/proto/cosmwasm/wasm/v1/genesis.proto @@ -25,9 +25,6 @@ message GenesisState { (gogoproto.jsontag) = "gen_msgs,omitempty" ]; - // InactiveContractAddresses is a list of contract address that set inactive - repeated string inactive_contract_addresses = 6 [(gogoproto.jsontag) = "inactive_contract_address, omitempty"]; - // GenMsgs define the messages that can be executed during genesis phase in // order. The intention is to have more human readable data that is auditable. message GenMsgs { diff --git a/proto/cosmwasm/wasm/v1/tx.proto b/proto/cosmwasm/wasm/v1/tx.proto index 40274408c5..c937697834 100644 --- a/proto/cosmwasm/wasm/v1/tx.proto +++ b/proto/cosmwasm/wasm/v1/tx.proto @@ -86,7 +86,7 @@ message MsgInstantiateContract2 { // Funds coins that are transferred to the contract on instantiation repeated cosmos.base.v1beta1.Coin funds = 6 [ (gogoproto.nullable) = false, - (gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.Coins" + (gogoproto.castrepeated) = "github.com/line/lbm-sdk/types.Coins" ]; // Salt is an arbitrary value provided by the sender. Size can be 1 to 64. bytes salt = 7; diff --git a/proto/cosmwasm/wasm/v1/types.proto b/proto/cosmwasm/wasm/v1/types.proto index 70c5f95433..b0db599a7b 100644 --- a/proto/cosmwasm/wasm/v1/types.proto +++ b/proto/cosmwasm/wasm/v1/types.proto @@ -57,9 +57,6 @@ message Params { ]; AccessType instantiate_default_permission = 2 [ (gogoproto.moretags) = "yaml:\"instantiate_default_permission\"" ]; - uint64 gas_multiplier = 3 [(gogoproto.moretags) = "yaml:\"gas_multiplier\""]; - uint64 instance_cost = 4 [(gogoproto.moretags) = "yaml:\"instance_cost\""]; - uint64 compile_cost = 5 [(gogoproto.moretags) = "yaml:\"compile_cost\""]; } // CodeInfo is data for the uploaded contract WASM code diff --git a/proto/lbm/wasm/v1/genesis.proto b/proto/lbm/wasm/v1/genesis.proto new file mode 100644 index 0000000000..b4168329c9 --- /dev/null +++ b/proto/lbm/wasm/v1/genesis.proto @@ -0,0 +1,30 @@ +syntax = "proto3"; +package lbm.wasm.v1; + +import "gogoproto/gogo.proto"; +import "lbm/wasm/v1/types.proto"; +import "cosmwasm/wasm/v1/genesis.proto"; + +option go_package = "github.com/line/wasmd/x/wasm/lbmtypes"; + +// GenesisState - genesis state of x/wasm +message GenesisState { + Params params = 1 [ (gogoproto.nullable) = false ]; + repeated cosmwasm.wasm.v1.Code codes = 2 + [ (gogoproto.nullable) = false, (gogoproto.jsontag) = "codes,omitempty" ]; + repeated cosmwasm.wasm.v1.Contract contracts = 3 [ + (gogoproto.nullable) = false, + (gogoproto.jsontag) = "contracts,omitempty" + ]; + repeated cosmwasm.wasm.v1.Sequence sequences = 4 [ + (gogoproto.nullable) = false, + (gogoproto.jsontag) = "sequences,omitempty" + ]; + repeated cosmwasm.wasm.v1.GenesisState.GenMsgs gen_msgs = 5 [ + (gogoproto.nullable) = false, + (gogoproto.jsontag) = "gen_msgs,omitempty" + ]; + + // InactiveContractAddresses is a list of contract address that set inactive + repeated string inactive_contract_addresses = 6 [(gogoproto.jsontag) = "inactive_contract_address, omitempty"]; +} diff --git a/proto/lbm/wasm/v1/types.proto b/proto/lbm/wasm/v1/types.proto new file mode 100644 index 0000000000..a969a6987c --- /dev/null +++ b/proto/lbm/wasm/v1/types.proto @@ -0,0 +1,24 @@ +syntax = "proto3"; +package lbm.wasm.v1; + +import "gogoproto/gogo.proto"; +import "cosmwasm/wasm/v1/types.proto"; + +option go_package = "github.com/line/wasmd/x/wasm/lbmtypes"; +option (gogoproto.goproto_getters_all) = false; +option (gogoproto.equal_all) = true; + +// Params defines the set of wasm parameters. +message Params { + option (gogoproto.goproto_stringer) = false; + cosmwasm.wasm.v1.AccessConfig code_upload_access = 1 [ + (gogoproto.nullable) = false, + (gogoproto.moretags) = "yaml:\"code_upload_access\"" + ]; + cosmwasm.wasm.v1.AccessType instantiate_default_permission = 2 + [ (gogoproto.moretags) = "yaml:\"instantiate_default_permission\"" ]; + + uint64 gas_multiplier = 3 [(gogoproto.moretags) = "yaml:\"gas_multiplier\""]; + uint64 instance_cost = 4 [(gogoproto.moretags) = "yaml:\"instance_cost\""]; + uint64 compile_cost = 5 [(gogoproto.moretags) = "yaml:\"compile_cost\""]; +} diff --git a/x/wasm/genesis_test.go b/x/wasm/genesis_test.go index ba5722cd36..42bcdfb336 100644 --- a/x/wasm/genesis_test.go +++ b/x/wasm/genesis_test.go @@ -14,8 +14,8 @@ func TestInitGenesis(t *testing.T) { deposit := sdk.NewCoins(sdk.NewInt64Coin("denom", 100000)) topUp := sdk.NewCoins(sdk.NewInt64Coin("denom", 5000)) - creator := data.faucet.NewFundedAccount(data.ctx, deposit.Add(deposit...)...) - fred := data.faucet.NewFundedAccount(data.ctx, topUp...) + creator := data.faucet.NewFundedRandomAccount(data.ctx, deposit.Add(deposit...)...) + fred := data.faucet.NewFundedRandomAccount(data.ctx, topUp...) h := data.module.Route().Handler() q := data.module.LegacyQuerierHandler(nil) diff --git a/x/wasm/keeper/api.go b/x/wasm/keeper/api.go index d7b091bb75..f10a251600 100644 --- a/x/wasm/keeper/api.go +++ b/x/wasm/keeper/api.go @@ -4,46 +4,40 @@ import ( sdk "github.com/line/lbm-sdk/types" wasmvm "github.com/line/wasmvm" wasmvmtypes "github.com/line/wasmvm/types" - - types "github.com/line/wasmd/x/wasm/types" ) -type cosmwasmAPIImpl struct { - gasMultiplier GasMultiplier -} - const ( + // DefaultGasCostHumanAddress is how moch SDK gas we charge to convert to a human address format + DefaultGasCostHumanAddress = 5 + // DefaultGasCostCanonicalAddress is how moch SDK gas we charge to convert to a canonical address format + DefaultGasCostCanonicalAddress = 4 + // DefaultDeserializationCostPerByte The formular should be `len(data) * deserializationCostPerByte` DefaultDeserializationCostPerByte = 1 ) var ( + costHumanize = DefaultGasCostHumanAddress * DefaultGasMultiplier + costCanonical = DefaultGasCostCanonicalAddress * DefaultGasMultiplier costJSONDeserialization = wasmvmtypes.UFraction{ - Numerator: DefaultDeserializationCostPerByte * types.DefaultGasMultiplier, + Numerator: DefaultDeserializationCostPerByte * DefaultGasMultiplier, Denominator: 1, } ) -func (a cosmwasmAPIImpl) humanAddress(canon []byte) (string, uint64, error) { - gas := a.gasMultiplier.FromWasmVMGas(5) +func humanAddress(canon []byte) (string, uint64, error) { if err := sdk.VerifyAddressFormat(canon); err != nil { - return "", gas, err + return "", costHumanize, err } - - return sdk.AccAddress(canon).String(), gas, nil + return sdk.AccAddress(canon).String(), costHumanize, nil } -func (a cosmwasmAPIImpl) canonicalAddress(human string) ([]byte, uint64, error) { +func canonicalAddress(human string) ([]byte, uint64, error) { bz, err := sdk.AccAddressFromBech32(human) - return bz, a.gasMultiplier.ToWasmVMGas(4), err + return bz, costCanonical, err } -func (k Keeper) cosmwasmAPI(ctx sdk.Context) wasmvm.GoAPI { - x := cosmwasmAPIImpl{ - gasMultiplier: k.getGasMultiplier(ctx), - } - return wasmvm.GoAPI{ - HumanAddress: x.humanAddress, - CanonicalAddress: x.canonicalAddress, - } +var cosmwasmAPI = wasmvm.GoAPI{ + HumanAddress: humanAddress, + CanonicalAddress: canonicalAddress, } diff --git a/x/wasm/keeper/contract_keeper.go b/x/wasm/keeper/contract_keeper.go index 667475b0b5..08f4c3e726 100644 --- a/x/wasm/keeper/contract_keeper.go +++ b/x/wasm/keeper/contract_keeper.go @@ -33,8 +33,8 @@ type decoratedKeeper interface { setAccessConfig(ctx sdk.Context, codeID uint64, caller sdk.AccAddress, newConfig types.AccessConfig, autz AuthorizationPolicy) error ClassicAddressGenerator() AddressGenerator - activateContract(ctx sdk.Context, contractAddress sdk.AccAddress) error - deactivateContract(ctx sdk.Context, contractAddress sdk.AccAddress) error + //activateContract(ctx sdk.Context, contractAddress sdk.AccAddress) error + //deactivateContract(ctx sdk.Context, contractAddress sdk.AccAddress) error } type PermissionedKeeper struct { @@ -132,10 +132,10 @@ func (p PermissionedKeeper) SetAccessConfig(ctx sdk.Context, codeID uint64, call return p.nested.setAccessConfig(ctx, codeID, caller, newConfig, p.authZPolicy) } -func (p PermissionedKeeper) DeactivateContract(ctx sdk.Context, contractAddress sdk.AccAddress) error { - return p.nested.deactivateContract(ctx, contractAddress) -} - -func (p PermissionedKeeper) ActivateContract(ctx sdk.Context, contractAddress sdk.AccAddress) error { - return p.nested.activateContract(ctx, contractAddress) -} +//func (p PermissionedKeeper) DeactivateContract(ctx sdk.Context, contractAddress sdk.AccAddress) error { +// return p.nested.deactivateContract(ctx, contractAddress) +//} +// +//func (p PermissionedKeeper) ActivateContract(ctx sdk.Context, contractAddress sdk.AccAddress) error { +// return p.nested.activateContract(ctx, contractAddress) +//} diff --git a/x/wasm/keeper/contract_keeper_test.go b/x/wasm/keeper/contract_keeper_test.go index a37bdebc1b..34227a122b 100644 --- a/x/wasm/keeper/contract_keeper_test.go +++ b/x/wasm/keeper/contract_keeper_test.go @@ -28,7 +28,7 @@ func TestInstantiate2(t *testing.T) { beneficiaryAddr := RandomAccountAddress(t) initMsg := mustMarshal(t, HackatomExampleInitMsg{Verifier: verifierAddr, Beneficiary: beneficiaryAddr}) - otherAddr := keepers.Faucet.NewFundedAccount(parentCtx, sdk.NewInt64Coin("denom", 1_000_000_000)) + otherAddr := keepers.Faucet.NewFundedRandomAccount(parentCtx, sdk.NewInt64Coin("denom", 1_000_000_000)) const ( mySalt = "my salt" diff --git a/x/wasm/keeper/gas_register.go b/x/wasm/keeper/gas_register.go index ca937a3f53..24c5cea1cc 100644 --- a/x/wasm/keeper/gas_register.go +++ b/x/wasm/keeper/gas_register.go @@ -1,6 +1,7 @@ package keeper import ( + storetypes "github.com/line/lbm-sdk/store/types" sdk "github.com/line/lbm-sdk/types" sdkerrors "github.com/line/lbm-sdk/types/errors" wasmvmtypes "github.com/line/wasmvm/types" @@ -9,6 +10,33 @@ import ( ) const ( + // DefaultGasMultiplier is how many CosmWasm gas points = 1 Cosmos SDK gas point. + // + // CosmWasm gas strategy is documented in https://github.com/CosmWasm/cosmwasm/blob/v1.0.0-beta/docs/GAS.md. + // Cosmos SDK reference costs can be found here: https://github.com/cosmos/cosmos-sdk/blob/v0.42.10/store/types/gas.go#L198-L209. + // + // The original multiplier of 100 up to CosmWasm 0.16 was based on + // "A write at ~3000 gas and ~200us = 10 gas per us (microsecond) cpu/io + // Rough timing have 88k gas at 90us, which is equal to 1k sdk gas... (one read)" + // as well as manual Wasmer benchmarks from 2019. This was then multiplied by 150_000 + // in the 0.16 -> 1.0 upgrade (https://github.com/CosmWasm/cosmwasm/pull/1120). + // + // The multiplier deserves more reproducible benchmarking and a strategy that allows easy adjustments. + // This is tracked in https://github.com/CosmWasm/wasmd/issues/566 and https://github.com/CosmWasm/wasmd/issues/631. + // Gas adjustments are consensus breaking but may happen in any release marked as consensus breaking. + // Do not make assumptions on how much gas an operation will consume in places that are hard to adjust, + // such as hardcoding them in contracts. + // + // Please note that all gas prices returned to wasmvm should have this multiplied. + // Benchmarks and numbers were discussed in: https://github.com/CosmWasm/wasmd/pull/634#issuecomment-938055852 + DefaultGasMultiplier uint64 = 140_000_000 + // DefaultInstanceCost is how much SDK gas we charge each time we load a WASM instance. + // Creating a new instance is costly, and this helps put a recursion limit to contracts calling contracts. + // Benchmarks and numbers were discussed in: https://github.com/CosmWasm/wasmd/pull/634#issuecomment-938056803 + DefaultInstanceCost uint64 = 60_000 + // DefaultCompileCost is how much SDK gas is charged *per byte* for compiling WASM code. + // Benchmarks and numbers were discussed in: https://github.com/CosmWasm/wasmd/pull/634#issuecomment-938056803 + DefaultCompileCost uint64 = 3 // DefaultEventAttributeDataCost is how much SDK gas is charged *per byte* for attribute data in events. // This is used with len(key) + len(value) DefaultEventAttributeDataCost uint64 = 1 @@ -40,16 +68,35 @@ func DefaultPerByteUncompressCost() wasmvmtypes.UFraction { // GasRegister abstract source for gas costs type GasRegister interface { + // NewContractInstanceCosts costs to crate a new contract instance from code + NewContractInstanceCosts(pinned bool, msgLen int) sdk.Gas + // CompileCosts costs to persist and "compile" a new wasm contract + CompileCosts(byteLength int) sdk.Gas // UncompressCosts costs to unpack a new wasm contract UncompressCosts(byteLength int) sdk.Gas + // InstantiateContractCosts costs when interacting with a wasm contract + InstantiateContractCosts(pinned bool, msgLen int) sdk.Gas + // ReplyCosts costs to handle a message reply + ReplyCosts(pinned bool, reply wasmvmtypes.Reply) sdk.Gas // EventCosts costs to persist an event EventCosts(attrs []wasmvmtypes.EventAttribute, events wasmvmtypes.Events) sdk.Gas + // ToWasmVMGas converts from sdk gas to wasmvm gas + ToWasmVMGas(source sdk.Gas) uint64 + // FromWasmVMGas converts from wasmvm gas to sdk gas + FromWasmVMGas(source uint64) sdk.Gas } // WasmGasRegisterConfig config type type WasmGasRegisterConfig struct { + // InstanceCost costs when interacting with a wasm contract + InstanceCost sdk.Gas + // CompileCosts costs to persist and "compile" a new wasm contract + CompileCost sdk.Gas // UncompressCost costs per byte to unpack a contract UncompressCost wasmvmtypes.UFraction + // GasMultiplier is how many cosmwasm gas points = 1 sdk gas point + // SDK reference costs can be found here: https://github.com/cosmos/cosmos-sdk/blob/02c6c9fafd58da88550ab4d7d494724a477c8a68/store/types/gas.go#L153-L164 + GasMultiplier sdk.Gas // EventPerAttributeCost is how much SDK gas is charged *per byte* for attribute data in events. // This is used with len(key) + len(value) EventPerAttributeCost sdk.Gas @@ -68,6 +115,9 @@ type WasmGasRegisterConfig struct { // DefaultGasRegisterConfig default values func DefaultGasRegisterConfig() WasmGasRegisterConfig { return WasmGasRegisterConfig{ + InstanceCost: DefaultInstanceCost, + CompileCost: DefaultCompileCost, + GasMultiplier: DefaultGasMultiplier, EventPerAttributeCost: DefaultPerAttributeCost, CustomEventCost: DefaultPerCustomEventCost, EventAttributeDataCost: DefaultEventAttributeDataCost, @@ -89,11 +139,27 @@ func NewDefaultWasmGasRegister() WasmGasRegister { // NewWasmGasRegister constructor func NewWasmGasRegister(c WasmGasRegisterConfig) WasmGasRegister { + if c.GasMultiplier == 0 { + panic(sdkerrors.Wrap(sdkerrors.ErrLogic, "GasMultiplier can not be 0")) + } return WasmGasRegister{ c: c, } } +// NewContractInstanceCosts costs to crate a new contract instance from code +func (g WasmGasRegister) NewContractInstanceCosts(pinned bool, msgLen int) storetypes.Gas { + return g.InstantiateContractCosts(pinned, msgLen) +} + +// CompileCosts costs to persist and "compile" a new wasm contract +func (g WasmGasRegister) CompileCosts(byteLength int) storetypes.Gas { + if byteLength < 0 { + panic(sdkerrors.Wrap(types.ErrInvalid, "negative length")) + } + return g.c.CompileCost * uint64(byteLength) +} + // UncompressCosts costs to unpack a new wasm contract func (g WasmGasRegister) UncompressCosts(byteLength int) sdk.Gas { if byteLength < 0 { @@ -102,6 +168,35 @@ func (g WasmGasRegister) UncompressCosts(byteLength int) sdk.Gas { return g.c.UncompressCost.Mul(uint64(byteLength)).Floor() } +// InstantiateContractCosts costs when interacting with a wasm contract +func (g WasmGasRegister) InstantiateContractCosts(pinned bool, msgLen int) sdk.Gas { + if msgLen < 0 { + panic(sdkerrors.Wrap(types.ErrInvalid, "negative length")) + } + dataCosts := sdk.Gas(msgLen) * g.c.ContractMessageDataCost + if pinned { + return dataCosts + } + return g.c.InstanceCost + dataCosts +} + +// ReplyCosts costs to to handle a message reply +func (g WasmGasRegister) ReplyCosts(pinned bool, reply wasmvmtypes.Reply) sdk.Gas { + var eventGas sdk.Gas + msgLen := len(reply.Result.Err) + if reply.Result.Ok != nil { + msgLen += len(reply.Result.Ok.Data) + var attrs []wasmvmtypes.EventAttribute + for _, e := range reply.Result.Ok.Events { + eventGas += sdk.Gas(len(e.Type)) * g.c.EventAttributeDataCost + attrs = append(attrs, e.Attributes...) + } + // apply free tier on the whole set not per event + eventGas += g.EventCosts(attrs, nil) + } + return eventGas + g.InstantiateContractCosts(pinned, msgLen) +} + // EventCosts costs to persist an event func (g WasmGasRegister) EventCosts(attrs []wasmvmtypes.EventAttribute, events wasmvmtypes.Events) sdk.Gas { gas, remainingFreeTier := g.eventAttributeCosts(attrs, g.c.EventAttributeDataFreeTier) @@ -141,3 +236,17 @@ func calcWithFreeTier(storedBytes uint64, freeTier uint64) (uint64, uint64) { storedBytes -= freeTier return storedBytes, 0 } + +// ToWasmVMGas convert to wasmVM contract runtime gas unit +func (g WasmGasRegister) ToWasmVMGas(source storetypes.Gas) uint64 { + x := source * g.c.GasMultiplier + if x < source { + panic(sdk.ErrorOutOfGas{Descriptor: "overflow"}) + } + return x +} + +// FromWasmVMGas converts to SDK gas unit +func (g WasmGasRegister) FromWasmVMGas(source uint64) sdk.Gas { + return source / g.c.GasMultiplier +} diff --git a/x/wasm/keeper/genesis.go b/x/wasm/keeper/genesis.go index bdcf99d03f..ebd83326c0 100644 --- a/x/wasm/keeper/genesis.go +++ b/x/wasm/keeper/genesis.go @@ -65,16 +65,16 @@ func InitGenesis(ctx sdk.Context, keeper *Keeper, data types.GenesisState, staki return nil, sdkerrors.Wrapf(types.ErrInvalid, "seq %s with value: %d must be greater than: %d ", string(types.KeyLastInstanceID), seqVal, maxContractID) } - for i, contractAddr := range data.InactiveContractAddresses { - inactiveContractAddr, err := sdk.AccAddressFromBech32(contractAddr) - if err != nil { - return nil, sdkerrors.Wrapf(err, "wrong contract address %s", contractAddr) - } - err = keeper.deactivateContract(ctx, inactiveContractAddr) - if err != nil { - return nil, sdkerrors.Wrapf(err, "contract number %d", i) - } - } + //for i, contractAddr := range data.InactiveContractAddresses { + // inactiveContractAddr, err := sdk.AccAddressFromBech32(contractAddr) + // if err != nil { + // return nil, sdkerrors.Wrapf(err, "wrong contract address %s", contractAddr) + // } + // err = keeper.deactivateContract(ctx, inactiveContractAddr) + // if err != nil { + // return nil, sdkerrors.Wrapf(err, "contract number %d", i) + // } + //} if len(data.GenMsgs) == 0 { return nil, nil @@ -135,10 +135,10 @@ func ExportGenesis(ctx sdk.Context, keeper *Keeper) *types.GenesisState { }) } - keeper.IterateInactiveContracts(ctx, func(contractAddr sdk.AccAddress) (stop bool) { - genState.InactiveContractAddresses = append(genState.InactiveContractAddresses, contractAddr.String()) - return false - }) + //keeper.IterateInactiveContracts(ctx, func(contractAddr sdk.AccAddress) (stop bool) { + // genState.InactiveContractAddresses = append(genState.InactiveContractAddresses, contractAddr.String()) + // return false + //}) return &genState } diff --git a/x/wasm/keeper/genesis_test.go b/x/wasm/keeper/genesis_test.go index 87cf6920e2..53a8406388 100644 --- a/x/wasm/keeper/genesis_test.go +++ b/x/wasm/keeper/genesis_test.go @@ -464,10 +464,7 @@ func TestImportContractWithCodeHistoryReset(t *testing.T) { "code_upload_access": { "permission": "Everybody" }, - "instantiate_default_permission": "Everybody", - "gas_multiplier": 100, - "instance_cost": 40000, - "compile_cost": 2 + "instantiate_default_permission": "Everybody" }, "codes": [ { diff --git a/x/wasm/keeper/handler_plugin_test.go b/x/wasm/keeper/handler_plugin_test.go index 20c7df03b0..3a6c305301 100644 --- a/x/wasm/keeper/handler_plugin_test.go +++ b/x/wasm/keeper/handler_plugin_test.go @@ -320,7 +320,7 @@ func TestBurnCoinMessageHandlerIntegration(t *testing.T) { // picks the message in the default handler chain ctx, keepers := CreateDefaultTestInput(t) // set some supply - keepers.Faucet.NewFundedAccount(ctx, sdk.NewCoin("denom", sdk.NewInt(10_000_000))) + keepers.Faucet.NewFundedRandomAccount(ctx, sdk.NewCoin("denom", sdk.NewInt(10_000_000))) k := keepers.WasmKeeper example := InstantiateHackatomExampleContract(t, ctx, keepers) // with deposit of 100 stake diff --git a/x/wasm/keeper/keeper.go b/x/wasm/keeper/keeper.go index 0f492862ca..879361f9f4 100644 --- a/x/wasm/keeper/keeper.go +++ b/x/wasm/keeper/keeper.go @@ -15,10 +15,8 @@ import ( "github.com/line/lbm-sdk/codec" "github.com/line/lbm-sdk/store/prefix" - storetypes "github.com/line/lbm-sdk/store/types" sdk "github.com/line/lbm-sdk/types" sdkerrors "github.com/line/lbm-sdk/types/errors" - authkeeper "github.com/line/lbm-sdk/x/auth/keeper" authtypes "github.com/line/lbm-sdk/x/auth/types" vestingexported "github.com/line/lbm-sdk/x/auth/vesting/exported" bankpluskeeper "github.com/line/lbm-sdk/x/bankplus/keeper" @@ -56,8 +54,8 @@ type WasmVMQueryHandler interface { type CoinTransferrer interface { // TransferCoins sends the coin amounts from the source to the destination with rules applied. TransferCoins(ctx sdk.Context, fromAddr sdk.AccAddress, toAddr sdk.AccAddress, amt sdk.Coins) error - AddToInactiveAddr(ctx sdk.Context, address sdk.AccAddress) - DeleteFromInactiveAddr(ctx sdk.Context, address sdk.AccAddress) + //AddToInactiveAddr(ctx sdk.Context, address sdk.AccAddress) + //DeleteFromInactiveAddr(ctx sdk.Context, address sdk.AccAddress) } // AccountPruner handles the balances and data cleanup for accounts that are pruned on contract instantiate. @@ -103,7 +101,7 @@ type Keeper struct { // queryGasLimit is the max wasmvm gas that can be spent on executing a query with a contract queryGasLimit uint64 paramSpace paramtypes.Subspace - gasRegister WasmGasRegister + gasRegister GasRegister maxQueryStackSize uint32 acceptedAccountTypes map[reflect.Type]struct{} accountPruner AccountPruner @@ -115,7 +113,8 @@ func NewKeeper( cdc codec.Codec, storeKey sdk.StoreKey, paramSpace paramtypes.Subspace, - accountKeeper authkeeper.AccountKeeper, + //accountKeeper authkeeper.AccountKeeper, + accountKeeper types.AccountKeeper, bankKeeper types.BankKeeper, stakingKeeper types.StakingKeeper, distKeeper types.DistributionKeeper, @@ -179,65 +178,65 @@ func (k Keeper) getInstantiateAccessConfig(ctx sdk.Context) types.AccessType { return a } -func (k Keeper) getGasMultiplier(ctx sdk.Context) GasMultiplier { - var a uint64 - k.paramSpace.Get(ctx, types.ParamStoreKeyGasMultiplier, &a) - return NewGasMultiplier(a) -} - -func (k Keeper) getInstanceCost(ctx sdk.Context) uint64 { - var a uint64 - k.paramSpace.Get(ctx, types.ParamStoreKeyInstanceCost, &a) - return a -} - -// NewContractInstanceCosts costs to crate a new contract instance from code -func (k Keeper) newContractInstanceCosts(g WasmGasRegister, ctx sdk.Context, pinned bool, msgLen int) storetypes.Gas { - return k.instantiateContractCosts(g, ctx, pinned, msgLen) -} - -// InstantiateContractCosts costs when interacting with a wasm contract -func (k Keeper) instantiateContractCosts(g WasmGasRegister, ctx sdk.Context, pinned bool, msgLen int) sdk.Gas { - if msgLen < 0 { - panic(sdkerrors.Wrap(types.ErrInvalid, "negative length")) - } - dataCosts := sdk.Gas(msgLen) * g.c.ContractMessageDataCost - if pinned { - return dataCosts - } - return k.getInstanceCost(ctx) + dataCosts -} - -// ReplyCosts costs to to handle a message reply -func (k Keeper) replyCosts(g WasmGasRegister, ctx sdk.Context, pinned bool, reply wasmvmtypes.Reply) sdk.Gas { - var eventGas sdk.Gas - msgLen := len(reply.Result.Err) - if reply.Result.Ok != nil { - msgLen += len(reply.Result.Ok.Data) - var attrs []wasmvmtypes.EventAttribute - for _, e := range reply.Result.Ok.Events { - eventGas += sdk.Gas(len(e.Type)) * g.c.EventAttributeDataCost - attrs = append(attrs, e.Attributes...) - } - // apply free tier on the whole set not per event - eventGas += g.EventCosts(attrs, nil) - } - return eventGas + k.instantiateContractCosts(g, ctx, pinned, msgLen) -} - -func (k Keeper) getCompileCost(ctx sdk.Context) uint64 { - var a uint64 - k.paramSpace.Get(ctx, types.ParamStoreKeyCompileCost, &a) - return a -} - -// CompileCosts costs to persist and "compile" a new wasm contract -func (k Keeper) compileCosts(ctx sdk.Context, byteLength int) storetypes.Gas { - if byteLength < 0 { - panic(sdkerrors.Wrap(types.ErrInvalid, "negative length")) - } - return k.getCompileCost(ctx) * uint64(byteLength) -} +//func (k Keeper) getGasMultiplier(ctx sdk.Context) GasMultiplier { +// var a uint64 +// k.paramSpace.Get(ctx, types.ParamStoreKeyGasMultiplier, &a) +// return NewGasMultiplier(a) +//} +// +//func (k Keeper) getInstanceCost(ctx sdk.Context) uint64 { +// var a uint64 +// k.paramSpace.Get(ctx, types.ParamStoreKeyInstanceCost, &a) +// return a +//} +// +//// NewContractInstanceCosts costs to crate a new contract instance from code +//func (k Keeper) newContractInstanceCosts(g WasmGasRegister, ctx sdk.Context, pinned bool, msgLen int) storetypes.Gas { +// return k.instantiateContractCosts(g, ctx, pinned, msgLen) +//} +// +//// InstantiateContractCosts costs when interacting with a wasm contract +//func (k Keeper) instantiateContractCosts(g WasmGasRegister, ctx sdk.Context, pinned bool, msgLen int) sdk.Gas { +// if msgLen < 0 { +// panic(sdkerrors.Wrap(types.ErrInvalid, "negative length")) +// } +// dataCosts := sdk.Gas(msgLen) * g.c.ContractMessageDataCost +// if pinned { +// return dataCosts +// } +// return k.getInstanceCost(ctx) + dataCosts +//} +// +//// ReplyCosts costs to to handle a message reply +//func (k Keeper) replyCosts(g WasmGasRegister, ctx sdk.Context, pinned bool, reply wasmvmtypes.Reply) sdk.Gas { +// var eventGas sdk.Gas +// msgLen := len(reply.Result.Err) +// if reply.Result.Ok != nil { +// msgLen += len(reply.Result.Ok.Data) +// var attrs []wasmvmtypes.EventAttribute +// for _, e := range reply.Result.Ok.Events { +// eventGas += sdk.Gas(len(e.Type)) * g.c.EventAttributeDataCost +// attrs = append(attrs, e.Attributes...) +// } +// // apply free tier on the whole set not per event +// eventGas += g.EventCosts(attrs, nil) +// } +// return eventGas + k.instantiateContractCosts(g, ctx, pinned, msgLen) +//} +// +//func (k Keeper) getCompileCost(ctx sdk.Context) uint64 { +// var a uint64 +// k.paramSpace.Get(ctx, types.ParamStoreKeyCompileCost, &a) +// return a +//} +// +//// CompileCosts costs to persist and "compile" a new wasm contract +//func (k Keeper) compileCosts(ctx sdk.Context, byteLength int) storetypes.Gas { +// if byteLength < 0 { +// panic(sdkerrors.Wrap(types.ErrInvalid, "negative length")) +// } +// return k.getCompileCost(ctx) * uint64(byteLength) +//} // GetParams returns the total set of wasm parameters. func (k Keeper) GetParams(ctx sdk.Context) types.Params { @@ -275,7 +274,7 @@ func (k Keeper) create(ctx sdk.Context, creator sdk.AccAddress, wasmCode []byte, } } - ctx.GasMeter().ConsumeGas(k.compileCosts(ctx, len(wasmCode)), "Compiling WASM Bytecode") + ctx.GasMeter().ConsumeGas(k.gasRegister.CompileCosts(len(wasmCode)), "Compiling wasm bytecode") checksum, err = k.wasmVM.Create(wasmCode) if err != nil { return 0, checksum, sdkerrors.Wrap(types.ErrCreateFailed, err.Error()) @@ -349,7 +348,7 @@ func (k Keeper) instantiate( if creator == nil { return nil, nil, types.ErrEmpty.Wrap("creator") } - instanceCosts := k.newContractInstanceCosts(k.gasRegister, ctx, k.IsPinnedCode(ctx, codeID), len(initMsg)) + instanceCosts := k.gasRegister.NewContractInstanceCosts(k.IsPinnedCode(ctx, codeID), len(initMsg)) ctx.GasMeter().ConsumeGas(instanceCosts, "Loading CosmWasm module: instantiate") // get contact info @@ -419,7 +418,7 @@ func (k Keeper) instantiate( // instantiate wasm contract gas := k.runtimeGasForContract(ctx) - res, gasUsed, err := k.wasmVM.Instantiate(codeInfo.CodeHash, env, info, initMsg, prefixStore, k.cosmwasmAPI(ctx), querier, k.gasMeter(ctx), gas, costJSONDeserialization) + res, gasUsed, err := k.wasmVM.Instantiate(codeInfo.CodeHash, env, info, initMsg, prefixStore, cosmwasmAPI, querier, k.gasMeter(ctx), gas, costJSONDeserialization) k.consumeRuntimeGas(ctx, gasUsed) if err != nil { return nil, nil, sdkerrors.Wrap(types.ErrInstantiateFailed, err.Error()) @@ -470,11 +469,11 @@ func (k Keeper) execute(ctx sdk.Context, contractAddress sdk.AccAddress, caller if err != nil { return nil, err } - if k.IsInactiveContract(ctx, contractAddress) { - return nil, sdkerrors.Wrap(types.ErrInactiveContract, "can not execute") - } + //if k.IsInactiveContract(ctx, contractAddress) { + // return nil, sdkerrors.Wrap(types.ErrInactiveContract, "can not execute") + //} - executeCosts := k.instantiateContractCosts(k.gasRegister, ctx, k.IsPinnedCode(ctx, contractInfo.CodeID), len(msg)) + executeCosts := k.gasRegister.InstantiateContractCosts(k.IsPinnedCode(ctx, contractInfo.CodeID), len(msg)) ctx.GasMeter().ConsumeGas(executeCosts, "Loading CosmWasm module: execute") // add more funds @@ -490,7 +489,7 @@ func (k Keeper) execute(ctx sdk.Context, contractAddress sdk.AccAddress, caller // prepare querier querier := k.newQueryHandler(ctx, contractAddress) gas := k.runtimeGasForContract(ctx) - res, gasUsed, execErr := k.wasmVM.Execute(codeInfo.CodeHash, env, info, msg, prefixStore, k.cosmwasmAPI(ctx), querier, k.gasMeter(ctx), gas, costJSONDeserialization) + res, gasUsed, execErr := k.wasmVM.Execute(codeInfo.CodeHash, env, info, msg, prefixStore, cosmwasmAPI, querier, k.gasMeter(ctx), gas, costJSONDeserialization) k.consumeRuntimeGas(ctx, gasUsed) if execErr != nil { return nil, sdkerrors.Wrap(types.ErrExecuteFailed, execErr.Error()) @@ -511,16 +510,16 @@ func (k Keeper) execute(ctx sdk.Context, contractAddress sdk.AccAddress, caller func (k Keeper) migrate(ctx sdk.Context, contractAddress sdk.AccAddress, caller sdk.AccAddress, newCodeID uint64, msg []byte, authZ AuthorizationPolicy) ([]byte, error) { defer func(begin time.Time) { k.metrics.MigrateElapsedTimes.Observe(time.Since(begin).Seconds()) }(time.Now()) - migrateSetupCosts := k.instantiateContractCosts(k.gasRegister, ctx, k.IsPinnedCode(ctx, newCodeID), len(msg)) + migrateSetupCosts := k.gasRegister.InstantiateContractCosts(k.IsPinnedCode(ctx, newCodeID), len(msg)) ctx.GasMeter().ConsumeGas(migrateSetupCosts, "Loading CosmWasm module: migrate") contractInfo := k.GetContractInfo(ctx, contractAddress) if contractInfo == nil { return nil, sdkerrors.Wrap(sdkerrors.ErrInvalidRequest, "unknown contract") } - if k.IsInactiveContract(ctx, contractAddress) { - return nil, sdkerrors.Wrap(types.ErrInactiveContract, "can not migrate") - } + //if k.IsInactiveContract(ctx, contractAddress) { + // return nil, sdkerrors.Wrap(types.ErrInactiveContract, "can not migrate") + //} if !authZ.CanModifyContract(contractInfo.AdminAddr(), caller) { return nil, sdkerrors.Wrap(sdkerrors.ErrUnauthorized, "can not migrate") } @@ -558,7 +557,7 @@ func (k Keeper) migrate(ctx sdk.Context, contractAddress sdk.AccAddress, caller prefixStoreKey := types.GetContractStorePrefix(contractAddress) prefixStore := prefix.NewStore(ctx.KVStore(k.storeKey), prefixStoreKey) gas := k.runtimeGasForContract(ctx) - res, gasUsed, err := k.wasmVM.Migrate(newCodeInfo.CodeHash, env, msg, &prefixStore, k.cosmwasmAPI(ctx), &querier, k.gasMeter(ctx), gas, costJSONDeserialization) + res, gasUsed, err := k.wasmVM.Migrate(newCodeInfo.CodeHash, env, msg, &prefixStore, cosmwasmAPI, &querier, k.gasMeter(ctx), gas, costJSONDeserialization) k.consumeRuntimeGas(ctx, gasUsed) if err != nil { return nil, sdkerrors.Wrap(types.ErrMigrationFailed, err.Error()) @@ -596,7 +595,7 @@ func (k Keeper) Sudo(ctx sdk.Context, contractAddress sdk.AccAddress, msg []byte return nil, err } - sudoSetupCosts := k.instantiateContractCosts(k.gasRegister, ctx, k.IsPinnedCode(ctx, contractInfo.CodeID), len(msg)) + sudoSetupCosts := k.gasRegister.InstantiateContractCosts(k.IsPinnedCode(ctx, contractInfo.CodeID), len(msg)) ctx.GasMeter().ConsumeGas(sudoSetupCosts, "Loading CosmWasm module: sudo") env := types.NewEnv(ctx, contractAddress) @@ -604,7 +603,7 @@ func (k Keeper) Sudo(ctx sdk.Context, contractAddress sdk.AccAddress, msg []byte // prepare querier querier := k.newQueryHandler(ctx, contractAddress) gas := k.runtimeGasForContract(ctx) - res, gasUsed, execErr := k.wasmVM.Sudo(codeInfo.CodeHash, env, msg, prefixStore, k.cosmwasmAPI(ctx), querier, k.gasMeter(ctx), gas, costJSONDeserialization) + res, gasUsed, execErr := k.wasmVM.Sudo(codeInfo.CodeHash, env, msg, prefixStore, cosmwasmAPI, querier, k.gasMeter(ctx), gas, costJSONDeserialization) k.consumeRuntimeGas(ctx, gasUsed) if execErr != nil { return nil, sdkerrors.Wrap(types.ErrExecuteFailed, execErr.Error()) @@ -631,7 +630,7 @@ func (k Keeper) reply(ctx sdk.Context, contractAddress sdk.AccAddress, reply was } // always consider this pinned - replyCosts := k.replyCosts(k.gasRegister, ctx, true, reply) + replyCosts := k.gasRegister.ReplyCosts(true, reply) ctx.GasMeter().ConsumeGas(replyCosts, "Loading CosmWasm module: reply") env := types.NewEnv(ctx, contractAddress) @@ -639,7 +638,8 @@ func (k Keeper) reply(ctx sdk.Context, contractAddress sdk.AccAddress, reply was // prepare querier querier := k.newQueryHandler(ctx, contractAddress) gas := k.runtimeGasForContract(ctx) - res, gasUsed, execErr := k.wasmVM.Reply(codeInfo.CodeHash, env, reply, prefixStore, k.cosmwasmAPI(ctx), querier, k.gasMeter(ctx), gas, costJSONDeserialization) + + res, gasUsed, execErr := k.wasmVM.Reply(codeInfo.CodeHash, env, reply, prefixStore, cosmwasmAPI, querier, k.gasMeter(ctx), gas, costJSONDeserialization) k.consumeRuntimeGas(ctx, gasUsed) if execErr != nil { return nil, sdkerrors.Wrap(types.ErrExecuteFailed, execErr.Error()) @@ -688,9 +688,9 @@ func (k Keeper) setContractAdmin(ctx sdk.Context, contractAddress, caller, newAd if contractInfo == nil { return sdkerrors.Wrap(sdkerrors.ErrInvalidRequest, "unknown contract") } - if k.IsInactiveContract(ctx, contractAddress) { - return sdkerrors.Wrap(types.ErrInactiveContract, "can not modify contract") - } + //if k.IsInactiveContract(ctx, contractAddress) { + // return sdkerrors.Wrap(types.ErrInactiveContract, "can not modify contract") + //} if !authZ.CanModifyContract(contractInfo.AdminAddr(), caller) { return sdkerrors.Wrap(sdkerrors.ErrUnauthorized, "can not modify contract") } @@ -711,10 +711,10 @@ func (k Keeper) appendToContractHistory(ctx sdk.Context, contractAddr sdk.AccAdd pos = sdk.BigEndianToUint64(iter.Key()) } // then store with incrementing position - for i := range newEntries { + for _, e := range newEntries { pos++ key := types.GetContractCodeHistoryElementKey(contractAddr, pos) - store.Set(key, k.cdc.MustMarshal(&newEntries[i])) //nolint:gosec + store.Set(key, k.cdc.MustMarshal(&e)) //nolint:gosec } } @@ -762,14 +762,14 @@ func (k Keeper) QuerySmart(ctx sdk.Context, contractAddr sdk.AccAddress, req []b return nil, err } - smartQuerySetupCosts := k.instantiateContractCosts(k.gasRegister, ctx, k.IsPinnedCode(ctx, contractInfo.CodeID), len(req)) + smartQuerySetupCosts := k.gasRegister.InstantiateContractCosts(k.IsPinnedCode(ctx, contractInfo.CodeID), len(req)) ctx.GasMeter().ConsumeGas(smartQuerySetupCosts, "Loading CosmWasm module: query") // prepare querier querier := k.newQueryHandler(ctx, contractAddr) env := types.NewEnv(ctx, contractAddr) - queryResult, gasUsed, qErr := k.wasmVM.Query(codeInfo.CodeHash, env, req, prefixStore, k.cosmwasmAPI(ctx), querier, k.gasMeter(ctx), k.runtimeGasForContract(ctx), costJSONDeserialization) + queryResult, gasUsed, qErr := k.wasmVM.Query(codeInfo.CodeHash, env, req, prefixStore, cosmwasmAPI, querier, k.gasMeter(ctx), k.runtimeGasForContract(ctx), costJSONDeserialization) k.consumeRuntimeGas(ctx, gasUsed) if qErr != nil { return nil, sdkerrors.Wrap(types.ErrQueryFailed, qErr.Error()) @@ -1074,12 +1074,11 @@ func (k Keeper) runtimeGasForContract(ctx sdk.Context) uint64 { if meter.Limit() == 0 { // infinite gas meter with limit=0 and not out of gas return math.MaxUint64 } - - return k.getGasMultiplier(ctx).ToWasmVMGas(meter.Limit() - meter.GasConsumedToLimit()) + return k.gasRegister.ToWasmVMGas(meter.Limit() - meter.GasConsumedToLimit()) } func (k Keeper) consumeRuntimeGas(ctx sdk.Context, gas uint64) { - consumed := k.getGasMultiplier(ctx).FromWasmVMGas(gas) + consumed := k.gasRegister.FromWasmVMGas(gas) ctx.GasMeter().ConsumeGas(consumed, "wasm contract") // throw OutOfGas error if we ran out (got exactly to zero due to better limit enforcing) if ctx.GasMeter().IsOutOfGas() { @@ -1136,53 +1135,53 @@ func (k Keeper) importContract(ctx sdk.Context, contractAddr sdk.AccAddress, c * } func (k Keeper) newQueryHandler(ctx sdk.Context, contractAddress sdk.AccAddress) QueryHandler { - return NewQueryHandler(ctx, k.wasmVMQueryHandler, contractAddress, k.getGasMultiplier(ctx)) -} - -type GasMultiplier struct { - multiplier uint64 -} - -func NewGasMultiplier(multiplier uint64) GasMultiplier { - if multiplier == 0 { - panic(sdkerrors.Wrap(sdkerrors.ErrLogic, "GasMultiplier can not be 0")) - } - - return GasMultiplier{multiplier: multiplier} -} - -// ToWasmVMGas convert to wasmVM contract runtime gas unit -func (m GasMultiplier) ToWasmVMGas(source storetypes.Gas) uint64 { - x := source * m.multiplier - if x < source { - panic(sdk.ErrorOutOfGas{Descriptor: "overflow"}) - } - return x -} - -// FromWasmVMGas converts to SDK gas unit -func (m GasMultiplier) FromWasmVMGas(source uint64) sdk.Gas { - return source / m.multiplier -} + return NewQueryHandler(ctx, k.wasmVMQueryHandler, contractAddress, k.gasRegister) +} + +//type GasMultiplier struct { +// multiplier uint64 +//} +// +//func NewGasMultiplier(multiplier uint64) GasMultiplier { +// if multiplier == 0 { +// panic(sdkerrors.Wrap(sdkerrors.ErrLogic, "GasMultiplier can not be 0")) +// } +// +// return GasMultiplier{multiplier: multiplier} +//} +// +//// ToWasmVMGas convert to wasmVM contract runtime gas unit +//func (m GasMultiplier) ToWasmVMGas(source storetypes.Gas) uint64 { +// x := source * m.multiplier +// if x < source { +// panic(sdk.ErrorOutOfGas{Descriptor: "overflow"}) +// } +// return x +//} +// +//// FromWasmVMGas converts to SDK gas unit +//func (m GasMultiplier) FromWasmVMGas(source uint64) sdk.Gas { +// return source / m.multiplier +//} // MultipliedGasMeter wraps the GasMeter from context and multiplies all reads by out defined multiplier type MultipliedGasMeter struct { originalMeter sdk.GasMeter - GasMultiplier GasMultiplier + GasRegister GasRegister } -func NewMultipliedGasMeter(originalMeter sdk.GasMeter, m GasMultiplier) MultipliedGasMeter { - return MultipliedGasMeter{originalMeter: originalMeter, GasMultiplier: m} +func NewMultipliedGasMeter(originalMeter sdk.GasMeter, gr GasRegister) MultipliedGasMeter { + return MultipliedGasMeter{originalMeter: originalMeter, GasRegister: gr} } var _ wasmvm.GasMeter = MultipliedGasMeter{} func (m MultipliedGasMeter) GasConsumed() sdk.Gas { - return m.GasMultiplier.ToWasmVMGas(m.originalMeter.GasConsumed()) + return m.GasRegister.ToWasmVMGas(m.originalMeter.GasConsumed()) } func (k Keeper) gasMeter(ctx sdk.Context) MultipliedGasMeter { - return NewMultipliedGasMeter(ctx.GasMeter(), k.getGasMultiplier(ctx)) + return NewMultipliedGasMeter(ctx.GasMeter(), k.gasRegister) } // Logger returns a module-specific logger. @@ -1243,13 +1242,13 @@ func (c BankCoinTransferrer) TransferCoins(parentCtx sdk.Context, fromAddr sdk.A return nil } -func (c BankCoinTransferrer) AddToInactiveAddr(ctx sdk.Context, address sdk.AccAddress) { - c.keeper.AddToInactiveAddr(ctx, address) -} - -func (c BankCoinTransferrer) DeleteFromInactiveAddr(ctx sdk.Context, address sdk.AccAddress) { - c.keeper.DeleteFromInactiveAddr(ctx, address) -} +//func (c BankCoinTransferrer) AddToInactiveAddr(ctx sdk.Context, address sdk.AccAddress) { +// c.keeper.AddToInactiveAddr(ctx, address) +//} +// +//func (c BankCoinTransferrer) DeleteFromInactiveAddr(ctx sdk.Context, address sdk.AccAddress) { +// c.keeper.DeleteFromInactiveAddr(ctx, address) +//} var _ AccountPruner = VestingCoinBurner{} diff --git a/x/wasm/keeper/keeper_extension.go b/x/wasm/keeper/keeper_extension.go index 73a0ba7306..78e0e275b0 100644 --- a/x/wasm/keeper/keeper_extension.go +++ b/x/wasm/keeper/keeper_extension.go @@ -1,67 +1,67 @@ package keeper -import ( - sdk "github.com/line/lbm-sdk/types" - sdkerrors "github.com/line/lbm-sdk/types/errors" - - wasmtypes "github.com/line/wasmd/x/wasm/types" -) - -func (k Keeper) IsInactiveContract(ctx sdk.Context, contractAddress sdk.AccAddress) bool { - store := ctx.KVStore(k.storeKey) - return store.Has(wasmtypes.GetInactiveContractKey(contractAddress)) -} - -func (k Keeper) IterateInactiveContracts(ctx sdk.Context, fn func(contractAddress sdk.AccAddress) (stop bool)) { - store := ctx.KVStore(k.storeKey) - prefix := wasmtypes.InactiveContractPrefix - iterator := sdk.KVStorePrefixIterator(store, prefix) - defer iterator.Close() - - for ; iterator.Valid(); iterator.Next() { - contractAddress := sdk.AccAddress(iterator.Value()) - if stop := fn(contractAddress); stop { - break - } - } -} - -func (k Keeper) addInactiveContract(ctx sdk.Context, contractAddress sdk.AccAddress) { - store := ctx.KVStore(k.storeKey) - key := wasmtypes.GetInactiveContractKey(contractAddress) - - store.Set(key, contractAddress) -} - -func (k Keeper) deleteInactiveContract(ctx sdk.Context, contractAddress sdk.AccAddress) { - store := ctx.KVStore(k.storeKey) - key := wasmtypes.GetInactiveContractKey(contractAddress) - store.Delete(key) -} - -// activateContract delete the contract address from inactivateContract list if the contract is deactivated. -func (k Keeper) activateContract(ctx sdk.Context, contractAddress sdk.AccAddress) error { - if !k.IsInactiveContract(ctx, contractAddress) { - return sdkerrors.Wrapf(wasmtypes.ErrNotFound, "no inactivate contract %s", contractAddress.String()) - } - - k.deleteInactiveContract(ctx, contractAddress) - k.bank.DeleteFromInactiveAddr(ctx, contractAddress) - - return nil -} - -// deactivateContract add the contract address to inactivateContract list. -func (k Keeper) deactivateContract(ctx sdk.Context, contractAddress sdk.AccAddress) error { - if k.IsInactiveContract(ctx, contractAddress) { - return sdkerrors.Wrapf(wasmtypes.ErrAccountExists, "already inactivate contract %s", contractAddress.String()) - } - if !k.HasContractInfo(ctx, contractAddress) { - return sdkerrors.Wrapf(wasmtypes.ErrInvalid, "no contract %s", contractAddress.String()) - } - - k.addInactiveContract(ctx, contractAddress) - k.bank.AddToInactiveAddr(ctx, contractAddress) - - return nil -} +//import ( +// sdk "github.com/line/lbm-sdk/types" +// sdkerrors "github.com/line/lbm-sdk/types/errors" +// +// wasmtypes "github.com/line/wasmd/x/wasm/types" +//) +// +//func (k Keeper) IsInactiveContract(ctx sdk.Context, contractAddress sdk.AccAddress) bool { +// store := ctx.KVStore(k.storeKey) +// return store.Has(wasmtypes.GetInactiveContractKey(contractAddress)) +//} +// +//func (k Keeper) IterateInactiveContracts(ctx sdk.Context, fn func(contractAddress sdk.AccAddress) (stop bool)) { +// store := ctx.KVStore(k.storeKey) +// prefix := wasmtypes.InactiveContractPrefix +// iterator := sdk.KVStorePrefixIterator(store, prefix) +// defer iterator.Close() +// +// for ; iterator.Valid(); iterator.Next() { +// contractAddress := sdk.AccAddress(iterator.Value()) +// if stop := fn(contractAddress); stop { +// break +// } +// } +//} +// +//func (k Keeper) addInactiveContract(ctx sdk.Context, contractAddress sdk.AccAddress) { +// store := ctx.KVStore(k.storeKey) +// key := wasmtypes.GetInactiveContractKey(contractAddress) +// +// store.Set(key, contractAddress) +//} +// +//func (k Keeper) deleteInactiveContract(ctx sdk.Context, contractAddress sdk.AccAddress) { +// store := ctx.KVStore(k.storeKey) +// key := wasmtypes.GetInactiveContractKey(contractAddress) +// store.Delete(key) +//} +// +//// activateContract delete the contract address from inactivateContract list if the contract is deactivated. +//func (k Keeper) activateContract(ctx sdk.Context, contractAddress sdk.AccAddress) error { +// if !k.IsInactiveContract(ctx, contractAddress) { +// return sdkerrors.Wrapf(wasmtypes.ErrNotFound, "no inactivate contract %s", contractAddress.String()) +// } +// +// k.deleteInactiveContract(ctx, contractAddress) +// k.bank.DeleteFromInactiveAddr(ctx, contractAddress) +// +// return nil +//} +// +//// deactivateContract add the contract address to inactivateContract list. +//func (k Keeper) deactivateContract(ctx sdk.Context, contractAddress sdk.AccAddress) error { +// if k.IsInactiveContract(ctx, contractAddress) { +// return sdkerrors.Wrapf(wasmtypes.ErrAccountExists, "already inactivate contract %s", contractAddress.String()) +// } +// if !k.HasContractInfo(ctx, contractAddress) { +// return sdkerrors.Wrapf(wasmtypes.ErrInvalid, "no contract %s", contractAddress.String()) +// } +// +// k.addInactiveContract(ctx, contractAddress) +// k.bank.AddToInactiveAddr(ctx, contractAddress) +// +// return nil +//} diff --git a/x/wasm/keeper/keeper_test.go b/x/wasm/keeper/keeper_test.go index be6ef503ed..d4a924e0a8 100644 --- a/x/wasm/keeper/keeper_test.go +++ b/x/wasm/keeper/keeper_test.go @@ -58,7 +58,7 @@ func TestCreateSuccess(t *testing.T) { keeper := keepers.ContractKeeper deposit := sdk.NewCoins(sdk.NewInt64Coin("denom", 100000)) - creator := keepers.Faucet.NewFundedAccount(ctx, deposit...) + creator := keepers.Faucet.NewFundedRandomAccount(ctx, deposit...) em := sdk.NewEventManager() contractID, _, err := keeper.Create(ctx.WithEventManager(em), creator, hackatomWasm, nil) @@ -84,7 +84,7 @@ func TestCreateNilCreatorAddress(t *testing.T) { func TestCreateNilWasmCode(t *testing.T) { ctx, keepers := CreateTestInput(t, false, AvailableCapabilities, nil, nil) deposit := sdk.NewCoins(sdk.NewInt64Coin("denom", 100000)) - creator := keepers.Faucet.NewFundedAccount(ctx, deposit...) + creator := keepers.Faucet.NewFundedRandomAccount(ctx, deposit...) _, _, err := keepers.ContractKeeper.Create(ctx, creator, nil, nil) require.Error(t, err, "nil WASM code is not allowed") @@ -93,7 +93,7 @@ func TestCreateNilWasmCode(t *testing.T) { func TestCreateInvalidWasmCode(t *testing.T) { ctx, keepers := CreateTestInput(t, false, AvailableCapabilities, nil, nil) deposit := sdk.NewCoins(sdk.NewInt64Coin("denom", 100000)) - creator := keepers.Faucet.NewFundedAccount(ctx, deposit...) + creator := keepers.Faucet.NewFundedRandomAccount(ctx, deposit...) _, _, err := keepers.ContractKeeper.Create(ctx, creator, []byte("potatoes"), nil) require.Error(t, err, "potatoes are not valid WASM code") @@ -133,9 +133,6 @@ func TestCreateStoresInstantiatePermission(t *testing.T) { keepers.WasmKeeper.SetParams(ctx, types.Params{ CodeUploadAccess: types.AllowEverybody, InstantiateDefaultPermission: spec.srcPermission, - GasMultiplier: types.DefaultGasMultiplier, - InstanceCost: types.DefaultInstanceCost, - CompileCost: types.DefaultCompileCost, }) fundAccounts(t, ctx, accKeeper, bankKeeper, myAddr, deposit) @@ -154,8 +151,8 @@ func TestCreateWithParamPermissions(t *testing.T) { keeper := keepers.ContractKeeper deposit := sdk.NewCoins(sdk.NewInt64Coin("denom", 100000)) - creator := keepers.Faucet.NewFundedAccount(ctx, deposit...) - otherAddr := keepers.Faucet.NewFundedAccount(ctx, deposit...) + creator := keepers.Faucet.NewFundedRandomAccount(ctx, deposit...) + otherAddr := keepers.Faucet.NewFundedRandomAccount(ctx, deposit...) specs := map[string]struct { srcPermission types.AccessConfig @@ -201,8 +198,8 @@ func TestEnforceValidPermissionsOnCreate(t *testing.T) { contractKeeper := keepers.ContractKeeper deposit := sdk.NewCoins(sdk.NewInt64Coin("denom", 100000)) - creator := keepers.Faucet.NewFundedAccount(ctx, deposit...) - other := keepers.Faucet.NewFundedAccount(ctx, deposit...) + creator := keepers.Faucet.NewFundedRandomAccount(ctx, deposit...) + other := keepers.Faucet.NewFundedRandomAccount(ctx, deposit...) onlyCreator := types.AccessTypeOnlyAddress.With(creator) onlyOther := types.AccessTypeOnlyAddress.With(other) @@ -276,7 +273,7 @@ func TestCreateDuplicate(t *testing.T) { keeper := keepers.ContractKeeper deposit := sdk.NewCoins(sdk.NewInt64Coin("denom", 100000)) - creator := keepers.Faucet.NewFundedAccount(ctx, deposit...) + creator := keepers.Faucet.NewFundedRandomAccount(ctx, deposit...) // create one copy contractID, _, err := keeper.Create(ctx, creator, hackatomWasm, nil) @@ -304,7 +301,7 @@ func TestCreateWithSimulation(t *testing.T) { WithGasMeter(stypes.NewInfiniteGasMeter()) deposit := sdk.NewCoins(sdk.NewInt64Coin("denom", 100000)) - creator := keepers.Faucet.NewFundedAccount(ctx, deposit...) + creator := keepers.Faucet.NewFundedRandomAccount(ctx, deposit...) // create this once in simulation mode contractID, _, err := keepers.ContractKeeper.Create(ctx, creator, hackatomWasm, nil) @@ -314,7 +311,7 @@ func TestCreateWithSimulation(t *testing.T) { // then try to create it in non-simulation mode (should not fail) ctx, keepers = CreateTestInput(t, false, AvailableCapabilities, nil, nil) ctx = ctx.WithGasMeter(sdk.NewGasMeter(10_000_000)) - creator = keepers.Faucet.NewFundedAccount(ctx, deposit...) + creator = keepers.Faucet.NewFundedRandomAccount(ctx, deposit...) contractID, _, err = keepers.ContractKeeper.Create(ctx, creator, hackatomWasm, nil) require.NoError(t, err) @@ -356,7 +353,7 @@ func TestCreateWithGzippedPayload(t *testing.T) { keeper := keepers.ContractKeeper deposit := sdk.NewCoins(sdk.NewInt64Coin("denom", 100000)) - creator := keepers.Faucet.NewFundedAccount(ctx, deposit...) + creator := keepers.Faucet.NewFundedRandomAccount(ctx, deposit...) wasmCode, err := os.ReadFile("./testdata/hackatom.wasm.gzip") require.NoError(t, err, "reading gzipped WASM code") @@ -375,7 +372,7 @@ func TestCreateWithBrokenGzippedPayload(t *testing.T) { keeper := keepers.ContractKeeper deposit := sdk.NewCoins(sdk.NewInt64Coin("denom", 100000)) - creator := keepers.Faucet.NewFundedAccount(ctx, deposit...) + creator := keepers.Faucet.NewFundedRandomAccount(ctx, deposit...) wasmCode, err := os.ReadFile("./testdata/broken_crc.gzip") require.NoError(t, err, "reading gzipped WASM code") @@ -413,7 +410,7 @@ func TestInstantiate(t *testing.T) { gasAfter := ctx.GasMeter().GasConsumed() if types.EnableGasVerification { - require.Equal(t, uint64(0x19497), gasAfter-gasBefore) + require.Equal(t, uint64(0x194a1), gasAfter-gasBefore) } // ensure it is stored properly @@ -692,7 +689,7 @@ func TestInstantiateWithNonExistingCodeID(t *testing.T) { ctx, keepers := CreateTestInput(t, false, AvailableCapabilities, nil, nil) deposit := sdk.NewCoins(sdk.NewInt64Coin("denom", 100000)) - creator := keepers.Faucet.NewFundedAccount(ctx, deposit...) + creator := keepers.Faucet.NewFundedRandomAccount(ctx, deposit...) initMsg := HackatomExampleInitMsg{} initMsgBz, err := json.Marshal(initMsg) @@ -805,7 +802,7 @@ func TestExecute(t *testing.T) { topUp := sdk.NewCoins(sdk.NewInt64Coin("denom", 5000)) creator := DeterministicAccountAddress(t, 1) keepers.Faucet.Fund(ctx, creator, deposit.Add(deposit...)...) - fred := keepers.Faucet.NewFundedAccount(ctx, topUp...) + fred := keepers.Faucet.NewFundedRandomAccount(ctx, topUp...) bob := RandomAccountAddress(t) contractID, _, err := keeper.Create(ctx, creator, hackatomWasm, nil) @@ -857,7 +854,7 @@ func TestExecute(t *testing.T) { // make sure gas is properly deducted from ctx gasAfter := ctx.GasMeter().GasConsumed() if types.EnableGasVerification { - require.Equal(t, uint64(0x17050), gasAfter-gasBefore) + require.Equal(t, uint64(0x16c68), gasAfter-gasBefore) } // ensure bob now exists and got both payments released bobAcct = accKeeper.GetAccount(ctx, bob) @@ -991,7 +988,7 @@ func TestExecuteWithPanic(t *testing.T) { topUp := sdk.NewCoins(sdk.NewInt64Coin("denom", 5000)) creator := DeterministicAccountAddress(t, 1) keepers.Faucet.Fund(ctx, creator, deposit.Add(deposit...)...) - fred := keepers.Faucet.NewFundedAccount(ctx, topUp...) + fred := keepers.Faucet.NewFundedRandomAccount(ctx, topUp...) contractID, _, err := keeper.Create(ctx, creator, hackatomWasm, nil) require.NoError(t, err) @@ -1023,7 +1020,7 @@ func TestExecuteWithCpuLoop(t *testing.T) { topUp := sdk.NewCoins(sdk.NewInt64Coin("denom", 5000)) creator := DeterministicAccountAddress(t, 1) keepers.Faucet.Fund(ctx, creator, deposit.Add(deposit...)...) - fred := keepers.Faucet.NewFundedAccount(ctx, topUp...) + fred := keepers.Faucet.NewFundedRandomAccount(ctx, topUp...) contractID, _, err := keeper.Create(ctx, creator, hackatomWasm, nil) require.NoError(t, err) @@ -1065,7 +1062,7 @@ func TestExecuteWithStorageLoop(t *testing.T) { topUp := sdk.NewCoins(sdk.NewInt64Coin("denom", 5000)) creator := DeterministicAccountAddress(t, 1) keepers.Faucet.Fund(ctx, creator, deposit.Add(deposit...)...) - fred := keepers.Faucet.NewFundedAccount(ctx, topUp...) + fred := keepers.Faucet.NewFundedRandomAccount(ctx, topUp...) contractID, _, err := keeper.Create(ctx, creator, hackatomWasm, nil) require.NoError(t, err) @@ -1339,7 +1336,7 @@ func TestMigrateWithDispatchedMessage(t *testing.T) { deposit := sdk.NewCoins(sdk.NewInt64Coin("denom", 100000)) creator := DeterministicAccountAddress(t, 1) keepers.Faucet.Fund(ctx, creator, deposit.Add(deposit...)...) - fred := keepers.Faucet.NewFundedAccount(ctx, sdk.NewInt64Coin("denom", 5000)) + fred := keepers.Faucet.NewFundedRandomAccount(ctx, sdk.NewInt64Coin("denom", 5000)) burnerCode, err := os.ReadFile("./testdata/burner.wasm") require.NoError(t, err) @@ -1595,7 +1592,7 @@ func TestUpdateContractAdmin(t *testing.T) { topUp := sdk.NewCoins(sdk.NewInt64Coin("denom", 5000)) creator := DeterministicAccountAddress(t, 1) keepers.Faucet.Fund(parentCtx, creator, deposit.Add(deposit...)...) - fred := keepers.Faucet.NewFundedAccount(parentCtx, topUp...) + fred := keepers.Faucet.NewFundedRandomAccount(parentCtx, topUp...) originalContractID, _, err := keeper.Create(parentCtx, creator, hackatomWasm, nil) require.NoError(t, err) @@ -1665,7 +1662,7 @@ func TestClearContractAdmin(t *testing.T) { topUp := sdk.NewCoins(sdk.NewInt64Coin("denom", 5000)) creator := DeterministicAccountAddress(t, 1) keepers.Faucet.Fund(parentCtx, creator, deposit.Add(deposit...)...) - fred := keepers.Faucet.NewFundedAccount(parentCtx, topUp...) + fred := keepers.Faucet.NewFundedRandomAccount(parentCtx, topUp...) originalContractID, _, err := keeper.Create(parentCtx, creator, hackatomWasm, nil) require.NoError(t, err) @@ -1728,8 +1725,8 @@ func TestExecuteManualInactiveContractFailure(t *testing.T) { deposit := sdk.NewCoins(sdk.NewInt64Coin("denom", 100000)) topUp := sdk.NewCoins(sdk.NewInt64Coin("denom", 5000)) - creator := keepers.Faucet.NewFundedAccount(ctx, deposit...) - fred := keepers.Faucet.NewFundedAccount(ctx, topUp...) + creator := keepers.Faucet.NewFundedRandomAccount(ctx, deposit...) + fred := keepers.Faucet.NewFundedRandomAccount(ctx, topUp...) wasmCode, err := os.ReadFile("./testdata/hackatom.wasm") require.NoError(t, err) @@ -1878,7 +1875,7 @@ func TestPinnedContractLoops(t *testing.T) { }, }, 0, nil } - ctx = ctx.WithGasMeter(sdk.NewGasMeter(21000)) + ctx = ctx.WithGasMeter(sdk.NewGasMeter(20000)) require.PanicsWithValue(t, sdk.ErrorOutOfGas{Descriptor: "ReadFlat"}, func() { _, err := k.execute(ctx, example.Contract, RandomAccountAddress(t), anyMsg, nil) require.NoError(t, err) @@ -1993,7 +1990,7 @@ func TestReply(t *testing.T) { Bank: &wasmvmtypes.BankQuery{ Balance: &wasmvmtypes.BalanceQuery{Address: env.Contract.Address, Denom: "stake"}, }, - }, 1_000_000*types.DefaultGasMultiplier) + }, 1_000_000*DefaultGasMultiplier) require.NoError(t, err) var gotBankRsp wasmvmtypes.BalanceResponse require.NoError(t, json.Unmarshal(bzRsp, &gotBankRsp)) @@ -2057,7 +2054,7 @@ func TestQueryIsolation(t *testing.T) { mock.ReplyFn = func(codeID wasmvm.Checksum, env wasmvmtypes.Env, reply wasmvmtypes.Reply, store wasmvm.KVStore, goapi wasmvm.GoAPI, querier wasmvm.Querier, gasMeter wasmvm.GasMeter, gasLimit uint64, deserCost wasmvmtypes.UFraction) (*wasmvmtypes.Response, uint64, error) { _, err := querier.Query(wasmvmtypes.QueryRequest{ Custom: []byte(`{}`), - }, 1_000_000*types.DefaultGasMultiplier) + }, 1_000_000*DefaultGasMultiplier) require.NoError(t, err) return &wasmvmtypes.Response{}, 0, nil } @@ -2170,7 +2167,7 @@ func TestAppendToContractHistory(t *testing.T) { func TestCoinBurnerPruneBalances(t *testing.T) { parentCtx, keepers := CreateTestInput(t, false, AvailableCapabilities, nil, nil) amts := sdk.NewCoins(sdk.NewInt64Coin("denom", 100)) - senderAddr := keepers.Faucet.NewFundedAccount(parentCtx, amts...) + senderAddr := keepers.Faucet.NewFundedRandomAccount(parentCtx, amts...) // create vesting account var vestingAddr sdk.AccAddress = rand.Bytes(types.ContractAddrLen) @@ -2230,79 +2227,79 @@ func TestCoinBurnerPruneBalances(t *testing.T) { } } -func TestActivateContract(t *testing.T) { - ctx, keepers := CreateTestInput(t, false, AvailableCapabilities, nil, nil) - - k := keepers.WasmKeeper - var mock wasmtesting.MockWasmer - wasmtesting.MakeInstantiable(&mock) - example := SeedNewContractInstance(t, ctx, keepers, &mock) - em := sdk.NewEventManager() - - // request no contract address -> fail - err := k.activateContract(ctx, example.CreatorAddr) - require.Error(t, err, fmt.Sprintf("no contract %s", example.CreatorAddr)) - - // try to activate an activated contract -> fail - err = k.activateContract(ctx.WithEventManager(em), example.Contract) - require.Error(t, err, fmt.Sprintf("no inactivate contract %s", example.Contract)) - - // add to inactive contract - err = k.deactivateContract(ctx, example.Contract) - require.NoError(t, err) - - // try to activate an inactivated contract -> success - err = k.activateContract(ctx, example.Contract) - require.NoError(t, err) -} - -func TestDeactivateContract(t *testing.T) { - ctx, keepers := CreateTestInput(t, false, AvailableCapabilities, nil, nil) - - k := keepers.WasmKeeper - var mock wasmtesting.MockWasmer - wasmtesting.MakeInstantiable(&mock) - example := SeedNewContractInstance(t, ctx, keepers, &mock) - em := sdk.NewEventManager() - - // request no contract address -> fail - err := k.deactivateContract(ctx, example.CreatorAddr) - require.Error(t, err, fmt.Sprintf("no contract %s", example.CreatorAddr)) - - // success case - err = k.deactivateContract(ctx, example.Contract) - require.NoError(t, err) - - // already inactivate contract -> fail - err = k.deactivateContract(ctx.WithEventManager(em), example.Contract) - require.Error(t, err, fmt.Sprintf("already inactivate contract %s", example.Contract)) -} - -func TestIterateInactiveContracts(t *testing.T) { - ctx, keepers := CreateTestInput(t, false, AvailableCapabilities, nil, nil) - k := keepers.WasmKeeper - - var mock wasmtesting.MockWasmer - wasmtesting.MakeInstantiable(&mock) - example1 := SeedNewContractInstance(t, ctx, keepers, &mock) - ctx = ctx.WithBlockHeight(ctx.BlockHeight() + 1) - example2 := SeedNewContractInstance(t, ctx, keepers, &mock) - ctx = ctx.WithBlockHeight(ctx.BlockHeight() + 1) - - err := k.deactivateContract(ctx, example1.Contract) - require.NoError(t, err) - err = k.deactivateContract(ctx, example2.Contract) - require.NoError(t, err) - - var inactiveContracts []sdk.AccAddress - k.IterateInactiveContracts(ctx, func(contractAddress sdk.AccAddress) (stop bool) { - inactiveContracts = append(inactiveContracts, contractAddress) - return false - }) - assert.Equal(t, 2, len(inactiveContracts)) - expectList := []sdk.AccAddress{example1.Contract, example2.Contract} - assert.ElementsMatch(t, expectList, inactiveContracts) -} +//func TestActivateContract(t *testing.T) { +// ctx, keepers := CreateTestInput(t, false, AvailableCapabilities, nil, nil) +// +// k := keepers.WasmKeeper +// var mock wasmtesting.MockWasmer +// wasmtesting.MakeInstantiable(&mock) +// example := SeedNewContractInstance(t, ctx, keepers, &mock) +// em := sdk.NewEventManager() +// +// // request no contract address -> fail +// err := k.activateContract(ctx, example.CreatorAddr) +// require.Error(t, err, fmt.Sprintf("no contract %s", example.CreatorAddr)) +// +// // try to activate an activated contract -> fail +// err = k.activateContract(ctx.WithEventManager(em), example.Contract) +// require.Error(t, err, fmt.Sprintf("no inactivate contract %s", example.Contract)) +// +// // add to inactive contract +// err = k.deactivateContract(ctx, example.Contract) +// require.NoError(t, err) +// +// // try to activate an inactivated contract -> success +// err = k.activateContract(ctx, example.Contract) +// require.NoError(t, err) +//} + +//func TestDeactivateContract(t *testing.T) { +// ctx, keepers := CreateTestInput(t, false, AvailableCapabilities, nil, nil) +// +// k := keepers.WasmKeeper +// var mock wasmtesting.MockWasmer +// wasmtesting.MakeInstantiable(&mock) +// example := SeedNewContractInstance(t, ctx, keepers, &mock) +// em := sdk.NewEventManager() +// +// // request no contract address -> fail +// err := k.deactivateContract(ctx, example.CreatorAddr) +// require.Error(t, err, fmt.Sprintf("no contract %s", example.CreatorAddr)) +// +// // success case +// err = k.deactivateContract(ctx, example.Contract) +// require.NoError(t, err) +// +// // already inactivate contract -> fail +// err = k.deactivateContract(ctx.WithEventManager(em), example.Contract) +// require.Error(t, err, fmt.Sprintf("already inactivate contract %s", example.Contract)) +//} + +//func TestIterateInactiveContracts(t *testing.T) { +// ctx, keepers := CreateTestInput(t, false, AvailableCapabilities, nil, nil) +// k := keepers.WasmKeeper +// +// var mock wasmtesting.MockWasmer +// wasmtesting.MakeInstantiable(&mock) +// example1 := SeedNewContractInstance(t, ctx, keepers, &mock) +// ctx = ctx.WithBlockHeight(ctx.BlockHeight() + 1) +// example2 := SeedNewContractInstance(t, ctx, keepers, &mock) +// ctx = ctx.WithBlockHeight(ctx.BlockHeight() + 1) +// +// err := k.deactivateContract(ctx, example1.Contract) +// require.NoError(t, err) +// err = k.deactivateContract(ctx, example2.Contract) +// require.NoError(t, err) +// +// var inactiveContracts []sdk.AccAddress +// k.IterateInactiveContracts(ctx, func(contractAddress sdk.AccAddress) (stop bool) { +// inactiveContracts = append(inactiveContracts, contractAddress) +// return false +// }) +// assert.Equal(t, 2, len(inactiveContracts)) +// expectList := []sdk.AccAddress{example1.Contract, example2.Contract} +// assert.ElementsMatch(t, expectList, inactiveContracts) +//} func TestKeeper_GetByteCode(t *testing.T) { @@ -2310,7 +2307,7 @@ func TestKeeper_GetByteCode(t *testing.T) { keeper := keepers.ContractKeeper deposit := sdk.NewCoins(sdk.NewInt64Coin("denom", 100000)) - creator := keepers.Faucet.NewFundedAccount(ctx, deposit...) + creator := keepers.Faucet.NewFundedRandomAccount(ctx, deposit...) em := sdk.NewEventManager() _, _, err := keeper.Create(ctx.WithEventManager(em), creator, hackatomWasm, nil) diff --git a/x/wasm/keeper/legacy_querier.go b/x/wasm/keeper/legacy_querier.go index 59f9a481f1..0947a3221e 100644 --- a/x/wasm/keeper/legacy_querier.go +++ b/x/wasm/keeper/legacy_querier.go @@ -73,16 +73,16 @@ func NewLegacyQuerier(keeper types.ViewKeeper, gasLimit sdk.Gas) sdk.Querier { } //nolint:staticcheck rsp, err = queryContractHistory(ctx, contractAddr, keeper) - case QueryInactiveContracts: - //nolint:staticcheck - rsp = queryInactiveContracts(ctx, keeper) - case QueryIsInactiveContract: - contractAddr, addrErr := sdk.AccAddressFromBech32(path[1]) - if addrErr != nil { - return nil, sdkerrors.Wrap(sdkerrors.ErrInvalidAddress, addrErr.Error()) - } - //nolint:staticcheck - rsp = keeper.IsInactiveContract(ctx, contractAddr) + //case QueryInactiveContracts: + // //nolint:staticcheck + // rsp = queryInactiveContracts(ctx, keeper) + //case QueryIsInactiveContract: + // contractAddr, addrErr := sdk.AccAddressFromBech32(path[1]) + // if addrErr != nil { + // return nil, sdkerrors.Wrap(sdkerrors.ErrInvalidAddress, addrErr.Error()) + // } + // //nolint:staticcheck + // rsp = keeper.IsInactiveContract(ctx, contractAddr) default: return nil, sdkerrors.Wrap(sdkerrors.ErrUnknownRequest, "unknown data query endpoint") } @@ -172,11 +172,11 @@ func queryContractListByCode(ctx sdk.Context, codeID uint64, keeper types.ViewKe return contracts } -func queryInactiveContracts(ctx sdk.Context, keeper types.ViewKeeper) []string { - var contracts []string - keeper.IterateInactiveContracts(ctx, func(contractAddress sdk.AccAddress) bool { - contracts = append(contracts, contractAddress.String()) - return false - }) - return contracts -} +//func queryInactiveContracts(ctx sdk.Context, keeper types.ViewKeeper) []string { +// var contracts []string +// keeper.IterateInactiveContracts(ctx, func(contractAddress sdk.AccAddress) bool { +// contracts = append(contracts, contractAddress.String()) +// return false +// }) +// return contracts +//} diff --git a/x/wasm/keeper/legacy_querier_test.go b/x/wasm/keeper/legacy_querier_test.go index 6882ab826b..36b59e3e2d 100644 --- a/x/wasm/keeper/legacy_querier_test.go +++ b/x/wasm/keeper/legacy_querier_test.go @@ -22,8 +22,8 @@ func TestLegacyQueryContractState(t *testing.T) { keeper := keepers.WasmKeeper deposit := sdk.NewCoins(sdk.NewInt64Coin("denom", 100000)) - creator := keepers.Faucet.NewFundedAccount(ctx, deposit.Add(deposit...)...) - anyAddr := keepers.Faucet.NewFundedAccount(ctx, sdk.NewInt64Coin("denom", 5000)) + creator := keepers.Faucet.NewFundedRandomAccount(ctx, deposit.Add(deposit...)...) + anyAddr := keepers.Faucet.NewFundedRandomAccount(ctx, sdk.NewInt64Coin("denom", 5000)) wasmCode, err := os.ReadFile("./testdata/hackatom.wasm") require.NoError(t, err) @@ -160,8 +160,8 @@ func TestLegacyQueryContractListByCodeOrdering(t *testing.T) { deposit := sdk.NewCoins(sdk.NewInt64Coin("denom", 1000000)) topUp := sdk.NewCoins(sdk.NewInt64Coin("denom", 500)) - creator := keepers.Faucet.NewFundedAccount(ctx, deposit.Add(deposit...)...) - anyAddr := keepers.Faucet.NewFundedAccount(ctx, topUp...) + creator := keepers.Faucet.NewFundedRandomAccount(ctx, deposit.Add(deposit...)...) + anyAddr := keepers.Faucet.NewFundedRandomAccount(ctx, topUp...) wasmCode, err := os.ReadFile("./testdata/hackatom.wasm") require.NoError(t, err) diff --git a/x/wasm/keeper/proposal_handler.go b/x/wasm/keeper/proposal_handler.go index a5aa03630a..3a4a7827a6 100644 --- a/x/wasm/keeper/proposal_handler.go +++ b/x/wasm/keeper/proposal_handler.go @@ -7,7 +7,6 @@ import ( sdkerrors "github.com/line/lbm-sdk/types/errors" govtypes "github.com/line/lbm-sdk/x/gov/types" - "github.com/line/wasmd/x/wasm/lbmtypes" "github.com/line/wasmd/x/wasm/types" ) @@ -50,10 +49,10 @@ func NewWasmProposalHandlerX(k types.ContractOpsKeeper, enabledProposalTypes []t return handleUnpinCodesProposal(ctx, k, *c) case *types.UpdateInstantiateConfigProposal: return handleUpdateInstantiateConfigProposal(ctx, k, *c) - case *lbmtypes.DeactivateContractProposal: - return handleDeactivateContractProposal(ctx, k, *c) - case *lbmtypes.ActivateContractProposal: - return handleActivateContractProposal(ctx, k, *c) + //case *lbmtypes.DeactivateContractProposal: + // return handleDeactivateContractProposal(ctx, k, *c) + //case *lbmtypes.ActivateContractProposal: + // return handleActivateContractProposal(ctx, k, *c) default: return sdkerrors.Wrapf(sdkerrors.ErrUnknownRequest, "unrecognized wasm proposal content type: %T", c) } @@ -246,48 +245,48 @@ func handleUpdateInstantiateConfigProposal(ctx sdk.Context, k types.ContractOpsK return nil } -func handleDeactivateContractProposal(ctx sdk.Context, k types.ContractOpsKeeper, p lbmtypes.DeactivateContractProposal) error { - if err := p.ValidateBasic(); err != nil { - return err - } - - // The error is already checked in ValidateBasic. - //nolint:errcheck - contractAddr, _ := sdk.AccAddressFromBech32(p.Contract) - - err := k.DeactivateContract(ctx, contractAddr) - if err != nil { - return err - } - - event := lbmtypes.EventDeactivateContractProposal{ - Contract: contractAddr.String(), - } - if err := ctx.EventManager().EmitTypedEvent(&event); err != nil { - return err - } - - return nil -} - -func handleActivateContractProposal(ctx sdk.Context, k types.ContractOpsKeeper, p lbmtypes.ActivateContractProposal) error { - if err := p.ValidateBasic(); err != nil { - return err - } - - // The error is already checked in ValidateBasic. - //nolint:errcheck - contractAddr, _ := sdk.AccAddressFromBech32(p.Contract) - - err := k.ActivateContract(ctx, contractAddr) - if err != nil { - return err - } - - event := lbmtypes.EventActivateContractProposal{Contract: contractAddr.String()} - if err := ctx.EventManager().EmitTypedEvent(&event); err != nil { - return nil - } - - return nil -} +//func handleDeactivateContractProposal(ctx sdk.Context, k types.ContractOpsKeeper, p lbmtypes.DeactivateContractProposal) error { +// if err := p.ValidateBasic(); err != nil { +// return err +// } +// +// // The error is already checked in ValidateBasic. +// //nolint:errcheck +// contractAddr, _ := sdk.AccAddressFromBech32(p.Contract) +// +// err := k.DeactivateContract(ctx, contractAddr) +// if err != nil { +// return err +// } +// +// event := lbmtypes.EventDeactivateContractProposal{ +// Contract: contractAddr.String(), +// } +// if err := ctx.EventManager().EmitTypedEvent(&event); err != nil { +// return err +// } +// +// return nil +//} +// +//func handleActivateContractProposal(ctx sdk.Context, k types.ContractOpsKeeper, p lbmtypes.ActivateContractProposal) error { +// if err := p.ValidateBasic(); err != nil { +// return err +// } +// +// // The error is already checked in ValidateBasic. +// //nolint:errcheck +// contractAddr, _ := sdk.AccAddressFromBech32(p.Contract) +// +// err := k.ActivateContract(ctx, contractAddr) +// if err != nil { +// return err +// } +// +// event := lbmtypes.EventActivateContractProposal{Contract: contractAddr.String()} +// if err := ctx.EventManager().EmitTypedEvent(&event); err != nil { +// return nil +// } +// +// return nil +//} diff --git a/x/wasm/keeper/proposal_integration_test.go b/x/wasm/keeper/proposal_integration_test.go index 658bceb1b8..2ce9625e12 100644 --- a/x/wasm/keeper/proposal_integration_test.go +++ b/x/wasm/keeper/proposal_integration_test.go @@ -18,7 +18,6 @@ import ( wasmvm "github.com/line/wasmvm" "github.com/line/wasmd/x/wasm/keeper/wasmtesting" - "github.com/line/wasmd/x/wasm/lbmtypes" "github.com/line/wasmd/x/wasm/types" ) @@ -28,9 +27,6 @@ func TestStoreCodeProposal(t *testing.T) { wasmKeeper.SetParams(parentCtx, types.Params{ CodeUploadAccess: types.AllowNobody, InstantiateDefaultPermission: types.AccessTypeNobody, - GasMultiplier: types.DefaultGasMultiplier, - InstanceCost: types.DefaultInstanceCost, - CompileCost: types.DefaultCompileCost, }) wasmCode, err := os.ReadFile("./testdata/hackatom.wasm") require.NoError(t, err) @@ -86,9 +82,6 @@ func TestInstantiateProposal(t *testing.T) { wasmKeeper.SetParams(ctx, types.Params{ CodeUploadAccess: types.AllowNobody, InstantiateDefaultPermission: types.AccessTypeNobody, - GasMultiplier: types.DefaultGasMultiplier, - InstanceCost: types.DefaultInstanceCost, - CompileCost: types.DefaultCompileCost, }) wasmCode, err := os.ReadFile("./testdata/hackatom.wasm") @@ -154,9 +147,6 @@ func TestInstantiateProposal_NoAdmin(t *testing.T) { wasmKeeper.SetParams(ctx, types.Params{ CodeUploadAccess: types.AllowNobody, InstantiateDefaultPermission: types.AccessTypeNobody, - GasMultiplier: types.DefaultGasMultiplier, - InstanceCost: types.DefaultInstanceCost, - CompileCost: types.DefaultCompileCost, }) wasmCode, err := os.ReadFile("./testdata/hackatom.wasm") @@ -229,9 +219,6 @@ func TestMigrateProposal(t *testing.T) { wasmKeeper.SetParams(ctx, types.Params{ CodeUploadAccess: types.AllowNobody, InstantiateDefaultPermission: types.AccessTypeNobody, - GasMultiplier: types.DefaultGasMultiplier, - InstanceCost: types.DefaultInstanceCost, - CompileCost: types.DefaultCompileCost, }) wasmCode, err := os.ReadFile("./testdata/hackatom.wasm") @@ -483,9 +470,6 @@ func TestAdminProposals(t *testing.T) { wasmKeeper.SetParams(ctx, types.Params{ CodeUploadAccess: types.AllowNobody, InstantiateDefaultPermission: types.AccessTypeNobody, - GasMultiplier: types.DefaultGasMultiplier, - InstanceCost: types.DefaultInstanceCost, - CompileCost: types.DefaultCompileCost, }) codeInfoFixture := types.CodeInfoFixture(types.WithSHA256CodeHash(wasmCode)) @@ -876,65 +860,65 @@ func TestUpdateInstantiateConfigProposal(t *testing.T) { } } -func TestValidateDeactivateContractProposal(t *testing.T) { - ctx, keepers := CreateTestInput(t, false, "staking", nil, nil) - govKeeper, wasmKeeper := keepers.GovKeeper, keepers.WasmKeeper - - var mock wasmtesting.MockWasmer - wasmtesting.MakeInstantiable(&mock) - example := SeedNewContractInstance(t, ctx, keepers, &mock) - - src := lbmtypes.DeactivateContractProposal{ - Title: "Foo", - Description: "Bar", - Contract: example.Contract.String(), - } - - em := sdk.NewEventManager() - - // when stored - storedProposal, err := govKeeper.SubmitProposal(ctx, &src) - require.NoError(t, err) - - // proposal execute - handler := govKeeper.Router().GetRoute(storedProposal.ProposalRoute()) - err = handler(ctx.WithEventManager(em), storedProposal.GetContent()) - require.NoError(t, err) - - // then - isInactive := wasmKeeper.IsInactiveContract(ctx, example.Contract) - require.True(t, isInactive) -} - -func TestActivateContractProposal(t *testing.T) { - ctx, keepers := CreateTestInput(t, false, "staking", nil, nil) - govKeeper, wasmKeeper := keepers.GovKeeper, keepers.WasmKeeper - - var mock wasmtesting.MockWasmer - wasmtesting.MakeInstantiable(&mock) - example := SeedNewContractInstance(t, ctx, keepers, &mock) - // set deactivate - err := wasmKeeper.deactivateContract(ctx, example.Contract) - require.NoError(t, err) - - src := lbmtypes.ActivateContractProposal{ - Title: "Foo", - Description: "Bar", - Contract: example.Contract.String(), - } - - em := sdk.NewEventManager() - - // when stored - storedProposal, err := govKeeper.SubmitProposal(ctx, &src) - require.NoError(t, err) - - // proposal execute - handler := govKeeper.Router().GetRoute(storedProposal.ProposalRoute()) - err = handler(ctx.WithEventManager(em), storedProposal.GetContent()) - require.NoError(t, err) - - // then - isInactive := wasmKeeper.IsInactiveContract(ctx, example.Contract) - require.False(t, isInactive) -} +//func TestValidateDeactivateContractProposal(t *testing.T) { +// ctx, keepers := CreateTestInput(t, false, "staking", nil, nil) +// govKeeper, wasmKeeper := keepers.GovKeeper, keepers.WasmKeeper +// +// var mock wasmtesting.MockWasmer +// wasmtesting.MakeInstantiable(&mock) +// example := SeedNewContractInstance(t, ctx, keepers, &mock) +// +// src := lbmtypes.DeactivateContractProposal{ +// Title: "Foo", +// Description: "Bar", +// Contract: example.Contract.String(), +// } +// +// em := sdk.NewEventManager() +// +// // when stored +// storedProposal, err := govKeeper.SubmitProposal(ctx, &src) +// require.NoError(t, err) +// +// // proposal execute +// handler := govKeeper.Router().GetRoute(storedProposal.ProposalRoute()) +// err = handler(ctx.WithEventManager(em), storedProposal.GetContent()) +// require.NoError(t, err) +// +// // then +// isInactive := wasmKeeper.IsInactiveContract(ctx, example.Contract) +// require.True(t, isInactive) +//} +// +//func TestActivateContractProposal(t *testing.T) { +// ctx, keepers := CreateTestInput(t, false, "staking", nil, nil) +// govKeeper, wasmKeeper := keepers.GovKeeper, keepers.WasmKeeper +// +// var mock wasmtesting.MockWasmer +// wasmtesting.MakeInstantiable(&mock) +// example := SeedNewContractInstance(t, ctx, keepers, &mock) +// // set deactivate +// err := wasmKeeper.deactivateContract(ctx, example.Contract) +// require.NoError(t, err) +// +// src := lbmtypes.ActivateContractProposal{ +// Title: "Foo", +// Description: "Bar", +// Contract: example.Contract.String(), +// } +// +// em := sdk.NewEventManager() +// +// // when stored +// storedProposal, err := govKeeper.SubmitProposal(ctx, &src) +// require.NoError(t, err) +// +// // proposal execute +// handler := govKeeper.Router().GetRoute(storedProposal.ProposalRoute()) +// err = handler(ctx.WithEventManager(em), storedProposal.GetContent()) +// require.NoError(t, err) +// +// // then +// isInactive := wasmKeeper.IsInactiveContract(ctx, example.Contract) +// require.False(t, isInactive) +//} diff --git a/x/wasm/keeper/querier.go b/x/wasm/keeper/querier.go index 98a6290add..7fc064b632 100644 --- a/x/wasm/keeper/querier.go +++ b/x/wasm/keeper/querier.go @@ -14,7 +14,6 @@ import ( sdkerrors "github.com/line/lbm-sdk/types/errors" "github.com/line/lbm-sdk/types/query" - "github.com/line/wasmd/x/wasm/lbmtypes" "github.com/line/wasmd/x/wasm/types" ) @@ -320,47 +319,47 @@ func (q GrpcQuerier) Params(c context.Context, req *types.QueryParamsRequest) (* return &types.QueryParamsResponse{Params: params}, nil } -func (q GrpcQuerier) InactiveContracts(c context.Context, req *lbmtypes.QueryInactiveContractsRequest) (*lbmtypes.QueryInactiveContractsResponse, error) { - if req == nil { - return nil, status.Error(codes.InvalidArgument, "empty request") - } - ctx := sdk.UnwrapSDKContext(c) - - addresses := make([]string, 0) - prefixStore := prefix.NewStore(ctx.KVStore(q.storeKey), types.InactiveContractPrefix) - pageRes, err := query.FilteredPaginate(prefixStore, req.Pagination, func(key []byte, value []byte, accumulate bool) (bool, error) { - if accumulate { - contractAddress := sdk.AccAddress(value) - addresses = append(addresses, contractAddress.String()) - } - return true, nil - }) - if err != nil { - return nil, err - } - return &lbmtypes.QueryInactiveContractsResponse{ - Addresses: addresses, - Pagination: pageRes, - }, nil -} - -func (q GrpcQuerier) InactiveContract(c context.Context, req *lbmtypes.QueryInactiveContractRequest) (*lbmtypes.QueryInactiveContractResponse, error) { - if req == nil { - return nil, status.Error(codes.InvalidArgument, "empty request") - } - ctx := sdk.UnwrapSDKContext(c) - - contractAddr, err := sdk.AccAddressFromBech32(req.Address) - if err != nil { - return nil, err - } - - if !q.keeper.HasContractInfo(ctx, contractAddr) { - return nil, types.ErrNotFound - } - - inactivated := q.keeper.IsInactiveContract(ctx, contractAddr) - return &lbmtypes.QueryInactiveContractResponse{ - Inactivated: inactivated, - }, nil -} +//func (q GrpcQuerier) InactiveContracts(c context.Context, req *lbmtypes.QueryInactiveContractsRequest) (*lbmtypes.QueryInactiveContractsResponse, error) { +// if req == nil { +// return nil, status.Error(codes.InvalidArgument, "empty request") +// } +// ctx := sdk.UnwrapSDKContext(c) +// +// addresses := make([]string, 0) +// prefixStore := prefix.NewStore(ctx.KVStore(q.storeKey), types.InactiveContractPrefix) +// pageRes, err := query.FilteredPaginate(prefixStore, req.Pagination, func(key []byte, value []byte, accumulate bool) (bool, error) { +// if accumulate { +// contractAddress := sdk.AccAddress(value) +// addresses = append(addresses, contractAddress.String()) +// } +// return true, nil +// }) +// if err != nil { +// return nil, err +// } +// return &lbmtypes.QueryInactiveContractsResponse{ +// Addresses: addresses, +// Pagination: pageRes, +// }, nil +//} +// +//func (q GrpcQuerier) InactiveContract(c context.Context, req *lbmtypes.QueryInactiveContractRequest) (*lbmtypes.QueryInactiveContractResponse, error) { +// if req == nil { +// return nil, status.Error(codes.InvalidArgument, "empty request") +// } +// ctx := sdk.UnwrapSDKContext(c) +// +// contractAddr, err := sdk.AccAddressFromBech32(req.Address) +// if err != nil { +// return nil, err +// } +// +// if !q.keeper.HasContractInfo(ctx, contractAddr) { +// return nil, types.ErrNotFound +// } +// +// inactivated := q.keeper.IsInactiveContract(ctx, contractAddr) +// return &lbmtypes.QueryInactiveContractResponse{ +// Inactivated: inactivated, +// }, nil +//} diff --git a/x/wasm/keeper/querier_test.go b/x/wasm/keeper/querier_test.go index 77793fee95..fc25640a27 100644 --- a/x/wasm/keeper/querier_test.go +++ b/x/wasm/keeper/querier_test.go @@ -23,7 +23,6 @@ import ( wasmvmtypes "github.com/line/wasmvm/types" "github.com/line/wasmd/x/wasm/keeper/wasmtesting" - "github.com/line/wasmd/x/wasm/lbmtypes" "github.com/line/wasmd/x/wasm/types" ) @@ -165,7 +164,7 @@ func TestQuerySmartContractPanics(t *testing.T) { CodeID: 1, Created: types.NewAbsoluteTxPosition(ctx), }) - ctx = ctx.WithGasMeter(sdk.NewGasMeter(types.DefaultInstanceCost)).WithLogger(log.TestingLogger()) + ctx = ctx.WithGasMeter(sdk.NewGasMeter(DefaultInstanceCost)).WithLogger(log.TestingLogger()) specs := map[string]struct { doInContract func() @@ -263,8 +262,8 @@ func TestQueryContractListByCodeOrdering(t *testing.T) { deposit := sdk.NewCoins(sdk.NewInt64Coin("denom", 1000000)) topUp := sdk.NewCoins(sdk.NewInt64Coin("denom", 500)) - creator := keepers.Faucet.NewFundedAccount(ctx, deposit...) - anyAddr := keepers.Faucet.NewFundedAccount(ctx, topUp...) + creator := keepers.Faucet.NewFundedRandomAccount(ctx, deposit...) + anyAddr := keepers.Faucet.NewFundedRandomAccount(ctx, topUp...) wasmCode, err := os.ReadFile("./testdata/hackatom.wasm") require.NoError(t, err) @@ -742,9 +741,6 @@ func TestQueryParams(t *testing.T) { keeper.SetParams(ctx, types.Params{ CodeUploadAccess: types.AllowNobody, InstantiateDefaultPermission: types.AccessTypeNobody, - GasMultiplier: types.DefaultGasMultiplier, - InstanceCost: types.DefaultInstanceCost, - CompileCost: types.DefaultCompileCost, }) paramsResponse, err = q.Params(sdk.WrapSDKContext(ctx), &types.QueryParamsRequest{}) @@ -882,53 +878,53 @@ func fromBase64(s string) []byte { return r } -func TestQueryInactiveContracts(t *testing.T) { - ctx, keepers := CreateTestInput(t, false, AvailableCapabilities, nil, nil) - keeper := keepers.WasmKeeper - - var mock wasmtesting.MockWasmer - wasmtesting.MakeInstantiable(&mock) - example1 := SeedNewContractInstance(t, ctx, keepers, &mock) - ctx = ctx.WithBlockHeight(ctx.BlockHeight() + 1) - example2 := SeedNewContractInstance(t, ctx, keepers, &mock) - ctx = ctx.WithBlockHeight(ctx.BlockHeight() + 1) - - // set inactive - err := keeper.deactivateContract(ctx, example1.Contract) - require.NoError(t, err) - err = keeper.deactivateContract(ctx, example2.Contract) - require.NoError(t, err) - - q := Querier(keeper) - rq := lbmtypes.QueryInactiveContractsRequest{} - res, err := q.InactiveContracts(sdk.WrapSDKContext(ctx), &rq) - require.NoError(t, err) - expect := []string{example1.Contract.String(), example2.Contract.String()} - for _, exp := range expect { - assert.Contains(t, res.Addresses, exp) - } -} - -func TestQueryIsInactiveContract(t *testing.T) { - ctx, keepers := CreateTestInput(t, false, AvailableCapabilities, nil, nil) - keeper := keepers.WasmKeeper - - var mock wasmtesting.MockWasmer - wasmtesting.MakeInstantiable(&mock) - example := SeedNewContractInstance(t, ctx, keepers, &mock) - - q := Querier(keeper) - rq := lbmtypes.QueryInactiveContractRequest{Address: example.Contract.String()} - res, err := q.InactiveContract(sdk.WrapSDKContext(ctx), &rq) - require.NoError(t, err) - require.False(t, res.Inactivated) - - // set inactive - err = keeper.deactivateContract(ctx, example.Contract) - require.NoError(t, err) - - rq = lbmtypes.QueryInactiveContractRequest{Address: example.Contract.String()} - res, err = q.InactiveContract(sdk.WrapSDKContext(ctx), &rq) - require.NoError(t, err) - require.True(t, res.Inactivated) -} +//func TestQueryInactiveContracts(t *testing.T) { +// ctx, keepers := CreateTestInput(t, false, AvailableCapabilities, nil, nil) +// keeper := keepers.WasmKeeper +// +// var mock wasmtesting.MockWasmer +// wasmtesting.MakeInstantiable(&mock) +// example1 := SeedNewContractInstance(t, ctx, keepers, &mock) +// ctx = ctx.WithBlockHeight(ctx.BlockHeight() + 1) +// example2 := SeedNewContractInstance(t, ctx, keepers, &mock) +// ctx = ctx.WithBlockHeight(ctx.BlockHeight() + 1) +// +// // set inactive +// err := keeper.deactivateContract(ctx, example1.Contract) +// require.NoError(t, err) +// err = keeper.deactivateContract(ctx, example2.Contract) +// require.NoError(t, err) +// +// q := Querier(keeper) +// rq := lbmtypes.QueryInactiveContractsRequest{} +// res, err := q.InactiveContracts(sdk.WrapSDKContext(ctx), &rq) +// require.NoError(t, err) +// expect := []string{example1.Contract.String(), example2.Contract.String()} +// for _, exp := range expect { +// assert.Contains(t, res.Addresses, exp) +// } +//} +// +//func TestQueryIsInactiveContract(t *testing.T) { +// ctx, keepers := CreateTestInput(t, false, AvailableCapabilities, nil, nil) +// keeper := keepers.WasmKeeper +// +// var mock wasmtesting.MockWasmer +// wasmtesting.MakeInstantiable(&mock) +// example := SeedNewContractInstance(t, ctx, keepers, &mock) +// +// q := Querier(keeper) +// rq := lbmtypes.QueryInactiveContractRequest{Address: example.Contract.String()} +// res, err := q.InactiveContract(sdk.WrapSDKContext(ctx), &rq) +// require.NoError(t, err) +// require.False(t, res.Inactivated) +// +// // set inactive +// err = keeper.deactivateContract(ctx, example.Contract) +// require.NoError(t, err) +// +// rq = lbmtypes.QueryInactiveContractRequest{Address: example.Contract.String()} +// res, err = q.InactiveContract(sdk.WrapSDKContext(ctx), &rq) +// require.NoError(t, err) +// require.True(t, res.Inactivated) +//} diff --git a/x/wasm/keeper/query_plugins.go b/x/wasm/keeper/query_plugins.go index 9812caa6fa..c9cfb599aa 100644 --- a/x/wasm/keeper/query_plugins.go +++ b/x/wasm/keeper/query_plugins.go @@ -17,18 +17,18 @@ import ( ) type QueryHandler struct { - Ctx sdk.Context - Plugins WasmVMQueryHandler - Caller sdk.AccAddress - GasMultiplier GasMultiplier + Ctx sdk.Context + Plugins WasmVMQueryHandler + Caller sdk.AccAddress + GasRegister GasRegister } -func NewQueryHandler(ctx sdk.Context, vmQueryHandler WasmVMQueryHandler, caller sdk.AccAddress, gasMultiplier GasMultiplier) QueryHandler { +func NewQueryHandler(ctx sdk.Context, vmQueryHandler WasmVMQueryHandler, caller sdk.AccAddress, gasRegister GasRegister) QueryHandler { return QueryHandler{ - Ctx: ctx, - Plugins: vmQueryHandler, - Caller: caller, - GasMultiplier: gasMultiplier, + Ctx: ctx, + Plugins: vmQueryHandler, + Caller: caller, + GasRegister: gasRegister, } } @@ -42,7 +42,7 @@ var _ wasmvmtypes.Querier = QueryHandler{} func (q QueryHandler) Query(request wasmvmtypes.QueryRequest, gasLimit uint64) ([]byte, error) { // set a limit for a subCtx - sdkGas := q.GasMultiplier.FromWasmVMGas(gasLimit) + sdkGas := q.GasRegister.FromWasmVMGas(gasLimit) // discard all changes/ events in subCtx by not committing the cached context subCtx, _ := q.Ctx.WithGasMeter(sdk.NewGasMeter(sdkGas)).CacheContext() @@ -404,8 +404,7 @@ func sdkToDelegations(ctx sdk.Context, keeper types.StakingKeeper, delegations [ } // shares to amount logic comes from here: - // x/staking/keeper/querier.go DelegationToDelegationResponse - /// https://github.com/cosmos/cosmos-sdk/blob/3ccf3913f53e2a9ccb4be8429bee32e67669e89a/x/staking/keeper/querier.go#L450 + // https://github.com/cosmos/cosmos-sdk/blob/v0.38.3/x/staking/keeper/querier.go#L404 val, found := keeper.GetValidator(ctx, valAddr) if !found { return nil, sdkerrors.Wrap(stakingtypes.ErrNoValidatorFound, "can't load validator for delegation") @@ -440,7 +439,7 @@ func sdkToFullDelegation(ctx sdk.Context, keeper types.StakingKeeper, distKeeper delegationCoins := ConvertSdkCoinToWasmCoin(amount) // FIXME: this is very rough but better than nothing... - // https://github.com/line/lbm-sdk/issues/225 + // https://github.com/CosmWasm/wasmd/issues/282 // if this (val, delegate) pair is receiving a redelegation, it cannot redelegate more // otherwise, it can redelegate the full amount // (there are cases of partial funds redelegated, but this is a start) diff --git a/x/wasm/keeper/query_plugins_test.go b/x/wasm/keeper/query_plugins_test.go index 9e7d51748b..580349bb67 100644 --- a/x/wasm/keeper/query_plugins_test.go +++ b/x/wasm/keeper/query_plugins_test.go @@ -316,7 +316,6 @@ func TestIBCQuerier(t *testing.T) { assert.JSONEq(t, spec.expJsonResult, string(gotResult), string(gotResult)) }) } - } func TestBankQuerierBalance(t *testing.T) { @@ -466,7 +465,7 @@ func TestQueryErrors(t *testing.T) { return nil, spec.src }) ctx := sdk.Context{}.WithGasMeter(sdk.NewInfiniteGasMeter()).WithMultiStore(store.NewCommitMultiStore(dbm.NewMemDB())) - q := NewQueryHandler(ctx, mock, sdk.AccAddress{}, NewGasMultiplier(types.DefaultGasMultiplier)) + q := NewQueryHandler(ctx, mock, sdk.AccAddress{}, NewDefaultWasmGasRegister()) _, gotErr := q.Query(wasmvmtypes.QueryRequest{}, 1) assert.Equal(t, spec.expErr, gotErr) }) diff --git a/x/wasm/keeper/recurse_test.go b/x/wasm/keeper/recurse_test.go index e9bce5f5ac..c37905d38c 100644 --- a/x/wasm/keeper/recurse_test.go +++ b/x/wasm/keeper/recurse_test.go @@ -140,7 +140,7 @@ func TestGasCostOnQuery(t *testing.T) { func TestGasOnExternalQuery(t *testing.T) { const ( - GasWork50 uint64 = types.DefaultInstanceCost + 8_464 + GasWork50 uint64 = DefaultInstanceCost + 8_464 ) cases := map[string]struct { diff --git a/x/wasm/keeper/reflect_test.go b/x/wasm/keeper/reflect_test.go index ed6bd27c6b..e2de25da56 100644 --- a/x/wasm/keeper/reflect_test.go +++ b/x/wasm/keeper/reflect_test.go @@ -45,7 +45,7 @@ func TestReflectContractSend(t *testing.T) { accKeeper, keeper, bankKeeper := keepers.AccountKeeper, keepers.ContractKeeper, keepers.BankKeeper deposit := sdk.NewCoins(sdk.NewInt64Coin("denom", 100000)) - creator := keepers.Faucet.NewFundedAccount(ctx, deposit...) + creator := keepers.Faucet.NewFundedRandomAccount(ctx, deposit...) _, _, bob := keyPubAddr() // upload reflect code @@ -124,8 +124,8 @@ func TestReflectCustomMsg(t *testing.T) { accKeeper, keeper, bankKeeper := keepers.AccountKeeper, keepers.ContractKeeper, keepers.BankKeeper deposit := sdk.NewCoins(sdk.NewInt64Coin("denom", 100000)) - creator := keepers.Faucet.NewFundedAccount(ctx, deposit...) - bob := keepers.Faucet.NewFundedAccount(ctx, deposit...) + creator := keepers.Faucet.NewFundedRandomAccount(ctx, deposit...) + bob := keepers.Faucet.NewFundedRandomAccount(ctx, deposit...) _, _, fred := keyPubAddr() // upload code @@ -215,7 +215,7 @@ func TestMaskReflectCustomQuery(t *testing.T) { keeper := keepers.WasmKeeper deposit := sdk.NewCoins(sdk.NewInt64Coin("denom", 100000)) - creator := keepers.Faucet.NewFundedAccount(ctx, deposit...) + creator := keepers.Faucet.NewFundedRandomAccount(ctx, deposit...) // upload code codeID, _, err := keepers.ContractKeeper.Create(ctx, creator, testdata.ReflectContractWasm(), nil) @@ -265,7 +265,7 @@ func TestReflectStargateQuery(t *testing.T) { funds := sdk.NewCoins(sdk.NewInt64Coin("denom", 320000)) contractStart := sdk.NewCoins(sdk.NewInt64Coin("denom", 40000)) expectedBalance := funds.Sub(contractStart) - creator := keepers.Faucet.NewFundedAccount(ctx, funds...) + creator := keepers.Faucet.NewFundedRandomAccount(ctx, funds...) // upload code codeID, _, err := keepers.ContractKeeper.Create(ctx, creator, testdata.ReflectContractWasm(), nil) @@ -358,7 +358,7 @@ func TestReflectInvalidStargateQuery(t *testing.T) { funds := sdk.NewCoins(sdk.NewInt64Coin("denom", 320000)) contractStart := sdk.NewCoins(sdk.NewInt64Coin("denom", 40000)) - creator := keepers.Faucet.NewFundedAccount(ctx, funds...) + creator := keepers.Faucet.NewFundedRandomAccount(ctx, funds...) // upload code codeID, _, err := keepers.ContractKeeper.Create(ctx, creator, testdata.ReflectContractWasm(), nil) @@ -436,7 +436,7 @@ func TestMaskReflectWasmQueries(t *testing.T) { keeper := keepers.WasmKeeper deposit := sdk.NewCoins(sdk.NewInt64Coin("denom", 100000)) - creator := keepers.Faucet.NewFundedAccount(ctx, deposit...) + creator := keepers.Faucet.NewFundedRandomAccount(ctx, deposit...) // upload reflect code reflectID, _, err := keepers.ContractKeeper.Create(ctx, creator, testdata.ReflectContractWasm(), nil) @@ -506,7 +506,7 @@ func TestWasmRawQueryWithNil(t *testing.T) { keeper := keepers.WasmKeeper deposit := sdk.NewCoins(sdk.NewInt64Coin("denom", 100000)) - creator := keepers.Faucet.NewFundedAccount(ctx, deposit...) + creator := keepers.Faucet.NewFundedRandomAccount(ctx, deposit...) // upload reflect code reflectID, _, err := keepers.ContractKeeper.Create(ctx, creator, testdata.ReflectContractWasm(), nil) diff --git a/x/wasm/keeper/relay.go b/x/wasm/keeper/relay.go index 47126c2534..b3f8d0f794 100644 --- a/x/wasm/keeper/relay.go +++ b/x/wasm/keeper/relay.go @@ -35,7 +35,7 @@ func (k Keeper) OnOpenChannel( querier := k.newQueryHandler(ctx, contractAddr) gas := k.runtimeGasForContract(ctx) - res, gasUsed, execErr := k.wasmVM.IBCChannelOpen(codeInfo.CodeHash, env, msg, prefixStore, k.cosmwasmAPI(ctx), querier, ctx.GasMeter(), gas, costJSONDeserialization) + res, gasUsed, execErr := k.wasmVM.IBCChannelOpen(codeInfo.CodeHash, env, msg, prefixStore, cosmwasmAPI, querier, ctx.GasMeter(), gas, costJSONDeserialization) k.consumeRuntimeGas(ctx, gasUsed) if execErr != nil { return "", sdkerrors.Wrap(types.ErrExecuteFailed, execErr.Error()) @@ -70,7 +70,7 @@ func (k Keeper) OnConnectChannel( querier := k.newQueryHandler(ctx, contractAddr) gas := k.runtimeGasForContract(ctx) - res, gasUsed, execErr := k.wasmVM.IBCChannelConnect(codeInfo.CodeHash, env, msg, prefixStore, k.cosmwasmAPI(ctx), querier, ctx.GasMeter(), gas, costJSONDeserialization) + res, gasUsed, execErr := k.wasmVM.IBCChannelConnect(codeInfo.CodeHash, env, msg, prefixStore, cosmwasmAPI, querier, ctx.GasMeter(), gas, costJSONDeserialization) k.consumeRuntimeGas(ctx, gasUsed) if execErr != nil { @@ -102,7 +102,7 @@ func (k Keeper) OnCloseChannel( querier := k.newQueryHandler(ctx, contractAddr) gas := k.runtimeGasForContract(ctx) - res, gasUsed, execErr := k.wasmVM.IBCChannelClose(codeInfo.CodeHash, params, msg, prefixStore, k.cosmwasmAPI(ctx), querier, ctx.GasMeter(), gas, costJSONDeserialization) + res, gasUsed, execErr := k.wasmVM.IBCChannelClose(codeInfo.CodeHash, params, msg, prefixStore, cosmwasmAPI, querier, ctx.GasMeter(), gas, costJSONDeserialization) k.consumeRuntimeGas(ctx, gasUsed) if execErr != nil { @@ -133,7 +133,7 @@ func (k Keeper) OnRecvPacket( querier := k.newQueryHandler(ctx, contractAddr) gas := k.runtimeGasForContract(ctx) - res, gasUsed, execErr := k.wasmVM.IBCPacketReceive(codeInfo.CodeHash, env, msg, prefixStore, k.cosmwasmAPI(ctx), querier, ctx.GasMeter(), gas, costJSONDeserialization) + res, gasUsed, execErr := k.wasmVM.IBCPacketReceive(codeInfo.CodeHash, env, msg, prefixStore, cosmwasmAPI, querier, ctx.GasMeter(), gas, costJSONDeserialization) k.consumeRuntimeGas(ctx, gasUsed) if execErr != nil { @@ -168,7 +168,7 @@ func (k Keeper) OnAckPacket( querier := k.newQueryHandler(ctx, contractAddr) gas := k.runtimeGasForContract(ctx) - res, gasUsed, execErr := k.wasmVM.IBCPacketAck(codeInfo.CodeHash, env, msg, prefixStore, k.cosmwasmAPI(ctx), querier, ctx.GasMeter(), gas, costJSONDeserialization) + res, gasUsed, execErr := k.wasmVM.IBCPacketAck(codeInfo.CodeHash, env, msg, prefixStore, cosmwasmAPI, querier, ctx.GasMeter(), gas, costJSONDeserialization) k.consumeRuntimeGas(ctx, gasUsed) if execErr != nil { @@ -196,7 +196,7 @@ func (k Keeper) OnTimeoutPacket( querier := k.newQueryHandler(ctx, contractAddr) gas := k.runtimeGasForContract(ctx) - res, gasUsed, execErr := k.wasmVM.IBCPacketTimeout(codeInfo.CodeHash, env, msg, prefixStore, k.cosmwasmAPI(ctx), querier, ctx.GasMeter(), gas, costJSONDeserialization) + res, gasUsed, execErr := k.wasmVM.IBCPacketTimeout(codeInfo.CodeHash, env, msg, prefixStore, cosmwasmAPI, querier, ctx.GasMeter(), gas, costJSONDeserialization) k.consumeRuntimeGas(ctx, gasUsed) if execErr != nil { diff --git a/x/wasm/keeper/relay_test.go b/x/wasm/keeper/relay_test.go index 51de44a0ea..18b4daab60 100644 --- a/x/wasm/keeper/relay_test.go +++ b/x/wasm/keeper/relay_test.go @@ -39,8 +39,8 @@ func TestOnOpenChannel(t *testing.T) { }, "consume max gas": { contractAddr: example.Contract, - contractGas: math.MaxUint64 / types.DefaultGasMultiplier, - expGas: math.MaxUint64 / types.DefaultGasMultiplier, + contractGas: math.MaxUint64 / DefaultGasMultiplier, + expGas: math.MaxUint64 / DefaultGasMultiplier, }, "consume gas on error": { contractAddr: example.Contract, @@ -59,7 +59,7 @@ func TestOnOpenChannel(t *testing.T) { myMsg := wasmvmtypes.IBCChannelOpenMsg{OpenTry: &wasmvmtypes.IBCOpenTry{Channel: myChannel, CounterpartyVersion: "foo"}} m.IBCChannelOpenFn = func(codeID wasmvm.Checksum, env wasmvmtypes.Env, msg wasmvmtypes.IBCChannelOpenMsg, store wasmvm.KVStore, goapi wasmvm.GoAPI, querier wasmvm.Querier, gasMeter wasmvm.GasMeter, gasLimit uint64, deserCost wasmvmtypes.UFraction) (*wasmvmtypes.IBC3ChannelOpenResponse, uint64, error) { assert.Equal(t, myMsg, msg) - return &wasmvmtypes.IBC3ChannelOpenResponse{}, spec.contractGas * types.DefaultGasMultiplier, spec.contractErr + return &wasmvmtypes.IBC3ChannelOpenResponse{}, spec.contractGas * DefaultGasMultiplier, spec.contractErr } ctx, _ := parentCtx.CacheContext() @@ -156,7 +156,7 @@ func TestOnConnectChannel(t *testing.T) { myMsg := wasmvmtypes.IBCChannelConnectMsg{OpenConfirm: &wasmvmtypes.IBCOpenConfirm{Channel: myChannel}} m.IBCChannelConnectFn = func(codeID wasmvm.Checksum, env wasmvmtypes.Env, msg wasmvmtypes.IBCChannelConnectMsg, store wasmvm.KVStore, goapi wasmvm.GoAPI, querier wasmvm.Querier, gasMeter wasmvm.GasMeter, gasLimit uint64, deserCost wasmvmtypes.UFraction) (*wasmvmtypes.IBCBasicResponse, uint64, error) { assert.Equal(t, msg, myMsg) - return spec.contractResp, myContractGas * types.DefaultGasMultiplier, spec.contractErr + return spec.contractResp, myContractGas * DefaultGasMultiplier, spec.contractErr } ctx, _ := parentCtx.CacheContext() @@ -267,7 +267,7 @@ func TestOnCloseChannel(t *testing.T) { myMsg := wasmvmtypes.IBCChannelCloseMsg{CloseInit: &wasmvmtypes.IBCCloseInit{Channel: myChannel}} m.IBCChannelCloseFn = func(codeID wasmvm.Checksum, env wasmvmtypes.Env, msg wasmvmtypes.IBCChannelCloseMsg, store wasmvm.KVStore, goapi wasmvm.GoAPI, querier wasmvm.Querier, gasMeter wasmvm.GasMeter, gasLimit uint64, deserCost wasmvmtypes.UFraction) (*wasmvmtypes.IBCBasicResponse, uint64, error) { assert.Equal(t, msg, myMsg) - return spec.contractResp, myContractGas * types.DefaultGasMultiplier, spec.contractErr + return spec.contractResp, myContractGas * DefaultGasMultiplier, spec.contractErr } ctx, _ := parentCtx.CacheContext() @@ -424,7 +424,7 @@ func TestOnRecvPacket(t *testing.T) { m.IBCPacketReceiveFn = func(codeID wasmvm.Checksum, env wasmvmtypes.Env, msg wasmvmtypes.IBCPacketReceiveMsg, store wasmvm.KVStore, goapi wasmvm.GoAPI, querier wasmvm.Querier, gasMeter wasmvm.GasMeter, gasLimit uint64, deserCost wasmvmtypes.UFraction) (*wasmvmtypes.IBCReceiveResult, uint64, error) { assert.Equal(t, myPacket, msg.Packet) - return &wasmvmtypes.IBCReceiveResult{Ok: spec.contractResp}, myContractGas * types.DefaultGasMultiplier, spec.contractErr + return &wasmvmtypes.IBCReceiveResult{Ok: spec.contractResp}, myContractGas * DefaultGasMultiplier, spec.contractErr } if spec.mockReplyFn != nil { m.ReplyFn = spec.mockReplyFn @@ -538,7 +538,7 @@ func TestOnAckPacket(t *testing.T) { myAck := wasmvmtypes.IBCPacketAckMsg{Acknowledgement: wasmvmtypes.IBCAcknowledgement{Data: []byte("myAck")}} m.IBCPacketAckFn = func(codeID wasmvm.Checksum, env wasmvmtypes.Env, msg wasmvmtypes.IBCPacketAckMsg, store wasmvm.KVStore, goapi wasmvm.GoAPI, querier wasmvm.Querier, gasMeter wasmvm.GasMeter, gasLimit uint64, deserCost wasmvmtypes.UFraction) (*wasmvmtypes.IBCBasicResponse, uint64, error) { assert.Equal(t, myAck, msg) - return spec.contractResp, myContractGas * types.DefaultGasMultiplier, spec.contractErr + return spec.contractResp, myContractGas * DefaultGasMultiplier, spec.contractErr } ctx, _ := parentCtx.CacheContext() @@ -658,7 +658,7 @@ func TestOnTimeoutPacket(t *testing.T) { myPacket := wasmvmtypes.IBCPacket{Data: []byte("my test packet")} m.IBCPacketTimeoutFn = func(codeID wasmvm.Checksum, env wasmvmtypes.Env, msg wasmvmtypes.IBCPacketTimeoutMsg, store wasmvm.KVStore, goapi wasmvm.GoAPI, querier wasmvm.Querier, gasMeter wasmvm.GasMeter, gasLimit uint64, deserCost wasmvmtypes.UFraction) (*wasmvmtypes.IBCBasicResponse, uint64, error) { assert.Equal(t, myPacket, msg.Packet) - return spec.contractResp, myContractGas * types.DefaultGasMultiplier, spec.contractErr + return spec.contractResp, myContractGas * DefaultGasMultiplier, spec.contractErr } ctx, _ := parentCtx.CacheContext() diff --git a/x/wasm/keeper/staking_test.go b/x/wasm/keeper/staking_test.go index 96bcfd8ec2..256126cd17 100644 --- a/x/wasm/keeper/staking_test.go +++ b/x/wasm/keeper/staking_test.go @@ -104,7 +104,7 @@ func TestInitializeStaking(t *testing.T) { assert.Equal(t, v.GetDelegatorShares(), sdk.NewDec(1234567)) deposit := sdk.NewCoins(sdk.NewInt64Coin("denom", 100000), sdk.NewInt64Coin("stake", 500000)) - creator := k.Faucet.NewFundedAccount(ctx, deposit...) + creator := k.Faucet.NewFundedRandomAccount(ctx, deposit...) // upload staking derivates code stakingCode, err := os.ReadFile("./testdata/staking.wasm") @@ -187,7 +187,7 @@ func initializeStaking(t *testing.T) initInfo { assert.Equal(t, v.Status, stakingtypes.Bonded) deposit := sdk.NewCoins(sdk.NewInt64Coin("denom", 100000), sdk.NewInt64Coin("stake", 500000)) - creator := k.Faucet.NewFundedAccount(ctx, deposit...) + creator := k.Faucet.NewFundedRandomAccount(ctx, deposit...) // upload staking derivates code stakingCode, err := os.ReadFile("./testdata/staking.wasm") @@ -240,7 +240,7 @@ func TestBonding(t *testing.T) { // bob has 160k, putting 80k into the contract full := sdk.NewCoins(sdk.NewInt64Coin("stake", 160000)) funds := sdk.NewCoins(sdk.NewInt64Coin("stake", 80000)) - bob := initInfo.faucet.NewFundedAccount(ctx, full...) + bob := initInfo.faucet.NewFundedRandomAccount(ctx, full...) // check contract state before assertBalance(t, ctx, keeper, contractAddr, bob, "0") @@ -288,7 +288,7 @@ func TestUnbonding(t *testing.T) { // bob has 160k, putting 80k into the contract full := sdk.NewCoins(sdk.NewInt64Coin("stake", 160000)) funds := sdk.NewCoins(sdk.NewInt64Coin("stake", 80000)) - bob := initInfo.faucet.NewFundedAccount(ctx, full...) + bob := initInfo.faucet.NewFundedRandomAccount(ctx, full...) bond := StakingHandleMsg{ Bond: &struct{}{}, @@ -355,7 +355,7 @@ func TestReinvest(t *testing.T) { // full is 2x funds, 1x goes to the contract, other stays on his wallet full := sdk.NewCoins(sdk.NewInt64Coin("stake", 400000)) funds := sdk.NewCoins(sdk.NewInt64Coin("stake", 200000)) - bob := initInfo.faucet.NewFundedAccount(ctx, full...) + bob := initInfo.faucet.NewFundedRandomAccount(ctx, full...) // we will stake 200k to a validator with 1M self-bond // this means we should get 1/6 of the rewards @@ -423,7 +423,7 @@ func TestQueryStakingInfo(t *testing.T) { // full is 2x funds, 1x goes to the contract, other stays on his wallet full := sdk.NewCoins(sdk.NewInt64Coin("stake", 400000)) funds := sdk.NewCoins(sdk.NewInt64Coin("stake", 200000)) - bob := initInfo.faucet.NewFundedAccount(ctx, full...) + bob := initInfo.faucet.NewFundedRandomAccount(ctx, full...) // we will stake 200k to a validator with 1M self-bond // this means we should get 1/6 of the rewards @@ -445,7 +445,7 @@ func TestQueryStakingInfo(t *testing.T) { // STEP 2: Prepare the mask contract deposit := sdk.NewCoins(sdk.NewInt64Coin("denom", 100000)) - creator := initInfo.faucet.NewFundedAccount(ctx, deposit...) + creator := initInfo.faucet.NewFundedRandomAccount(ctx, deposit...) // upload mask code maskID, _, err := initInfo.contractKeeper.Create(ctx, creator, testdata.ReflectContractWasm(), nil) @@ -600,7 +600,7 @@ func TestQueryStakingPlugin(t *testing.T) { // full is 2x funds, 1x goes to the contract, other stays on his wallet full := sdk.NewCoins(sdk.NewInt64Coin("stake", 400000)) funds := sdk.NewCoins(sdk.NewInt64Coin("stake", 200000)) - bob := initInfo.faucet.NewFundedAccount(ctx, full...) + bob := initInfo.faucet.NewFundedRandomAccount(ctx, full...) // we will stake 200k to a validator with 1M self-bond // this means we should get 1/6 of the rewards @@ -653,7 +653,7 @@ func TestQueryStakingPlugin(t *testing.T) { // adds a few validators and returns a list of validators that are registered func addValidator(t *testing.T, ctx sdk.Context, stakingKeeper stakingkeeper.Keeper, faucet *TestFaucet, value sdk.Coin) sdk.ValAddress { - owner := faucet.NewFundedAccount(ctx, value) + owner := faucet.NewFundedRandomAccount(ctx, value) privKey := secp256k1.GenPrivKey() pubKey := privKey.PubKey() diff --git a/x/wasm/keeper/submsg_test.go b/x/wasm/keeper/submsg_test.go index e9cfda9460..2810e3cd9d 100644 --- a/x/wasm/keeper/submsg_test.go +++ b/x/wasm/keeper/submsg_test.go @@ -27,7 +27,7 @@ func TestDispatchSubMsgSuccessCase(t *testing.T) { deposit := sdk.NewCoins(sdk.NewInt64Coin("denom", 100000)) contractStart := sdk.NewCoins(sdk.NewInt64Coin("denom", 40000)) - creator := keepers.Faucet.NewFundedAccount(ctx, deposit...) + creator := keepers.Faucet.NewFundedRandomAccount(ctx, deposit...) creatorBalance := deposit.Sub(contractStart) _, _, fred := keyPubAddr() @@ -111,7 +111,7 @@ func TestDispatchSubMsgErrorHandling(t *testing.T) { ctx = ctx.WithBlockGasMeter(sdk.NewInfiniteGasMeter()) keeper := keepers.WasmKeeper contractStart := sdk.NewCoins(sdk.NewInt64Coin(fundedDenom, int64(fundedAmount))) - uploader := keepers.Faucet.NewFundedAccount(ctx, contractStart.Add(contractStart...)...) + uploader := keepers.Faucet.NewFundedRandomAccount(ctx, contractStart.Add(contractStart...)...) // upload code reflectID, _, err := keepers.ContractKeeper.Create(ctx, uploader, testdata.ReflectContractWasm(), nil) @@ -237,14 +237,14 @@ func TestDispatchSubMsgErrorHandling(t *testing.T) { "send tokens": { submsgID: 5, msg: validBankSend, - resultAssertions: []assertion{assertReturnedEvents(0), assertGasUsed(94000, 95000)}, + resultAssertions: []assertion{assertReturnedEvents(0), assertGasUsed(93000, 94000)}, }, "not enough tokens": { submsgID: 6, msg: invalidBankSend, subMsgError: true, // uses less gas than the send tokens (cost of bank transfer) - resultAssertions: []assertion{assertGasUsed(76000, 77000), assertErrorString("codespace: sdk, code: 5")}, + resultAssertions: []assertion{assertGasUsed(75000, 76000), assertErrorString("codespace: sdk, code: 5")}, }, "out of gas panic with no gas limit": { submsgID: 7, @@ -257,7 +257,7 @@ func TestDispatchSubMsgErrorHandling(t *testing.T) { msg: validBankSend, gasLimit: &subGasLimit, // uses same gas as call without limit (note we do not charge the 40k on reply) - resultAssertions: []assertion{assertReturnedEvents(0), assertGasUsed(94000, 95000)}, + resultAssertions: []assertion{assertReturnedEvents(0), assertGasUsed(93000, 94000)}, }, "not enough tokens with limit": { submsgID: 16, @@ -265,7 +265,7 @@ func TestDispatchSubMsgErrorHandling(t *testing.T) { subMsgError: true, gasLimit: &subGasLimit, // uses same gas as call without limit (note we do not charge the 40k on reply) - resultAssertions: []assertion{assertGasUsed(76000, 77000), assertErrorString("codespace: sdk, code: 5")}, + resultAssertions: []assertion{assertGasUsed(75000, 76000), assertErrorString("codespace: sdk, code: 5")}, }, "out of gas caught with gas limit": { submsgID: 17, @@ -273,7 +273,7 @@ func TestDispatchSubMsgErrorHandling(t *testing.T) { subMsgError: true, gasLimit: &subGasLimit, // uses all the subGasLimit, plus the 52k or so for the main contract - resultAssertions: []assertion{assertGasUsed(subGasLimit+74000, subGasLimit+75000), assertErrorString("codespace: sdk, code: 11")}, + resultAssertions: []assertion{assertGasUsed(subGasLimit+73000, subGasLimit+74000), assertErrorString("codespace: sdk, code: 11")}, }, "instantiate contract gets address in data and events": { submsgID: 21, @@ -283,7 +283,7 @@ func TestDispatchSubMsgErrorHandling(t *testing.T) { } for name, tc := range cases { t.Run(name, func(t *testing.T) { - creator := keepers.Faucet.NewFundedAccount(ctx, contractStart...) + creator := keepers.Faucet.NewFundedRandomAccount(ctx, contractStart...) _, _, empty := keyPubAddr() contractAddr, _, err := keepers.ContractKeeper.Instantiate(ctx, reflectID, creator, nil, []byte("{}"), fmt.Sprintf("contract %s", name), contractStart) @@ -367,7 +367,7 @@ func TestDispatchSubMsgEncodeToNoSdkMsg(t *testing.T) { deposit := sdk.NewCoins(sdk.NewInt64Coin("denom", 100000)) contractStart := sdk.NewCoins(sdk.NewInt64Coin("denom", 40000)) - creator := keepers.Faucet.NewFundedAccount(ctx, deposit...) + creator := keepers.Faucet.NewFundedRandomAccount(ctx, deposit...) _, _, fred := keyPubAddr() // upload code @@ -433,7 +433,7 @@ func TestDispatchSubMsgConditionalReplyOn(t *testing.T) { deposit := sdk.NewCoins(sdk.NewInt64Coin("denom", 100000)) contractStart := sdk.NewCoins(sdk.NewInt64Coin("denom", 40000)) - creator := keepers.Faucet.NewFundedAccount(ctx, deposit...) + creator := keepers.Faucet.NewFundedRandomAccount(ctx, deposit...) _, _, fred := keyPubAddr() // upload code diff --git a/x/wasm/keeper/test_common.go b/x/wasm/keeper/test_common.go index 5291e8eeea..3cd3a4d063 100644 --- a/x/wasm/keeper/test_common.go +++ b/x/wasm/keeper/test_common.go @@ -167,7 +167,7 @@ func (f *TestFaucet) Fund(parentCtx sdk.Context, receiver sdk.AccAddress, amount f.balance = f.balance.Sub(amounts) } -func (f *TestFaucet) NewFundedAccount(ctx sdk.Context, amounts ...sdk.Coin) sdk.AccAddress { +func (f *TestFaucet) NewFundedRandomAccount(ctx sdk.Context, amounts ...sdk.Coin) sdk.AccAddress { _, _, addr := keyPubAddr() f.Fund(ctx, addr, amounts...) return addr diff --git a/x/wasm/lbmtypes/genesis.go b/x/wasm/lbmtypes/genesis.go new file mode 100644 index 0000000000..22d928c9df --- /dev/null +++ b/x/wasm/lbmtypes/genesis.go @@ -0,0 +1,38 @@ +package lbmtypes + +import ( + sdk "github.com/line/lbm-sdk/types" + sdkerrors "github.com/line/lbm-sdk/types/errors" +) + +func (s GenesisState) ValidateBasic() error { + if err := s.Params.ValidateBasic(); err != nil { + return sdkerrors.Wrap(err, "params") + } + for i := range s.Codes { + if err := s.Codes[i].ValidateBasic(); err != nil { + return sdkerrors.Wrapf(err, "code: %d", i) + } + } + for i := range s.Contracts { + if err := s.Contracts[i].ValidateBasic(); err != nil { + return sdkerrors.Wrapf(err, "contract: %d", i) + } + } + for i := range s.Sequences { + if err := s.Sequences[i].ValidateBasic(); err != nil { + return sdkerrors.Wrapf(err, "sequence: %d", i) + } + } + for i := range s.GenMsgs { + if err := s.GenMsgs[i].ValidateBasic(); err != nil { + return sdkerrors.Wrapf(err, "gen message: %d", i) + } + } + for i, addr := range s.InactiveContractAddresses { + if _, err := sdk.AccAddressFromBech32(addr); err != nil { + return sdkerrors.Wrapf(err, "inactive contract address: %d", i) + } + } + return nil +} diff --git a/x/wasm/lbmtypes/genesis.pb.go b/x/wasm/lbmtypes/genesis.pb.go new file mode 100644 index 0000000000..149ebc2185 --- /dev/null +++ b/x/wasm/lbmtypes/genesis.pb.go @@ -0,0 +1,638 @@ +// Code generated by protoc-gen-gogo. DO NOT EDIT. +// source: lbm/wasm/v1/genesis.proto + +package lbmtypes + +import ( + fmt "fmt" + _ "github.com/gogo/protobuf/gogoproto" + proto "github.com/gogo/protobuf/proto" + types "github.com/line/wasmd/x/wasm/types" + io "io" + math "math" + math_bits "math/bits" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package + +// GenesisState - genesis state of x/wasm +type GenesisState struct { + Params Params `protobuf:"bytes,1,opt,name=params,proto3" json:"params"` + Codes []types.Code `protobuf:"bytes,2,rep,name=codes,proto3" json:"codes,omitempty"` + Contracts []types.Contract `protobuf:"bytes,3,rep,name=contracts,proto3" json:"contracts,omitempty"` + Sequences []types.Sequence `protobuf:"bytes,4,rep,name=sequences,proto3" json:"sequences,omitempty"` + GenMsgs []types.GenesisState_GenMsgs `protobuf:"bytes,5,rep,name=gen_msgs,json=genMsgs,proto3" json:"gen_msgs,omitempty"` + // InactiveContractAddresses is a list of contract address that set inactive + InactiveContractAddresses []string `protobuf:"bytes,6,rep,name=inactive_contract_addresses,json=inactiveContractAddresses,proto3" json:"inactive_contract_address, omitempty"` +} + +func (m *GenesisState) Reset() { *m = GenesisState{} } +func (m *GenesisState) String() string { return proto.CompactTextString(m) } +func (*GenesisState) ProtoMessage() {} +func (*GenesisState) Descriptor() ([]byte, []int) { + return fileDescriptor_3308f670fed712dc, []int{0} +} +func (m *GenesisState) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *GenesisState) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_GenesisState.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 *GenesisState) XXX_Merge(src proto.Message) { + xxx_messageInfo_GenesisState.Merge(m, src) +} +func (m *GenesisState) XXX_Size() int { + return m.Size() +} +func (m *GenesisState) XXX_DiscardUnknown() { + xxx_messageInfo_GenesisState.DiscardUnknown(m) +} + +var xxx_messageInfo_GenesisState proto.InternalMessageInfo + +func (m *GenesisState) GetParams() Params { + if m != nil { + return m.Params + } + return Params{} +} + +func (m *GenesisState) GetCodes() []types.Code { + if m != nil { + return m.Codes + } + return nil +} + +func (m *GenesisState) GetContracts() []types.Contract { + if m != nil { + return m.Contracts + } + return nil +} + +func (m *GenesisState) GetSequences() []types.Sequence { + if m != nil { + return m.Sequences + } + return nil +} + +func (m *GenesisState) GetGenMsgs() []types.GenesisState_GenMsgs { + if m != nil { + return m.GenMsgs + } + return nil +} + +func (m *GenesisState) GetInactiveContractAddresses() []string { + if m != nil { + return m.InactiveContractAddresses + } + return nil +} + +func init() { + proto.RegisterType((*GenesisState)(nil), "lbm.wasm.v1.GenesisState") +} + +func init() { proto.RegisterFile("lbm/wasm/v1/genesis.proto", fileDescriptor_3308f670fed712dc) } + +var fileDescriptor_3308f670fed712dc = []byte{ + // 397 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x74, 0x92, 0xcd, 0x8a, 0xda, 0x50, + 0x14, 0xc7, 0x93, 0x46, 0x6d, 0x8d, 0x85, 0x42, 0x2c, 0x35, 0x46, 0x88, 0xa1, 0xb4, 0x25, 0x0b, + 0x49, 0xd0, 0x3e, 0x40, 0x69, 0x4a, 0xe9, 0xaa, 0x30, 0x28, 0xb3, 0x19, 0x18, 0x24, 0x1f, 0x97, + 0x6b, 0x20, 0x37, 0x37, 0x93, 0x73, 0x75, 0xc6, 0xb7, 0x98, 0xc7, 0x72, 0xe9, 0x72, 0x56, 0x32, + 0xe8, 0xce, 0x97, 0x98, 0x21, 0x37, 0x1f, 0x06, 0x46, 0x77, 0xc9, 0x39, 0xff, 0xdf, 0xef, 0x70, + 0x0f, 0x47, 0xee, 0x47, 0x1e, 0xb1, 0xef, 0x5d, 0x20, 0xf6, 0x6a, 0x6c, 0x63, 0x14, 0x23, 0x08, + 0xc1, 0x4a, 0x52, 0xca, 0xa8, 0xd2, 0x89, 0x3c, 0x62, 0x65, 0x2d, 0x6b, 0x35, 0xd6, 0x3e, 0x63, + 0x8a, 0x29, 0xaf, 0xdb, 0xd9, 0x57, 0x1e, 0xd1, 0x7a, 0x75, 0x9a, 0xad, 0x13, 0x54, 0xb0, 0x9a, + 0xee, 0x53, 0x20, 0xbc, 0x71, 0xd6, 0xfd, 0xf5, 0x45, 0x92, 0x3f, 0xfe, 0xcb, 0x2b, 0x33, 0xe6, + 0x32, 0xa4, 0x8c, 0xe5, 0x56, 0xe2, 0xa6, 0x2e, 0x01, 0x55, 0x34, 0x44, 0xb3, 0x33, 0xe9, 0x5a, + 0xb5, 0xe9, 0xd6, 0x15, 0x6f, 0x39, 0x8d, 0xcd, 0x6e, 0x28, 0x4c, 0x8b, 0xa0, 0xf2, 0x57, 0x6e, + 0xfa, 0x34, 0x40, 0xa0, 0xbe, 0x33, 0x24, 0xb3, 0x33, 0xf9, 0x62, 0x95, 0x33, 0x2b, 0xec, 0x0f, + 0x0d, 0x90, 0xd3, 0xcb, 0xa0, 0xe3, 0x6e, 0xf8, 0x89, 0x87, 0x47, 0x94, 0x84, 0x0c, 0x91, 0x84, + 0xad, 0xa7, 0x39, 0xad, 0x5c, 0xcb, 0x6d, 0x9f, 0xc6, 0x2c, 0x75, 0x7d, 0x06, 0xaa, 0xc4, 0x55, + 0xda, 0x39, 0x55, 0x1e, 0x71, 0x06, 0x85, 0xae, 0x5b, 0x41, 0x35, 0xe5, 0xc9, 0x94, 0x69, 0x01, + 0xdd, 0x2d, 0x51, 0xec, 0x23, 0x50, 0x1b, 0x97, 0xb4, 0xb3, 0x22, 0x72, 0xd2, 0x56, 0x50, 0x5d, + 0x5b, 0x15, 0x95, 0x5b, 0xf9, 0x03, 0x46, 0xf1, 0x9c, 0x00, 0x06, 0xb5, 0xc9, 0xad, 0x3f, 0xde, + 0x5a, 0xeb, 0x9b, 0xcd, 0x7e, 0xfe, 0x03, 0x06, 0x47, 0x2b, 0x26, 0x28, 0x25, 0x5f, 0x1b, 0xf0, + 0x1e, 0xe7, 0x21, 0x65, 0x21, 0x0f, 0xc2, 0xd8, 0xf5, 0x59, 0xb8, 0x42, 0xf3, 0xf2, 0x2d, 0x73, + 0x37, 0x08, 0x52, 0x04, 0x80, 0x40, 0x6d, 0x19, 0x92, 0xd9, 0x76, 0xcc, 0xe3, 0x6e, 0xf8, 0xed, + 0x62, 0x6c, 0x64, 0x9c, 0xbc, 0xfd, 0x32, 0x55, 0xae, 0xef, 0x77, 0xa9, 0x72, 0x7e, 0x6d, 0xf6, + 0xba, 0xb8, 0xdd, 0xeb, 0xe2, 0xf3, 0x5e, 0x17, 0x1f, 0x0f, 0xba, 0xb0, 0x3d, 0xe8, 0xc2, 0xd3, + 0x41, 0x17, 0x6e, 0xbe, 0xe3, 0x90, 0x2d, 0x96, 0x9e, 0xe5, 0x53, 0x62, 0x47, 0x61, 0x8c, 0xf8, + 0x09, 0x05, 0xf6, 0x43, 0x7e, 0x4a, 0x91, 0x47, 0xf8, 0xa1, 0x79, 0x2d, 0x7e, 0x49, 0x3f, 0x5f, + 0x03, 0x00, 0x00, 0xff, 0xff, 0xe2, 0xad, 0x7e, 0xaa, 0xc2, 0x02, 0x00, 0x00, +} + +func (m *GenesisState) 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 *GenesisState) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *GenesisState) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.InactiveContractAddresses) > 0 { + for iNdEx := len(m.InactiveContractAddresses) - 1; iNdEx >= 0; iNdEx-- { + i -= len(m.InactiveContractAddresses[iNdEx]) + copy(dAtA[i:], m.InactiveContractAddresses[iNdEx]) + i = encodeVarintGenesis(dAtA, i, uint64(len(m.InactiveContractAddresses[iNdEx]))) + i-- + dAtA[i] = 0x32 + } + } + if len(m.GenMsgs) > 0 { + for iNdEx := len(m.GenMsgs) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.GenMsgs[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenesis(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x2a + } + } + if len(m.Sequences) > 0 { + for iNdEx := len(m.Sequences) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Sequences[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenesis(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x22 + } + } + if len(m.Contracts) > 0 { + for iNdEx := len(m.Contracts) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Contracts[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenesis(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1a + } + } + if len(m.Codes) > 0 { + for iNdEx := len(m.Codes) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Codes[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenesis(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } + } + { + size, err := m.Params.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenesis(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func encodeVarintGenesis(dAtA []byte, offset int, v uint64) int { + offset -= sovGenesis(v) + base := offset + for v >= 1<<7 { + dAtA[offset] = uint8(v&0x7f | 0x80) + v >>= 7 + offset++ + } + dAtA[offset] = uint8(v) + return base +} +func (m *GenesisState) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.Params.Size() + n += 1 + l + sovGenesis(uint64(l)) + if len(m.Codes) > 0 { + for _, e := range m.Codes { + l = e.Size() + n += 1 + l + sovGenesis(uint64(l)) + } + } + if len(m.Contracts) > 0 { + for _, e := range m.Contracts { + l = e.Size() + n += 1 + l + sovGenesis(uint64(l)) + } + } + if len(m.Sequences) > 0 { + for _, e := range m.Sequences { + l = e.Size() + n += 1 + l + sovGenesis(uint64(l)) + } + } + if len(m.GenMsgs) > 0 { + for _, e := range m.GenMsgs { + l = e.Size() + n += 1 + l + sovGenesis(uint64(l)) + } + } + if len(m.InactiveContractAddresses) > 0 { + for _, s := range m.InactiveContractAddresses { + l = len(s) + n += 1 + l + sovGenesis(uint64(l)) + } + } + return n +} + +func sovGenesis(x uint64) (n int) { + return (math_bits.Len64(x|1) + 6) / 7 +} +func sozGenesis(x uint64) (n int) { + return sovGenesis(uint64((x << 1) ^ uint64((int64(x) >> 63)))) +} +func (m *GenesisState) 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 ErrIntOverflowGenesis + } + 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: GenesisState: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: GenesisState: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Params", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenesis + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenesis + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenesis + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Params.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Codes", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenesis + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenesis + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenesis + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Codes = append(m.Codes, types.Code{}) + if err := m.Codes[len(m.Codes)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Contracts", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenesis + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenesis + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenesis + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Contracts = append(m.Contracts, types.Contract{}) + if err := m.Contracts[len(m.Contracts)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Sequences", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenesis + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenesis + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenesis + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Sequences = append(m.Sequences, types.Sequence{}) + if err := m.Sequences[len(m.Sequences)-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 GenMsgs", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenesis + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenesis + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenesis + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.GenMsgs = append(m.GenMsgs, types.GenesisState_GenMsgs{}) + if err := m.GenMsgs[len(m.GenMsgs)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 6: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field InactiveContractAddresses", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenesis + } + 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 ErrInvalidLengthGenesis + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenesis + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.InactiveContractAddresses = append(m.InactiveContractAddresses, string(dAtA[iNdEx:postIndex])) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenesis(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthGenesis + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func skipGenesis(dAtA []byte) (n int, err error) { + l := len(dAtA) + iNdEx := 0 + depth := 0 + for iNdEx < l { + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowGenesis + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + wireType := int(wire & 0x7) + switch wireType { + case 0: + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowGenesis + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + iNdEx++ + if dAtA[iNdEx-1] < 0x80 { + break + } + } + case 1: + iNdEx += 8 + case 2: + var length int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowGenesis + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + length |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if length < 0 { + return 0, ErrInvalidLengthGenesis + } + iNdEx += length + case 3: + depth++ + case 4: + if depth == 0 { + return 0, ErrUnexpectedEndOfGroupGenesis + } + depth-- + case 5: + iNdEx += 4 + default: + return 0, fmt.Errorf("proto: illegal wireType %d", wireType) + } + if iNdEx < 0 { + return 0, ErrInvalidLengthGenesis + } + if depth == 0 { + return iNdEx, nil + } + } + return 0, io.ErrUnexpectedEOF +} + +var ( + ErrInvalidLengthGenesis = fmt.Errorf("proto: negative length found during unmarshaling") + ErrIntOverflowGenesis = fmt.Errorf("proto: integer overflow") + ErrUnexpectedEndOfGroupGenesis = fmt.Errorf("proto: unexpected end of group") +) diff --git a/x/wasm/lbmtypes/params.go b/x/wasm/lbmtypes/params.go new file mode 100644 index 0000000000..c2ce53bd44 --- /dev/null +++ b/x/wasm/lbmtypes/params.go @@ -0,0 +1,114 @@ +package lbmtypes + +import ( + "fmt" + "github.com/pkg/errors" + "gopkg.in/yaml.v2" + + sdkerrors "github.com/line/lbm-sdk/types/errors" + paramtypes "github.com/line/lbm-sdk/x/params/types" + + wasmtypes "github.com/line/wasmd/x/wasm/types" +) + +var ParamStoreKeyGasMultiplier = []byte("gasMultiplier") +var ParamStoreKeyInstanceCost = []byte("instanceCost") +var ParamStoreKeyCompileCost = []byte("compileCost") + +func DefaultParams() Params { + return Params{ + CodeUploadAccess: wasmtypes.AllowEverybody, + InstantiateDefaultPermission: wasmtypes.AccessTypeEverybody, + // todo should set wasmkepper's default after solving import cycle problem. + GasMultiplier: 0, // keeper.DefaultGasMultiplier, + InstanceCost: 0, // keeper.DefaultInstanceCost, + CompileCost: 0, // keeper.DefaultCompileCost, + } +} + +func (p Params) String() string { + out, err := yaml.Marshal(p) + if err != nil { + panic(err) + } + return string(out) +} + +// ParamSetPairs returns the parameter set pairs. +func (p *Params) ParamSetPairs() paramtypes.ParamSetPairs { + return paramtypes.ParamSetPairs{ + paramtypes.NewParamSetPair(wasmtypes.ParamStoreKeyUploadAccess, &p.CodeUploadAccess, validateAccessConfig), + paramtypes.NewParamSetPair(wasmtypes.ParamStoreKeyInstantiateAccess, &p.InstantiateDefaultPermission, validateAccessType), + paramtypes.NewParamSetPair(ParamStoreKeyGasMultiplier, &p.GasMultiplier, validateGasMultiplier), + paramtypes.NewParamSetPair(ParamStoreKeyInstanceCost, &p.InstanceCost, validateInstanceCost), + paramtypes.NewParamSetPair(ParamStoreKeyCompileCost, &p.CompileCost, validateCompileCost), + } +} + +// ValidateBasic performs basic validation on wasm parameters +func (p Params) ValidateBasic() error { + if err := validateAccessType(p.InstantiateDefaultPermission); err != nil { + return errors.Wrap(err, "instantiate default permission") + } + if err := validateAccessConfig(p.CodeUploadAccess); err != nil { + return errors.Wrap(err, "upload access") + } + return nil +} + +func validateAccessType(i interface{}) error { + a, ok := i.(wasmtypes.AccessType) + if !ok { + return fmt.Errorf("invalid parameter type: %T", i) + } + if a == wasmtypes.AccessTypeUnspecified { + return sdkerrors.Wrap(wasmtypes.ErrEmpty, "type") + } + for _, v := range wasmtypes.AllAccessTypes { + if v == a { + return nil + } + } + return sdkerrors.Wrapf(wasmtypes.ErrInvalid, "unknown type: %q", a) +} + +func validateAccessConfig(i interface{}) error { + v, ok := i.(wasmtypes.AccessConfig) + if !ok { + return fmt.Errorf("invalid parameter type: %T", i) + } + return v.ValidateBasic() +} + +func validateGasMultiplier(i interface{}) error { + a, ok := i.(uint64) + if !ok { + return sdkerrors.Wrapf(wasmtypes.ErrInvalid, "type: %T", i) + } + if a == 0 { + return sdkerrors.Wrap(wasmtypes.ErrInvalid, "must be greater than 0") + } + return nil +} + +func validateInstanceCost(i interface{}) error { + a, ok := i.(uint64) + if !ok { + return sdkerrors.Wrapf(wasmtypes.ErrInvalid, "type: %T", i) + } + if a == 0 { + return sdkerrors.Wrap(wasmtypes.ErrInvalid, "must be greater than 0") + } + return nil +} + +func validateCompileCost(i interface{}) error { + a, ok := i.(uint64) + if !ok { + return sdkerrors.Wrapf(wasmtypes.ErrInvalid, "type: %T", i) + } + if a == 0 { + return sdkerrors.Wrap(wasmtypes.ErrInvalid, "must be greater than 0") + } + return nil +} diff --git a/x/wasm/lbmtypes/types.pb.go b/x/wasm/lbmtypes/types.pb.go new file mode 100644 index 0000000000..f261559501 --- /dev/null +++ b/x/wasm/lbmtypes/types.pb.go @@ -0,0 +1,476 @@ +// Code generated by protoc-gen-gogo. DO NOT EDIT. +// source: lbm/wasm/v1/types.proto + +package lbmtypes + +import ( + fmt "fmt" + _ "github.com/gogo/protobuf/gogoproto" + proto "github.com/gogo/protobuf/proto" + types "github.com/line/wasmd/x/wasm/types" + io "io" + math "math" + math_bits "math/bits" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package + +// Params defines the set of wasm parameters. +type Params struct { + CodeUploadAccess types.AccessConfig `protobuf:"bytes,1,opt,name=code_upload_access,json=codeUploadAccess,proto3" json:"code_upload_access" yaml:"code_upload_access"` + InstantiateDefaultPermission types.AccessType `protobuf:"varint,2,opt,name=instantiate_default_permission,json=instantiateDefaultPermission,proto3,enum=cosmwasm.wasm.v1.AccessType" json:"instantiate_default_permission,omitempty" yaml:"instantiate_default_permission"` + GasMultiplier uint64 `protobuf:"varint,3,opt,name=gas_multiplier,json=gasMultiplier,proto3" json:"gas_multiplier,omitempty" yaml:"gas_multiplier"` + InstanceCost uint64 `protobuf:"varint,4,opt,name=instance_cost,json=instanceCost,proto3" json:"instance_cost,omitempty" yaml:"instance_cost"` + CompileCost uint64 `protobuf:"varint,5,opt,name=compile_cost,json=compileCost,proto3" json:"compile_cost,omitempty" yaml:"compile_cost"` +} + +func (m *Params) Reset() { *m = Params{} } +func (*Params) ProtoMessage() {} +func (*Params) Descriptor() ([]byte, []int) { + return fileDescriptor_5a7988258faf20f7, []int{0} +} +func (m *Params) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *Params) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_Params.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 *Params) XXX_Merge(src proto.Message) { + xxx_messageInfo_Params.Merge(m, src) +} +func (m *Params) XXX_Size() int { + return m.Size() +} +func (m *Params) XXX_DiscardUnknown() { + xxx_messageInfo_Params.DiscardUnknown(m) +} + +var xxx_messageInfo_Params proto.InternalMessageInfo + +func init() { + proto.RegisterType((*Params)(nil), "lbm.wasm.v1.Params") +} + +func init() { proto.RegisterFile("lbm/wasm/v1/types.proto", fileDescriptor_5a7988258faf20f7) } + +var fileDescriptor_5a7988258faf20f7 = []byte{ + // 417 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x92, 0x4f, 0x8b, 0xd3, 0x40, + 0x18, 0xc6, 0x33, 0x6e, 0xdd, 0x43, 0xba, 0xbb, 0x48, 0x5c, 0xd9, 0xec, 0x52, 0x26, 0x35, 0xb0, + 0x50, 0x2f, 0x09, 0xbb, 0xde, 0x0a, 0x82, 0xa6, 0x82, 0x27, 0xa1, 0x04, 0xbd, 0x78, 0x09, 0x93, + 0xc9, 0x34, 0x0e, 0xcc, 0x64, 0x42, 0x66, 0x52, 0xed, 0x87, 0x10, 0x3c, 0x7a, 0xf4, 0xe8, 0x47, + 0xe9, 0xc1, 0x43, 0x8f, 0x9e, 0x82, 0xa6, 0xdf, 0x20, 0x9f, 0x40, 0x32, 0x69, 0x6a, 0xc5, 0x3f, + 0xb7, 0xbc, 0xef, 0xef, 0x7d, 0x9e, 0x27, 0x0c, 0x8f, 0x79, 0xc1, 0x62, 0xee, 0xbf, 0x43, 0x92, + 0xfb, 0xcb, 0x1b, 0x5f, 0xad, 0x72, 0x22, 0xbd, 0xbc, 0x10, 0x4a, 0x58, 0x43, 0x16, 0x73, 0xaf, + 0x05, 0xde, 0xf2, 0xe6, 0xea, 0x3c, 0x15, 0xa9, 0xd0, 0x7b, 0xbf, 0xfd, 0xea, 0x4e, 0xae, 0x46, + 0x58, 0x48, 0xae, 0xb5, 0x7f, 0x31, 0x70, 0xbf, 0x1e, 0x99, 0xc7, 0x73, 0x54, 0x20, 0x2e, 0x2d, + 0x61, 0x5a, 0x58, 0x24, 0x24, 0x2a, 0x73, 0x26, 0x50, 0x12, 0x21, 0x8c, 0x89, 0x94, 0x36, 0x18, + 0x83, 0xc9, 0xf0, 0x16, 0x7a, 0xbd, 0x4b, 0x9f, 0xe6, 0x3d, 0xd3, 0x7c, 0x26, 0xb2, 0x05, 0x4d, + 0x83, 0x87, 0xeb, 0xca, 0x31, 0x9a, 0xca, 0xb9, 0x5c, 0x21, 0xce, 0xa6, 0xee, 0x9f, 0x3e, 0x6e, + 0x78, 0xaf, 0x5d, 0xbe, 0xd6, 0xbb, 0x4e, 0x6a, 0x7d, 0x00, 0x26, 0xa4, 0x99, 0x54, 0x28, 0x53, + 0x14, 0x29, 0x12, 0x25, 0x64, 0x81, 0x4a, 0xa6, 0xa2, 0x9c, 0x14, 0x9c, 0x4a, 0x49, 0x45, 0x66, + 0xdf, 0x19, 0x83, 0xc9, 0xd9, 0xed, 0xe8, 0x5f, 0xe9, 0xaf, 0x56, 0x39, 0x09, 0x1e, 0x35, 0x95, + 0x73, 0xdd, 0xe5, 0xfe, 0xdf, 0xcd, 0x0d, 0x47, 0x07, 0x07, 0xcf, 0x3b, 0x3e, 0xdf, 0x63, 0xeb, + 0xa9, 0x79, 0x96, 0x22, 0x19, 0xf1, 0x92, 0x29, 0x9a, 0x33, 0x4a, 0x0a, 0xfb, 0x68, 0x0c, 0x26, + 0x83, 0xe0, 0xb2, 0xa9, 0x9c, 0x07, 0x5d, 0xc0, 0xef, 0xdc, 0x0d, 0x4f, 0x53, 0x24, 0x5f, 0xee, + 0x67, 0xeb, 0x89, 0x79, 0xda, 0x25, 0x60, 0x12, 0x61, 0x21, 0x95, 0x3d, 0xd0, 0x06, 0x76, 0x53, + 0x39, 0xe7, 0x87, 0x7f, 0xb8, 0xc3, 0x6e, 0x78, 0xd2, 0xcf, 0x33, 0x21, 0x95, 0x35, 0x35, 0x4f, + 0xb0, 0xe0, 0x39, 0x65, 0x3b, 0xf5, 0x5d, 0xad, 0xbe, 0x68, 0x2a, 0xe7, 0x7e, 0xff, 0xae, 0xbf, + 0xa8, 0x1b, 0x0e, 0x77, 0x63, 0xab, 0x9d, 0x0e, 0x3e, 0x7d, 0x76, 0x8c, 0xe0, 0xc5, 0xfa, 0x07, + 0x34, 0xbe, 0xd4, 0x10, 0xac, 0x6b, 0x08, 0x36, 0x35, 0x04, 0xdf, 0x6b, 0x08, 0x3e, 0x6e, 0xa1, + 0xb1, 0xd9, 0x42, 0xe3, 0xdb, 0x16, 0x1a, 0x6f, 0xae, 0x53, 0xaa, 0xde, 0x96, 0xb1, 0x87, 0x05, + 0xf7, 0x19, 0xcd, 0x88, 0x6e, 0x45, 0xe2, 0xbf, 0xef, 0xda, 0xc1, 0x62, 0xae, 0xdb, 0x11, 0x1f, + 0xeb, 0x7a, 0x3c, 0xfe, 0x19, 0x00, 0x00, 0xff, 0xff, 0xaa, 0x8d, 0x1b, 0x82, 0x7a, 0x02, 0x00, + 0x00, +} + +func (this *Params) Equal(that interface{}) bool { + if that == nil { + return this == nil + } + + that1, ok := that.(*Params) + if !ok { + that2, ok := that.(Params) + if ok { + that1 = &that2 + } else { + return false + } + } + if that1 == nil { + return this == nil + } else if this == nil { + return false + } + if !this.CodeUploadAccess.Equal(&that1.CodeUploadAccess) { + return false + } + if this.InstantiateDefaultPermission != that1.InstantiateDefaultPermission { + return false + } + if this.GasMultiplier != that1.GasMultiplier { + return false + } + if this.InstanceCost != that1.InstanceCost { + return false + } + if this.CompileCost != that1.CompileCost { + return false + } + return true +} +func (m *Params) 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 *Params) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *Params) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.CompileCost != 0 { + i = encodeVarintTypes(dAtA, i, uint64(m.CompileCost)) + i-- + dAtA[i] = 0x28 + } + if m.InstanceCost != 0 { + i = encodeVarintTypes(dAtA, i, uint64(m.InstanceCost)) + i-- + dAtA[i] = 0x20 + } + if m.GasMultiplier != 0 { + i = encodeVarintTypes(dAtA, i, uint64(m.GasMultiplier)) + i-- + dAtA[i] = 0x18 + } + if m.InstantiateDefaultPermission != 0 { + i = encodeVarintTypes(dAtA, i, uint64(m.InstantiateDefaultPermission)) + i-- + dAtA[i] = 0x10 + } + { + size, err := m.CodeUploadAccess.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintTypes(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func encodeVarintTypes(dAtA []byte, offset int, v uint64) int { + offset -= sovTypes(v) + base := offset + for v >= 1<<7 { + dAtA[offset] = uint8(v&0x7f | 0x80) + v >>= 7 + offset++ + } + dAtA[offset] = uint8(v) + return base +} +func (m *Params) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.CodeUploadAccess.Size() + n += 1 + l + sovTypes(uint64(l)) + if m.InstantiateDefaultPermission != 0 { + n += 1 + sovTypes(uint64(m.InstantiateDefaultPermission)) + } + if m.GasMultiplier != 0 { + n += 1 + sovTypes(uint64(m.GasMultiplier)) + } + if m.InstanceCost != 0 { + n += 1 + sovTypes(uint64(m.InstanceCost)) + } + if m.CompileCost != 0 { + n += 1 + sovTypes(uint64(m.CompileCost)) + } + return n +} + +func sovTypes(x uint64) (n int) { + return (math_bits.Len64(x|1) + 6) / 7 +} +func sozTypes(x uint64) (n int) { + return sovTypes(uint64((x << 1) ^ uint64((int64(x) >> 63)))) +} +func (m *Params) 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 ErrIntOverflowTypes + } + 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: Params: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: Params: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field CodeUploadAccess", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthTypes + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.CodeUploadAccess.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field InstantiateDefaultPermission", wireType) + } + m.InstantiateDefaultPermission = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.InstantiateDefaultPermission |= types.AccessType(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 3: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field GasMultiplier", wireType) + } + m.GasMultiplier = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.GasMultiplier |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 4: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field InstanceCost", wireType) + } + m.InstanceCost = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.InstanceCost |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 5: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field CompileCost", wireType) + } + m.CompileCost = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.CompileCost |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + default: + iNdEx = preIndex + skippy, err := skipTypes(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthTypes + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func skipTypes(dAtA []byte) (n int, err error) { + l := len(dAtA) + iNdEx := 0 + depth := 0 + for iNdEx < l { + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowTypes + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + wireType := int(wire & 0x7) + switch wireType { + case 0: + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowTypes + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + iNdEx++ + if dAtA[iNdEx-1] < 0x80 { + break + } + } + case 1: + iNdEx += 8 + case 2: + var length int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowTypes + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + length |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if length < 0 { + return 0, ErrInvalidLengthTypes + } + iNdEx += length + case 3: + depth++ + case 4: + if depth == 0 { + return 0, ErrUnexpectedEndOfGroupTypes + } + depth-- + case 5: + iNdEx += 4 + default: + return 0, fmt.Errorf("proto: illegal wireType %d", wireType) + } + if iNdEx < 0 { + return 0, ErrInvalidLengthTypes + } + if depth == 0 { + return iNdEx, nil + } + } + return 0, io.ErrUnexpectedEOF +} + +var ( + ErrInvalidLengthTypes = fmt.Errorf("proto: negative length found during unmarshaling") + ErrIntOverflowTypes = fmt.Errorf("proto: integer overflow") + ErrUnexpectedEndOfGroupTypes = fmt.Errorf("proto: unexpected end of group") +) diff --git a/x/wasm/module.go b/x/wasm/module.go index 29a370ae2f..7d1e96c4cb 100644 --- a/x/wasm/module.go +++ b/x/wasm/module.go @@ -133,7 +133,7 @@ func NewAppModule( func (am AppModule) RegisterServices(cfg module.Configurator) { types.RegisterMsgServer(cfg.MsgServer(), keeper.NewMsgServerImpl(keeper.NewDefaultPermissionKeeper(am.keeper))) types.RegisterQueryServer(cfg.QueryServer(), NewQuerier(am.keeper)) - lbmtypes.RegisterQueryServer(cfg.QueryServer(), NewQuerier(am.keeper)) + //lbmtypes.RegisterQueryServer(cfg.QueryServer(), NewQuerier(am.keeper)) // m := keeper.NewMigrator(*am.keeper) // if err := cfg.RegisterMigration(types.ModuleName, 1, m.Migrate1to2); err != nil { diff --git a/x/wasm/module_test.go b/x/wasm/module_test.go index 450f08d8ee..63521a13f2 100644 --- a/x/wasm/module_test.go +++ b/x/wasm/module_test.go @@ -149,7 +149,7 @@ type state struct { func TestHandleInstantiate(t *testing.T) { data := setupTest(t) - creator := data.faucet.NewFundedAccount(data.ctx, sdk.NewInt64Coin("denom", 100000)) + creator := data.faucet.NewFundedRandomAccount(data.ctx, sdk.NewInt64Coin("denom", 100000)) h := data.module.Route().Handler() q := data.module.LegacyQuerierHandler(nil) @@ -207,7 +207,7 @@ func TestHandleInstantiate(t *testing.T) { func TestHandleStoreAndInstantiate(t *testing.T) { data := setupTest(t) - creator := data.faucet.NewFundedAccount(data.ctx, sdk.NewInt64Coin("denom", 100000)) + creator := data.faucet.NewFundedRandomAccount(data.ctx, sdk.NewInt64Coin("denom", 100000)) h := data.module.Route().Handler() q := data.module.LegacyQuerierHandler(nil) @@ -384,8 +384,8 @@ func TestHandleExecute(t *testing.T) { deposit := sdk.NewCoins(sdk.NewInt64Coin("denom", 100000)) topUp := sdk.NewCoins(sdk.NewInt64Coin("denom", 5000)) - creator := data.faucet.NewFundedAccount(data.ctx, deposit.Add(deposit...)...) - fred := data.faucet.NewFundedAccount(data.ctx, topUp...) + creator := data.faucet.NewFundedRandomAccount(data.ctx, deposit.Add(deposit...)...) + fred := data.faucet.NewFundedRandomAccount(data.ctx, topUp...) h := data.module.Route().Handler() q := data.module.LegacyQuerierHandler(nil) @@ -528,7 +528,7 @@ func TestHandleExecuteEscrow(t *testing.T) { topUp := sdk.NewCoins(sdk.NewInt64Coin("denom", 5000)) creator := sdk.AccAddress(bytes.Repeat([]byte{1}, address.Len)) data.faucet.Fund(data.ctx, creator, sdk.NewInt64Coin("denom", 100000)) - fred := data.faucet.NewFundedAccount(data.ctx, topUp...) + fred := data.faucet.NewFundedRandomAccount(data.ctx, topUp...) h := data.module.Route().Handler() diff --git a/x/wasm/simulation/params.go b/x/wasm/simulation/params.go index 177f23a779..fb8f3e4c22 100644 --- a/x/wasm/simulation/params.go +++ b/x/wasm/simulation/params.go @@ -38,8 +38,5 @@ func RandomParams(r *rand.Rand) types.Params { return types.Params{ CodeUploadAccess: accessConfig, InstantiateDefaultPermission: accessConfig.Permission, - GasMultiplier: types.DefaultGasMultiplier, - InstanceCost: types.DefaultInstanceCost, - CompileCost: types.DefaultCompileCost, } } diff --git a/x/wasm/types/exported_keepers.go b/x/wasm/types/exported_keepers.go index c2f721ef5e..537df882db 100644 --- a/x/wasm/types/exported_keepers.go +++ b/x/wasm/types/exported_keepers.go @@ -21,8 +21,8 @@ type ViewKeeper interface { GetByteCode(ctx sdk.Context, codeID uint64) ([]byte, error) IsPinnedCode(ctx sdk.Context, codeID uint64) bool GetParams(ctx sdk.Context) Params - IterateInactiveContracts(ctx sdk.Context, fn func(contractAddress sdk.AccAddress) bool) - IsInactiveContract(ctx sdk.Context, contractAddress sdk.AccAddress) bool + //IterateInactiveContracts(ctx sdk.Context, fn func(contractAddress sdk.AccAddress) bool) + //IsInactiveContract(ctx sdk.Context, contractAddress sdk.AccAddress) bool } // ContractOpsKeeper contains mutable operations on a contract. @@ -79,11 +79,11 @@ type ContractOpsKeeper interface { // SetAccessConfig updates the access config of a code id. SetAccessConfig(ctx sdk.Context, codeID uint64, caller sdk.AccAddress, newConfig AccessConfig) error - // DeactivateContract add the contract address to inactive contract list. - DeactivateContract(ctx sdk.Context, contractAddress sdk.AccAddress) error - - // ActivateContract remove the contract address from inactive contract list. - ActivateContract(ctx sdk.Context, contractAddress sdk.AccAddress) error + //// DeactivateContract add the contract address to inactive contract list. + //DeactivateContract(ctx sdk.Context, contractAddress sdk.AccAddress) error + // + //// ActivateContract remove the contract address from inactive contract list. + //ActivateContract(ctx sdk.Context, contractAddress sdk.AccAddress) error } // IBCContractKeeper IBC lifecycle event handler diff --git a/x/wasm/types/genesis.go b/x/wasm/types/genesis.go index b8b08b3d61..df137c2aae 100644 --- a/x/wasm/types/genesis.go +++ b/x/wasm/types/genesis.go @@ -37,11 +37,11 @@ func (s GenesisState) ValidateBasic() error { return sdkerrors.Wrapf(err, "gen message: %d", i) } } - for i, addr := range s.InactiveContractAddresses { - if _, err := sdk.AccAddressFromBech32(addr); err != nil { - return sdkerrors.Wrapf(err, "inactive contract address: %d", i) - } - } + //for i, addr := range s.InactiveContractAddresses { + // if _, err := sdk.AccAddressFromBech32(addr); err != nil { + // return sdkerrors.Wrapf(err, "inactive contract address: %d", i) + // } + //} return nil } diff --git a/x/wasm/types/genesis.pb.go b/x/wasm/types/genesis.pb.go index ad5b145923..4fba3d0133 100644 --- a/x/wasm/types/genesis.pb.go +++ b/x/wasm/types/genesis.pb.go @@ -30,8 +30,6 @@ type GenesisState struct { Contracts []Contract `protobuf:"bytes,3,rep,name=contracts,proto3" json:"contracts,omitempty"` Sequences []Sequence `protobuf:"bytes,4,rep,name=sequences,proto3" json:"sequences,omitempty"` GenMsgs []GenesisState_GenMsgs `protobuf:"bytes,5,rep,name=gen_msgs,json=genMsgs,proto3" json:"gen_msgs,omitempty"` - // InactiveContractAddresses is a list of contract address that set inactive - InactiveContractAddresses []string `protobuf:"bytes,6,rep,name=inactive_contract_addresses,json=inactiveContractAddresses,proto3" json:"inactive_contract_address, omitempty"` } func (m *GenesisState) Reset() { *m = GenesisState{} } @@ -102,13 +100,6 @@ func (m *GenesisState) GetGenMsgs() []GenesisState_GenMsgs { return nil } -func (m *GenesisState) GetInactiveContractAddresses() []string { - if m != nil { - return m.InactiveContractAddresses - } - return nil -} - // GenMsgs define the messages that can be executed during genesis phase in // order. The intention is to have more human readable data that is auditable. type GenesisState_GenMsgs struct { @@ -406,50 +397,48 @@ func init() { func init() { proto.RegisterFile("cosmwasm/wasm/v1/genesis.proto", fileDescriptor_2ab3f539b23472a6) } var fileDescriptor_2ab3f539b23472a6 = []byte{ - // 679 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x74, 0x94, 0xcd, 0x4e, 0xdb, 0x40, - 0x10, 0xc7, 0x63, 0x92, 0x98, 0x64, 0x48, 0x0b, 0x5a, 0x10, 0x18, 0xd3, 0x3a, 0x51, 0x8a, 0xaa, - 0x54, 0x42, 0x89, 0xa0, 0x52, 0x4f, 0xad, 0xaa, 0xba, 0xa0, 0x12, 0x21, 0xa4, 0xd6, 0xa8, 0x97, - 0x4a, 0x28, 0x32, 0xf6, 0x60, 0xac, 0x62, 0x6f, 0x9a, 0xdd, 0xa4, 0xe4, 0xdc, 0x5b, 0x4f, 0x7d, - 0x85, 0xbe, 0x4c, 0xc5, 0x91, 0x63, 0x4f, 0x51, 0x15, 0x6e, 0x3c, 0x45, 0xb5, 0xeb, 0x8f, 0x18, - 0x92, 0x5c, 0x2c, 0xcf, 0xcc, 0x7f, 0x7e, 0x3b, 0xb3, 0xbb, 0xb3, 0x60, 0x38, 0x94, 0x05, 0xdf, - 0x6d, 0x16, 0xb4, 0xe4, 0x67, 0xb0, 0xdb, 0xf2, 0x30, 0x44, 0xe6, 0xb3, 0x66, 0xb7, 0x47, 0x39, - 0x25, 0x2b, 0x49, 0xbc, 0x29, 0x3f, 0x83, 0x5d, 0x7d, 0xcd, 0xa3, 0x1e, 0x95, 0xc1, 0x96, 0xf8, - 0x8b, 0x74, 0xfa, 0x93, 0x29, 0x0e, 0x1f, 0x76, 0x31, 0xa6, 0xe8, 0x9b, 0xd3, 0xd1, 0xab, 0x28, - 0x54, 0xff, 0xa9, 0x42, 0xe5, 0x43, 0xb4, 0xe4, 0x09, 0xb7, 0x39, 0x92, 0x57, 0xa0, 0x76, 0xed, - 0x9e, 0x1d, 0x30, 0x4d, 0xa9, 0x29, 0x8d, 0xa5, 0x3d, 0xad, 0xf9, 0xb0, 0x84, 0xe6, 0x47, 0x19, - 0x37, 0x0b, 0xd7, 0xa3, 0x6a, 0xce, 0x8a, 0xd5, 0xe4, 0x00, 0x8a, 0x0e, 0x75, 0x91, 0x69, 0x0b, - 0xb5, 0x7c, 0x63, 0x69, 0x6f, 0x7d, 0x3a, 0xed, 0x3d, 0x75, 0xd1, 0xdc, 0x10, 0x49, 0x77, 0xa3, - 0xea, 0xb2, 0x14, 0xef, 0xd0, 0xc0, 0xe7, 0x18, 0x74, 0xf9, 0xd0, 0x8a, 0xb2, 0xc9, 0x67, 0x28, - 0x3b, 0x34, 0xe4, 0x3d, 0xdb, 0xe1, 0x4c, 0xcb, 0x4b, 0x94, 0x3e, 0x0b, 0x15, 0x49, 0xcc, 0xad, - 0x18, 0xb7, 0x9a, 0x26, 0x65, 0x90, 0x13, 0x92, 0xc0, 0x32, 0xfc, 0xd6, 0xc7, 0xd0, 0x41, 0xa6, - 0x15, 0xe6, 0x61, 0x4f, 0x62, 0xc9, 0x04, 0x9b, 0x26, 0x65, 0xb1, 0xa9, 0x93, 0x9c, 0x42, 0xc9, - 0xc3, 0xb0, 0x13, 0x30, 0x8f, 0x69, 0x45, 0x49, 0x7d, 0x3e, 0x4d, 0xcd, 0x6e, 0xaf, 0x30, 0x8e, - 0x99, 0xc7, 0x4c, 0x3d, 0x5e, 0x81, 0x24, 0xf9, 0x99, 0x05, 0x16, 0xbd, 0x48, 0x44, 0x2e, 0x60, - 0xcb, 0x0f, 0x6d, 0x87, 0xfb, 0x03, 0xec, 0x24, 0xbd, 0x74, 0x6c, 0xd7, 0xed, 0x21, 0x63, 0xc8, - 0x34, 0xb5, 0x96, 0x6f, 0x94, 0xcd, 0xc6, 0xdd, 0xa8, 0xba, 0x3d, 0x57, 0xb6, 0x53, 0x9b, 0x70, - 0x37, 0x13, 0x55, 0xb2, 0x7d, 0xef, 0x12, 0x94, 0xfe, 0x63, 0x01, 0x16, 0xe3, 0xd2, 0xc8, 0x5b, - 0x00, 0xc6, 0x69, 0x4f, 0xb0, 0x5c, 0x8c, 0x6f, 0x81, 0x31, 0xdd, 0xd6, 0x31, 0xf3, 0x4e, 0x84, - 0x4c, 0x1c, 0xeb, 0x61, 0xce, 0x2a, 0xb3, 0xc4, 0x20, 0xa7, 0xb0, 0xe6, 0x87, 0x8c, 0xdb, 0x21, - 0xf7, 0x6d, 0x3e, 0x29, 0x49, 0x5b, 0x90, 0xa8, 0xc6, 0x4c, 0x54, 0x7b, 0x92, 0x90, 0x54, 0x77, - 0x98, 0xb3, 0x56, 0xfd, 0x69, 0x37, 0xf9, 0x04, 0x2b, 0x78, 0x85, 0x4e, 0x3f, 0x8b, 0xce, 0x4b, - 0xf4, 0xf6, 0x4c, 0xf4, 0x41, 0x24, 0xce, 0x60, 0x97, 0xf1, 0xbe, 0xcb, 0x2c, 0x42, 0x9e, 0xf5, - 0x83, 0xfa, 0x6f, 0x05, 0x0a, 0xb2, 0x83, 0x67, 0xb0, 0x28, 0x9a, 0xef, 0xf8, 0xae, 0xec, 0xbf, - 0x60, 0xc2, 0x78, 0x54, 0x55, 0x45, 0xa8, 0xbd, 0x6f, 0xa9, 0x22, 0xd4, 0x76, 0xc9, 0x1b, 0x71, - 0x55, 0x85, 0x28, 0x3c, 0xa7, 0x71, 0x6f, 0xfa, 0xec, 0x5b, 0xdf, 0x0e, 0xcf, 0x69, 0x3c, 0x2e, - 0x25, 0x27, 0xb6, 0xc9, 0x53, 0x00, 0x99, 0x7e, 0x36, 0xe4, 0xc8, 0x64, 0x03, 0x15, 0x4b, 0x02, - 0x4d, 0xe1, 0x20, 0xeb, 0xa0, 0x76, 0xfd, 0x30, 0x44, 0x57, 0x2b, 0xd4, 0x94, 0x46, 0xc9, 0x8a, - 0xad, 0xfa, 0x1f, 0x05, 0x4a, 0xe9, 0x56, 0xbc, 0x80, 0x95, 0x87, 0x07, 0x2e, 0x0b, 0x2e, 0x5b, - 0xcb, 0xce, 0xfd, 0x33, 0x26, 0x6d, 0x78, 0x94, 0x4a, 0x33, 0x15, 0x1b, 0xf3, 0x87, 0x2b, 0x53, - 0x75, 0xc5, 0xc9, 0xf8, 0xc8, 0x3e, 0x3c, 0x4e, 0x51, 0x4c, 0xdc, 0xea, 0x78, 0x50, 0x37, 0x66, - 0x6c, 0x3f, 0x75, 0xf1, 0x32, 0x86, 0xa4, 0xeb, 0xcb, 0x49, 0xa8, 0x9b, 0x50, 0x4a, 0xe6, 0x8d, - 0xd4, 0x40, 0xf5, 0xdd, 0xce, 0x57, 0x1c, 0xca, 0xea, 0x2b, 0x66, 0x79, 0x3c, 0xaa, 0x16, 0xdb, - 0xfb, 0x47, 0x38, 0xb4, 0x8a, 0xbe, 0x7b, 0x84, 0x43, 0xb2, 0x06, 0xc5, 0x81, 0x7d, 0xd9, 0x47, - 0x59, 0x76, 0xc1, 0x8a, 0x0c, 0xf3, 0xf5, 0xf5, 0xd8, 0x50, 0x6e, 0xc6, 0x86, 0xf2, 0x6f, 0x6c, - 0x28, 0xbf, 0x6e, 0x8d, 0xdc, 0xcd, 0xad, 0x91, 0xfb, 0x7b, 0x6b, 0xe4, 0xbe, 0xd4, 0x3d, 0x9f, - 0x5f, 0xf4, 0xcf, 0x9a, 0x0e, 0x0d, 0x5a, 0x97, 0x7e, 0x88, 0xf2, 0xe5, 0x73, 0x5b, 0x57, 0xd1, - 0x0b, 0x28, 0x1f, 0xc7, 0x33, 0x55, 0x3e, 0x81, 0x2f, 0xff, 0x07, 0x00, 0x00, 0xff, 0xff, 0x3b, - 0x04, 0x85, 0xd1, 0x85, 0x05, 0x00, 0x00, + // 643 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x74, 0x94, 0xcd, 0x6e, 0xd3, 0x40, + 0x10, 0xc7, 0xe3, 0x26, 0x4e, 0x93, 0x69, 0xa0, 0xd5, 0xb6, 0x6a, 0x8d, 0x01, 0x27, 0x0a, 0x08, + 0x05, 0x09, 0x25, 0x6a, 0x91, 0x38, 0x81, 0x10, 0xa6, 0x15, 0x8d, 0xaa, 0x4a, 0xe0, 0x8a, 0x0b, + 0x52, 0x15, 0xb9, 0xf6, 0xd4, 0x58, 0xd4, 0xde, 0x90, 0xdd, 0x94, 0xe6, 0xcc, 0x0b, 0xf0, 0x08, + 0xf0, 0x32, 0xa8, 0xc7, 0x1e, 0x39, 0x45, 0x28, 0xbd, 0xf1, 0x14, 0x68, 0xd7, 0x6b, 0xc7, 0xe0, + 0xf4, 0x62, 0x65, 0x67, 0xfe, 0xf3, 0x9b, 0x8f, 0xcc, 0x2e, 0x58, 0x1e, 0x65, 0xd1, 0x17, 0x97, + 0x45, 0x3d, 0xf9, 0x39, 0xdf, 0xee, 0x05, 0x18, 0x23, 0x0b, 0x59, 0x77, 0x38, 0xa2, 0x9c, 0x92, + 0xb5, 0xd4, 0xdf, 0x95, 0x9f, 0xf3, 0x6d, 0x73, 0x23, 0xa0, 0x01, 0x95, 0xce, 0x9e, 0xf8, 0x95, + 0xe8, 0xcc, 0x7b, 0x05, 0x0e, 0x9f, 0x0c, 0x51, 0x51, 0xcc, 0x3b, 0x45, 0xef, 0x45, 0xe2, 0x6a, + 0x7f, 0xd7, 0xa1, 0xf1, 0x26, 0x49, 0x79, 0xc4, 0x5d, 0x8e, 0xe4, 0x19, 0x54, 0x87, 0xee, 0xc8, + 0x8d, 0x98, 0xa1, 0xb5, 0xb4, 0xce, 0xca, 0x8e, 0xd1, 0xfd, 0xbf, 0x84, 0xee, 0x5b, 0xe9, 0xb7, + 0x2b, 0x97, 0xd3, 0x66, 0xc9, 0x51, 0x6a, 0xb2, 0x07, 0xba, 0x47, 0x7d, 0x64, 0xc6, 0x52, 0xab, + 0xdc, 0x59, 0xd9, 0xd9, 0x2c, 0x86, 0xbd, 0xa6, 0x3e, 0xda, 0x5b, 0x22, 0xe8, 0xcf, 0xb4, 0xb9, + 0x2a, 0xc5, 0x4f, 0x68, 0x14, 0x72, 0x8c, 0x86, 0x7c, 0xe2, 0x24, 0xd1, 0xe4, 0x3d, 0xd4, 0x3d, + 0x1a, 0xf3, 0x91, 0xeb, 0x71, 0x66, 0x94, 0x25, 0xca, 0x5c, 0x84, 0x4a, 0x24, 0xf6, 0x5d, 0x85, + 0x5b, 0xcf, 0x82, 0x72, 0xc8, 0x39, 0x49, 0x60, 0x19, 0x7e, 0x1e, 0x63, 0xec, 0x21, 0x33, 0x2a, + 0x37, 0x61, 0x8f, 0x94, 0x64, 0x8e, 0xcd, 0x82, 0xf2, 0xd8, 0xcc, 0x48, 0x8e, 0xa1, 0x16, 0x60, + 0x3c, 0x88, 0x58, 0xc0, 0x0c, 0x5d, 0x52, 0x1f, 0x15, 0xa9, 0xf9, 0xf1, 0x8a, 0xc3, 0x21, 0x0b, + 0x98, 0x6d, 0xaa, 0x0c, 0x24, 0x8d, 0xcf, 0x25, 0x58, 0x0e, 0x12, 0x91, 0xf9, 0x75, 0x09, 0x96, + 0x55, 0x00, 0x79, 0x09, 0xc0, 0x38, 0x1d, 0xe1, 0x40, 0xcc, 0x49, 0xfd, 0x37, 0x56, 0x31, 0xd9, + 0x21, 0x0b, 0x8e, 0x84, 0x4c, 0x0c, 0x7b, 0xbf, 0xe4, 0xd4, 0x59, 0x7a, 0x20, 0xc7, 0xb0, 0x11, + 0xc6, 0x8c, 0xbb, 0x31, 0x0f, 0x5d, 0x2e, 0x30, 0xc9, 0x6c, 0x8c, 0x25, 0x89, 0xea, 0x2c, 0x44, + 0xf5, 0xe7, 0x01, 0xe9, 0xc8, 0xf7, 0x4b, 0xce, 0x7a, 0x58, 0x34, 0x93, 0x77, 0xb0, 0x86, 0x17, + 0xe8, 0x8d, 0xf3, 0xe8, 0xb2, 0x44, 0x3f, 0x5c, 0x88, 0xde, 0x4b, 0xc4, 0x39, 0xec, 0x2a, 0xfe, + 0x6b, 0xb2, 0x75, 0x28, 0xb3, 0x71, 0xd4, 0xfe, 0xa1, 0x41, 0x45, 0x76, 0xf0, 0x00, 0x96, 0x45, + 0xf3, 0x83, 0xd0, 0x97, 0xfd, 0x57, 0x6c, 0x98, 0x4d, 0x9b, 0x55, 0xe1, 0xea, 0xef, 0x3a, 0x55, + 0xe1, 0xea, 0xfb, 0xe4, 0x85, 0x58, 0x20, 0x21, 0x8a, 0x4f, 0xa9, 0xea, 0xcd, 0x5c, 0xbc, 0x8b, + 0xfd, 0xf8, 0x94, 0xaa, 0x25, 0xae, 0x79, 0xea, 0x4c, 0xee, 0x03, 0xc8, 0xf0, 0x93, 0x09, 0x47, + 0x26, 0x1b, 0x68, 0x38, 0x12, 0x68, 0x0b, 0x03, 0xd9, 0x84, 0xea, 0x30, 0x8c, 0x63, 0xf4, 0x8d, + 0x4a, 0x4b, 0xeb, 0xd4, 0x1c, 0x75, 0x6a, 0xff, 0xd4, 0xa0, 0x96, 0x8d, 0xe2, 0x31, 0xac, 0xa5, + 0x23, 0x18, 0xb8, 0xbe, 0x3f, 0x42, 0x96, 0x5c, 0xa6, 0xba, 0xb3, 0x9a, 0xda, 0x5f, 0x25, 0x66, + 0xd2, 0x87, 0x5b, 0x99, 0x34, 0x57, 0xb1, 0x75, 0xf3, 0xca, 0xe7, 0xaa, 0x6e, 0x78, 0x39, 0x1b, + 0xd9, 0x85, 0xdb, 0x19, 0x8a, 0x89, 0x5d, 0x53, 0xd7, 0x67, 0x6b, 0xc1, 0xf8, 0xa9, 0x8f, 0x67, + 0x0a, 0x92, 0xe5, 0x97, 0xfb, 0xd9, 0xb6, 0xa1, 0x96, 0xde, 0x02, 0xd2, 0x82, 0x6a, 0xe8, 0x0f, + 0x3e, 0xe1, 0x44, 0x56, 0xdf, 0xb0, 0xeb, 0xb3, 0x69, 0x53, 0xef, 0xef, 0x1e, 0xe0, 0xc4, 0xd1, + 0x43, 0xff, 0x00, 0x27, 0x64, 0x03, 0xf4, 0x73, 0xf7, 0x6c, 0x8c, 0xb2, 0xec, 0x8a, 0x93, 0x1c, + 0xec, 0xe7, 0x97, 0x33, 0x4b, 0xbb, 0x9a, 0x59, 0xda, 0xef, 0x99, 0xa5, 0x7d, 0xbb, 0xb6, 0x4a, + 0x57, 0xd7, 0x56, 0xe9, 0xd7, 0xb5, 0x55, 0xfa, 0xd0, 0x0e, 0x42, 0xfe, 0x71, 0x7c, 0xd2, 0xf5, + 0x68, 0xd4, 0x3b, 0x0b, 0x63, 0x94, 0xef, 0x91, 0xdf, 0xbb, 0x48, 0xde, 0x25, 0xf9, 0x64, 0x9d, + 0x54, 0xe5, 0xc3, 0xf4, 0xf4, 0x6f, 0x00, 0x00, 0x00, 0xff, 0xff, 0x2e, 0xa4, 0x50, 0x6f, 0x1b, + 0x05, 0x00, 0x00, } func (m *GenesisState) Marshal() (dAtA []byte, err error) { @@ -472,15 +461,6 @@ func (m *GenesisState) MarshalToSizedBuffer(dAtA []byte) (int, error) { _ = i var l int _ = l - if len(m.InactiveContractAddresses) > 0 { - for iNdEx := len(m.InactiveContractAddresses) - 1; iNdEx >= 0; iNdEx-- { - i -= len(m.InactiveContractAddresses[iNdEx]) - copy(dAtA[i:], m.InactiveContractAddresses[iNdEx]) - i = encodeVarintGenesis(dAtA, i, uint64(len(m.InactiveContractAddresses[iNdEx]))) - i-- - dAtA[i] = 0x32 - } - } if len(m.GenMsgs) > 0 { for iNdEx := len(m.GenMsgs) - 1; iNdEx >= 0; iNdEx-- { { @@ -832,12 +812,6 @@ func (m *GenesisState) Size() (n int) { n += 1 + l + sovGenesis(uint64(l)) } } - if len(m.InactiveContractAddresses) > 0 { - for _, s := range m.InactiveContractAddresses { - l = len(s) - n += 1 + l + sovGenesis(uint64(l)) - } - } return n } @@ -1151,38 +1125,6 @@ func (m *GenesisState) Unmarshal(dAtA []byte) error { return err } iNdEx = postIndex - case 6: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field InactiveContractAddresses", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenesis - } - 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 ErrInvalidLengthGenesis - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthGenesis - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.InactiveContractAddresses = append(m.InactiveContractAddresses, string(dAtA[iNdEx:postIndex])) - iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipGenesis(dAtA[iNdEx:]) diff --git a/x/wasm/types/params.go b/x/wasm/types/params.go index 7f3ae6fb91..5f573a6cfd 100644 --- a/x/wasm/types/params.go +++ b/x/wasm/types/params.go @@ -13,42 +13,9 @@ import ( paramtypes "github.com/line/lbm-sdk/x/params/types" ) -const ( - // DefaultGasMultiplier is how many CosmWasm gas points = 1 Cosmos SDK gas point. - // - // CosmWasm gas strategy is documented in https://https://github.com/line/cosmwasm/blob/v1.0.0-0.6.0/docs/GAS.md. - // LBM SDK reference costs can be found here: https://github.com/line/lbm-sdk/blob/main/store/types/gas.go#L199-L209. - // - // The original multiplier of 100 up to CosmWasm 0.16 was based on - // "A write at ~3000 gas and ~200us = 10 gas per us (microsecond) cpu/io - // Rough timing have 88k gas at 90us, which is equal to 1k sdk gas... (one read)" - // as well as manual Wasmer benchmarks from 2019. This was then multiplied by 150_000 - // in the 0.16 -> 1.0 upgrade (https://github.com/CosmWasm/cosmwasm/pull/1120). - // - // The multiplier deserves more reproducible benchmarking and a strategy that allows easy adjustments. - // This is tracked in https://github.com/CosmWasm/wasmd/issues/566 and https://github.com/CosmWasm/wasmd/issues/631. - // Gas adjustments are consensus breaking but may happen in any release marked as consensus breaking. - // Do not make assumptions on how much gas an operation will consume in places that are hard to adjust, - // such as hardcoding them in contracts. - // - // Please note that all gas prices returned to wasmvm should have this multiplied. - DefaultGasMultiplier uint64 = 140_000_000 - // DefaultInstanceCost is how much SDK gas we charge each time we load a WASM instance. - // Creating a new instance is costly, and this helps put a recursion limit to contract calling contracts. - DefaultInstanceCost = 60_000 - // DefaultCompileCost is how much SDK gas we charge *per byte* for compiling WASM code. - DefaultCompileCost = 3 -) - var ParamStoreKeyUploadAccess = []byte("uploadAccess") var ParamStoreKeyInstantiateAccess = []byte("instantiateAccess") -// TODO: detach below params because these are lbm-sdk custom params - -var ParamStoreKeyGasMultiplier = []byte("gasMultiplier") -var ParamStoreKeyInstanceCost = []byte("instanceCost") -var ParamStoreKeyCompileCost = []byte("compileCost") - var AllAccessTypes = []AccessType{ AccessTypeNobody, AccessTypeOnlyAddress, @@ -140,9 +107,6 @@ func DefaultParams() Params { return Params{ CodeUploadAccess: AllowEverybody, InstantiateDefaultPermission: AccessTypeEverybody, - GasMultiplier: DefaultGasMultiplier, - InstanceCost: DefaultInstanceCost, - CompileCost: DefaultCompileCost, } } @@ -159,9 +123,6 @@ func (p *Params) ParamSetPairs() paramtypes.ParamSetPairs { return paramtypes.ParamSetPairs{ paramtypes.NewParamSetPair(ParamStoreKeyUploadAccess, &p.CodeUploadAccess, validateAccessConfig), paramtypes.NewParamSetPair(ParamStoreKeyInstantiateAccess, &p.InstantiateDefaultPermission, validateAccessType), - paramtypes.NewParamSetPair(ParamStoreKeyGasMultiplier, &p.GasMultiplier, validateGasMultiplier), - paramtypes.NewParamSetPair(ParamStoreKeyInstanceCost, &p.InstanceCost, validateInstanceCost), - paramtypes.NewParamSetPair(ParamStoreKeyCompileCost, &p.CompileCost, validateCompileCost), } } @@ -225,39 +186,6 @@ func (a AccessConfig) ValidateBasic() error { return sdkerrors.Wrapf(ErrInvalid, "unknown type: %q", a.Permission) } -func validateGasMultiplier(i interface{}) error { - a, ok := i.(uint64) - if !ok { - return sdkerrors.Wrapf(ErrInvalid, "type: %T", i) - } - if a == 0 { - return sdkerrors.Wrap(ErrInvalid, "must be greater than 0") - } - return nil -} - -func validateInstanceCost(i interface{}) error { - a, ok := i.(uint64) - if !ok { - return sdkerrors.Wrapf(ErrInvalid, "type: %T", i) - } - if a == 0 { - return sdkerrors.Wrap(ErrInvalid, "must be greater than 0") - } - return nil -} - -func validateCompileCost(i interface{}) error { - a, ok := i.(uint64) - if !ok { - return sdkerrors.Wrapf(ErrInvalid, "type: %T", i) - } - if a == 0 { - return sdkerrors.Wrap(ErrInvalid, "must be greater than 0") - } - return nil -} - func assertValidAddresses(addrs []string) error { if len(addrs) == 0 { return ErrEmpty diff --git a/x/wasm/types/params_test.go b/x/wasm/types/params_test.go index 10c23c9ee0..4159d393af 100644 --- a/x/wasm/types/params_test.go +++ b/x/wasm/types/params_test.go @@ -31,27 +31,18 @@ func TestValidateParams(t *testing.T) { src: Params{ CodeUploadAccess: AllowNobody, InstantiateDefaultPermission: AccessTypeNobody, - GasMultiplier: DefaultGasMultiplier, - InstanceCost: DefaultInstanceCost, - CompileCost: DefaultCompileCost, }, }, "all good with everybody": { src: Params{ CodeUploadAccess: AllowEverybody, InstantiateDefaultPermission: AccessTypeEverybody, - GasMultiplier: DefaultGasMultiplier, - InstanceCost: DefaultInstanceCost, - CompileCost: DefaultCompileCost, }, }, "all good with only address": { src: Params{ CodeUploadAccess: AccessTypeOnlyAddress.With(anyAddress), InstantiateDefaultPermission: AccessTypeOnlyAddress, - GasMultiplier: DefaultGasMultiplier, - InstanceCost: DefaultInstanceCost, - CompileCost: DefaultCompileCost, }, }, "all good with anyOf address": { @@ -69,9 +60,6 @@ func TestValidateParams(t *testing.T) { "reject empty type in instantiate permission": { src: Params{ CodeUploadAccess: AllowNobody, - GasMultiplier: DefaultGasMultiplier, - InstanceCost: DefaultInstanceCost, - CompileCost: DefaultCompileCost, }, expErr: true, }, @@ -79,9 +67,6 @@ func TestValidateParams(t *testing.T) { src: Params{ CodeUploadAccess: AllowNobody, InstantiateDefaultPermission: 1111, - GasMultiplier: DefaultGasMultiplier, - InstanceCost: DefaultInstanceCost, - CompileCost: DefaultCompileCost, }, expErr: true, }, @@ -89,9 +74,6 @@ func TestValidateParams(t *testing.T) { src: Params{ CodeUploadAccess: AccessConfig{Permission: AccessTypeOnlyAddress, Address: invalidAddress}, InstantiateDefaultPermission: AccessTypeOnlyAddress, - GasMultiplier: DefaultGasMultiplier, - InstanceCost: DefaultInstanceCost, - CompileCost: DefaultCompileCost, }, expErr: true, }, @@ -106,9 +88,6 @@ func TestValidateParams(t *testing.T) { src: Params{ CodeUploadAccess: AccessConfig{Permission: AccessTypeEverybody, Address: anyAddress.String()}, InstantiateDefaultPermission: AccessTypeOnlyAddress, - GasMultiplier: DefaultGasMultiplier, - InstanceCost: DefaultInstanceCost, - CompileCost: DefaultCompileCost, }, expErr: true, }, @@ -116,18 +95,12 @@ func TestValidateParams(t *testing.T) { src: Params{ CodeUploadAccess: AccessConfig{Permission: AccessTypeNobody, Address: anyAddress.String()}, InstantiateDefaultPermission: AccessTypeOnlyAddress, - GasMultiplier: DefaultGasMultiplier, - InstanceCost: DefaultInstanceCost, - CompileCost: DefaultCompileCost, }, expErr: true, }, "reject empty CodeUploadAccess": { src: Params{ InstantiateDefaultPermission: AccessTypeOnlyAddress, - GasMultiplier: DefaultGasMultiplier, - InstanceCost: DefaultInstanceCost, - CompileCost: DefaultCompileCost, }, expErr: true, }, @@ -135,9 +108,6 @@ func TestValidateParams(t *testing.T) { src: Params{ CodeUploadAccess: AccessConfig{Permission: AccessTypeUnspecified}, InstantiateDefaultPermission: AccessTypeOnlyAddress, - GasMultiplier: DefaultGasMultiplier, - InstanceCost: DefaultInstanceCost, - CompileCost: DefaultCompileCost, }, expErr: true, }, @@ -239,10 +209,7 @@ func TestParamsUnmarshalJson(t *testing.T) { }{ "defaults": { src: `{"code_upload_access": {"permission": "Everybody"}, - "instantiate_default_permission": "Everybody", - "gas_multiplier": 140000000, - "instance_cost": 60000, - "compile_cost": 3}`, + "instantiate_default_permission": "Everybody"}`, exp: DefaultParams(), }, } diff --git a/x/wasm/types/tx.pb.go b/x/wasm/types/tx.pb.go index 2d8db853bd..5a12b05a90 100644 --- a/x/wasm/types/tx.pb.go +++ b/x/wasm/types/tx.pb.go @@ -9,7 +9,6 @@ import ( _ "github.com/gogo/protobuf/gogoproto" grpc1 "github.com/gogo/protobuf/grpc" proto "github.com/gogo/protobuf/proto" - github_com_cosmos_cosmos_sdk_types "github.com/line/lbm-sdk/types" github_com_line_lbm_sdk_types "github.com/line/lbm-sdk/types" types "github.com/line/lbm-sdk/types" grpc "google.golang.org/grpc" @@ -180,7 +179,7 @@ type MsgInstantiateContract2 struct { // Msg json encoded message to be passed to the contract on instantiation Msg RawContractMessage `protobuf:"bytes,5,opt,name=msg,proto3,casttype=RawContractMessage" json:"msg,omitempty"` // Funds coins that are transferred to the contract on instantiation - Funds github_com_cosmos_cosmos_sdk_types.Coins `protobuf:"bytes,6,rep,name=funds,proto3,castrepeated=github.com/cosmos/cosmos-sdk/types.Coins" json:"funds"` + Funds github_com_line_lbm_sdk_types.Coins `protobuf:"bytes,6,rep,name=funds,proto3,castrepeated=github.com/line/lbm-sdk/types.Coins" json:"funds"` // Salt is an arbitrary value provided by the sender. Size can be 1 to 64. Salt []byte `protobuf:"bytes,7,opt,name=salt,proto3" json:"salt,omitempty"` // FixMsg include the msg value into the hash for the predictable address. @@ -650,61 +649,60 @@ func init() { func init() { proto.RegisterFile("cosmwasm/wasm/v1/tx.proto", fileDescriptor_4f74d82755520264) } var fileDescriptor_4f74d82755520264 = []byte{ - // 855 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xcc, 0x56, 0x4d, 0x6f, 0xe3, 0x44, - 0x18, 0x8e, 0x1b, 0x27, 0x4d, 0xde, 0x86, 0x25, 0x32, 0xd9, 0xd4, 0x6b, 0x90, 0x13, 0x79, 0x11, - 0x18, 0x01, 0x76, 0x13, 0x24, 0xce, 0x34, 0x81, 0x43, 0x57, 0x32, 0x20, 0x57, 0xcb, 0x0a, 0x84, - 0x14, 0x4d, 0xec, 0x89, 0xd7, 0xda, 0xd8, 0x13, 0x3c, 0x93, 0x26, 0xfd, 0x09, 0xdc, 0xb8, 0xf1, - 0x1f, 0xf8, 0x0d, 0x5c, 0x90, 0x38, 0xf4, 0xd8, 0x23, 0xa7, 0x00, 0xe9, 0xbf, 0xe0, 0x84, 0xfc, - 0x59, 0x6f, 0xea, 0xa4, 0x01, 0x84, 0xb4, 0x97, 0x64, 0x5e, 0xcf, 0xf3, 0x7e, 0x3d, 0x7e, 0xde, - 0x19, 0xc3, 0x23, 0x8b, 0x50, 0x6f, 0x81, 0xa8, 0xa7, 0x47, 0x3f, 0x17, 0x3d, 0x9d, 0x2d, 0xb5, - 0x59, 0x40, 0x18, 0x11, 0x9a, 0xe9, 0x96, 0x16, 0xfd, 0x5c, 0xf4, 0x24, 0x39, 0x7c, 0x42, 0xa8, - 0x3e, 0x46, 0x14, 0xeb, 0x17, 0xbd, 0x31, 0x66, 0xa8, 0xa7, 0x5b, 0xc4, 0xf5, 0x63, 0x0f, 0xa9, - 0xe5, 0x10, 0x87, 0x44, 0x4b, 0x3d, 0x5c, 0x25, 0x4f, 0xdf, 0xba, 0x9b, 0xe2, 0x72, 0x86, 0x69, - 0xbc, 0xab, 0xfc, 0xc2, 0x41, 0xc3, 0xa0, 0xce, 0x39, 0x23, 0x01, 0x1e, 0x12, 0x1b, 0x0b, 0x6d, - 0xa8, 0x52, 0xec, 0xdb, 0x38, 0x10, 0xb9, 0x2e, 0xa7, 0xd6, 0xcd, 0xc4, 0x12, 0x3e, 0x86, 0x07, - 0xa1, 0xff, 0x68, 0x7c, 0xc9, 0xf0, 0xc8, 0x22, 0x36, 0x16, 0x0f, 0xba, 0x9c, 0xda, 0x18, 0x34, - 0xd7, 0xab, 0x4e, 0xe3, 0xd9, 0xe9, 0xb9, 0x31, 0xb8, 0x64, 0x51, 0x04, 0xb3, 0x11, 0xe2, 0x52, - 0x4b, 0x78, 0x0a, 0x6d, 0xd7, 0xa7, 0x0c, 0xf9, 0xcc, 0x45, 0x0c, 0x8f, 0x66, 0x38, 0xf0, 0x5c, - 0x4a, 0x5d, 0xe2, 0x8b, 0x95, 0x2e, 0xa7, 0x1e, 0xf5, 0x65, 0x6d, 0xb3, 0x4f, 0xed, 0xd4, 0xb2, - 0x30, 0xa5, 0x43, 0xe2, 0x4f, 0x5c, 0xc7, 0x7c, 0x98, 0xf3, 0xfe, 0x32, 0x73, 0x7e, 0xc2, 0xd7, - 0xca, 0x4d, 0xfe, 0x09, 0x5f, 0xe3, 0x9b, 0x15, 0xe5, 0x19, 0xb4, 0xf2, 0x2d, 0x98, 0x98, 0xce, - 0x88, 0x4f, 0xb1, 0xf0, 0x18, 0x0e, 0xc3, 0x42, 0x47, 0xae, 0x1d, 0xf5, 0xc2, 0x0f, 0x60, 0xbd, - 0xea, 0x54, 0x43, 0xc8, 0xd9, 0xa7, 0x66, 0x35, 0xdc, 0x3a, 0xb3, 0x05, 0x09, 0x6a, 0xd6, 0x73, - 0x6c, 0xbd, 0xa0, 0x73, 0x2f, 0xee, 0xc8, 0xcc, 0x6c, 0xe5, 0xfb, 0x03, 0x68, 0x1b, 0xd4, 0x39, - 0xbb, 0xad, 0x60, 0x48, 0x7c, 0x16, 0x20, 0x8b, 0x6d, 0xa5, 0xa9, 0x05, 0x15, 0x64, 0x7b, 0xae, - 0x1f, 0xc5, 0xaa, 0x9b, 0xb1, 0x91, 0xaf, 0xa4, 0xbc, 0xb5, 0x92, 0x16, 0x54, 0xa6, 0x68, 0x8c, - 0xa7, 0x22, 0x1f, 0xbb, 0x46, 0x86, 0xa0, 0x42, 0xd9, 0xa3, 0x4e, 0x44, 0x56, 0x63, 0xd0, 0xfe, - 0x6b, 0xd5, 0x11, 0x4c, 0xb4, 0x48, 0xcb, 0x30, 0x30, 0xa5, 0xc8, 0xc1, 0x66, 0x08, 0x11, 0xbe, - 0x85, 0xca, 0x64, 0xee, 0xdb, 0x54, 0xac, 0x76, 0xcb, 0xea, 0x51, 0xff, 0x91, 0x16, 0xcb, 0x45, - 0x0b, 0xe5, 0xa2, 0x25, 0x72, 0xd1, 0x86, 0xc4, 0xf5, 0x07, 0xef, 0x5f, 0xad, 0x3a, 0xa5, 0x9f, - 0x7e, 0xef, 0x3c, 0x76, 0x5c, 0xf6, 0x7c, 0x3e, 0xd6, 0x2c, 0xe2, 0xe9, 0x53, 0xd7, 0xc7, 0xfa, - 0x74, 0xec, 0x7d, 0x48, 0xed, 0x17, 0x89, 0x42, 0x42, 0x2c, 0x35, 0xe3, 0xa0, 0xca, 0xcf, 0x07, - 0x70, 0x5c, 0xcc, 0x45, 0xff, 0x55, 0x24, 0x03, 0xed, 0x4d, 0xc6, 0x49, 0x42, 0x86, 0x9a, 0x23, - 0x23, 0x19, 0xb4, 0xf8, 0x6f, 0x0b, 0x23, 0x82, 0x00, 0x3c, 0x45, 0x53, 0x26, 0x1e, 0x46, 0xaa, - 0x89, 0xd6, 0xc2, 0x31, 0x1c, 0x4e, 0xdc, 0xe5, 0x28, 0x2c, 0xb2, 0xd6, 0xe5, 0xd4, 0x9a, 0x59, - 0x9d, 0xb8, 0x4b, 0x83, 0x3a, 0xca, 0xe7, 0x20, 0x17, 0xb3, 0x97, 0xa9, 0x55, 0x84, 0x43, 0x64, - 0xdb, 0x01, 0xa6, 0x34, 0x61, 0x31, 0x35, 0xc3, 0x44, 0x36, 0x62, 0x28, 0x91, 0x67, 0xb4, 0x56, - 0xbe, 0x80, 0xce, 0x96, 0xb7, 0xf1, 0x2f, 0x03, 0x5e, 0x73, 0x20, 0x18, 0xd4, 0xf9, 0x6c, 0x89, - 0xad, 0xf9, 0x1e, 0x3a, 0x0f, 0xc7, 0x26, 0xc1, 0x24, 0x6f, 0x37, 0xb3, 0xd3, 0xb7, 0x54, 0xfe, - 0x07, 0x92, 0xad, 0xfc, 0x1f, 0x92, 0x3d, 0x01, 0xe9, 0x6e, 0x47, 0x19, 0x3d, 0x29, 0x09, 0x5c, - 0x8e, 0x84, 0x1f, 0x63, 0x12, 0x0c, 0xd7, 0x09, 0xd0, 0x7f, 0x24, 0x61, 0x2f, 0x95, 0x27, 0x4c, - 0xf1, 0xf7, 0x32, 0x95, 0xf4, 0xb2, 0x51, 0xd8, 0xce, 0x5e, 0x10, 0x3c, 0x30, 0xa8, 0xf3, 0x74, - 0x66, 0x23, 0x86, 0x4f, 0xa3, 0xc1, 0xdb, 0xd6, 0xc6, 0x9b, 0x50, 0xf7, 0xf1, 0x62, 0x94, 0x1f, - 0xd5, 0x9a, 0x8f, 0x17, 0xb1, 0x53, 0xbe, 0xc7, 0xf2, 0xcb, 0x3d, 0x2a, 0x62, 0x74, 0x3c, 0xe6, - 0x52, 0xa4, 0x05, 0x29, 0x43, 0x78, 0xcd, 0xa0, 0xce, 0x70, 0x8a, 0x51, 0xb0, 0x3b, 0xf7, 0xae, - 0xf0, 0xc7, 0xf0, 0xf0, 0xa5, 0x20, 0x69, 0xf4, 0xfe, 0xaf, 0x15, 0x28, 0x1b, 0xd4, 0x11, 0xce, - 0xa1, 0x7e, 0x7b, 0x71, 0x15, 0x5c, 0x24, 0xf9, 0x5b, 0x41, 0x7a, 0x67, 0xf7, 0x7e, 0xc6, 0xe5, - 0x77, 0xf0, 0x46, 0xd1, 0x81, 0xaf, 0x16, 0xba, 0x17, 0x20, 0xa5, 0x93, 0x7d, 0x91, 0x59, 0x4a, - 0x06, 0xad, 0xc2, 0x73, 0xf5, 0xbd, 0x7d, 0x23, 0xf5, 0xa5, 0xde, 0xde, 0xd0, 0x2c, 0x2b, 0x86, - 0xd7, 0x37, 0xa7, 0xfd, 0xed, 0xc2, 0x28, 0x1b, 0x28, 0xe9, 0x83, 0x7d, 0x50, 0xf9, 0x34, 0x9b, - 0xf3, 0x54, 0x9c, 0x66, 0x03, 0xb5, 0x25, 0xcd, 0xb6, 0x11, 0xf8, 0x1a, 0x8e, 0xf2, 0x5a, 0xef, - 0x16, 0x3a, 0xe7, 0x10, 0x92, 0x7a, 0x1f, 0x22, 0x0b, 0xfd, 0x15, 0x40, 0x4e, 0xc9, 0x9d, 0x42, - 0xbf, 0x5b, 0x80, 0xf4, 0xee, 0x3d, 0x80, 0x34, 0xee, 0xe0, 0x93, 0xab, 0x3f, 0xe5, 0xd2, 0xd5, - 0x5a, 0xe6, 0xae, 0xd7, 0x32, 0xf7, 0xc7, 0x5a, 0xe6, 0x7e, 0xb8, 0x91, 0x4b, 0xd7, 0x37, 0x72, - 0xe9, 0xb7, 0x1b, 0xb9, 0xf4, 0x8d, 0xb2, 0x79, 0xd2, 0x85, 0xc1, 0x6c, 0x7d, 0x19, 0x7f, 0xc6, - 0x45, 0xc7, 0xdd, 0xb8, 0x1a, 0x7d, 0xc4, 0x7d, 0xf4, 0x77, 0x00, 0x00, 0x00, 0xff, 0xff, 0x77, - 0xb6, 0xf2, 0xa2, 0x47, 0x0a, 0x00, 0x00, + // 839 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe4, 0x56, 0xcb, 0x8e, 0xe3, 0x44, + 0x14, 0x8d, 0x3b, 0xce, 0xeb, 0x76, 0x18, 0x22, 0x93, 0x49, 0x7b, 0x0c, 0x72, 0x22, 0x0f, 0x02, + 0x23, 0xc0, 0x9e, 0x04, 0x89, 0x35, 0x9d, 0xc0, 0xa2, 0x47, 0x32, 0x20, 0xb7, 0x86, 0x11, 0x08, + 0x29, 0xaa, 0xd8, 0x15, 0x8f, 0x35, 0xb1, 0x2b, 0xb8, 0x2a, 0x9d, 0xf4, 0x27, 0xb0, 0x63, 0xc7, + 0x3f, 0xf0, 0x03, 0xac, 0x91, 0x58, 0xf4, 0xb2, 0x97, 0xac, 0x02, 0xa4, 0xff, 0x82, 0x15, 0xf2, + 0xb3, 0x3d, 0x19, 0x27, 0x1d, 0x40, 0xac, 0x66, 0x63, 0xd5, 0x75, 0x9d, 0xfb, 0x3a, 0x75, 0x6e, + 0xd9, 0xf0, 0xc0, 0x22, 0xd4, 0x5b, 0x22, 0xea, 0xe9, 0xd1, 0xe3, 0xa2, 0xaf, 0xb3, 0x95, 0x36, + 0x0f, 0x08, 0x23, 0x42, 0x2b, 0xdd, 0xd2, 0xa2, 0xc7, 0x45, 0x5f, 0x92, 0xc3, 0x37, 0x84, 0xea, + 0x13, 0x44, 0xb1, 0x7e, 0xd1, 0x9f, 0x60, 0x86, 0xfa, 0xba, 0x45, 0x5c, 0x3f, 0xf6, 0x90, 0xda, + 0x0e, 0x71, 0x48, 0xb4, 0xd4, 0xc3, 0x55, 0xf2, 0xf6, 0xad, 0x97, 0x53, 0x5c, 0xce, 0x31, 0x8d, + 0x77, 0x95, 0x5f, 0x38, 0x68, 0x1a, 0xd4, 0x39, 0x67, 0x24, 0xc0, 0x23, 0x62, 0x63, 0xa1, 0x03, + 0x55, 0x8a, 0x7d, 0x1b, 0x07, 0x22, 0xd7, 0xe3, 0xd4, 0x86, 0x99, 0x58, 0xc2, 0xc7, 0x70, 0x2f, + 0xf4, 0x1f, 0x4f, 0x2e, 0x19, 0x1e, 0x5b, 0xc4, 0xc6, 0xe2, 0x51, 0x8f, 0x53, 0x9b, 0xc3, 0xd6, + 0x66, 0xdd, 0x6d, 0x3e, 0x3d, 0x3d, 0x37, 0x86, 0x97, 0x2c, 0x8a, 0x60, 0x36, 0x43, 0x5c, 0x6a, + 0x09, 0x4f, 0xa0, 0xe3, 0xfa, 0x94, 0x21, 0x9f, 0xb9, 0x88, 0xe1, 0xf1, 0x1c, 0x07, 0x9e, 0x4b, + 0xa9, 0x4b, 0x7c, 0xb1, 0xd2, 0xe3, 0xd4, 0xe3, 0x81, 0xac, 0x6d, 0xf7, 0xa9, 0x9d, 0x5a, 0x16, + 0xa6, 0x74, 0x44, 0xfc, 0xa9, 0xeb, 0x98, 0xf7, 0x73, 0xde, 0x5f, 0x66, 0xce, 0x8f, 0xf9, 0x7a, + 0xb9, 0xc5, 0x3f, 0xe6, 0xeb, 0x7c, 0xab, 0xa2, 0x3c, 0x85, 0x76, 0xbe, 0x05, 0x13, 0xd3, 0x39, + 0xf1, 0x29, 0x16, 0x1e, 0x42, 0x2d, 0x2c, 0x74, 0xec, 0xda, 0x51, 0x2f, 0xfc, 0x10, 0x36, 0xeb, + 0x6e, 0x35, 0x84, 0x9c, 0x7d, 0x6a, 0x56, 0xc3, 0xad, 0x33, 0x5b, 0x90, 0xa0, 0x6e, 0x3d, 0xc3, + 0xd6, 0x73, 0xba, 0xf0, 0xe2, 0x8e, 0xcc, 0xcc, 0x56, 0xbe, 0x3f, 0x82, 0x8e, 0x41, 0x9d, 0xb3, + 0xdb, 0x0a, 0x46, 0xc4, 0x67, 0x01, 0xb2, 0xd8, 0x4e, 0x9a, 0xda, 0x50, 0x41, 0xb6, 0xe7, 0xfa, + 0x51, 0xac, 0x86, 0x19, 0x1b, 0xf9, 0x4a, 0xca, 0x3b, 0x2b, 0x69, 0x43, 0x65, 0x86, 0x26, 0x78, + 0x26, 0xf2, 0xb1, 0x6b, 0x64, 0x08, 0x2a, 0x94, 0x3d, 0xea, 0x44, 0x64, 0x35, 0x87, 0x9d, 0xbf, + 0xd6, 0x5d, 0xc1, 0x44, 0xcb, 0xb4, 0x0c, 0x03, 0x53, 0x8a, 0x1c, 0x6c, 0x86, 0x10, 0xe1, 0x5b, + 0xa8, 0x4c, 0x17, 0xbe, 0x4d, 0xc5, 0x6a, 0xaf, 0xac, 0x1e, 0x0f, 0x1e, 0x68, 0xb1, 0x5c, 0xb4, + 0x50, 0x2e, 0x5a, 0x22, 0x17, 0x6d, 0x44, 0x5c, 0x7f, 0xf8, 0xfe, 0xd5, 0xba, 0x5b, 0xfa, 0xe9, + 0xf7, 0xee, 0x43, 0xc7, 0x65, 0xcf, 0x16, 0x13, 0xcd, 0x22, 0x9e, 0x3e, 0x73, 0x7d, 0xac, 0xcf, + 0x26, 0xde, 0x87, 0xd4, 0x7e, 0x9e, 0x28, 0x24, 0xc4, 0x52, 0x33, 0x0e, 0xaa, 0xfc, 0x7c, 0x04, + 0x27, 0xc5, 0x5c, 0x0c, 0x5e, 0x39, 0x32, 0x04, 0x01, 0x78, 0x8a, 0x66, 0x4c, 0xac, 0x45, 0x82, + 0x89, 0xd6, 0xc2, 0x09, 0xd4, 0xa6, 0xee, 0x6a, 0x1c, 0xd6, 0x57, 0xef, 0x71, 0x6a, 0xdd, 0xac, + 0x4e, 0xdd, 0x95, 0x41, 0x1d, 0xe5, 0x73, 0x90, 0x8b, 0x89, 0xcb, 0x84, 0x2a, 0x42, 0x0d, 0xd9, + 0x76, 0x80, 0x29, 0x4d, 0x08, 0x4c, 0xcd, 0x30, 0x91, 0x8d, 0x18, 0x4a, 0x94, 0x19, 0xad, 0x95, + 0x2f, 0xa0, 0xbb, 0xe3, 0x20, 0xfe, 0x65, 0xc0, 0x6b, 0x0e, 0x04, 0x83, 0x3a, 0x9f, 0xad, 0xb0, + 0xb5, 0x38, 0x40, 0xe2, 0xe1, 0xc4, 0x24, 0x98, 0xe4, 0x60, 0x33, 0x3b, 0x3d, 0xa0, 0xf2, 0x3f, + 0x38, 0xa0, 0xca, 0xff, 0xa1, 0xd6, 0x47, 0x20, 0xbd, 0xdc, 0x51, 0x46, 0x4f, 0x4a, 0x02, 0x97, + 0x23, 0xe1, 0xc7, 0x98, 0x04, 0xc3, 0x75, 0x02, 0xf4, 0x1f, 0x49, 0x38, 0x48, 0xe0, 0x09, 0x53, + 0xfc, 0x9d, 0x4c, 0x25, 0xbd, 0x6c, 0x15, 0xb6, 0xb7, 0x17, 0x04, 0xf7, 0x0c, 0xea, 0x3c, 0x99, + 0xdb, 0x88, 0xe1, 0xd3, 0x68, 0xe6, 0x76, 0xb5, 0xf1, 0x26, 0x34, 0x7c, 0xbc, 0x1c, 0xe7, 0xa7, + 0xb4, 0xee, 0xe3, 0x65, 0xec, 0x94, 0xef, 0xb1, 0xfc, 0x62, 0x8f, 0x8a, 0x18, 0xdd, 0x8c, 0xb9, + 0x14, 0x69, 0x41, 0xca, 0x08, 0x5e, 0x33, 0xa8, 0x33, 0x9a, 0x61, 0x14, 0xec, 0xcf, 0xbd, 0x2f, + 0xfc, 0x09, 0xdc, 0x7f, 0x21, 0x48, 0x1a, 0x7d, 0xf0, 0x6b, 0x05, 0xca, 0x06, 0x75, 0x84, 0x73, + 0x68, 0xdc, 0x7e, 0xb3, 0x0a, 0xbe, 0x21, 0xf9, 0x0f, 0x82, 0xf4, 0xce, 0xfe, 0xfd, 0x8c, 0xcb, + 0xef, 0xe0, 0x8d, 0xa2, 0xbb, 0x5e, 0x2d, 0x74, 0x2f, 0x40, 0x4a, 0x8f, 0x0e, 0x45, 0x66, 0x29, + 0x19, 0xb4, 0x0b, 0xaf, 0xd4, 0xf7, 0x0e, 0x8d, 0x34, 0x90, 0xfa, 0x07, 0x43, 0xb3, 0xac, 0x18, + 0x5e, 0xdf, 0x9e, 0xf6, 0xb7, 0x0b, 0xa3, 0x6c, 0xa1, 0xa4, 0x0f, 0x0e, 0x41, 0xe5, 0xd3, 0x6c, + 0xcf, 0x53, 0x71, 0x9a, 0x2d, 0xd4, 0x8e, 0x34, 0xbb, 0x46, 0xe0, 0x6b, 0x38, 0xce, 0x6b, 0xbd, + 0x57, 0xe8, 0x9c, 0x43, 0x48, 0xea, 0x5d, 0x88, 0x2c, 0xf4, 0x57, 0x00, 0x39, 0x25, 0x77, 0x0b, + 0xfd, 0x6e, 0x01, 0xd2, 0xbb, 0x77, 0x00, 0xd2, 0xb8, 0xc3, 0x4f, 0xae, 0xfe, 0x94, 0x4b, 0x57, + 0x1b, 0x99, 0xbb, 0xde, 0xc8, 0xdc, 0x1f, 0x1b, 0x99, 0xfb, 0xe1, 0x46, 0x2e, 0x5d, 0xdf, 0xc8, + 0xa5, 0xdf, 0x6e, 0xe4, 0xd2, 0x37, 0xca, 0xf6, 0x4d, 0x17, 0x06, 0xb3, 0xf5, 0x55, 0xfc, 0x07, + 0x17, 0x5d, 0x77, 0x93, 0x6a, 0xf4, 0xff, 0xf6, 0xd1, 0xdf, 0x01, 0x00, 0x00, 0xff, 0xff, 0x1f, + 0x05, 0x74, 0x0c, 0x42, 0x0a, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. diff --git a/x/wasm/types/types.pb.go b/x/wasm/types/types.pb.go index a21dc8d506..b2a2d5720b 100644 --- a/x/wasm/types/types.pb.go +++ b/x/wasm/types/types.pb.go @@ -184,9 +184,6 @@ var xxx_messageInfo_AccessConfig proto.InternalMessageInfo type Params struct { CodeUploadAccess AccessConfig `protobuf:"bytes,1,opt,name=code_upload_access,json=codeUploadAccess,proto3" json:"code_upload_access" yaml:"code_upload_access"` InstantiateDefaultPermission AccessType `protobuf:"varint,2,opt,name=instantiate_default_permission,json=instantiateDefaultPermission,proto3,enum=cosmwasm.wasm.v1.AccessType" json:"instantiate_default_permission,omitempty" yaml:"instantiate_default_permission"` - GasMultiplier uint64 `protobuf:"varint,3,opt,name=gas_multiplier,json=gasMultiplier,proto3" json:"gas_multiplier,omitempty" yaml:"gas_multiplier"` - InstanceCost uint64 `protobuf:"varint,4,opt,name=instance_cost,json=instanceCost,proto3" json:"instance_cost,omitempty" yaml:"instance_cost"` - CompileCost uint64 `protobuf:"varint,5,opt,name=compile_cost,json=compileCost,proto3" json:"compile_cost,omitempty" yaml:"compile_cost"` } func (m *Params) Reset() { *m = Params{} } @@ -460,87 +457,81 @@ func init() { func init() { proto.RegisterFile("cosmwasm/wasm/v1/types.proto", fileDescriptor_e6155d98fa173e02) } var fileDescriptor_e6155d98fa173e02 = []byte{ - // 1267 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x94, 0x56, 0xcf, 0x6f, 0x1a, 0xc7, - 0x1e, 0x67, 0x01, 0xff, 0x60, 0x4c, 0xf2, 0x36, 0x13, 0xfb, 0x05, 0x78, 0x16, 0x4b, 0xf6, 0xe5, - 0xe9, 0x39, 0x89, 0x03, 0x89, 0x2b, 0xb5, 0x92, 0xa5, 0x46, 0x65, 0x61, 0x13, 0x6f, 0x54, 0x03, - 0x1a, 0x48, 0x2b, 0x57, 0x8a, 0x56, 0xcb, 0xee, 0x18, 0xaf, 0xb2, 0xec, 0xa0, 0x9d, 0xc1, 0x81, - 0xff, 0xa0, 0x42, 0xaa, 0xd4, 0x63, 0x2f, 0x48, 0x55, 0x5b, 0x55, 0xe9, 0xbd, 0xd7, 0xde, 0xa3, - 0xb6, 0x87, 0x1c, 0x7b, 0x5a, 0xb5, 0xce, 0xa5, 0x67, 0x8e, 0xe9, 0xa5, 0xda, 0x19, 0x08, 0xe4, - 0xa7, 0xdd, 0x0b, 0x9a, 0xef, 0x8f, 0xcf, 0xe7, 0xfb, 0x73, 0x66, 0x01, 0x9b, 0x36, 0xa1, 0xdd, - 0x47, 0x16, 0xed, 0x96, 0xf8, 0xcf, 0xf1, 0xad, 0x12, 0x1b, 0xf6, 0x30, 0x2d, 0xf6, 0x02, 0xc2, - 0x08, 0x94, 0x67, 0xd6, 0x22, 0xff, 0x39, 0xbe, 0x95, 0xcb, 0x46, 0x1a, 0x42, 0x4d, 0x6e, 0x2f, - 0x09, 0x41, 0x38, 0xe7, 0xd6, 0x3b, 0xa4, 0x43, 0x84, 0x3e, 0x3a, 0x4d, 0xb5, 0xd9, 0x0e, 0x21, - 0x1d, 0x0f, 0x97, 0xb8, 0xd4, 0xee, 0x1f, 0x96, 0x2c, 0x7f, 0x28, 0x4c, 0xea, 0x03, 0xf0, 0xaf, - 0xb2, 0x6d, 0x63, 0x4a, 0x5b, 0xc3, 0x1e, 0x6e, 0x58, 0x81, 0xd5, 0x85, 0x55, 0xb0, 0x74, 0x6c, - 0x79, 0x7d, 0x9c, 0x91, 0x0a, 0xd2, 0xd6, 0xf9, 0x9d, 0xcd, 0xe2, 0xab, 0x09, 0x14, 0xe7, 0x08, - 0x4d, 0x9e, 0x84, 0x4a, 0x7a, 0x68, 0x75, 0xbd, 0x5d, 0x95, 0x83, 0x54, 0x24, 0xc0, 0xbb, 0xc9, - 0xaf, 0xbe, 0x56, 0x24, 0xf5, 0x17, 0x09, 0xa4, 0x85, 0x77, 0x85, 0xf8, 0x87, 0x6e, 0x07, 0x36, - 0x01, 0xe8, 0xe1, 0xa0, 0xeb, 0x52, 0xea, 0x12, 0xff, 0x4c, 0x11, 0x36, 0x26, 0xa1, 0x72, 0x41, - 0x44, 0x98, 0x23, 0x55, 0xb4, 0x40, 0x03, 0xb7, 0xc1, 0x8a, 0xe5, 0x38, 0x01, 0xa6, 0x34, 0x13, - 0x2f, 0x48, 0x5b, 0x29, 0x0d, 0x4e, 0x42, 0xe5, 0xbc, 0xc0, 0x4c, 0x0d, 0x2a, 0x9a, 0xb9, 0xc0, - 0x1d, 0x90, 0x9a, 0x1e, 0x31, 0xcd, 0x24, 0x0a, 0x89, 0xad, 0x94, 0xb6, 0x3e, 0x09, 0x15, 0xf9, - 0x25, 0x7f, 0x4c, 0x55, 0x34, 0x77, 0x9b, 0x56, 0xf3, 0x6b, 0x02, 0x2c, 0xf3, 0x1e, 0x51, 0x48, - 0x00, 0xb4, 0x89, 0x83, 0xcd, 0x7e, 0xcf, 0x23, 0x96, 0x63, 0x5a, 0x3c, 0x5f, 0x5e, 0xcf, 0xda, - 0x4e, 0xfe, 0x6d, 0xf5, 0x88, 0x1e, 0x68, 0x97, 0x9f, 0x84, 0x4a, 0x6c, 0x12, 0x2a, 0x59, 0x11, - 0xf1, 0x75, 0x1e, 0x15, 0xc9, 0x91, 0xf2, 0x3e, 0xd7, 0x09, 0x28, 0xfc, 0x42, 0x02, 0x79, 0xd7, - 0xa7, 0xcc, 0xf2, 0x99, 0x6b, 0x31, 0x6c, 0x3a, 0xf8, 0xd0, 0xea, 0x7b, 0xcc, 0x5c, 0xe8, 0x66, - 0xfc, 0x0c, 0xdd, 0xbc, 0x3a, 0x09, 0x95, 0xff, 0x89, 0xb8, 0xef, 0x66, 0x53, 0xd1, 0xe6, 0x82, - 0x43, 0x55, 0xd8, 0x1b, 0xf3, 0x9e, 0x7f, 0x04, 0xce, 0x77, 0x2c, 0x6a, 0x76, 0xfb, 0x1e, 0x73, - 0x7b, 0x9e, 0x8b, 0x83, 0x4c, 0xa2, 0x20, 0x6d, 0x25, 0xb5, 0xec, 0x24, 0x54, 0x36, 0x44, 0x80, - 0x97, 0xed, 0x2a, 0x3a, 0xd7, 0xb1, 0xe8, 0xfe, 0x0b, 0x19, 0x7e, 0x08, 0xce, 0x89, 0x08, 0x36, - 0x36, 0x6d, 0x42, 0x59, 0x26, 0xc9, 0x09, 0x32, 0x93, 0x50, 0x59, 0x5f, 0xcc, 0x70, 0x6a, 0x56, - 0x51, 0x7a, 0x26, 0x57, 0x08, 0x65, 0x70, 0x17, 0xa4, 0x6d, 0xd2, 0xed, 0xb9, 0xde, 0x14, 0xbd, - 0xc4, 0xd1, 0x97, 0x26, 0xa1, 0x72, 0x71, 0xd6, 0xd7, 0xb9, 0x55, 0x45, 0x6b, 0x53, 0x31, 0xc2, - 0xf2, 0x71, 0xc6, 0xd4, 0x6f, 0x24, 0xb0, 0x5a, 0x21, 0x0e, 0x36, 0xfc, 0x43, 0x02, 0xff, 0x03, - 0x52, 0x7c, 0x10, 0x47, 0x16, 0x3d, 0xe2, 0x73, 0x4c, 0xa3, 0xd5, 0x48, 0xb1, 0x67, 0xd1, 0x23, - 0x98, 0x01, 0x2b, 0x76, 0x80, 0x2d, 0x46, 0x02, 0xb1, 0x60, 0x68, 0x26, 0xc2, 0x26, 0x80, 0x8b, - 0x7d, 0xb4, 0xf9, 0x84, 0x79, 0x2e, 0xa7, 0xef, 0x41, 0x32, 0xda, 0x03, 0x74, 0x61, 0x01, 0x2f, - 0x0c, 0xf7, 0x92, 0xab, 0x09, 0x39, 0x79, 0x2f, 0xb9, 0x9a, 0x94, 0x97, 0xd4, 0x9f, 0xe2, 0x20, - 0x5d, 0x21, 0x3e, 0x0b, 0x2c, 0x9b, 0xf1, 0x44, 0xff, 0x0b, 0x56, 0x78, 0xa2, 0xae, 0xc3, 0xd3, - 0x4c, 0x6a, 0xe0, 0x24, 0x54, 0x96, 0x79, 0x1d, 0x55, 0xb4, 0x1c, 0x99, 0x0c, 0xe7, 0x1d, 0x09, - 0xaf, 0x83, 0x25, 0xcb, 0xe9, 0xba, 0x3e, 0x1f, 0x57, 0x0a, 0x09, 0x21, 0xd2, 0x7a, 0x56, 0x1b, - 0x7b, 0x7c, 0x06, 0x29, 0x24, 0x04, 0x78, 0x7b, 0xca, 0x82, 0x9d, 0x69, 0x45, 0x57, 0xde, 0x50, - 0x51, 0x9b, 0x12, 0xaf, 0xcf, 0x70, 0x6b, 0xd0, 0x20, 0xd4, 0x65, 0x2e, 0xf1, 0xd1, 0x0c, 0x04, - 0x6f, 0x80, 0x35, 0xb7, 0x6d, 0x9b, 0x3d, 0x12, 0xb0, 0x28, 0xdd, 0x65, 0x7e, 0x37, 0xcf, 0x9d, - 0x84, 0x4a, 0xca, 0xd0, 0x2a, 0x0d, 0x12, 0x30, 0xa3, 0x8a, 0x52, 0x6e, 0xdb, 0xe6, 0x47, 0x07, - 0xee, 0x83, 0x14, 0x1e, 0x30, 0xec, 0xf3, 0x65, 0x5e, 0xe1, 0x01, 0xd7, 0x8b, 0xe2, 0xe9, 0x2a, - 0xce, 0x9e, 0xae, 0x62, 0xd9, 0x1f, 0x6a, 0xd9, 0x9f, 0x7f, 0xbc, 0xb1, 0xb1, 0xd8, 0x14, 0x7d, - 0x06, 0x43, 0x73, 0x86, 0xdd, 0xe4, 0x9f, 0xd1, 0x9d, 0xfd, 0x4b, 0x02, 0x99, 0x99, 0x6b, 0xd4, - 0xa4, 0x3d, 0x97, 0x32, 0x12, 0x0c, 0x75, 0x9f, 0x05, 0x43, 0xd8, 0x00, 0x29, 0xd2, 0xc3, 0x81, - 0xc5, 0xe6, 0x8f, 0xd1, 0xce, 0xeb, 0x25, 0xbe, 0x01, 0x5e, 0x9f, 0xa1, 0xa2, 0x4b, 0x85, 0xe6, - 0x24, 0x8b, 0xd3, 0x89, 0xbf, 0x75, 0x3a, 0xb7, 0xc1, 0x4a, 0xbf, 0xe7, 0xf0, 0xbe, 0x26, 0xfe, - 0x49, 0x5f, 0xa7, 0x20, 0xb8, 0x05, 0x12, 0x5d, 0xda, 0xe1, 0xb3, 0x4a, 0x6b, 0xff, 0x7e, 0x1e, - 0x2a, 0x10, 0x59, 0x8f, 0x66, 0x59, 0xee, 0x63, 0x4a, 0xad, 0x0e, 0x46, 0x91, 0x8b, 0x8a, 0x00, - 0x7c, 0x9d, 0x08, 0x5e, 0x06, 0xe9, 0xb6, 0x47, 0xec, 0x87, 0xe6, 0x11, 0x76, 0x3b, 0x47, 0x4c, - 0xec, 0x11, 0x5a, 0xe3, 0xba, 0x3d, 0xae, 0x82, 0x59, 0xb0, 0xca, 0x06, 0xa6, 0xeb, 0x3b, 0x78, - 0x20, 0x0a, 0x41, 0x2b, 0x6c, 0x60, 0x44, 0xa2, 0x6a, 0x81, 0xa5, 0x7d, 0xe2, 0x60, 0x0f, 0x6a, - 0x20, 0xf1, 0x10, 0x0f, 0xc5, 0x65, 0xd1, 0x6e, 0x3e, 0x0f, 0x95, 0xed, 0x8e, 0xcb, 0x8e, 0xfa, - 0xed, 0xa2, 0x4d, 0xba, 0x25, 0xcf, 0xf5, 0x71, 0x89, 0xd0, 0x28, 0x25, 0xe2, 0x97, 0x3c, 0xb7, - 0x4d, 0x4b, 0xed, 0x21, 0xc3, 0xb4, 0xb8, 0x87, 0x07, 0x5a, 0x74, 0x40, 0x11, 0x38, 0x5a, 0x3c, - 0xf1, 0xb1, 0x89, 0xf3, 0x2b, 0x27, 0x84, 0x6b, 0x3f, 0xc4, 0x01, 0x98, 0x3f, 0x5a, 0xf0, 0x7d, - 0x70, 0xa9, 0x5c, 0xa9, 0xe8, 0xcd, 0xa6, 0xd9, 0x3a, 0x68, 0xe8, 0xe6, 0xfd, 0x5a, 0xb3, 0xa1, - 0x57, 0x8c, 0x3b, 0x86, 0x5e, 0x95, 0x63, 0xb9, 0xec, 0x68, 0x5c, 0xd8, 0x98, 0x3b, 0xdf, 0xf7, - 0x69, 0x0f, 0xdb, 0xee, 0xa1, 0x8b, 0x1d, 0xb8, 0x0d, 0xe0, 0x22, 0xae, 0x56, 0xd7, 0xea, 0xd5, - 0x03, 0x59, 0xca, 0xad, 0x8f, 0xc6, 0x05, 0x79, 0x0e, 0xa9, 0x91, 0x36, 0x71, 0x86, 0xf0, 0x03, - 0x90, 0x59, 0xf4, 0xae, 0xd7, 0x3e, 0x3e, 0x30, 0xcb, 0xd5, 0x2a, 0xd2, 0x9b, 0x4d, 0x39, 0xfe, - 0x6a, 0x98, 0xba, 0xef, 0x0d, 0xcb, 0x2f, 0x3e, 0x28, 0x1b, 0x8b, 0x40, 0xfd, 0x13, 0x1d, 0x1d, - 0xf0, 0x48, 0x89, 0xdc, 0xa5, 0xd1, 0xb8, 0x70, 0x71, 0x8e, 0xd2, 0x8f, 0x71, 0x30, 0xe4, 0xc1, - 0x6e, 0x83, 0xcd, 0x45, 0x4c, 0xb9, 0x76, 0x60, 0xd6, 0xef, 0xcc, 0xc2, 0xe9, 0x4d, 0x39, 0x99, - 0xdb, 0x1c, 0x8d, 0x0b, 0x99, 0x39, 0xb4, 0xec, 0x0f, 0xeb, 0x87, 0xe5, 0xd9, 0x07, 0x29, 0xb7, - 0xfa, 0xf9, 0xb7, 0xf9, 0xd8, 0xe3, 0xef, 0xf2, 0xb1, 0x6b, 0xdf, 0x27, 0x40, 0xe1, 0xb4, 0x0d, - 0x85, 0x18, 0xdc, 0xac, 0xd4, 0x6b, 0x2d, 0x54, 0xae, 0xb4, 0xcc, 0x4a, 0xbd, 0xaa, 0x9b, 0x7b, - 0x46, 0xb3, 0x55, 0x47, 0x07, 0x66, 0xbd, 0xa1, 0xa3, 0x72, 0xcb, 0xa8, 0xd7, 0xde, 0xd4, 0xda, - 0xd2, 0x68, 0x5c, 0xb8, 0x7e, 0x1a, 0xf7, 0x62, 0xc3, 0x3f, 0x05, 0x57, 0xcf, 0x14, 0xc6, 0xa8, - 0x19, 0x2d, 0x59, 0xca, 0x6d, 0x8d, 0xc6, 0x85, 0x2b, 0xa7, 0xf1, 0x1b, 0xbe, 0xcb, 0xe0, 0x03, - 0xb0, 0x7d, 0x26, 0xe2, 0x7d, 0xe3, 0x2e, 0x2a, 0xb7, 0x74, 0x39, 0x9e, 0xbb, 0x3e, 0x1a, 0x17, - 0xfe, 0x7f, 0x1a, 0xf7, 0xbe, 0xdb, 0x09, 0x2c, 0x86, 0xcf, 0x4c, 0x7f, 0x57, 0xaf, 0xe9, 0x4d, - 0xa3, 0x29, 0x27, 0xce, 0x46, 0x7f, 0x17, 0xfb, 0x98, 0xba, 0x34, 0x97, 0x8c, 0x86, 0xa5, 0x55, - 0x9f, 0xfc, 0x91, 0x8f, 0x3d, 0x3e, 0xc9, 0x4b, 0x4f, 0x4e, 0xf2, 0xd2, 0xd3, 0x93, 0xbc, 0xf4, - 0xfb, 0x49, 0x5e, 0xfa, 0xf2, 0x59, 0x3e, 0xf6, 0xf4, 0x59, 0x3e, 0xf6, 0xdb, 0xb3, 0x7c, 0xec, - 0x33, 0xf5, 0xd5, 0xfb, 0x13, 0x3d, 0x06, 0x4e, 0x69, 0x20, 0xfe, 0x17, 0xf2, 0x3f, 0x85, 0xed, - 0x65, 0xfe, 0x12, 0xbe, 0xf7, 0x77, 0x00, 0x00, 0x00, 0xff, 0xff, 0x79, 0x87, 0xaf, 0x6f, 0x35, - 0x0a, 0x00, 0x00, + // 1171 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x94, 0x56, 0xcd, 0x8f, 0xdb, 0x44, + 0x14, 0x8f, 0x93, 0xec, 0x47, 0xa6, 0x4b, 0x71, 0x87, 0x5d, 0x9a, 0x0d, 0xab, 0x24, 0x35, 0x45, + 0x6c, 0xdb, 0x6d, 0xd2, 0x2e, 0x12, 0x48, 0x3d, 0x54, 0x8a, 0x13, 0xb7, 0xeb, 0x8a, 0x8d, 0xa3, + 0x49, 0x0a, 0x5a, 0xa4, 0xca, 0x72, 0xec, 0xd9, 0xac, 0x55, 0xc7, 0x13, 0x79, 0x26, 0xdb, 0xf8, + 0x3f, 0x40, 0x91, 0x10, 0x1c, 0xb9, 0x44, 0x42, 0x80, 0x50, 0xb9, 0x73, 0xe5, 0x5e, 0xc1, 0xa5, + 0x47, 0x4e, 0x11, 0x6c, 0x2f, 0x9c, 0x73, 0x2c, 0x17, 0xe4, 0x99, 0xa4, 0x31, 0xed, 0xb6, 0x1b, + 0x2e, 0xd6, 0xbc, 0x8f, 0xdf, 0xfb, 0xf8, 0xcd, 0x7b, 0x23, 0x83, 0x2d, 0x9b, 0xd0, 0xee, 0x23, + 0x8b, 0x76, 0xcb, 0xfc, 0x73, 0x7c, 0xb3, 0xcc, 0xc2, 0x1e, 0xa6, 0xa5, 0x5e, 0x40, 0x18, 0x81, + 0xf2, 0xcc, 0x5a, 0xe2, 0x9f, 0xe3, 0x9b, 0xb9, 0xcd, 0x48, 0x43, 0xa8, 0xc9, 0xed, 0x65, 0x21, + 0x08, 0xe7, 0xdc, 0x7a, 0x87, 0x74, 0x88, 0xd0, 0x47, 0xa7, 0xa9, 0x76, 0xb3, 0x43, 0x48, 0xc7, + 0xc3, 0x65, 0x2e, 0xb5, 0xfb, 0x87, 0x65, 0xcb, 0x0f, 0x85, 0x49, 0x79, 0x00, 0xde, 0xae, 0xd8, + 0x36, 0xa6, 0xb4, 0x15, 0xf6, 0x70, 0xc3, 0x0a, 0xac, 0x2e, 0xac, 0x81, 0xa5, 0x63, 0xcb, 0xeb, + 0xe3, 0xac, 0x54, 0x94, 0xb6, 0xcf, 0xef, 0x6e, 0x95, 0x5e, 0x2e, 0xa0, 0x34, 0x47, 0xa8, 0xf2, + 0x64, 0x5c, 0x58, 0x0b, 0xad, 0xae, 0x77, 0x4b, 0xe1, 0x20, 0x05, 0x09, 0xf0, 0xad, 0xf4, 0xb7, + 0xdf, 0x15, 0x24, 0xe5, 0x77, 0x09, 0xac, 0x09, 0xef, 0x2a, 0xf1, 0x0f, 0xdd, 0x0e, 0x6c, 0x02, + 0xd0, 0xc3, 0x41, 0xd7, 0xa5, 0xd4, 0x25, 0xfe, 0x42, 0x19, 0x36, 0x26, 0xe3, 0xc2, 0x05, 0x91, + 0x61, 0x8e, 0x54, 0x50, 0x2c, 0x0c, 0xdc, 0x01, 0x2b, 0x96, 0xe3, 0x04, 0x98, 0xd2, 0x6c, 0xb2, + 0x28, 0x6d, 0x67, 0x54, 0x38, 0x19, 0x17, 0xce, 0x0b, 0xcc, 0xd4, 0xa0, 0xa0, 0x99, 0x0b, 0xdc, + 0x05, 0x99, 0xe9, 0x11, 0xd3, 0x6c, 0xaa, 0x98, 0xda, 0xce, 0xa8, 0xeb, 0x93, 0x71, 0x41, 0xfe, + 0x8f, 0x3f, 0xa6, 0x0a, 0x9a, 0xbb, 0x4d, 0xbb, 0xf9, 0x3a, 0x09, 0x96, 0x39, 0x47, 0x14, 0x12, + 0x00, 0x6d, 0xe2, 0x60, 0xb3, 0xdf, 0xf3, 0x88, 0xe5, 0x98, 0x16, 0xaf, 0x97, 0xf7, 0x73, 0x6e, + 0x37, 0xff, 0xba, 0x7e, 0x04, 0x07, 0xea, 0xa5, 0x27, 0xe3, 0x42, 0x62, 0x32, 0x2e, 0x6c, 0x8a, + 0x8c, 0xaf, 0xc6, 0x51, 0x90, 0x1c, 0x29, 0xef, 0x73, 0x9d, 0x80, 0xc2, 0xaf, 0x24, 0x90, 0x77, + 0x7d, 0xca, 0x2c, 0x9f, 0xb9, 0x16, 0xc3, 0xa6, 0x83, 0x0f, 0xad, 0xbe, 0xc7, 0xcc, 0x18, 0x9b, + 0xc9, 0x05, 0xd8, 0xbc, 0x32, 0x19, 0x17, 0x3e, 0x10, 0x79, 0xdf, 0x1c, 0x4d, 0x41, 0x5b, 0x31, + 0x87, 0x9a, 0xb0, 0x37, 0x5e, 0x98, 0x39, 0x23, 0x09, 0xe5, 0x7b, 0x09, 0xac, 0x56, 0x89, 0x83, + 0x75, 0xff, 0x90, 0xc0, 0xf7, 0x40, 0x86, 0xf7, 0x72, 0x64, 0xd1, 0x23, 0x4e, 0xc5, 0x1a, 0x5a, + 0x8d, 0x14, 0x7b, 0x16, 0x3d, 0x82, 0x59, 0xb0, 0x62, 0x07, 0xd8, 0x62, 0x24, 0x10, 0x77, 0x84, + 0x66, 0x22, 0x6c, 0x02, 0x18, 0x2f, 0xc5, 0xe6, 0x24, 0x65, 0x97, 0x16, 0xa2, 0x32, 0x1d, 0x51, + 0x89, 0x2e, 0xc4, 0xf0, 0xc2, 0x70, 0x2f, 0xbd, 0x9a, 0x92, 0xd3, 0xf7, 0xd2, 0xab, 0x69, 0x79, + 0x49, 0xf9, 0x35, 0x09, 0xd6, 0xaa, 0xc4, 0x67, 0x81, 0x65, 0x33, 0x5e, 0xe8, 0xfb, 0x60, 0x85, + 0x17, 0xea, 0x3a, 0xbc, 0xcc, 0xb4, 0x0a, 0x4e, 0xc6, 0x85, 0x65, 0xde, 0x47, 0x0d, 0x2d, 0x47, + 0x26, 0xdd, 0x79, 0x43, 0xc1, 0xeb, 0x60, 0xc9, 0x72, 0xba, 0xae, 0x9f, 0x4d, 0x71, 0xbd, 0x10, + 0x22, 0xad, 0x67, 0xb5, 0xb1, 0x97, 0x4d, 0x0b, 0x2d, 0x17, 0xe0, 0xed, 0x69, 0x14, 0xec, 0x4c, + 0x3b, 0xba, 0x7c, 0x4a, 0x47, 0x6d, 0x4a, 0xbc, 0x3e, 0xc3, 0xad, 0x41, 0x83, 0x50, 0x97, 0xb9, + 0xc4, 0x47, 0x33, 0x10, 0xbc, 0x0e, 0xce, 0xb9, 0x6d, 0xdb, 0xec, 0x91, 0x80, 0x45, 0xe5, 0x2e, + 0xf3, 0xf1, 0x7e, 0xeb, 0x64, 0x5c, 0xc8, 0xe8, 0x6a, 0xb5, 0x41, 0x02, 0xa6, 0xd7, 0x50, 0xc6, + 0x6d, 0xdb, 0xfc, 0xe8, 0xc0, 0x7d, 0x90, 0xc1, 0x03, 0x86, 0x7d, 0x3e, 0x0f, 0x2b, 0x3c, 0xe1, + 0x7a, 0x49, 0x6c, 0x7f, 0x69, 0xb6, 0xfd, 0xa5, 0x8a, 0x1f, 0xaa, 0x9b, 0xbf, 0xfd, 0x72, 0x7d, + 0x23, 0x4e, 0x8a, 0x36, 0x83, 0xa1, 0x79, 0x84, 0x5b, 0xe9, 0xbf, 0xa3, 0xb1, 0xff, 0x47, 0x02, + 0xd9, 0x99, 0x6b, 0x44, 0xd2, 0x9e, 0x4b, 0x19, 0x09, 0x42, 0xcd, 0x67, 0x41, 0x08, 0x1b, 0x20, + 0x43, 0x7a, 0x38, 0xb0, 0xd8, 0x7c, 0x9f, 0x77, 0x5f, 0x6d, 0xf1, 0x14, 0xb8, 0x31, 0x43, 0x45, + 0x73, 0x89, 0xe6, 0x41, 0xe2, 0xb7, 0x93, 0x7c, 0xed, 0xed, 0xdc, 0x06, 0x2b, 0xfd, 0x9e, 0xc3, + 0x79, 0x4d, 0xfd, 0x1f, 0x5e, 0xa7, 0x20, 0xb8, 0x0d, 0x52, 0x5d, 0xda, 0xe1, 0x77, 0xb5, 0xa6, + 0xbe, 0xfb, 0x7c, 0x5c, 0x80, 0xc8, 0x7a, 0x34, 0xab, 0x72, 0x1f, 0x53, 0x6a, 0x75, 0x30, 0x8a, + 0x5c, 0x14, 0x04, 0xe0, 0xab, 0x81, 0xe0, 0x25, 0xb0, 0xd6, 0xf6, 0x88, 0xfd, 0xd0, 0x3c, 0xc2, + 0x6e, 0xe7, 0x88, 0x89, 0x39, 0x42, 0xe7, 0xb8, 0x6e, 0x8f, 0xab, 0xe0, 0x26, 0x58, 0x65, 0x03, + 0xd3, 0xf5, 0x1d, 0x3c, 0x10, 0x8d, 0xa0, 0x15, 0x36, 0xd0, 0x23, 0x51, 0xb1, 0xc0, 0xd2, 0x3e, + 0x71, 0xb0, 0x07, 0x55, 0x90, 0x7a, 0x88, 0x43, 0xb1, 0x2c, 0xea, 0x8d, 0xe7, 0xe3, 0xc2, 0x4e, + 0xc7, 0x65, 0x47, 0xfd, 0x76, 0xc9, 0x26, 0xdd, 0xb2, 0xe7, 0xfa, 0xb8, 0x4c, 0x68, 0x54, 0x12, + 0xf1, 0xcb, 0x9e, 0xdb, 0xa6, 0xe5, 0x76, 0xc8, 0x30, 0x2d, 0xed, 0xe1, 0x81, 0x1a, 0x1d, 0x50, + 0x04, 0x8e, 0x06, 0x4f, 0xbc, 0xd7, 0x49, 0xbe, 0x72, 0x42, 0xb8, 0xfa, 0x73, 0x12, 0x80, 0xf9, + 0xde, 0xc3, 0x8f, 0xc1, 0xc5, 0x4a, 0xb5, 0xaa, 0x35, 0x9b, 0x66, 0xeb, 0xa0, 0xa1, 0x99, 0xf7, + 0xeb, 0xcd, 0x86, 0x56, 0xd5, 0xef, 0xe8, 0x5a, 0x4d, 0x4e, 0xe4, 0x36, 0x87, 0xa3, 0xe2, 0xc6, + 0xdc, 0xf9, 0xbe, 0x4f, 0x7b, 0xd8, 0x76, 0x0f, 0x5d, 0xec, 0xc0, 0x1d, 0x00, 0xe3, 0xb8, 0xba, + 0xa1, 0x1a, 0xb5, 0x03, 0x59, 0xca, 0xad, 0x0f, 0x47, 0x45, 0x79, 0x0e, 0xa9, 0x93, 0x36, 0x71, + 0x42, 0xf8, 0x09, 0xc8, 0xc6, 0xbd, 0x8d, 0xfa, 0xa7, 0x07, 0x66, 0xa5, 0x56, 0x43, 0x5a, 0xb3, + 0x29, 0x27, 0x5f, 0x4e, 0x63, 0xf8, 0x5e, 0x58, 0x79, 0xf1, 0x26, 0x6f, 0xc4, 0x81, 0xda, 0x67, + 0x1a, 0x3a, 0xe0, 0x99, 0x52, 0xb9, 0x8b, 0xc3, 0x51, 0xf1, 0x9d, 0x39, 0x4a, 0x3b, 0xc6, 0x41, + 0xc8, 0x93, 0xdd, 0x06, 0x5b, 0x71, 0x4c, 0xa5, 0x7e, 0x60, 0x1a, 0x77, 0x66, 0xe9, 0xb4, 0xa6, + 0x9c, 0xce, 0x6d, 0x0d, 0x47, 0xc5, 0xec, 0x1c, 0x5a, 0xf1, 0x43, 0xe3, 0xb0, 0x32, 0x7b, 0xd3, + 0x73, 0xab, 0x5f, 0xfe, 0x90, 0x4f, 0x3c, 0xfe, 0x31, 0x9f, 0xb8, 0xfa, 0x53, 0x0a, 0x14, 0xcf, + 0x9a, 0x50, 0x88, 0xc1, 0x8d, 0xaa, 0x51, 0x6f, 0xa1, 0x4a, 0xb5, 0x65, 0x56, 0x8d, 0x9a, 0x66, + 0xee, 0xe9, 0xcd, 0x96, 0x81, 0x0e, 0x4c, 0xa3, 0xa1, 0xa1, 0x4a, 0x4b, 0x37, 0xea, 0xa7, 0x51, + 0x5b, 0x1e, 0x8e, 0x8a, 0xd7, 0xce, 0x8a, 0x1d, 0x27, 0xfc, 0x73, 0x70, 0x65, 0xa1, 0x34, 0x7a, + 0x5d, 0x6f, 0xc9, 0x52, 0x6e, 0x7b, 0x38, 0x2a, 0x5e, 0x3e, 0x2b, 0xbe, 0xee, 0xbb, 0x0c, 0x3e, + 0x00, 0x3b, 0x0b, 0x05, 0xde, 0xd7, 0xef, 0xa2, 0x4a, 0x4b, 0x93, 0x93, 0xb9, 0x6b, 0xc3, 0x51, + 0xf1, 0xc3, 0xb3, 0x62, 0xef, 0xbb, 0x9d, 0xc0, 0x62, 0x78, 0xe1, 0xf0, 0x77, 0xb5, 0xba, 0xd6, + 0xd4, 0x9b, 0x72, 0x6a, 0xb1, 0xf0, 0x77, 0xb1, 0x8f, 0xa9, 0x4b, 0x73, 0xe9, 0xe8, 0xb2, 0xd4, + 0xda, 0x93, 0xbf, 0xf2, 0x89, 0xc7, 0x27, 0x79, 0xe9, 0xc9, 0x49, 0x5e, 0x7a, 0x7a, 0x92, 0x97, + 0xfe, 0x3c, 0xc9, 0x4b, 0xdf, 0x3c, 0xcb, 0x27, 0x9e, 0x3e, 0xcb, 0x27, 0xfe, 0x78, 0x96, 0x4f, + 0x7c, 0xa1, 0xbc, 0xbc, 0x3f, 0xd1, 0x63, 0xe0, 0x94, 0x07, 0xe2, 0xd7, 0x8a, 0xff, 0x57, 0xb5, + 0x97, 0xf9, 0x4b, 0xf8, 0xd1, 0xbf, 0x01, 0x00, 0x00, 0xff, 0xff, 0xce, 0x92, 0x6e, 0xc7, 0x78, + 0x09, 0x00, 0x00, } func (this *AccessTypeParam) Equal(that interface{}) bool { @@ -627,15 +618,6 @@ func (this *Params) Equal(that interface{}) bool { if this.InstantiateDefaultPermission != that1.InstantiateDefaultPermission { return false } - if this.GasMultiplier != that1.GasMultiplier { - return false - } - if this.InstanceCost != that1.InstanceCost { - return false - } - if this.CompileCost != that1.CompileCost { - return false - } return true } func (this *CodeInfo) Equal(that interface{}) bool { @@ -889,21 +871,6 @@ func (m *Params) MarshalToSizedBuffer(dAtA []byte) (int, error) { _ = i var l int _ = l - if m.CompileCost != 0 { - i = encodeVarintTypes(dAtA, i, uint64(m.CompileCost)) - i-- - dAtA[i] = 0x28 - } - if m.InstanceCost != 0 { - i = encodeVarintTypes(dAtA, i, uint64(m.InstanceCost)) - i-- - dAtA[i] = 0x20 - } - if m.GasMultiplier != 0 { - i = encodeVarintTypes(dAtA, i, uint64(m.GasMultiplier)) - i-- - dAtA[i] = 0x18 - } if m.InstantiateDefaultPermission != 0 { i = encodeVarintTypes(dAtA, i, uint64(m.InstantiateDefaultPermission)) i-- @@ -1227,15 +1194,6 @@ func (m *Params) Size() (n int) { if m.InstantiateDefaultPermission != 0 { n += 1 + sovTypes(uint64(m.InstantiateDefaultPermission)) } - if m.GasMultiplier != 0 { - n += 1 + sovTypes(uint64(m.GasMultiplier)) - } - if m.InstanceCost != 0 { - n += 1 + sovTypes(uint64(m.InstanceCost)) - } - if m.CompileCost != 0 { - n += 1 + sovTypes(uint64(m.CompileCost)) - } return n } @@ -1638,63 +1596,6 @@ func (m *Params) Unmarshal(dAtA []byte) error { break } } - case 3: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field GasMultiplier", wireType) - } - m.GasMultiplier = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.GasMultiplier |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - case 4: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field InstanceCost", wireType) - } - m.InstanceCost = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.InstanceCost |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - case 5: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field CompileCost", wireType) - } - m.CompileCost = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.CompileCost |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } default: iNdEx = preIndex skippy, err := skipTypes(dAtA[iNdEx:]) From 8e759e5c060d0adf4abb9d1d0d0a5ea4cd4b6bf3 Mon Sep 17 00:00:00 2001 From: zemyblue Date: Thu, 19 Jan 2023 14:26:35 +0900 Subject: [PATCH 02/17] feat!: extract custom wasm logic for lbm-sdk --- app/app.go | 2 - appplus/app.go | 946 +++++++ appplus/app_test.go | 117 + appplus/encoding.go | 17 + appplus/export.go | 193 ++ appplus/genesis.go | 11 + appplus/params/params.go | 8 + appplus/sim_test.go | 294 ++ go.mod | 1 - go.sum | 2394 +++++++++++++++-- proto/lbm/wasm/v1/event.proto | 2 +- proto/lbm/wasm/v1/genesis.proto | 2 +- proto/lbm/wasm/v1/proposal.proto | 2 +- proto/lbm/wasm/v1/query.proto | 2 +- proto/lbm/wasm/v1/tx.proto | 2 +- proto/lbm/wasm/v1/types.proto | 2 +- x/wasm/alias.go | 7 +- x/wasm/client/cli/gov_tx.go | 6 +- x/wasm/client/cli/query.go | 10 +- x/wasm/client/cli/query_test.go | 8 +- x/wasm/client/cli/tx.go | 30 +- x/wasm/client/testutil/query.go | 10 +- x/wasm/common_test.go | 14 - x/wasm/handler.go | 8 - x/wasm/keeper/ante_test.go | 4 +- x/wasm/keeper/bench_test.go | 4 +- x/wasm/keeper/contract_keeper.go | 11 - x/wasm/keeper/contract_keeper_test.go | 2 +- x/wasm/keeper/events_test.go | 15 +- x/wasm/keeper/gas_register_test.go | 473 ++++ x/wasm/keeper/genesis.go | 16 - x/wasm/keeper/genesis_test.go | 41 +- x/wasm/keeper/handler_plugin_encoders_test.go | 3 +- x/wasm/keeper/handler_plugin_test.go | 37 +- x/wasm/keeper/ibc_test.go | 4 +- x/wasm/keeper/keeper.go | 35 +- x/wasm/keeper/keeper_extension.go | 67 - x/wasm/keeper/keeper_test.go | 164 +- x/wasm/keeper/legacy_querier.go | 21 - x/wasm/keeper/legacy_querier_test.go | 8 +- x/wasm/keeper/msg_server.go | 40 - x/wasm/keeper/options_test.go | 2 +- x/wasm/keeper/proposal_handler.go | 50 - x/wasm/keeper/proposal_integration_test.go | 85 +- x/wasm/keeper/querier.go | 73 +- x/wasm/keeper/querier_test.go | 77 +- x/wasm/keeper/query_plugins.go | 6 +- x/wasm/keeper/recurse_test.go | 2 +- x/wasm/keeper/reflect_test.go | 16 +- x/wasm/keeper/relay_test.go | 12 +- x/wasm/keeper/staking_test.go | 4 +- x/wasm/keeper/submsg_test.go | 8 +- x/wasm/keeper/test_common.go | 17 +- x/wasm/lbmtypes/genesis.go | 38 - x/wasm/module.go | 9 +- x/wasm/module_test.go | 177 +- x/wasm/simulation/operations_test.go | 2 +- x/wasm/types/errors.go | 3 - x/wasm/types/events.go | 4 - x/wasm/types/exported_keepers.go | 8 - x/wasm/types/genesis.go | 5 - x/wasm/types/keys.go | 9 - x/wasm/types/keys_test.go | 10 - x/wasm/types/params.go | 6 +- x/wasm/types/proposal_test.go | 24 +- x/wasm/types/wasmer_engine.go | 1 - x/wasmplus/README.md | 11 + x/wasmplus/handler.go | 35 + x/wasmplus/keeper/contract_keeper.go | 62 + x/wasmplus/keeper/contract_keeper_test.go | 83 + x/wasmplus/keeper/genesis.go | 57 + x/wasmplus/keeper/genesis_test.go | 632 +++++ x/wasmplus/keeper/keeper.go | 111 + x/wasmplus/keeper/keeper_extension.go | 68 + x/wasmplus/keeper/keeper_test.go | 79 + x/wasmplus/keeper/metrics.go | 145 + x/wasmplus/keeper/msg_server.go | 60 + x/wasmplus/keeper/proposal_handler.go | 89 + .../keeper/proposal_integration_test.go | 71 + x/wasmplus/keeper/querier.go | 75 + x/wasmplus/keeper/querier_test.go | 59 + x/wasmplus/keeper/test_common.go | 778 ++++++ x/wasmplus/module.go | 191 ++ x/wasmplus/module_test.go | 399 +++ x/{wasm/lbmtypes => wasmplus/types}/codec.go | 2 +- x/wasmplus/types/errors.go | 13 + .../lbmtypes => wasmplus/types}/event.pb.go | 14 +- x/wasmplus/types/exported_keepers.go | 23 + x/wasmplus/types/genesis.go | 60 + .../lbmtypes => wasmplus/types}/genesis.pb.go | 52 +- x/wasmplus/types/genesis_test.go | 86 + x/wasmplus/types/keys.go | 29 + x/wasmplus/types/keys_test.go | 18 + x/{wasm/lbmtypes => wasmplus/types}/params.go | 33 +- x/wasmplus/types/params_test.go | 243 ++ .../lbmtypes => wasmplus/types}/proposal.go | 6 +- .../types}/proposal.pb.go | 14 +- x/wasmplus/types/proposal_test.go | 82 + .../lbmtypes => wasmplus/types}/query.pb.go | 60 +- .../types}/query.pb.gw.go | 4 +- x/wasmplus/types/test_fixtures.go | 53 + x/{wasm/lbmtypes => wasmplus/types}/tx.go | 2 +- x/{wasm/lbmtypes => wasmplus/types}/tx.pb.go | 72 +- .../lbmtypes => wasmplus/types}/tx_test.go | 2 +- .../lbmtypes => wasmplus/types}/types.pb.go | 58 +- .../lbmtypes => wasmplus/types}/validation.go | 2 +- 106 files changed, 8289 insertions(+), 1325 deletions(-) create mode 100644 appplus/app.go create mode 100644 appplus/app_test.go create mode 100644 appplus/encoding.go create mode 100644 appplus/export.go create mode 100644 appplus/genesis.go create mode 100644 appplus/params/params.go create mode 100644 appplus/sim_test.go create mode 100644 x/wasm/keeper/gas_register_test.go delete mode 100644 x/wasm/keeper/keeper_extension.go delete mode 100644 x/wasm/lbmtypes/genesis.go create mode 100644 x/wasmplus/README.md create mode 100644 x/wasmplus/handler.go create mode 100644 x/wasmplus/keeper/contract_keeper.go create mode 100644 x/wasmplus/keeper/contract_keeper_test.go create mode 100644 x/wasmplus/keeper/genesis.go create mode 100644 x/wasmplus/keeper/genesis_test.go create mode 100644 x/wasmplus/keeper/keeper.go create mode 100644 x/wasmplus/keeper/keeper_extension.go create mode 100644 x/wasmplus/keeper/keeper_test.go create mode 100644 x/wasmplus/keeper/metrics.go create mode 100644 x/wasmplus/keeper/msg_server.go create mode 100644 x/wasmplus/keeper/proposal_handler.go create mode 100644 x/wasmplus/keeper/proposal_integration_test.go create mode 100644 x/wasmplus/keeper/querier.go create mode 100644 x/wasmplus/keeper/querier_test.go create mode 100644 x/wasmplus/keeper/test_common.go create mode 100644 x/wasmplus/module.go create mode 100644 x/wasmplus/module_test.go rename x/{wasm/lbmtypes => wasmplus/types}/codec.go (99%) create mode 100644 x/wasmplus/types/errors.go rename x/{wasm/lbmtypes => wasmplus/types}/event.pb.go (96%) create mode 100644 x/wasmplus/types/exported_keepers.go create mode 100644 x/wasmplus/types/genesis.go rename x/{wasm/lbmtypes => wasmplus/types}/genesis.pb.go (86%) create mode 100644 x/wasmplus/types/genesis_test.go create mode 100644 x/wasmplus/types/keys.go create mode 100644 x/wasmplus/types/keys_test.go rename x/{wasm/lbmtypes => wasmplus/types}/params.go (76%) create mode 100644 x/wasmplus/types/params_test.go rename x/{wasm/lbmtypes => wasmplus/types}/proposal.go (94%) rename x/{wasm/lbmtypes => wasmplus/types}/proposal.pb.go (97%) create mode 100644 x/wasmplus/types/proposal_test.go rename x/{wasm/lbmtypes => wasmplus/types}/query.pb.go (90%) rename x/{wasm/lbmtypes => wasmplus/types}/query.pb.gw.go (99%) create mode 100644 x/wasmplus/types/test_fixtures.go rename x/{wasm/lbmtypes => wasmplus/types}/tx.go (98%) rename x/{wasm/lbmtypes => wasmplus/types}/tx.pb.go (88%) rename x/{wasm/lbmtypes => wasmplus/types}/tx_test.go (99%) rename x/{wasm/lbmtypes => wasmplus/types}/types.pb.go (80%) rename x/{wasm/lbmtypes => wasmplus/types}/validation.go (97%) diff --git a/app/app.go b/app/app.go index dd848ba877..1975c4852b 100644 --- a/app/app.go +++ b/app/app.go @@ -533,8 +533,6 @@ func NewWasmApp( wasmDir, wasmConfig, availableCapabilities, - nil, - nil, wasmOpts..., ) diff --git a/appplus/app.go b/appplus/app.go new file mode 100644 index 0000000000..0800b0b0aa --- /dev/null +++ b/appplus/app.go @@ -0,0 +1,946 @@ +package appplus + +import ( + "fmt" + "io" + "net/http" + "os" + "path/filepath" + "strings" + + intertxtypes "github.com/cosmos/interchain-accounts/x/inter-tx/types" + "github.com/gorilla/mux" + "github.com/rakyll/statik/fs" + "github.com/spf13/cast" + dbm "github.com/tendermint/tm-db" + + "github.com/line/lbm-sdk/baseapp" + "github.com/line/lbm-sdk/client" + nodeservice "github.com/line/lbm-sdk/client/grpc/node" + "github.com/line/lbm-sdk/client/grpc/tmservice" + "github.com/line/lbm-sdk/codec" + "github.com/line/lbm-sdk/codec/types" + "github.com/line/lbm-sdk/server/api" + "github.com/line/lbm-sdk/server/config" + servertypes "github.com/line/lbm-sdk/server/types" + "github.com/line/lbm-sdk/simapp" + sdk "github.com/line/lbm-sdk/types" + "github.com/line/lbm-sdk/types/module" + "github.com/line/lbm-sdk/x/auth" + "github.com/line/lbm-sdk/x/auth/ante" + authkeeper "github.com/line/lbm-sdk/x/auth/keeper" + authsims "github.com/line/lbm-sdk/x/auth/simulation" + authtx "github.com/line/lbm-sdk/x/auth/tx" + authtypes "github.com/line/lbm-sdk/x/auth/types" + "github.com/line/lbm-sdk/x/auth/vesting" + vestingtypes "github.com/line/lbm-sdk/x/auth/vesting/types" + "github.com/line/lbm-sdk/x/authz" + authzkeeper "github.com/line/lbm-sdk/x/authz/keeper" + authzmodule "github.com/line/lbm-sdk/x/authz/module" + "github.com/line/lbm-sdk/x/bank" + bankkeeper "github.com/line/lbm-sdk/x/bank/keeper" + banktypes "github.com/line/lbm-sdk/x/bank/types" + "github.com/line/lbm-sdk/x/bankplus" + bankpluskeeper "github.com/line/lbm-sdk/x/bankplus/keeper" + "github.com/line/lbm-sdk/x/capability" + capabilitykeeper "github.com/line/lbm-sdk/x/capability/keeper" + capabilitytypes "github.com/line/lbm-sdk/x/capability/types" + "github.com/line/lbm-sdk/x/crisis" + crisiskeeper "github.com/line/lbm-sdk/x/crisis/keeper" + crisistypes "github.com/line/lbm-sdk/x/crisis/types" + distr "github.com/line/lbm-sdk/x/distribution" + distrclient "github.com/line/lbm-sdk/x/distribution/client" + distrkeeper "github.com/line/lbm-sdk/x/distribution/keeper" + distrtypes "github.com/line/lbm-sdk/x/distribution/types" + "github.com/line/lbm-sdk/x/evidence" + evidencekeeper "github.com/line/lbm-sdk/x/evidence/keeper" + evidencetypes "github.com/line/lbm-sdk/x/evidence/types" + "github.com/line/lbm-sdk/x/feegrant" + feegrantkeeper "github.com/line/lbm-sdk/x/feegrant/keeper" + feegrantmodule "github.com/line/lbm-sdk/x/feegrant/module" + "github.com/line/lbm-sdk/x/genutil" + genutiltypes "github.com/line/lbm-sdk/x/genutil/types" + "github.com/line/lbm-sdk/x/gov" + govkeeper "github.com/line/lbm-sdk/x/gov/keeper" + govtypes "github.com/line/lbm-sdk/x/gov/types" + ica "github.com/line/lbm-sdk/x/ibc/applications/27-interchain-accounts" + icacontrollerkeeper "github.com/line/lbm-sdk/x/ibc/applications/27-interchain-accounts/controller/keeper" + icacontrollertypes "github.com/line/lbm-sdk/x/ibc/applications/27-interchain-accounts/controller/types" + icahost "github.com/line/lbm-sdk/x/ibc/applications/27-interchain-accounts/host" + icahostkeeper "github.com/line/lbm-sdk/x/ibc/applications/27-interchain-accounts/host/keeper" + icahosttypes "github.com/line/lbm-sdk/x/ibc/applications/27-interchain-accounts/host/types" + icatypes "github.com/line/lbm-sdk/x/ibc/applications/27-interchain-accounts/types" + transfer "github.com/line/lbm-sdk/x/ibc/applications/transfer" + ibctransferkeeper "github.com/line/lbm-sdk/x/ibc/applications/transfer/keeper" + ibctransfertypes "github.com/line/lbm-sdk/x/ibc/applications/transfer/types" + ibc "github.com/line/lbm-sdk/x/ibc/core" + ibcclient "github.com/line/lbm-sdk/x/ibc/core/02-client" + ibcclientclient "github.com/line/lbm-sdk/x/ibc/core/02-client/client" + ibcclienttypes "github.com/line/lbm-sdk/x/ibc/core/02-client/types" + porttypes "github.com/line/lbm-sdk/x/ibc/core/05-port/types" + ibchost "github.com/line/lbm-sdk/x/ibc/core/24-host" + ibckeeper "github.com/line/lbm-sdk/x/ibc/core/keeper" + ibcmock "github.com/line/lbm-sdk/x/ibc/testing/mock" + "github.com/line/lbm-sdk/x/mint" + mintkeeper "github.com/line/lbm-sdk/x/mint/keeper" + minttypes "github.com/line/lbm-sdk/x/mint/types" + "github.com/line/lbm-sdk/x/params" + paramsclient "github.com/line/lbm-sdk/x/params/client" + paramskeeper "github.com/line/lbm-sdk/x/params/keeper" + paramstypes "github.com/line/lbm-sdk/x/params/types" + paramproposal "github.com/line/lbm-sdk/x/params/types/proposal" + "github.com/line/lbm-sdk/x/slashing" + slashingkeeper "github.com/line/lbm-sdk/x/slashing/keeper" + slashingtypes "github.com/line/lbm-sdk/x/slashing/types" + "github.com/line/lbm-sdk/x/staking" + stakingkeeper "github.com/line/lbm-sdk/x/staking/keeper" + stakingtypes "github.com/line/lbm-sdk/x/staking/types" + "github.com/line/lbm-sdk/x/upgrade" + upgradeclient "github.com/line/lbm-sdk/x/upgrade/client" + upgradekeeper "github.com/line/lbm-sdk/x/upgrade/keeper" + upgradetypes "github.com/line/lbm-sdk/x/upgrade/types" + abci "github.com/line/ostracon/abci/types" + tmjson "github.com/line/ostracon/libs/json" + "github.com/line/ostracon/libs/log" + tmos "github.com/line/ostracon/libs/os" + ocproto "github.com/line/ostracon/proto/ostracon/types" + + // unnamed import of statik for swagger UI support + wasmapp "github.com/line/wasmd/app" + + wasmappparams "github.com/line/wasmd/app/params" + "github.com/line/wasmd/x/wasm" + wasmclient "github.com/line/wasmd/x/wasm/client" + wasmkeeper "github.com/line/wasmd/x/wasm/keeper" + wasmtypes "github.com/line/wasmd/x/wasm/types" + "github.com/line/wasmd/x/wasmplus" + wasmpluskeeper "github.com/line/wasmd/x/wasmplus/keeper" + wasmplustypes "github.com/line/wasmd/x/wasmplus/types" +) + +const appName = "WasmApp" + +// We pull these out, so we can set them with LDFLAGS in the Makefile +var ( + NodeDir = ".wasmd" + Bech32Prefix = "link" + + ProposalsEnabled = "false" + + EnableSpecificProposals = "" +) + +// GetEnabledProposals parses the ProposalsEnabled / EnableSpecificProposals values to +// produce a list of enabled proposals to pass into wasmd app. +func GetEnabledProposals() []wasmtypes.ProposalType { + if EnableSpecificProposals == "" { + if ProposalsEnabled == "true" { + return wasmplustypes.EnableAllProposals + } + return wasmtypes.DisableAllProposals + } + chunks := strings.Split(EnableSpecificProposals, ",") + proposals, err := wasmtypes.ConvertToProposals(chunks) + if err != nil { + panic(err) + } + return proposals +} + +// These constants are derived from the above variables. +// These are the ones we will want to use in the code, based on +// any overrides above +var ( + // DefaultNodeHome default home directories for wasmd + DefaultNodeHome = os.ExpandEnv("$HOME/") + NodeDir + + // Bech32PrefixAccAddr defines the Bech32 prefix of an account's address + Bech32PrefixAccAddr = Bech32Prefix + // Bech32PrefixAccPub defines the Bech32 prefix of an account's public key + Bech32PrefixAccPub = Bech32Prefix + sdk.PrefixPublic + // Bech32PrefixValAddr defines the Bech32 prefix of a validator's operator address + Bech32PrefixValAddr = Bech32Prefix + sdk.PrefixValidator + sdk.PrefixOperator + // Bech32PrefixValPub defines the Bech32 prefix of a validator's operator public key + Bech32PrefixValPub = Bech32Prefix + sdk.PrefixValidator + sdk.PrefixOperator + sdk.PrefixPublic + // Bech32PrefixConsAddr defines the Bech32 prefix of a consensus node address + Bech32PrefixConsAddr = Bech32Prefix + sdk.PrefixValidator + sdk.PrefixConsensus + // Bech32PrefixConsPub defines the Bech32 prefix of a consensus node public key + Bech32PrefixConsPub = Bech32Prefix + sdk.PrefixValidator + sdk.PrefixConsensus + sdk.PrefixPublic +) + +var ( + // ModuleBasics defines the module BasicManager is in charge of setting up basic, + // non-dependant module elements, such as codec registration + // and genesis verification. + ModuleBasics = module.NewBasicManager( + auth.AppModuleBasic{}, + genutil.AppModuleBasic{}, + bank.AppModuleBasic{}, + capability.AppModuleBasic{}, + staking.AppModuleBasic{}, + mint.AppModuleBasic{}, + distr.AppModuleBasic{}, + gov.NewAppModuleBasic( + append( + wasmclient.ProposalHandlers, + paramsclient.ProposalHandler, + distrclient.ProposalHandler, + upgradeclient.ProposalHandler, + upgradeclient.CancelProposalHandler, + ibcclientclient.UpdateClientProposalHandler, + ibcclientclient.UpgradeProposalHandler, + )..., + ), + params.AppModuleBasic{}, + crisis.AppModuleBasic{}, + slashing.AppModuleBasic{}, + feegrantmodule.AppModuleBasic{}, + authzmodule.AppModuleBasic{}, + ibc.AppModuleBasic{}, + upgrade.AppModuleBasic{}, + evidence.AppModuleBasic{}, + transfer.AppModuleBasic{}, + vesting.AppModuleBasic{}, + wasmplus.AppModuleBasic{}, + ica.AppModuleBasic{}, + // intertx.AppModuleBasic{}, // TODO support later + ) + + // module account permissions + maccPerms = map[string][]string{ + authtypes.FeeCollectorName: nil, + distrtypes.ModuleName: nil, + minttypes.ModuleName: {authtypes.Minter}, + stakingtypes.BondedPoolName: {authtypes.Burner, authtypes.Staking}, + stakingtypes.NotBondedPoolName: {authtypes.Burner, authtypes.Staking}, + govtypes.ModuleName: {authtypes.Burner}, + ibctransfertypes.ModuleName: {authtypes.Minter, authtypes.Burner}, + icatypes.ModuleName: nil, + wasmplustypes.ModuleName: {authtypes.Burner}, + } +) + +var ( + _ simapp.App = (*WasmPlusApp)(nil) + _ servertypes.Application = (*WasmPlusApp)(nil) +) + +// allowedReceivingModAcc define module accounts that are allowed to receive tokens +func allowedReceivingModAcc() map[string]bool { + return map[string]bool{ + distrtypes.ModuleName: true, + } +} + +// WasmPlusApp extended ABCI application +type WasmPlusApp struct { + *baseapp.BaseApp + legacyAmino *codec.LegacyAmino //nolint:staticcheck + appCodec codec.Codec + interfaceRegistry types.InterfaceRegistry + + invCheckPeriod uint + + // keys to access the substores + keys map[string]*sdk.KVStoreKey + tkeys map[string]*sdk.TransientStoreKey + memKeys map[string]*sdk.MemoryStoreKey + + // keepers + AccountKeeper authkeeper.AccountKeeper + BankKeeper bankkeeper.Keeper + CapabilityKeeper *capabilitykeeper.Keeper + StakingKeeper stakingkeeper.Keeper + SlashingKeeper slashingkeeper.Keeper + MintKeeper mintkeeper.Keeper + DistrKeeper distrkeeper.Keeper + GovKeeper govkeeper.Keeper + CrisisKeeper crisiskeeper.Keeper + UpgradeKeeper upgradekeeper.Keeper + ParamsKeeper paramskeeper.Keeper + EvidenceKeeper evidencekeeper.Keeper + IBCKeeper *ibckeeper.Keeper // IBC Keeper must be a pointer in the app, so we can SetRouter on it correctly + ICAControllerKeeper icacontrollerkeeper.Keeper + ICAHostKeeper icahostkeeper.Keeper + // InterTxKeeper intertxkeeper.Keeper // TODO support later + TransferKeeper ibctransferkeeper.Keeper + FeeGrantKeeper feegrantkeeper.Keeper + AuthzKeeper authzkeeper.Keeper + WasmKeeper wasmpluskeeper.Keeper + + ScopedIBCKeeper capabilitykeeper.ScopedKeeper + ScopedICAHostKeeper capabilitykeeper.ScopedKeeper + ScopedICAControllerKeeper capabilitykeeper.ScopedKeeper + ScopedInterTxKeeper capabilitykeeper.ScopedKeeper + ScopedTransferKeeper capabilitykeeper.ScopedKeeper + ScopedWasmKeeper capabilitykeeper.ScopedKeeper + + // make IBC modules public for test purposes + // these modules are never directly routed to by the IBC Router + ICAAuthModule ibcmock.IBCModule + + // the module manager + mm *module.Manager + + // simulation manager + sm *module.SimulationManager + + // module configurator + configurator module.Configurator +} + +// NewWasmApp returns a reference to an initialized WasmPlusApp. +func NewWasmApp( + logger log.Logger, + db dbm.DB, + traceStore io.Writer, + loadLatest bool, + skipUpgradeHeights map[int64]bool, + homePath string, + invCheckPeriod uint, + encodingConfig wasmappparams.EncodingConfig, + enabledProposals []wasmtypes.ProposalType, + appOpts servertypes.AppOptions, + wasmOpts []wasmkeeper.Option, + baseAppOptions ...func(*baseapp.BaseApp), +) *WasmPlusApp { + appCodec, legacyAmino := encodingConfig.Marshaler, encodingConfig.Amino + interfaceRegistry := encodingConfig.InterfaceRegistry + + bApp := baseapp.NewBaseApp(appName, logger, db, encodingConfig.TxConfig.TxDecoder(), baseAppOptions...) + bApp.SetCommitMultiStoreTracer(traceStore) + bApp.SetInterfaceRegistry(interfaceRegistry) + + keys := sdk.NewKVStoreKeys( + authtypes.StoreKey, banktypes.StoreKey, stakingtypes.StoreKey, + minttypes.StoreKey, distrtypes.StoreKey, slashingtypes.StoreKey, + govtypes.StoreKey, paramstypes.StoreKey, ibchost.StoreKey, upgradetypes.StoreKey, + evidencetypes.StoreKey, ibctransfertypes.StoreKey, capabilitytypes.StoreKey, + feegrant.StoreKey, authzkeeper.StoreKey, wasmplustypes.StoreKey, icahosttypes.StoreKey, icacontrollertypes.StoreKey, intertxtypes.StoreKey, + ) + tkeys := sdk.NewTransientStoreKeys(paramstypes.TStoreKey) + memKeys := sdk.NewMemoryStoreKeys(capabilitytypes.MemStoreKey) + + app := &WasmPlusApp{ + BaseApp: bApp, + legacyAmino: legacyAmino, + appCodec: appCodec, + interfaceRegistry: interfaceRegistry, + invCheckPeriod: invCheckPeriod, + keys: keys, + tkeys: tkeys, + memKeys: memKeys, + } + + app.ParamsKeeper = initParamsKeeper( + appCodec, + legacyAmino, + keys[paramstypes.StoreKey], + tkeys[paramstypes.TStoreKey], + ) + + // set the BaseApp's parameter store + bApp.SetParamStore(app.ParamsKeeper.Subspace(baseapp.Paramspace).WithKeyTable(paramskeeper.ConsensusParamsKeyTable())) + + // add capability keeper and ScopeToModule for ibc module + app.CapabilityKeeper = capabilitykeeper.NewKeeper( + appCodec, + keys[capabilitytypes.StoreKey], + memKeys[capabilitytypes.MemStoreKey], + ) + scopedIBCKeeper := app.CapabilityKeeper.ScopeToModule(ibchost.ModuleName) + scopedICAHostKeeper := app.CapabilityKeeper.ScopeToModule(icahosttypes.SubModuleName) + scopedICAControllerKeeper := app.CapabilityKeeper.ScopeToModule(icacontrollertypes.SubModuleName) + scopedInterTxKeeper := app.CapabilityKeeper.ScopeToModule(intertxtypes.ModuleName) + scopedTransferKeeper := app.CapabilityKeeper.ScopeToModule(ibctransfertypes.ModuleName) + scopedWasmKeeper := app.CapabilityKeeper.ScopeToModule(wasmplustypes.ModuleName) + app.CapabilityKeeper.Seal() + + // add keepers + app.AccountKeeper = authkeeper.NewAccountKeeper( + appCodec, + keys[authtypes.StoreKey], + app.getSubspace(authtypes.ModuleName), + authtypes.ProtoBaseAccount, + maccPerms, + ) + app.BankKeeper = bankpluskeeper.NewBaseKeeper( + appCodec, + keys[banktypes.StoreKey], + app.AccountKeeper, + app.getSubspace(banktypes.ModuleName), + app.BlockedAddrs(), + ) + app.AuthzKeeper = authzkeeper.NewKeeper( + keys[authzkeeper.StoreKey], + appCodec, + app.BaseApp.MsgServiceRouter(), + ) + app.FeeGrantKeeper = feegrantkeeper.NewKeeper( + appCodec, + keys[feegrant.StoreKey], + app.AccountKeeper, + ) + stakingKeeper := stakingkeeper.NewKeeper( + appCodec, + keys[stakingtypes.StoreKey], + app.AccountKeeper, + app.BankKeeper, + app.getSubspace(stakingtypes.ModuleName), + ) + app.MintKeeper = mintkeeper.NewKeeper( + appCodec, + keys[minttypes.StoreKey], + app.getSubspace(minttypes.ModuleName), + &stakingKeeper, + app.AccountKeeper, + app.BankKeeper, + authtypes.FeeCollectorName, + ) + app.DistrKeeper = distrkeeper.NewKeeper( + appCodec, + keys[distrtypes.StoreKey], + app.getSubspace(distrtypes.ModuleName), + app.AccountKeeper, + app.BankKeeper, + &stakingKeeper, + authtypes.FeeCollectorName, + app.ModuleAccountAddrs(), + ) + app.SlashingKeeper = slashingkeeper.NewKeeper( + appCodec, + keys[slashingtypes.StoreKey], + &stakingKeeper, + app.getSubspace(slashingtypes.ModuleName), + ) + app.CrisisKeeper = crisiskeeper.NewKeeper( + app.getSubspace(crisistypes.ModuleName), + invCheckPeriod, + app.BankKeeper, + authtypes.FeeCollectorName, + ) + app.UpgradeKeeper = upgradekeeper.NewKeeper( + skipUpgradeHeights, + keys[upgradetypes.StoreKey], + appCodec, + homePath, + app.BaseApp, + ) + + // register the staking hooks + // NOTE: stakingKeeper above is passed by reference, so that it will contain these hooks + app.StakingKeeper = *stakingKeeper.SetHooks( + stakingtypes.NewMultiStakingHooks(app.DistrKeeper.Hooks(), app.SlashingKeeper.Hooks()), + ) + + app.IBCKeeper = ibckeeper.NewKeeper( + appCodec, + keys[ibchost.StoreKey], + app.getSubspace(ibchost.ModuleName), + app.StakingKeeper, + app.UpgradeKeeper, + scopedIBCKeeper, + ) + + // register the proposal types + govRouter := govtypes.NewRouter() + govRouter. + AddRoute(govtypes.RouterKey, govtypes.ProposalHandler). + AddRoute(paramproposal.RouterKey, params.NewParamChangeProposalHandler(app.ParamsKeeper)). + AddRoute(distrtypes.RouterKey, distr.NewCommunityPoolSpendProposalHandler(app.DistrKeeper)). + AddRoute(upgradetypes.RouterKey, upgrade.NewSoftwareUpgradeProposalHandler(app.UpgradeKeeper)). + AddRoute(ibcclienttypes.RouterKey, ibcclient.NewClientProposalHandler(app.IBCKeeper.ClientKeeper)) + + // Create Transfer Keepers + app.TransferKeeper = ibctransferkeeper.NewKeeper( + appCodec, + keys[ibctransfertypes.StoreKey], + app.getSubspace(ibctransfertypes.ModuleName), + app.IBCKeeper.ChannelKeeper, + app.IBCKeeper.ChannelKeeper, + &app.IBCKeeper.PortKeeper, + app.AccountKeeper, + app.BankKeeper, + scopedTransferKeeper, + ) + transferModule := transfer.NewAppModule(app.TransferKeeper) + transferIBCModule := transfer.NewIBCModule(app.TransferKeeper) + + app.ICAHostKeeper = icahostkeeper.NewKeeper( + appCodec, + keys[icahosttypes.StoreKey], + app.getSubspace(icahosttypes.SubModuleName), + app.IBCKeeper.ChannelKeeper, + &app.IBCKeeper.PortKeeper, + app.AccountKeeper, + scopedICAHostKeeper, + app.MsgServiceRouter(), + ) + app.ICAControllerKeeper = icacontrollerkeeper.NewKeeper( + appCodec, + keys[icacontrollertypes.StoreKey], + app.getSubspace(icacontrollertypes.SubModuleName), + app.IBCKeeper.ChannelKeeper, // may be replaced with middleware such as ics29 fee + app.IBCKeeper.ChannelKeeper, + &app.IBCKeeper.PortKeeper, + scopedICAControllerKeeper, + app.MsgServiceRouter(), + ) + icaModule := ica.NewAppModule(&app.ICAControllerKeeper, &app.ICAHostKeeper) + icaHostIBCModule := icahost.NewIBCModule(app.ICAHostKeeper) + + // For wasmd we use the demo controller from https://github.com/cosmos/interchain-accounts but see notes below + // app.InterTxKeeper = intertxkeeper.NewKeeper(appCodec, keys[intertxtypes.StoreKey], app.ICAControllerKeeper, scopedInterTxKeeper) + // Note: please do your research before using this in production app, this is a demo and not an officially + // supported IBC team implementation. Do your own research before using it. + // interTxModule := intertx.NewAppModule(appCodec, app.InterTxKeeper) + // interTxIBCModule := intertx.NewIBCModule(app.InterTxKeeper) + // You will likely want to swap out the second argument with your own reviewed and maintained ica auth module + // icaControllerIBCModule := icacontroller.NewIBCModule(app.ICAControllerKeeper, interTxIBCModule) + + // create evidence keeper with router + evidenceKeeper := evidencekeeper.NewKeeper( + appCodec, + keys[evidencetypes.StoreKey], + &app.StakingKeeper, + app.SlashingKeeper, + ) + app.EvidenceKeeper = *evidenceKeeper + + wasmDir := filepath.Join(homePath, "wasm") + wasmConfig, err := wasm.ReadWasmConfig(appOpts) + if err != nil { + panic(fmt.Sprintf("error while reading wasm config: %s", err)) + } + + // The last arguments can contain custom message handlers, and custom query handlers, + // if we want to allow any custom callbacks + availableCapabilities := "iterator,staking,stargate,cosmwasm_1_1" + app.WasmKeeper = wasmpluskeeper.NewKeeper( + appCodec, + keys[wasmplustypes.StoreKey], + app.getSubspace(wasmplustypes.ModuleName), + app.AccountKeeper, + app.BankKeeper, + app.StakingKeeper, + app.DistrKeeper, + app.IBCKeeper.ChannelKeeper, + &app.IBCKeeper.PortKeeper, + scopedWasmKeeper, + app.TransferKeeper, + app.MsgServiceRouter(), + app.GRPCQueryRouter(), + wasmDir, + wasmConfig, + availableCapabilities, + nil, + nil, + wasmOpts..., + ) + + // Create static IBC router, add app routes, then set and seal it + ibcRouter := porttypes.NewRouter() + + // The gov proposal types can be individually enabled + if len(enabledProposals) != 0 { + govRouter.AddRoute(wasmplustypes.RouterKey, wasmpluskeeper.NewWasmProposalHandler(&app.WasmKeeper, enabledProposals)) + } + ibcRouter. + AddRoute(wasmplustypes.ModuleName, wasm.NewIBCHandler(app.WasmKeeper, app.IBCKeeper.ChannelKeeper)). + AddRoute(ibctransfertypes.ModuleName, transferIBCModule). + // AddRoute(icacontrollertypes.SubModuleName, icaControllerIBCModule). + AddRoute(icahosttypes.SubModuleName, icaHostIBCModule) + // AddRoute(intertxtypes.ModuleName, icaControllerIBCModule) + app.IBCKeeper.SetRouter(ibcRouter) + + app.GovKeeper = govkeeper.NewKeeper( + appCodec, + keys[govtypes.StoreKey], + app.getSubspace(govtypes.ModuleName), + app.AccountKeeper, + app.BankKeeper, + &stakingKeeper, + govRouter, + ) + /**** Module Options ****/ + + // NOTE: we may consider parsing `appOpts` inside module constructors. For the moment + // we prefer to be more strict in what arguments the modules expect. + skipGenesisInvariants := cast.ToBool(appOpts.Get(crisis.FlagSkipGenesisInvariants)) + + // NOTE: Any module instantiated in the module manager that is later modified + // must be passed by reference here. + app.mm = module.NewManager( + genutil.NewAppModule( + app.AccountKeeper, + app.StakingKeeper, + app.BaseApp.DeliverTx, + encodingConfig.TxConfig, + ), + auth.NewAppModule(appCodec, app.AccountKeeper, nil), + vesting.NewAppModule(app.AccountKeeper, app.BankKeeper), + bankplus.NewAppModule(appCodec, app.BankKeeper, app.AccountKeeper), + capability.NewAppModule(appCodec, *app.CapabilityKeeper), + gov.NewAppModule(appCodec, app.GovKeeper, app.AccountKeeper, app.BankKeeper), + mint.NewAppModule(appCodec, app.MintKeeper, app.AccountKeeper), + slashing.NewAppModule(appCodec, app.SlashingKeeper, app.AccountKeeper, app.BankKeeper, app.StakingKeeper), + distr.NewAppModule(appCodec, app.DistrKeeper, app.AccountKeeper, app.BankKeeper, app.StakingKeeper), + staking.NewAppModule(appCodec, app.StakingKeeper, app.AccountKeeper, app.BankKeeper), + upgrade.NewAppModule(app.UpgradeKeeper), + wasmplus.NewAppModule(appCodec, &app.WasmKeeper, app.StakingKeeper, app.AccountKeeper, app.BankKeeper), + evidence.NewAppModule(app.EvidenceKeeper), + feegrantmodule.NewAppModule(appCodec, app.AccountKeeper, app.BankKeeper, app.FeeGrantKeeper, app.interfaceRegistry), + authzmodule.NewAppModule(appCodec, app.AuthzKeeper, app.AccountKeeper, app.BankKeeper, app.interfaceRegistry), + ibc.NewAppModule(app.IBCKeeper), + params.NewAppModule(app.ParamsKeeper), + transferModule, + icaModule, + // interTxModule, + crisis.NewAppModule(&app.CrisisKeeper, skipGenesisInvariants), // always be last to make sure that it checks for all invariants and not only part of them + ) + + // During begin block slashing happens after distr.BeginBlocker so that + // there is nothing left over in the validator fee pool, so as to keep the + // CanWithdrawInvariant invariant. + // NOTE: staking module is required if HistoricalEntries param > 0 + app.mm.SetOrderBeginBlockers( + upgradetypes.ModuleName, + capabilitytypes.ModuleName, + minttypes.ModuleName, + distrtypes.ModuleName, + slashingtypes.ModuleName, + evidencetypes.ModuleName, + stakingtypes.ModuleName, + authtypes.ModuleName, + banktypes.ModuleName, + govtypes.ModuleName, + crisistypes.ModuleName, + genutiltypes.ModuleName, + authz.ModuleName, + feegrant.ModuleName, + paramstypes.ModuleName, + vestingtypes.ModuleName, + // additional non simd modules + ibctransfertypes.ModuleName, + ibchost.ModuleName, + icatypes.ModuleName, + // intertxtypes.ModuleName, + wasmplustypes.ModuleName, + ) + + app.mm.SetOrderEndBlockers( + crisistypes.ModuleName, + govtypes.ModuleName, + stakingtypes.ModuleName, + capabilitytypes.ModuleName, + authtypes.ModuleName, + banktypes.ModuleName, + distrtypes.ModuleName, + slashingtypes.ModuleName, + minttypes.ModuleName, + genutiltypes.ModuleName, + evidencetypes.ModuleName, + authz.ModuleName, + feegrant.ModuleName, + paramstypes.ModuleName, + upgradetypes.ModuleName, + vestingtypes.ModuleName, + // additional non simd modules + ibctransfertypes.ModuleName, + ibchost.ModuleName, + icatypes.ModuleName, + // intertxtypes.ModuleName, + wasmplustypes.ModuleName, + ) + + // NOTE: The genutils module must occur after staking so that pools are + // properly initialized with tokens from genesis accounts. + // NOTE: Capability module must occur first so that it can initialize any capabilities + // so that other modules that want to create or claim capabilities afterwards in InitChain + // can do so safely. + // NOTE: wasm module should be at the end as it can call other module functionality direct or via message dispatching during + // genesis phase. For example bank transfer, auth account check, staking, ... + app.mm.SetOrderInitGenesis( + capabilitytypes.ModuleName, + authtypes.ModuleName, + banktypes.ModuleName, + distrtypes.ModuleName, + stakingtypes.ModuleName, + slashingtypes.ModuleName, + govtypes.ModuleName, + minttypes.ModuleName, + crisistypes.ModuleName, + genutiltypes.ModuleName, + evidencetypes.ModuleName, + authz.ModuleName, + feegrant.ModuleName, + paramstypes.ModuleName, + upgradetypes.ModuleName, + vestingtypes.ModuleName, + // additional non simd modules + ibctransfertypes.ModuleName, + ibchost.ModuleName, + icatypes.ModuleName, + // intertxtypes.ModuleName, + // wasm after ibc transfer + wasmplustypes.ModuleName, + ) + + // Uncomment if you want to set a custom migration order here. + // app.mm.SetOrderMigrations(custom order) + + app.mm.RegisterInvariants(&app.CrisisKeeper) + app.mm.RegisterRoutes(app.Router(), app.QueryRouter(), encodingConfig.Amino) + + app.configurator = module.NewConfigurator(app.appCodec, app.MsgServiceRouter(), app.GRPCQueryRouter()) + app.mm.RegisterServices(app.configurator) + + // create the simulation manager and define the order of the modules for deterministic simulations + // + // NOTE: this is not required apps that don't use the simulator for fuzz testing + // transactions + app.sm = module.NewSimulationManager( + auth.NewAppModule(appCodec, app.AccountKeeper, authsims.RandomGenesisAccounts), + bankplus.NewAppModule(appCodec, app.BankKeeper, app.AccountKeeper), + capability.NewAppModule(appCodec, *app.CapabilityKeeper), + feegrantmodule.NewAppModule(appCodec, app.AccountKeeper, app.BankKeeper, app.FeeGrantKeeper, app.interfaceRegistry), + authzmodule.NewAppModule(appCodec, app.AuthzKeeper, app.AccountKeeper, app.BankKeeper, app.interfaceRegistry), + gov.NewAppModule(appCodec, app.GovKeeper, app.AccountKeeper, app.BankKeeper), + mint.NewAppModule(appCodec, app.MintKeeper, app.AccountKeeper), + staking.NewAppModule(appCodec, app.StakingKeeper, app.AccountKeeper, app.BankKeeper), + distr.NewAppModule(appCodec, app.DistrKeeper, app.AccountKeeper, app.BankKeeper, app.StakingKeeper), + slashing.NewAppModule(appCodec, app.SlashingKeeper, app.AccountKeeper, app.BankKeeper, app.StakingKeeper), + params.NewAppModule(app.ParamsKeeper), + evidence.NewAppModule(app.EvidenceKeeper), + wasmplus.NewAppModule(appCodec, &app.WasmKeeper, app.StakingKeeper, app.AccountKeeper, app.BankKeeper), + ibc.NewAppModule(app.IBCKeeper), + transferModule, + ) + + app.sm.RegisterStoreDecoders() + // initialize stores + app.MountKVStores(keys) + // app.MountTransientStores(tkeys) + app.MountMemoryStores(memKeys) + + anteHandler, err := wasmapp.NewAnteHandler( + wasmapp.HandlerOptions{ + HandlerOptions: ante.HandlerOptions{ + AccountKeeper: app.AccountKeeper, + BankKeeper: app.BankKeeper, + FeegrantKeeper: app.FeeGrantKeeper, + SignModeHandler: encodingConfig.TxConfig.SignModeHandler(), + SigGasConsumer: ante.DefaultSigVerificationGasConsumer, + }, + IBCKeeper: app.IBCKeeper, + WasmConfig: &wasmConfig, + TXCounterStoreKey: keys[wasmplustypes.StoreKey], + }, + ) + if err != nil { + panic(fmt.Errorf("failed to create AnteHandler: %s", err)) + } + + app.SetAnteHandler(anteHandler) + app.SetInitChainer(app.InitChainer) + app.SetBeginBlocker(app.BeginBlocker) + app.SetEndBlocker(app.EndBlocker) + + // must be before Loading version + // requires the snapshot store to be created and registered as a BaseAppOption + // see cmd/wasmd/root.go: 206 - 214 approx + if manager := app.SnapshotManager(); manager != nil { + err := manager.RegisterExtensions( + wasmkeeper.NewWasmSnapshotter(app.CommitMultiStore(), &app.WasmKeeper.Keeper), + ) + if err != nil { + panic(fmt.Errorf("failed to register snapshot extension: %s", err)) + } + } + + app.ScopedIBCKeeper = scopedIBCKeeper + app.ScopedTransferKeeper = scopedTransferKeeper + app.ScopedWasmKeeper = scopedWasmKeeper + app.ScopedICAHostKeeper = scopedICAHostKeeper + app.ScopedICAControllerKeeper = scopedICAControllerKeeper + app.ScopedInterTxKeeper = scopedInterTxKeeper + + if loadLatest { + if err := app.LoadLatestVersion(); err != nil { + tmos.Exit(fmt.Sprintf("failed to load latest version: %s", err)) + } + ctx := app.BaseApp.NewUncachedContext(true, ocproto.Header{}) + + // Initialize pinned codes in wasmvm as they are not persisted there + if err := app.WasmKeeper.InitializePinnedCodes(ctx); err != nil { + tmos.Exit(fmt.Sprintf("failed initialize pinned codes %s", err)) + } + // Initialize the keeper of bankkeeper + app.BankKeeper.(bankpluskeeper.Keeper).InitializeBankPlus(ctx) + } + + return app +} + +// Name returns the name of the App +func (app *WasmPlusApp) Name() string { return app.BaseApp.Name() } + +// ModuleManager returns instance +func (app *WasmPlusApp) ModuleManager() module.Manager { + return *app.mm +} + +// ModuleConfigurator returns instance +func (app *WasmPlusApp) ModuleConfigurator() module.Configurator { + return app.configurator +} + +// BeginBlocker application updates every begin block +func (app *WasmPlusApp) BeginBlocker(ctx sdk.Context, req abci.RequestBeginBlock) abci.ResponseBeginBlock { + return app.mm.BeginBlock(ctx, req) +} + +// EndBlocker application updates every end block +func (app *WasmPlusApp) EndBlocker(ctx sdk.Context, req abci.RequestEndBlock) abci.ResponseEndBlock { + return app.mm.EndBlock(ctx, req) +} + +// InitChainer application update at chain initialization +func (app *WasmPlusApp) InitChainer(ctx sdk.Context, req abci.RequestInitChain) abci.ResponseInitChain { + var genesisState wasmapp.GenesisState + if err := tmjson.Unmarshal(req.AppStateBytes, &genesisState); err != nil { + panic(err) + } + + app.UpgradeKeeper.SetModuleVersionMap(ctx, app.mm.GetVersionMap()) + + return app.mm.InitGenesis(ctx, app.appCodec, genesisState) +} + +// LoadHeight loads a particular height +func (app *WasmPlusApp) LoadHeight(height int64) error { + return app.LoadVersion(height) +} + +// ModuleAccountAddrs returns all the app's module account addresses. +func (app *WasmPlusApp) ModuleAccountAddrs() map[string]bool { + modAccAddrs := make(map[string]bool) + for acc := range maccPerms { + modAccAddrs[authtypes.NewModuleAddress(acc).String()] = true + } + + return modAccAddrs +} + +// BlockedAddrs returns all the app's module account addresses that are not +// allowed to receive external tokens. +func (app *WasmPlusApp) BlockedAddrs() map[string]bool { + blockedAddrs := make(map[string]bool) + for acc := range maccPerms { + blockedAddrs[authtypes.NewModuleAddress(acc).String()] = !allowedReceivingModAcc()[acc] + } + + return blockedAddrs +} + +// LegacyAmino returns legacy amino codec. +// +// NOTE: This is solely to be used for testing purposes as it may be desirable +// for modules to register their own custom testing types. +func (app *WasmPlusApp) LegacyAmino() *codec.LegacyAmino { //nolint:staticcheck + return app.legacyAmino +} + +// getSubspace returns a param subspace for a given module name. +// +// NOTE: This is solely to be used for testing purposes. +func (app *WasmPlusApp) getSubspace(moduleName string) paramstypes.Subspace { + subspace, _ := app.ParamsKeeper.GetSubspace(moduleName) + return subspace +} + +// SimulationManager implements the SimulationApp interface +func (app *WasmPlusApp) SimulationManager() *module.SimulationManager { + return app.sm +} + +// RegisterAPIRoutes registers all application module routes with the provided +// API server. +func (app *WasmPlusApp) RegisterAPIRoutes(apiSvr *api.Server, apiConfig config.APIConfig) { + clientCtx := apiSvr.ClientCtx + // Register new tx routes from grpc-gateway. + authtx.RegisterGRPCGatewayRoutes(clientCtx, apiSvr.GRPCGatewayRouter) + // Register new tendermint queries routes from grpc-gateway. + tmservice.RegisterGRPCGatewayRoutes(clientCtx, apiSvr.GRPCGatewayRouter) + + // Register node gRPC service for grpc-gateway. + nodeservice.RegisterGRPCGatewayRoutes(clientCtx, apiSvr.GRPCGatewayRouter) + + // Register legacy and grpc-gateway routes for all modules. + // ModuleBasics.RegisterRESTRoutes(clientCtx, apiSvr.Router) + wasmapp.ModuleBasics.RegisterGRPCGatewayRoutes(clientCtx, apiSvr.GRPCGatewayRouter) + + // register swagger API from root so that other applications can override easily + if apiConfig.Swagger { + RegisterSwaggerAPI(apiSvr.Router) + } +} + +// RegisterTxService implements the Application.RegisterTxService method. +func (app *WasmPlusApp) RegisterTxService(clientCtx client.Context) { + authtx.RegisterTxService(app.BaseApp.GRPCQueryRouter(), clientCtx, app.BaseApp.Simulate, app.interfaceRegistry) +} + +// RegisterTendermintService implements the Application.RegisterTendermintService method. +func (app *WasmPlusApp) RegisterTendermintService(clientCtx client.Context) { + tmservice.RegisterTendermintService(app.BaseApp.GRPCQueryRouter(), clientCtx, app.interfaceRegistry) +} + +func (app *WasmPlusApp) AppCodec() codec.Codec { + return app.appCodec +} + +func (app *WasmPlusApp) RegisterNodeService(clientCtx client.Context) { + nodeservice.RegisterNodeService(clientCtx, app.GRPCQueryRouter()) +} + +// RegisterSwaggerAPI registers swagger route with API Server +func RegisterSwaggerAPI(rtr *mux.Router) { + statikFS, err := fs.New() + if err != nil { + panic(err) + } + + staticServer := http.FileServer(statikFS) + rtr.PathPrefix("/swagger/").Handler(http.StripPrefix("/swagger/", staticServer)) +} + +// GetMaccPerms returns a copy of the module account permissions +func GetMaccPerms() map[string][]string { + dupMaccPerms := make(map[string][]string) + for k, v := range maccPerms { + dupMaccPerms[k] = v + } + return dupMaccPerms +} + +// initParamsKeeper init params keeper and its subspaces +func initParamsKeeper(appCodec codec.BinaryCodec, legacyAmino *codec.LegacyAmino, key, tkey sdk.StoreKey) paramskeeper.Keeper { + paramsKeeper := paramskeeper.NewKeeper(appCodec, legacyAmino, key, tkey) + + paramsKeeper.Subspace(authtypes.ModuleName) + paramsKeeper.Subspace(banktypes.ModuleName) + paramsKeeper.Subspace(stakingtypes.ModuleName) + paramsKeeper.Subspace(minttypes.ModuleName) + paramsKeeper.Subspace(distrtypes.ModuleName) + paramsKeeper.Subspace(slashingtypes.ModuleName) + paramsKeeper.Subspace(govtypes.ModuleName).WithKeyTable(govtypes.ParamKeyTable()) + paramsKeeper.Subspace(crisistypes.ModuleName) + paramsKeeper.Subspace(ibctransfertypes.ModuleName) + paramsKeeper.Subspace(ibchost.ModuleName) + paramsKeeper.Subspace(icahosttypes.SubModuleName) + paramsKeeper.Subspace(icacontrollertypes.SubModuleName) + paramsKeeper.Subspace(wasmplustypes.ModuleName) + + return paramsKeeper +} diff --git a/appplus/app_test.go b/appplus/app_test.go new file mode 100644 index 0000000000..6ff644e898 --- /dev/null +++ b/appplus/app_test.go @@ -0,0 +1,117 @@ +package appplus + +import ( + "encoding/json" + wasmapp "github.com/line/wasmd/app" + wasmkeeper "github.com/line/wasmd/x/wasm/keeper" + wasmtypes "github.com/line/wasmd/x/wasm/types" + wasmplustypes "github.com/line/wasmd/x/wasmplus/types" + "os" + "testing" + + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" + db "github.com/tendermint/tm-db" + + abci "github.com/line/ostracon/abci/types" + "github.com/line/ostracon/libs/log" +) + +var emptyWasmOpts []wasmkeeper.Option = nil + +func TestWasmdExport(t *testing.T) { + db := db.NewMemDB() + gapp := NewWasmApp(log.NewOCLogger(log.NewSyncWriter(os.Stdout)), db, nil, true, map[int64]bool{}, DefaultNodeHome, 0, MakeEncodingConfig(), wasmplustypes.EnableAllProposals, wasmapp.EmptyBaseAppOptions{}, emptyWasmOpts) + + genesisState := NewDefaultGenesisState() + stateBytes, err := json.MarshalIndent(genesisState, "", " ") + require.NoError(t, err) + + // Initialize the chain + gapp.InitChain( + abci.RequestInitChain{ + Validators: []abci.ValidatorUpdate{}, + AppStateBytes: stateBytes, + }, + ) + gapp.Commit() + + // Making a new app object with the db, so that initchain hasn't been called + newGapp := NewWasmApp(log.NewOCLogger(log.NewSyncWriter(os.Stdout)), db, nil, true, map[int64]bool{}, DefaultNodeHome, 0, MakeEncodingConfig(), wasmplustypes.EnableAllProposals, wasmapp.EmptyBaseAppOptions{}, emptyWasmOpts) + _, err = newGapp.ExportAppStateAndValidators(false, []string{}) + require.NoError(t, err, "ExportAppStateAndValidators should not have an error") +} + +// ensure that blocked addresses are properly set in bank keeper +func TestBlockedAddrs(t *testing.T) { + db := db.NewMemDB() + gapp := NewWasmApp(log.NewOCLogger(log.NewSyncWriter(os.Stdout)), db, nil, true, map[int64]bool{}, DefaultNodeHome, 0, MakeEncodingConfig(), wasmplustypes.EnableAllProposals, wasmapp.EmptyBaseAppOptions{}, emptyWasmOpts) + blockedAddrs := gapp.BlockedAddrs() + + for acc := range maccPerms { + //for acc := range gapp.BlockedAddrs() { + t.Run(acc, func(t *testing.T) { + addr := gapp.AccountKeeper.GetModuleAddress(acc) + if blockedAddrs[addr.String()] { + require.True(t, gapp.BankKeeper.BlockedAddr(addr), + "ensure that blocked addresses are properly set in bank keeper", + ) + } + }) + } +} + +func TestGetMaccPerms(t *testing.T) { + dup := GetMaccPerms() + require.Equal(t, maccPerms, dup, "duplicated module account permissions differed from actual module account permissions") +} + +func TestGetEnabledProposals(t *testing.T) { + cases := map[string]struct { + proposalsEnabled string + specificEnabled string + expected []wasmtypes.ProposalType + }{ + "all disabled": { + proposalsEnabled: "false", + expected: wasmtypes.DisableAllProposals, + }, + "all enabled": { + proposalsEnabled: "true", + expected: wasmplustypes.EnableAllProposals, + }, + "some enabled": { + proposalsEnabled: "okay", + specificEnabled: "StoreCode,InstantiateContract", + expected: []wasmtypes.ProposalType{wasmtypes.ProposalTypeStoreCode, wasmtypes.ProposalTypeInstantiateContract}, + }, + } + + for name, tc := range cases { + t.Run(name, func(t *testing.T) { + ProposalsEnabled = tc.proposalsEnabled + EnableSpecificProposals = tc.specificEnabled + proposals := GetEnabledProposals() + assert.Equal(t, tc.expected, proposals) + }) + } +} + +func setGenesis(gapp *WasmPlusApp) error { + genesisState := NewDefaultGenesisState() + stateBytes, err := json.MarshalIndent(genesisState, "", " ") + if err != nil { + return err + } + + // Initialize the chain + gapp.InitChain( + abci.RequestInitChain{ + Validators: []abci.ValidatorUpdate{}, + AppStateBytes: stateBytes, + }, + ) + + gapp.Commit() + return nil +} diff --git a/appplus/encoding.go b/appplus/encoding.go new file mode 100644 index 0000000000..903d83ac44 --- /dev/null +++ b/appplus/encoding.go @@ -0,0 +1,17 @@ +package appplus + +import ( + "github.com/line/lbm-sdk/std" + + "github.com/line/wasmd/app/params" +) + +// MakeEncodingConfig creates a new EncodingConfig with all modules registered +func MakeEncodingConfig() params.EncodingConfig { + encodingConfig := params.MakeEncodingConfig() + std.RegisterLegacyAminoCodec(encodingConfig.Amino) + std.RegisterInterfaces(encodingConfig.InterfaceRegistry) + ModuleBasics.RegisterLegacyAminoCodec(encodingConfig.Amino) + ModuleBasics.RegisterInterfaces(encodingConfig.InterfaceRegistry) + return encodingConfig +} diff --git a/appplus/export.go b/appplus/export.go new file mode 100644 index 0000000000..aae6694c60 --- /dev/null +++ b/appplus/export.go @@ -0,0 +1,193 @@ +package appplus + +import ( + "encoding/json" + "log" + + servertypes "github.com/line/lbm-sdk/server/types" + sdk "github.com/line/lbm-sdk/types" + slashingtypes "github.com/line/lbm-sdk/x/slashing/types" + "github.com/line/lbm-sdk/x/staking" + stakingtypes "github.com/line/lbm-sdk/x/staking/types" + ocproto "github.com/line/ostracon/proto/ostracon/types" +) + +// ExportAppStateAndValidators exports the state of the application for a genesis +// file. +func (app *WasmPlusApp) ExportAppStateAndValidators( + forZeroHeight bool, jailAllowedAddrs []string, +) (servertypes.ExportedApp, error) { + // as if they could withdraw from the start of the next block + ctx := app.NewContext(true, ocproto.Header{Height: app.LastBlockHeight()}) + + // We export at last height + 1, because that's the height at which + // Tendermint will start InitChain. + height := app.LastBlockHeight() + 1 + if forZeroHeight { + height = 0 + app.prepForZeroHeightGenesis(ctx, jailAllowedAddrs) + } + + genState := app.mm.ExportGenesis(ctx, app.appCodec) + appState, err := json.MarshalIndent(genState, "", " ") + if err != nil { + return servertypes.ExportedApp{}, err + } + + validators, err := staking.WriteValidators(ctx, app.StakingKeeper) + return servertypes.ExportedApp{ + AppState: appState, + Validators: validators, + Height: height, + ConsensusParams: app.BaseApp.GetConsensusParams(ctx), + }, err +} + +// prepare for fresh start at zero height +// NOTE zero height genesis is a temporary feature which will be deprecated +// +// in favour of export at a block height +func (app *WasmPlusApp) prepForZeroHeightGenesis(ctx sdk.Context, jailAllowedAddrs []string) { + applyAllowedAddrs := false + + // check if there is a allowed address list + if len(jailAllowedAddrs) > 0 { + applyAllowedAddrs = true + } + + allowedAddrsMap := make(map[string]bool) + + for _, addr := range jailAllowedAddrs { + _, err := sdk.ValAddressFromBech32(addr) + if err != nil { + log.Fatal(err) + } + allowedAddrsMap[addr] = true + } + + /* Just to be safe, assert the invariants on current state. */ + app.CrisisKeeper.AssertInvariants(ctx) + + /* Handle fee distribution state. */ + + // withdraw all validator commission + app.StakingKeeper.IterateValidators(ctx, func(_ int64, val stakingtypes.ValidatorI) (stop bool) { + _, _ = app.DistrKeeper.WithdrawValidatorCommission(ctx, val.GetOperator()) //nolint:errcheck + return false + }) + + // withdraw all delegator rewards + dels := app.StakingKeeper.GetAllDelegations(ctx) + for _, delegation := range dels { + valAddr, err := sdk.ValAddressFromBech32(delegation.ValidatorAddress) + if err != nil { + panic(err) + } + + delAddr, err := sdk.AccAddressFromBech32(delegation.DelegatorAddress) + if err != nil { + panic(err) + } + _, _ = app.DistrKeeper.WithdrawDelegationRewards(ctx, delAddr, valAddr) //nolint:errcheck + } + + // clear validator slash events + app.DistrKeeper.DeleteAllValidatorSlashEvents(ctx) + + // clear validator historical rewards + app.DistrKeeper.DeleteAllValidatorHistoricalRewards(ctx) + + // set context height to zero + height := ctx.BlockHeight() + ctx = ctx.WithBlockHeight(0) + + // reinitialize all validators + app.StakingKeeper.IterateValidators(ctx, func(_ int64, val stakingtypes.ValidatorI) (stop bool) { + // donate any unwithdrawn outstanding reward fraction tokens to the community pool + scraps := app.DistrKeeper.GetValidatorOutstandingRewardsCoins(ctx, val.GetOperator()) + feePool := app.DistrKeeper.GetFeePool(ctx) + feePool.CommunityPool = feePool.CommunityPool.Add(scraps...) + app.DistrKeeper.SetFeePool(ctx, feePool) + + app.DistrKeeper.Hooks().AfterValidatorCreated(ctx, val.GetOperator()) + return false + }) + + // reinitialize all delegations + for _, del := range dels { + valAddr, err := sdk.ValAddressFromBech32(del.ValidatorAddress) + if err != nil { + panic(err) + } + delAddr, err := sdk.AccAddressFromBech32(del.DelegatorAddress) + if err != nil { + panic(err) + } + app.DistrKeeper.Hooks().BeforeDelegationCreated(ctx, delAddr, valAddr) + app.DistrKeeper.Hooks().AfterDelegationModified(ctx, delAddr, valAddr) + } + + // reset context height + ctx = ctx.WithBlockHeight(height) + + /* Handle staking state. */ + + // iterate through redelegations, reset creation height + app.StakingKeeper.IterateRedelegations(ctx, func(_ int64, red stakingtypes.Redelegation) (stop bool) { + for i := range red.Entries { + red.Entries[i].CreationHeight = 0 + } + app.StakingKeeper.SetRedelegation(ctx, red) + return false + }) + + // iterate through unbonding delegations, reset creation height + app.StakingKeeper.IterateUnbondingDelegations(ctx, func(_ int64, ubd stakingtypes.UnbondingDelegation) (stop bool) { + for i := range ubd.Entries { + ubd.Entries[i].CreationHeight = 0 + } + app.StakingKeeper.SetUnbondingDelegation(ctx, ubd) + return false + }) + + // Iterate through validators by power descending, reset bond heights, and + // update bond intra-tx counters. + store := ctx.KVStore(app.keys[stakingtypes.StoreKey]) + iter := sdk.KVStoreReversePrefixIterator(store, stakingtypes.ValidatorsKey) + counter := int16(0) + + for ; iter.Valid(); iter.Next() { + addr := sdk.ValAddress(iter.Key()[1:]) + validator, found := app.StakingKeeper.GetValidator(ctx, addr) + if !found { + panic("expected validator, not found") + } + + validator.UnbondingHeight = 0 + if applyAllowedAddrs && !allowedAddrsMap[addr.String()] { + validator.Jailed = true + } + + app.StakingKeeper.SetValidator(ctx, validator) + counter++ + } + + iter.Close() + + _, err := app.StakingKeeper.ApplyAndReturnValidatorSetUpdates(ctx) + if err != nil { + log.Fatal(err) + } + + /* Handle slashing state. */ + + // reset start height on signing infos + app.SlashingKeeper.IterateValidatorSigningInfos( + ctx, + func(addr sdk.ConsAddress, info slashingtypes.ValidatorSigningInfo) (stop bool) { + info.StartHeight = 0 + app.SlashingKeeper.SetValidatorSigningInfo(ctx, addr, info) + return false + }, + ) +} diff --git a/appplus/genesis.go b/appplus/genesis.go new file mode 100644 index 0000000000..a57df9c6d9 --- /dev/null +++ b/appplus/genesis.go @@ -0,0 +1,11 @@ +package appplus + +import ( + wasmapp "github.com/line/wasmd/app" +) + +// NewDefaultGenesisState generates the default state for the application. +func NewDefaultGenesisState() wasmapp.GenesisState { + encodingConfig := wasmapp.MakeEncodingConfig() + return ModuleBasics.DefaultGenesis(encodingConfig.Marshaler) +} diff --git a/appplus/params/params.go b/appplus/params/params.go new file mode 100644 index 0000000000..ab00368c0b --- /dev/null +++ b/appplus/params/params.go @@ -0,0 +1,8 @@ +package params + +// Simulation parameter constants +const ( + GasMultiplier = "gas_multiplier" + InstanceCost = "instance_cost" + CompileCost = "compile_cost" +) diff --git a/appplus/sim_test.go b/appplus/sim_test.go new file mode 100644 index 0000000000..fa85d668fa --- /dev/null +++ b/appplus/sim_test.go @@ -0,0 +1,294 @@ +package appplus + +//import ( +// "encoding/json" +// "fmt" +// "os" +// "path/filepath" +// "testing" +// "time" +// +// "github.com/stretchr/testify/require" +// dbm "github.com/tendermint/tm-db" +// +// "github.com/line/lbm-sdk/baseapp" +// "github.com/line/lbm-sdk/codec" +// "github.com/line/lbm-sdk/simapp" +// "github.com/line/lbm-sdk/store" +// "github.com/line/lbm-sdk/store/prefix" +// sdk "github.com/line/lbm-sdk/types" +// "github.com/line/lbm-sdk/types/kv" +// "github.com/line/lbm-sdk/types/module" +// simtypes "github.com/line/lbm-sdk/types/simulation" +// authtypes "github.com/line/lbm-sdk/x/auth/types" +// authzkeeper "github.com/line/lbm-sdk/x/authz/keeper" +// banktypes "github.com/line/lbm-sdk/x/bank/types" +// capabilitytypes "github.com/line/lbm-sdk/x/capability/types" +// distrtypes "github.com/line/lbm-sdk/x/distribution/types" +// evidencetypes "github.com/line/lbm-sdk/x/evidence/types" +// "github.com/line/lbm-sdk/x/feegrant" +// govtypes "github.com/line/lbm-sdk/x/gov/types" +// ibctransfertypes "github.com/line/lbm-sdk/x/ibc/applications/transfer/types" +// ibchost "github.com/line/lbm-sdk/x/ibc/core/24-host" +// minttypes "github.com/line/lbm-sdk/x/mint/types" +// paramstypes "github.com/line/lbm-sdk/x/params/types" +// "github.com/line/lbm-sdk/x/simulation" +// slashingtypes "github.com/line/lbm-sdk/x/slashing/types" +// stakingtypes "github.com/line/lbm-sdk/x/staking/types" +// "github.com/line/ostracon/libs/log" +// ocproto "github.com/line/ostracon/proto/ostracon/types" +// +// wasmapp "github.com/line/wasmd/app" +// "github.com/line/wasmd/x/wasm" +// wasmtypes "github.com/line/wasmd/x/wasm/types" +// wasmplustypes "github.com/line/wasmd/x/wasmplus/types" +//) +// +//// Get flags every time the simulator is run +//func init() { +// simapp.GetSimulatorFlags() +//} +// +//type StoreKeysPrefixes struct { +// A sdk.StoreKey +// B sdk.StoreKey +// Prefixes [][]byte +//} +// +//// SetupSimulation wraps simapp.SetupSimulation in order to create any export directory if they do not exist yet +//func SetupSimulation(dirPrefix, dbName string) (simtypes.Config, dbm.DB, string, log.Logger, bool, error) { +// config, db, dir, logger, skip, err := simapp.SetupSimulation(dirPrefix, dbName) +// if err != nil { +// return simtypes.Config{}, nil, "", nil, false, err +// } +// +// paths := []string{config.ExportParamsPath, config.ExportStatePath, config.ExportStatsPath} +// for _, path := range paths { +// if len(path) == 0 { +// continue +// } +// +// path = filepath.Dir(path) +// if _, err := os.Stat(path); os.IsNotExist(err) { +// if err := os.MkdirAll(path, os.ModePerm); err != nil { +// panic(err) +// } +// } +// } +// +// return config, db, dir, logger, skip, err +//} +// +//// GetSimulationLog unmarshals the KVPair's Value to the corresponding type based on the +//// each's module store key and the prefix bytes of the KVPair's key. +//func GetSimulationLog(storeName string, sdr sdk.StoreDecoderRegistry, kvAs, kvBs []kv.Pair) (log string) { +// for i := 0; i < len(kvAs); i++ { +// if len(kvAs[i].Value) == 0 && len(kvBs[i].Value) == 0 { +// // skip if the value doesn't have any bytes +// continue +// } +// +// decoder, ok := sdr[storeName] +// if ok { +// log += decoder(kvAs[i], kvBs[i]) +// } else { +// log += fmt.Sprintf("store A %q => %q\nstore B %q => %q\n", kvAs[i].Key, kvAs[i].Value, kvBs[i].Key, kvBs[i].Value) +// } +// } +// +// return log +//} +// +//// fauxMerkleModeOpt returns a BaseApp option to use a dbStoreAdapter instead of +//// an IAVLStore for faster simulation speed. +//func fauxMerkleModeOpt(bapp *baseapp.BaseApp) { +// bapp.SetFauxMerkleMode() +//} +// +//func TestAppImportExport(t *testing.T) { +// config, db, dir, logger, skip, err := SetupSimulation("leveldb-app-sim", "Simulation") +// if skip { +// t.Skip("skipping application import/export simulation") +// } +// require.NoError(t, err, "simulation setup failed") +// +// defer func() { +// db.Close() +// require.NoError(t, os.RemoveAll(dir)) +// }() +// +// encConf := wasmapp.MakeEncodingConfig() +// app := NewWasmApp(logger, db, nil, true, map[int64]bool{}, dir, simapp.FlagPeriodValue, encConf, wasmplustypes.EnableAllProposals, wasmapp.EmptyBaseAppOptions{}, nil, fauxMerkleModeOpt) +// require.Equal(t, appName, app.Name()) +// +// // Run randomized simulation +// _, simParams, simErr := simulation.SimulateFromSeed( +// t, +// os.Stdout, +// app.BaseApp, +// AppStateFn(app.AppCodec(), app.SimulationManager()), +// simtypes.RandomAccounts, +// simapp.SimulationOperations(app, app.AppCodec(), config), +// app.ModuleAccountAddrs(), +// config, +// app.AppCodec(), +// ) +// +// // export state and simParams before the simulation error is checked +// err = simapp.CheckExportSimulation(app, config, simParams) +// require.NoError(t, err) +// require.NoError(t, simErr) +// +// if config.Commit { +// simapp.PrintStats(db) +// } +// +// t.Log("exporting genesis...") +// +// exported, err := app.ExportAppStateAndValidators(false, []string{}) +// require.NoError(t, err) +// +// t.Log("importing genesis...") +// +// _, newDB, newDir, _, _, err := SetupSimulation("leveldb-app-sim-2", "Simulation-2") +// require.NoError(t, err, "simulation setup failed") +// +// defer func() { +// newDB.Close() +// require.NoError(t, os.RemoveAll(newDir)) +// }() +// newApp := NewWasmApp(logger, newDB, nil, true, map[int64]bool{}, newDir, simapp.FlagPeriodValue, encConf, wasmplustypes.EnableAllProposals, wasmapp.EmptyBaseAppOptions{}, nil, fauxMerkleModeOpt) +// require.Equal(t, appName, newApp.Name()) +// +// var genesisState wasmapp.GenesisState +// err = json.Unmarshal(exported.AppState, &genesisState) +// require.NoError(t, err) +// +// ctxA := app.NewContext(true, ocproto.Header{Height: app.LastBlockHeight()}) +// ctxB := newApp.NewContext(true, ocproto.Header{Height: app.LastBlockHeight()}) +// newApp.mm.InitGenesis(ctxB, app.AppCodec(), genesisState) +// newApp.StoreConsensusParams(ctxB, exported.ConsensusParams) +// +// t.Log("comparing stores...") +// +// storeKeysPrefixes := []StoreKeysPrefixes{ +// {app.keys[authtypes.StoreKey], newApp.keys[authtypes.StoreKey], [][]byte{}}, +// { +// app.keys[stakingtypes.StoreKey], newApp.keys[stakingtypes.StoreKey], +// [][]byte{ +// stakingtypes.UnbondingQueueKey, stakingtypes.RedelegationQueueKey, stakingtypes.ValidatorQueueKey, +// stakingtypes.HistoricalInfoKey, +// }, +// }, +// {app.keys[slashingtypes.StoreKey], newApp.keys[slashingtypes.StoreKey], [][]byte{}}, +// {app.keys[minttypes.StoreKey], newApp.keys[minttypes.StoreKey], [][]byte{}}, +// {app.keys[distrtypes.StoreKey], newApp.keys[distrtypes.StoreKey], [][]byte{}}, +// {app.keys[banktypes.StoreKey], newApp.keys[banktypes.StoreKey], [][]byte{banktypes.BalancesPrefix}}, +// {app.keys[paramstypes.StoreKey], newApp.keys[paramstypes.StoreKey], [][]byte{}}, +// {app.keys[govtypes.StoreKey], newApp.keys[govtypes.StoreKey], [][]byte{}}, +// {app.keys[evidencetypes.StoreKey], newApp.keys[evidencetypes.StoreKey], [][]byte{}}, +// {app.keys[capabilitytypes.StoreKey], newApp.keys[capabilitytypes.StoreKey], [][]byte{}}, +// {app.keys[ibchost.StoreKey], newApp.keys[ibchost.StoreKey], [][]byte{}}, +// {app.keys[ibctransfertypes.StoreKey], newApp.keys[ibctransfertypes.StoreKey], [][]byte{}}, +// {app.keys[authzkeeper.StoreKey], newApp.keys[authzkeeper.StoreKey], [][]byte{}}, +// {app.keys[feegrant.StoreKey], newApp.keys[feegrant.StoreKey], [][]byte{}}, +// {app.keys[wasm.StoreKey], newApp.keys[wasm.StoreKey], [][]byte{}}, +// } +// +// // delete persistent tx counter value +// ctxA.KVStore(app.keys[wasm.StoreKey]).Delete(wasmtypes.TXCounterPrefix) +// +// // reset contract code index in source DB for comparison with dest DB +// dropContractHistory := func(s store.KVStore, keys ...[]byte) { +// for _, key := range keys { +// prefixStore := prefix.NewStore(s, key) +// iter := prefixStore.Iterator(nil, nil) +// for ; iter.Valid(); iter.Next() { +// prefixStore.Delete(iter.Key()) +// } +// iter.Close() +// } +// } +// prefixes := [][]byte{wasmtypes.ContractCodeHistoryElementPrefix, wasmtypes.ContractByCodeIDAndCreatedSecondaryIndexPrefix} +// dropContractHistory(ctxA.KVStore(app.keys[wasm.StoreKey]), prefixes...) +// dropContractHistory(ctxB.KVStore(newApp.keys[wasm.StoreKey]), prefixes...) +// +// normalizeContractInfo := func(ctx sdk.Context, app *WasmPlusApp) { +// var index uint64 +// app.WasmKeeper.IterateContractInfo(ctx, func(address sdk.AccAddress, info wasmtypes.ContractInfo) bool { +// created := &wasmtypes.AbsoluteTxPosition{ +// BlockHeight: uint64(0), +// TxIndex: index, +// } +// info.Created = created +// store := ctx.KVStore(app.keys[wasm.StoreKey]) +// store.Set(wasmtypes.GetContractAddressKey(address), app.appCodec.MustMarshal(&info)) +// index++ +// return false +// }) +// } +// normalizeContractInfo(ctxA, app) +// normalizeContractInfo(ctxB, newApp) +// // diff both stores +// for _, skp := range storeKeysPrefixes { +// storeA := ctxA.KVStore(skp.A) +// storeB := ctxB.KVStore(skp.B) +// +// failedKVAs, failedKVBs := sdk.DiffKVStores(storeA, storeB, skp.Prefixes) +// require.Equal(t, len(failedKVAs), len(failedKVBs), "unequal sets of key-values to compare") +// +// t.Logf("compared %d different key/value pairs between %s and %s\n", len(failedKVAs), skp.A, skp.B) +// require.Len(t, failedKVAs, 0, GetSimulationLog(skp.A.Name(), app.SimulationManager().StoreDecoders, failedKVAs, failedKVBs)) +// } +//} +// +//func TestFullAppSimulation(t *testing.T) { +// config, db, dir, logger, skip, err := SetupSimulation("leveldb-app-sim", "Simulation") +// if skip { +// t.Skip("skipping application simulation") +// } +// require.NoError(t, err, "simulation setup failed") +// +// defer func() { +// db.Close() +// require.NoError(t, os.RemoveAll(dir)) +// }() +// encConf := wasmapp.MakeEncodingConfig() +// app := NewWasmApp(logger, db, nil, true, map[int64]bool{}, t.TempDir(), simapp.FlagPeriodValue, +// encConf, wasm.EnableAllProposals, simapp.EmptyAppOptions{}, nil, fauxMerkleModeOpt) +// require.Equal(t, "WasmApp", app.Name()) +// +// // run randomized simulation +// _, simParams, simErr := simulation.SimulateFromSeed( +// t, +// os.Stdout, +// app.BaseApp, +// AppStateFn(app.appCodec, app.SimulationManager()), +// simtypes.RandomAccounts, // Replace with own random account function if using keys other than secp256k1 +// simapp.SimulationOperations(app, app.AppCodec(), config), +// app.ModuleAccountAddrs(), +// config, +// app.AppCodec(), +// ) +// +// // export state and simParams before the simulation error is checked +// err = simapp.CheckExportSimulation(app, config, simParams) +// require.NoError(t, err) +// require.NoError(t, simErr) +// +// if config.Commit { +// simapp.PrintStats(db) +// } +//} +// +//// AppStateFn returns the initial application state using a genesis or the simulation parameters. +//// It panics if the user provides files for both of them. +//// If a file is not given for the genesis or the sim params, it creates a randomized one. +//func AppStateFn(codec codec.Codec, manager *module.SimulationManager) simtypes.AppStateFn { +// // quick hack to setup app state genesis with our app modules +// simapp.ModuleBasics = ModuleBasics +// if simapp.FlagGenesisTimeValue == 0 { // always set to have a block time +// simapp.FlagGenesisTimeValue = time.Now().Unix() +// } +// return simapp.AppStateFn(codec, manager) +//} diff --git a/go.mod b/go.mod index 2b107208d7..5308f09f28 100644 --- a/go.mod +++ b/go.mod @@ -62,7 +62,6 @@ require ( github.com/dgraph-io/ristretto v0.1.0 // indirect github.com/dgryski/go-farm v0.0.0-20200201041132-a6ae2369ad13 // indirect github.com/dustin/go-humanize v1.0.0 // indirect - github.com/felixge/httpsnoop v1.0.1 // indirect github.com/fsnotify/fsnotify v1.6.0 // indirect github.com/go-kit/log v0.2.1 // indirect github.com/go-logfmt/logfmt v0.5.1 // indirect diff --git a/go.sum b/go.sum index ff3e95163a..9af5eb4fa7 100644 --- a/go.sum +++ b/go.sum @@ -1,16 +1,28 @@ +4d63.com/gochecknoglobals v0.1.0/go.mod h1:wfdC5ZjKSPr7CybKEcgJhUOgeAQW1+7WcyK8OvUilfo= +bazil.org/fuse v0.0.0-20160811212531-371fbbdaa898/go.mod h1:Xbm+BRKSBEpa4q4hTSxohYNQpsxXPbPry4JJWOB3LB8= +bazil.org/fuse v0.0.0-20180421153158-65cc252bf669/go.mod h1:Xbm+BRKSBEpa4q4hTSxohYNQpsxXPbPry4JJWOB3LB8= +bazil.org/fuse v0.0.0-20200407214033-5883e5a4b512/go.mod h1:FbcW6z/2VytnFDhZfumh8Ss8zxHE6qpMP5sHTRe0EaM= +bitbucket.org/creachadair/shell v0.0.6/go.mod h1:8Qqi/cYk7vPnsOePHroKXDJYmb5x7ENhtiFtfZq8K+M= +cloud.google.com/go v0.25.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= +cloud.google.com/go v0.31.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= +cloud.google.com/go v0.37.2/go.mod h1:H8IAquKe2L30IxoupDgqTaQvKSwF/c8prYHynGIWQbA= cloud.google.com/go v0.38.0/go.mod h1:990N+gfupTy94rShfmMCWGDn0LpTmnzTp2qbd1dvSRU= +cloud.google.com/go v0.39.0/go.mod h1:rVLT6fkc8chs9sfPtFc1SBH6em7n+ZoXaG+87tDISts= +cloud.google.com/go v0.43.0/go.mod h1:BOSR3VbTLkk6FDC/TcffxP4NF/FFBGA5ku+jvKOP7pg= cloud.google.com/go v0.44.1/go.mod h1:iSa0KzasP4Uvy3f1mN/7PiObzGgflwredwwASm/v6AU= cloud.google.com/go v0.44.2/go.mod h1:60680Gw3Yr4ikxnPRS/oxxkBccT6SA1yMk63TGekxKY= cloud.google.com/go v0.44.3/go.mod h1:60680Gw3Yr4ikxnPRS/oxxkBccT6SA1yMk63TGekxKY= cloud.google.com/go v0.45.1/go.mod h1:RpBamKRgapWJb87xiFSdk4g1CME7QZg3uwTez+TSTjc= cloud.google.com/go v0.46.3/go.mod h1:a6bKKbmY7er1mI7TEI4lsAkts/mkhTSZK8w33B4RAg0= cloud.google.com/go v0.50.0/go.mod h1:r9sluTvynVuxRIOHXQEHMFffphuXHOMZMycpNR5e6To= +cloud.google.com/go v0.51.0/go.mod h1:hWtGJ6gnXH+KgDv+V0zFGDvpi07n3z8ZNj3T1RW0Gcw= cloud.google.com/go v0.52.0/go.mod h1:pXajvRH/6o3+F9jDHZWQ5PbGhn+o8w9qiu/CffaVdO4= cloud.google.com/go v0.53.0/go.mod h1:fp/UouUEsRkN6ryDKNW/Upv/JBKnv6WDthjR6+vze6M= cloud.google.com/go v0.54.0/go.mod h1:1rq2OEkV3YMf6n/9ZvGWI3GWw0VoqH/1x2nd8Is/bPc= cloud.google.com/go v0.56.0/go.mod h1:jr7tqZxxKOVYizybht9+26Z/gUq7tiRzu+ACVAMbKVk= cloud.google.com/go v0.57.0/go.mod h1:oXiQ6Rzq3RAkkY7N6t3TcE6jE+CIBBbA36lwQ1JyzZs= +cloud.google.com/go v0.60.0/go.mod h1:yw2G51M9IfRboUH61Us8GqCeF1PzPblB823Mn2q2eAU= cloud.google.com/go v0.62.0/go.mod h1:jmCYTdRCQuc1PHIIJ/maLInMho30T/Y0M4hTdTShOYc= cloud.google.com/go v0.65.0/go.mod h1:O5N8zS7uWy9vkA9vayVHs65eM1ubvY4h553ofrNHObY= cloud.google.com/go v0.72.0/go.mod h1:M+5Vjvlc2wnp6tjzE102Dw08nGShTscUx2nZMufOKPI= @@ -19,129 +31,470 @@ cloud.google.com/go v0.75.0/go.mod h1:VGuuCn7PG0dwsd5XPVm2Mm3wlh3EL55/79EKB6hlPT cloud.google.com/go v0.78.0/go.mod h1:QjdrLG0uq+YwhjoVOLsS1t7TW8fs36kLs4XO5R5ECHg= cloud.google.com/go v0.79.0/go.mod h1:3bzgcEeQlzbuEAYu4mrWhKqWjmpprinYgKJLgKHnbb8= cloud.google.com/go v0.81.0/go.mod h1:mk/AM35KwGk/Nm2YSeZbxXdrNK3KZOYHmLkOqC2V6E0= +cloud.google.com/go v0.83.0/go.mod h1:Z7MJUsANfY0pYPdw0lbnivPx4/vhy/e2FEkSkF7vAVY= +cloud.google.com/go v0.84.0/go.mod h1:RazrYuxIK6Kb7YrzzhPoLmCVzl7Sup4NrbKPg8KHSUM= +cloud.google.com/go v0.87.0/go.mod h1:TpDYlFy7vuLzZMMZ+B6iRiELaY7z/gJPaqbMx6mlWcY= +cloud.google.com/go v0.90.0/go.mod h1:kRX0mNRHe0e2rC6oNakvwQqzyDmg57xJ+SZU1eT2aDQ= +cloud.google.com/go v0.93.3/go.mod h1:8utlLll2EF5XMAV15woO4lSbWQlk8rer9aLOfLh7+YI= +cloud.google.com/go v0.94.1/go.mod h1:qAlAugsXlC+JWO+Bke5vCtc9ONxjQT3drlTTnAplMW4= +cloud.google.com/go v0.97.0/go.mod h1:GF7l59pYBVlXQIBLx3a761cZ41F9bBH3JUlihCt2Udc= +cloud.google.com/go v0.98.0/go.mod h1:ua6Ush4NALrHk5QXDWnjvZHN93OuF0HfuEPq9I1X0cM= +cloud.google.com/go v0.99.0/go.mod h1:w0Xx2nLzqWJPuozYQX+hFfCSI8WioryfRDzkoI/Y2ZA= +cloud.google.com/go v0.100.2/go.mod h1:4Xra9TjzAeYHrl5+oeLlzbM2k3mjVhZh4UqTZ//w99A= +cloud.google.com/go v0.102.0/go.mod h1:oWcCzKlqJ5zgHQt9YsaeTY9KzIvjyy0ArmiBUgpQ+nc= +cloud.google.com/go v0.102.1/go.mod h1:XZ77E9qnTEnrgEOvr4xzfdX5TRo7fB4T2F4O6+34hIU= +cloud.google.com/go v0.104.0/go.mod h1:OO6xxXdJyvuJPcEPBLN9BJPD+jep5G1+2U5B5gkRYtA= +cloud.google.com/go/aiplatform v1.22.0/go.mod h1:ig5Nct50bZlzV6NvKaTwmplLLddFx0YReh9WfTO5jKw= +cloud.google.com/go/aiplatform v1.24.0/go.mod h1:67UUvRBKG6GTayHKV8DBv2RtR1t93YRu5B1P3x99mYY= +cloud.google.com/go/analytics v0.11.0/go.mod h1:DjEWCu41bVbYcKyvlws9Er60YE4a//bK6mnhWvQeFNI= +cloud.google.com/go/analytics v0.12.0/go.mod h1:gkfj9h6XRf9+TS4bmuhPEShsh3hH8PAZzm/41OOhQd4= +cloud.google.com/go/area120 v0.5.0/go.mod h1:DE/n4mp+iqVyvxHN41Vf1CR602GiHQjFPusMFW6bGR4= +cloud.google.com/go/area120 v0.6.0/go.mod h1:39yFJqWVgm0UZqWTOdqkLhjoC7uFfgXRC8g/ZegeAh0= +cloud.google.com/go/artifactregistry v1.6.0/go.mod h1:IYt0oBPSAGYj/kprzsBjZ/4LnG/zOcHyFHjWPCi6SAQ= +cloud.google.com/go/artifactregistry v1.7.0/go.mod h1:mqTOFOnGZx8EtSqK/ZWcsm/4U8B77rbcLP6ruDU2Ixk= +cloud.google.com/go/asset v1.5.0/go.mod h1:5mfs8UvcM5wHhqtSv8J1CtxxaQq3AdBxxQi2jGW/K4o= +cloud.google.com/go/asset v1.7.0/go.mod h1:YbENsRK4+xTiL+Ofoj5Ckf+O17kJtgp3Y3nn4uzZz5s= +cloud.google.com/go/asset v1.8.0/go.mod h1:mUNGKhiqIdbr8X7KNayoYvyc4HbbFO9URsjbytpUaW0= +cloud.google.com/go/assuredworkloads v1.5.0/go.mod h1:n8HOZ6pff6re5KYfBXcFvSViQjDwxFkAkmUFffJRbbY= +cloud.google.com/go/assuredworkloads v1.6.0/go.mod h1:yo2YOk37Yc89Rsd5QMVECvjaMKymF9OP+QXWlKXUkXw= +cloud.google.com/go/assuredworkloads v1.7.0/go.mod h1:z/736/oNmtGAyU47reJgGN+KVoYoxeLBoj4XkKYscNI= +cloud.google.com/go/automl v1.5.0/go.mod h1:34EjfoFGMZ5sgJ9EoLsRtdPSNZLcfflJR39VbVNS2M0= +cloud.google.com/go/automl v1.6.0/go.mod h1:ugf8a6Fx+zP0D59WLhqgTDsQI9w07o64uf/Is3Nh5p8= cloud.google.com/go/bigquery v1.0.1/go.mod h1:i/xbL2UlR5RvWAURpBYZTtm/cXjCha9lbfbpx4poX+o= cloud.google.com/go/bigquery v1.3.0/go.mod h1:PjpwJnslEMmckchkHFfq+HTD2DmtT67aNFKH1/VBDHE= cloud.google.com/go/bigquery v1.4.0/go.mod h1:S8dzgnTigyfTmLBfrtrhyYhwRxG72rYxvftPBK2Dvzc= cloud.google.com/go/bigquery v1.5.0/go.mod h1:snEHRnqQbz117VIFhE8bmtwIDY80NLUZUMb4Nv6dBIg= cloud.google.com/go/bigquery v1.7.0/go.mod h1://okPTzCYNXSlb24MZs83e2Do+h+VXtc4gLoIoXIAPc= cloud.google.com/go/bigquery v1.8.0/go.mod h1:J5hqkt3O0uAFnINi6JXValWIb1v0goeZM77hZzJN/fQ= +cloud.google.com/go/bigquery v1.42.0/go.mod h1:8dRTJxhtG+vwBKzE5OseQn/hiydoQN3EedCaOdYmxRA= +cloud.google.com/go/bigtable v1.2.0/go.mod h1:JcVAOl45lrTmQfLj7T6TxyMzIN/3FGGcFm+2xVAli2o= +cloud.google.com/go/billing v1.4.0/go.mod h1:g9IdKBEFlItS8bTtlrZdVLWSSdSyFUZKXNS02zKMOZY= +cloud.google.com/go/billing v1.5.0/go.mod h1:mztb1tBc3QekhjSgmpf/CV4LzWXLzCArwpLmP2Gm88s= +cloud.google.com/go/binaryauthorization v1.1.0/go.mod h1:xwnoWu3Y84jbuHa0zd526MJYmtnVXn0syOjaJgy4+dM= +cloud.google.com/go/binaryauthorization v1.2.0/go.mod h1:86WKkJHtRcv5ViNABtYMhhNWRrD1Vpi//uKEy7aYEfI= +cloud.google.com/go/cloudtasks v1.5.0/go.mod h1:fD92REy1x5woxkKEkLdvavGnPJGEn8Uic9nWuLzqCpY= +cloud.google.com/go/cloudtasks v1.6.0/go.mod h1:C6Io+sxuke9/KNRkbQpihnW93SWDU3uXt92nu85HkYI= +cloud.google.com/go/compute v0.1.0/go.mod h1:GAesmwr110a34z04OlxYkATPBEfVhkymfTBXtfbBFow= +cloud.google.com/go/compute v1.3.0/go.mod h1:cCZiE1NHEtai4wiufUhW8I8S1JKkAnhnQJWM7YD99wM= +cloud.google.com/go/compute v1.5.0/go.mod h1:9SMHyhJlzhlkJqrPAc839t2BZFTSk6Jdj6mkzQJeu0M= +cloud.google.com/go/compute v1.6.0/go.mod h1:T29tfhtVbq1wvAPo0E3+7vhgmkOYeXjhFvz/FMzPu0s= +cloud.google.com/go/compute v1.6.1/go.mod h1:g85FgpzFvNULZ+S8AYq87axRKuf2Kh7deLqV/jJ3thU= +cloud.google.com/go/compute v1.7.0/go.mod h1:435lt8av5oL9P3fv1OEzSbSUe+ybHXGMPQHHZWZxy9U= +cloud.google.com/go/compute v1.10.0/go.mod h1:ER5CLbMxl90o2jtNbGSbtfOpQKR0t15FOtRsugnLrlU= +cloud.google.com/go/compute v1.12.0/go.mod h1:e8yNOBcBONZU1vJKCvCoDw/4JQsA0dpM4x/6PIIOocU= +cloud.google.com/go/compute v1.12.1/go.mod h1:e8yNOBcBONZU1vJKCvCoDw/4JQsA0dpM4x/6PIIOocU= +cloud.google.com/go/compute/metadata v0.1.0/go.mod h1:Z1VN+bulIf6bt4P/C37K4DyZYZEXYonfTBHHFPO/4UU= +cloud.google.com/go/compute/metadata v0.2.0/go.mod h1:zFmK7XCadkQkj6TtorcaGlCW1hT1fIilQDwofLpJ20k= +cloud.google.com/go/compute/metadata v0.2.1/go.mod h1:jgHgmJd2RKBGzXqF5LR2EZMGxBkeanZ9wwa75XHJgOM= +cloud.google.com/go/containeranalysis v0.5.1/go.mod h1:1D92jd8gRR/c0fGMlymRgxWD3Qw9C1ff6/T7mLgVL8I= +cloud.google.com/go/containeranalysis v0.6.0/go.mod h1:HEJoiEIu+lEXM+k7+qLCci0h33lX3ZqoYFdmPcoO7s4= +cloud.google.com/go/datacatalog v1.3.0/go.mod h1:g9svFY6tuR+j+hrTw3J2dNcmI0dzmSiyOzm8kpLq0a0= +cloud.google.com/go/datacatalog v1.5.0/go.mod h1:M7GPLNQeLfWqeIm3iuiruhPzkt65+Bx8dAKvScX8jvs= +cloud.google.com/go/datacatalog v1.6.0/go.mod h1:+aEyF8JKg+uXcIdAmmaMUmZ3q1b/lKLtXCmXdnc0lbc= +cloud.google.com/go/dataflow v0.6.0/go.mod h1:9QwV89cGoxjjSR9/r7eFDqqjtvbKxAK2BaYU6PVk9UM= +cloud.google.com/go/dataflow v0.7.0/go.mod h1:PX526vb4ijFMesO1o202EaUmouZKBpjHsTlCtB4parQ= +cloud.google.com/go/dataform v0.3.0/go.mod h1:cj8uNliRlHpa6L3yVhDOBrUXH+BPAO1+KFMQQNSThKo= +cloud.google.com/go/dataform v0.4.0/go.mod h1:fwV6Y4Ty2yIFL89huYlEkwUPtS7YZinZbzzj5S9FzCE= +cloud.google.com/go/datalabeling v0.5.0/go.mod h1:TGcJ0G2NzcsXSE/97yWjIZO0bXj0KbVlINXMG9ud42I= +cloud.google.com/go/datalabeling v0.6.0/go.mod h1:WqdISuk/+WIGeMkpw/1q7bK/tFEZxsrFJOJdY2bXvTQ= +cloud.google.com/go/dataqna v0.5.0/go.mod h1:90Hyk596ft3zUQ8NkFfvICSIfHFh1Bc7C4cK3vbhkeo= +cloud.google.com/go/dataqna v0.6.0/go.mod h1:1lqNpM7rqNLVgWBJyk5NF6Uen2PHym0jtVJonplVsDA= cloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7TKLgZqpHYE= cloud.google.com/go/datastore v1.1.0/go.mod h1:umbIZjpQpHh4hmRpGhH4tLFup+FVzqBi1b3c64qFpCk= +cloud.google.com/go/datastream v1.2.0/go.mod h1:i/uTP8/fZwgATHS/XFu0TcNUhuA0twZxxQ3EyCUQMwo= +cloud.google.com/go/datastream v1.3.0/go.mod h1:cqlOX8xlyYF/uxhiKn6Hbv6WjwPPuI9W2M9SAXwaLLQ= +cloud.google.com/go/dialogflow v1.15.0/go.mod h1:HbHDWs33WOGJgn6rfzBW1Kv807BE3O1+xGbn59zZWI4= +cloud.google.com/go/dialogflow v1.16.1/go.mod h1:po6LlzGfK+smoSmTBnbkIZY2w8ffjz/RcGSS+sh1el0= +cloud.google.com/go/dialogflow v1.17.0/go.mod h1:YNP09C/kXA1aZdBgC/VtXX74G/TKn7XVCcVumTflA+8= +cloud.google.com/go/documentai v1.7.0/go.mod h1:lJvftZB5NRiFSX4moiye1SMxHx0Bc3x1+p9e/RfXYiU= +cloud.google.com/go/documentai v1.8.0/go.mod h1:xGHNEB7CtsnySCNrCFdCyyMz44RhFEEX2Q7UD0c5IhU= +cloud.google.com/go/domains v0.6.0/go.mod h1:T9Rz3GasrpYk6mEGHh4rymIhjlnIuB4ofT1wTxDeT4Y= +cloud.google.com/go/domains v0.7.0/go.mod h1:PtZeqS1xjnXuRPKE/88Iru/LdfoRyEHYA9nFQf4UKpg= +cloud.google.com/go/edgecontainer v0.1.0/go.mod h1:WgkZ9tp10bFxqO8BLPqv2LlfmQF1X8lZqwW4r1BTajk= +cloud.google.com/go/edgecontainer v0.2.0/go.mod h1:RTmLijy+lGpQ7BXuTDa4C4ssxyXT34NIuHIgKuP4s5w= cloud.google.com/go/firestore v1.1.0/go.mod h1:ulACoGHTpvq5r8rxGJ4ddJZBZqakUQqClKRT5SZwBmk= +cloud.google.com/go/firestore v1.6.1/go.mod h1:asNXNOzBdyVQmEU+ggO8UPodTkEVFW5Qx+rwHnAz+EY= +cloud.google.com/go/firestore v1.8.0/go.mod h1:r3KB8cAdRIe8znzoPWLw8S6gpDVd9treohhn8b09424= +cloud.google.com/go/functions v1.6.0/go.mod h1:3H1UA3qiIPRWD7PeZKLvHZ9SaQhR26XIJcC0A5GbvAk= +cloud.google.com/go/functions v1.7.0/go.mod h1:+d+QBcWM+RsrgZfV9xo6KfA1GlzJfxcfZcRPEhDDfzg= +cloud.google.com/go/gaming v1.5.0/go.mod h1:ol7rGcxP/qHTRQE/RO4bxkXq+Fix0j6D4LFPzYTIrDM= +cloud.google.com/go/gaming v1.6.0/go.mod h1:YMU1GEvA39Qt3zWGyAVA9bpYz/yAhTvaQ1t2sK4KPUA= +cloud.google.com/go/gkeconnect v0.5.0/go.mod h1:c5lsNAg5EwAy7fkqX/+goqFsU1Da/jQFqArp+wGNr/o= +cloud.google.com/go/gkeconnect v0.6.0/go.mod h1:Mln67KyU/sHJEBY8kFZ0xTeyPtzbq9StAVvEULYK16A= +cloud.google.com/go/gkehub v0.9.0/go.mod h1:WYHN6WG8w9bXU0hqNxt8rm5uxnk8IH+lPY9J2TV7BK0= +cloud.google.com/go/gkehub v0.10.0/go.mod h1:UIPwxI0DsrpsVoWpLB0stwKCP+WFVG9+y977wO+hBH0= +cloud.google.com/go/grafeas v0.2.0/go.mod h1:KhxgtF2hb0P191HlY5besjYm6MqTSTj3LSI+M+ByZHc= +cloud.google.com/go/iam v0.3.0/go.mod h1:XzJPvDayI+9zsASAFO68Hk07u3z+f+JrT2xXNdp4bnY= +cloud.google.com/go/language v1.4.0/go.mod h1:F9dRpNFQmJbkaop6g0JhSBXCNlO90e1KWx5iDdxbWic= +cloud.google.com/go/language v1.6.0/go.mod h1:6dJ8t3B+lUYfStgls25GusK04NLh3eDLQnWM3mdEbhI= +cloud.google.com/go/lifesciences v0.5.0/go.mod h1:3oIKy8ycWGPUyZDR/8RNnTOYevhaMLqh5vLUXs9zvT8= +cloud.google.com/go/lifesciences v0.6.0/go.mod h1:ddj6tSX/7BOnhxCSd3ZcETvtNr8NZ6t/iPhY2Tyfu08= +cloud.google.com/go/mediatranslation v0.5.0/go.mod h1:jGPUhGTybqsPQn91pNXw0xVHfuJ3leR1wj37oU3y1f4= +cloud.google.com/go/mediatranslation v0.6.0/go.mod h1:hHdBCTYNigsBxshbznuIMFNe5QXEowAuNmmC7h8pu5w= +cloud.google.com/go/memcache v1.4.0/go.mod h1:rTOfiGZtJX1AaFUrOgsMHX5kAzaTQ8azHiuDoTPzNsE= +cloud.google.com/go/memcache v1.5.0/go.mod h1:dk3fCK7dVo0cUU2c36jKb4VqKPS22BTkf81Xq617aWM= +cloud.google.com/go/metastore v1.5.0/go.mod h1:2ZNrDcQwghfdtCwJ33nM0+GrBGlVuh8rakL3vdPY3XY= +cloud.google.com/go/metastore v1.6.0/go.mod h1:6cyQTls8CWXzk45G55x57DVQ9gWg7RiH65+YgPsNh9s= +cloud.google.com/go/networkconnectivity v1.4.0/go.mod h1:nOl7YL8odKyAOtzNX73/M5/mGZgqqMeryi6UPZTk/rA= +cloud.google.com/go/networkconnectivity v1.5.0/go.mod h1:3GzqJx7uhtlM3kln0+x5wyFvuVH1pIBJjhCpjzSt75o= +cloud.google.com/go/networksecurity v0.5.0/go.mod h1:xS6fOCoqpVC5zx15Z/MqkfDwH4+m/61A3ODiDV1xmiQ= +cloud.google.com/go/networksecurity v0.6.0/go.mod h1:Q5fjhTr9WMI5mbpRYEbiexTzROf7ZbDzvzCrNl14nyU= +cloud.google.com/go/notebooks v1.2.0/go.mod h1:9+wtppMfVPUeJ8fIWPOq1UnATHISkGXGqTkxeieQ6UY= +cloud.google.com/go/notebooks v1.3.0/go.mod h1:bFR5lj07DtCPC7YAAJ//vHskFBxA5JzYlH68kXVdk34= +cloud.google.com/go/osconfig v1.7.0/go.mod h1:oVHeCeZELfJP7XLxcBGTMBvRO+1nQ5tFG9VQTmYS2Fs= +cloud.google.com/go/osconfig v1.8.0/go.mod h1:EQqZLu5w5XA7eKizepumcvWx+m8mJUhEwiPqWiZeEdg= +cloud.google.com/go/oslogin v1.4.0/go.mod h1:YdgMXWRaElXz/lDk1Na6Fh5orF7gvmJ0FGLIs9LId4E= +cloud.google.com/go/oslogin v1.5.0/go.mod h1:D260Qj11W2qx/HVF29zBg+0fd6YCSjSqLUkY/qEenQU= +cloud.google.com/go/phishingprotection v0.5.0/go.mod h1:Y3HZknsK9bc9dMi+oE8Bim0lczMU6hrX0UpADuMefr0= +cloud.google.com/go/phishingprotection v0.6.0/go.mod h1:9Y3LBLgy0kDTcYET8ZH3bq/7qni15yVUoAxiFxnlSUA= +cloud.google.com/go/privatecatalog v0.5.0/go.mod h1:XgosMUvvPyxDjAVNDYxJ7wBW8//hLDDYmnsNcMGq1K0= +cloud.google.com/go/privatecatalog v0.6.0/go.mod h1:i/fbkZR0hLN29eEWiiwue8Pb+GforiEIBnV9yrRUOKI= cloud.google.com/go/pubsub v1.0.1/go.mod h1:R0Gpsv3s54REJCy4fxDixWD93lHJMoZTyQ2kNxGRt3I= cloud.google.com/go/pubsub v1.1.0/go.mod h1:EwwdRX2sKPjnvnqCa270oGRyludottCI76h+R3AArQw= cloud.google.com/go/pubsub v1.2.0/go.mod h1:jhfEVHT8odbXTkndysNHCcx0awwzvfOlguIAii9o8iA= cloud.google.com/go/pubsub v1.3.1/go.mod h1:i+ucay31+CNRpDW4Lu78I4xXG+O1r/MAHgjpRVR+TSU= +cloud.google.com/go/pubsub v1.5.0/go.mod h1:ZEwJccE3z93Z2HWvstpri00jOg7oO4UZDtKhwDwqF0w= +cloud.google.com/go/recaptchaenterprise v1.3.1/go.mod h1:OdD+q+y4XGeAlxRaMn1Y7/GveP6zmq76byL6tjPE7d4= +cloud.google.com/go/recaptchaenterprise/v2 v2.1.0/go.mod h1:w9yVqajwroDNTfGuhmOjPDN//rZGySaf6PtFVcSCa7o= +cloud.google.com/go/recaptchaenterprise/v2 v2.2.0/go.mod h1:/Zu5jisWGeERrd5HnlS3EUGb/D335f9k51B/FVil0jk= +cloud.google.com/go/recaptchaenterprise/v2 v2.3.0/go.mod h1:O9LwGCjrhGHBQET5CA7dd5NwwNQUErSgEDit1DLNTdo= +cloud.google.com/go/recommendationengine v0.5.0/go.mod h1:E5756pJcVFeVgaQv3WNpImkFP8a+RptV6dDLGPILjvg= +cloud.google.com/go/recommendationengine v0.6.0/go.mod h1:08mq2umu9oIqc7tDy8sx+MNJdLG0fUi3vaSVbztHgJ4= +cloud.google.com/go/recommender v1.5.0/go.mod h1:jdoeiBIVrJe9gQjwd759ecLJbxCDED4A6p+mqoqDvTg= +cloud.google.com/go/recommender v1.6.0/go.mod h1:+yETpm25mcoiECKh9DEScGzIRyDKpZ0cEhWGo+8bo+c= +cloud.google.com/go/redis v1.7.0/go.mod h1:V3x5Jq1jzUcg+UNsRvdmsfuFnit1cfe3Z/PGyq/lm4Y= +cloud.google.com/go/redis v1.8.0/go.mod h1:Fm2szCDavWzBk2cDKxrkmWBqoCiL1+Ctwq7EyqBCA/A= +cloud.google.com/go/retail v1.8.0/go.mod h1:QblKS8waDmNUhghY2TI9O3JLlFk8jybHeV4BF19FrE4= +cloud.google.com/go/retail v1.9.0/go.mod h1:g6jb6mKuCS1QKnH/dpu7isX253absFl6iE92nHwlBUY= +cloud.google.com/go/scheduler v1.4.0/go.mod h1:drcJBmxF3aqZJRhmkHQ9b3uSSpQoltBPGPxGAWROx6s= +cloud.google.com/go/scheduler v1.5.0/go.mod h1:ri073ym49NW3AfT6DZi21vLZrG07GXr5p3H1KxN5QlI= +cloud.google.com/go/secretmanager v1.6.0/go.mod h1:awVa/OXF6IiyaU1wQ34inzQNc4ISIDIrId8qE5QGgKA= +cloud.google.com/go/security v1.5.0/go.mod h1:lgxGdyOKKjHL4YG3/YwIL2zLqMFCKs0UbQwgyZmfJl4= +cloud.google.com/go/security v1.7.0/go.mod h1:mZklORHl6Bg7CNnnjLH//0UlAlaXqiG7Lb9PsPXLfD0= +cloud.google.com/go/security v1.8.0/go.mod h1:hAQOwgmaHhztFhiQ41CjDODdWP0+AE1B3sX4OFlq+GU= +cloud.google.com/go/securitycenter v1.13.0/go.mod h1:cv5qNAqjY84FCN6Y9z28WlkKXyWsgLO832YiWwkCWcU= +cloud.google.com/go/securitycenter v1.14.0/go.mod h1:gZLAhtyKv85n52XYWt6RmeBdydyxfPeTrpToDPw4Auc= +cloud.google.com/go/servicedirectory v1.4.0/go.mod h1:gH1MUaZCgtP7qQiI+F+A+OpeKF/HQWgtAddhTbhL2bs= +cloud.google.com/go/servicedirectory v1.5.0/go.mod h1:QMKFL0NUySbpZJ1UZs3oFAmdvVxhhxB6eJ/Vlp73dfg= +cloud.google.com/go/spanner v1.7.0/go.mod h1:sd3K2gZ9Fd0vMPLXzeCrF6fq4i63Q7aTLW/lBIfBkIk= +cloud.google.com/go/speech v1.6.0/go.mod h1:79tcr4FHCimOp56lwC01xnt/WPJZc4v3gzyT7FoBkCM= +cloud.google.com/go/speech v1.7.0/go.mod h1:KptqL+BAQIhMsj1kOP2la5DSEEerPDuOP/2mmkhHhZQ= cloud.google.com/go/storage v1.0.0/go.mod h1:IhtSnM/ZTZV8YYJWCY8RULGVqBDmpoyjwiyrjsg+URw= cloud.google.com/go/storage v1.5.0/go.mod h1:tpKbwo567HUNpVclU5sGELwQWBDZ8gh0ZeosJ0Rtdos= cloud.google.com/go/storage v1.6.0/go.mod h1:N7U0C8pVQ/+NIKOBQyamJIeKQKkZ+mxpohlUTyfDhBk= cloud.google.com/go/storage v1.8.0/go.mod h1:Wv1Oy7z6Yz3DshWRJFhqM/UCfaWIRTdp0RXyy7KQOVs= cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9ullr3+Kg0= cloud.google.com/go/storage v1.14.0/go.mod h1:GrKmX003DSIwi9o29oFT7YDnHYwZoctc3fOKtUw0Xmo= +cloud.google.com/go/storage v1.22.1/go.mod h1:S8N1cAStu7BOeFfE8KAQzmyyLkK8p/vmRq6kuBTW58Y= +cloud.google.com/go/storage v1.23.0/go.mod h1:vOEEDNFnciUMhBeT6hsJIn3ieU5cFRmzeLgDvXzfIXc= +cloud.google.com/go/talent v1.1.0/go.mod h1:Vl4pt9jiHKvOgF9KoZo6Kob9oV4lwd/ZD5Cto54zDRw= +cloud.google.com/go/talent v1.2.0/go.mod h1:MoNF9bhFQbiJ6eFD3uSsg0uBALw4n4gaCaEjBw9zo8g= +cloud.google.com/go/videointelligence v1.6.0/go.mod h1:w0DIDlVRKtwPCn/C4iwZIJdvC69yInhW0cfi+p546uU= +cloud.google.com/go/videointelligence v1.7.0/go.mod h1:k8pI/1wAhjznARtVT9U1llUaFNPh7muw8QyOUpavru4= +cloud.google.com/go/vision v1.2.0/go.mod h1:SmNwgObm5DpFBme2xpyOyasvBc1aPdjvMk2bBk0tKD0= +cloud.google.com/go/vision/v2 v2.2.0/go.mod h1:uCdV4PpN1S0jyCyq8sIM42v2Y6zOLkZs+4R9LrGYwFo= +cloud.google.com/go/vision/v2 v2.3.0/go.mod h1:UO61abBx9QRMFkNBbf1D8B1LXdS2cGiiCRx0vSpZoUo= +cloud.google.com/go/webrisk v1.4.0/go.mod h1:Hn8X6Zr+ziE2aNd8SliSDWpEnSS1u4R9+xXZmFiHmGE= +cloud.google.com/go/webrisk v1.5.0/go.mod h1:iPG6fr52Tv7sGk0H6qUFzmL3HHZev1htXuWDEEsqMTg= +cloud.google.com/go/workflows v1.6.0/go.mod h1:6t9F5h/unJz41YqfBmqSASJSXccBLtD1Vwf+KmJENM0= +cloud.google.com/go/workflows v1.7.0/go.mod h1:JhSrZuVZWuiDfKEFxU0/F1PQjmpnpcoISEXH2bcHC3M= +code.gitea.io/sdk/gitea v0.12.0/go.mod h1:z3uwDV/b9Ls47NGukYM9XhnHtqPh/J+t40lsUrR6JDY= +collectd.org v0.3.0/go.mod h1:A/8DzQBkF6abtvrT2j/AU/4tiBgJWYyh0y/oB/4MlWE= +contrib.go.opencensus.io/exporter/aws v0.0.0-20181029163544-2befc13012d0/go.mod h1:uu1P0UCM/6RbsMrgPa98ll8ZcHM858i/AD06a9aLRCA= +contrib.go.opencensus.io/exporter/ocagent v0.5.0/go.mod h1:ImxhfLRpxoYiSq891pBrLVhN+qmP8BTVvdH2YLs7Gl0= +contrib.go.opencensus.io/exporter/stackdriver v0.12.1/go.mod h1:iwB6wGarfphGGe/e5CWqyUk/cLzKnWsOKPVW3no6OTw= +contrib.go.opencensus.io/exporter/stackdriver v0.13.4/go.mod h1:aXENhDJ1Y4lIg4EUaVTwzvYETVNZk10Pu26tevFKLUc= +contrib.go.opencensus.io/integrations/ocsql v0.1.4/go.mod h1:8DsSdjz3F+APR+0z0WkU1aRorQCFfRxvqjUUPMbF3fE= +contrib.go.opencensus.io/resource v0.1.1/go.mod h1:F361eGI91LCmW1I/Saf+rX0+OFcigGlFvXwEGEnkRLA= dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= filippo.io/edwards25519 v1.0.0-beta.2/go.mod h1:X+pm78QAUPtFLi1z9PYIlS/bdDnvbCOGKtZ+ACWEf7o= -filippo.io/edwards25519 v1.0.0-rc.1 h1:m0VOOB23frXZvAOK44usCgLWvtsxIoMCTBGJZlpmGfU= filippo.io/edwards25519 v1.0.0-rc.1/go.mod h1:N1IkdkCkiLB6tki+MYJoSx2JTY9NUlxZE7eHn5EwJns= -github.com/99designs/go-keychain v0.0.0-20191008050251-8e49817e8af4 h1:/vQbFIOMbk2FiG/kXiLl8BRyzTWDw7gX/Hz7Dd5eDMs= +gioui.org v0.0.0-20210308172011-57750fc8a0a6/go.mod h1:RSH6KIUZ0p2xy5zHDxgAM4zumjgTw83q2ge/PI+yyw8= +git.apache.org/thrift.git v0.0.0-20180902110319-2566ecd5d999/go.mod h1:fPE2ZNJGynbRyZ4dJvy6G277gSllfV2HJqblrnkyeyg= +git.apache.org/thrift.git v0.12.0/go.mod h1:fPE2ZNJGynbRyZ4dJvy6G277gSllfV2HJqblrnkyeyg= +git.sr.ht/~sbinet/gg v0.3.1/go.mod h1:KGYtlADtqsqANL9ueOFkWymvzUvLMQllU5Ixo+8v3pc= +git.sr.ht/~sircmpwn/getopt v0.0.0-20191230200459-23622cc906b3/go.mod h1:wMEGFFFNuPos7vHmWXfszqImLppbc0wEhh6JBfJIUgw= +git.sr.ht/~sircmpwn/go-bare v0.0.0-20210406120253-ab86bc2846d9/go.mod h1:BVJwbDfVjCjoFiKrhkei6NdGcZYpkDkdyCdg1ukytRA= github.com/99designs/go-keychain v0.0.0-20191008050251-8e49817e8af4/go.mod h1:hN7oaIRCjzsZ2dE+yG5k+rsdt3qcwykqK6HVGcKwsw4= github.com/99designs/keyring v1.1.6/go.mod h1:16e0ds7LGQQcT59QqkTg72Hh5ShM51Byv5PEmW6uoRU= -github.com/99designs/keyring v1.2.1 h1:tYLp1ULvO7i3fI5vE21ReQuj99QFSs7lGm0xWyJo87o= github.com/99designs/keyring v1.2.1/go.mod h1:fc+wB5KTk9wQ9sDx0kFXB3A0MaeGHM9AwRStKOQ5vOA= +github.com/Abirdcfly/dupword v0.0.7/go.mod h1:K/4M1kj+Zh39d2aotRwypvasonOyAMH1c/IZJzE0dmk= +github.com/AdaLogics/go-fuzz-headers v0.0.0-20210715213245-6c3934b029d8/go.mod h1:CzsSbkDixRphAF5hS6wbMKq0eI6ccJRb7/A0M6JBnwg= +github.com/AkihiroSuda/containerd-fuse-overlayfs v1.0.0/go.mod h1:0mMDvQFeLbbn1Wy8P2j3hwFhqBq+FKn8OZPno8WLmp8= +github.com/Antonboom/errname v0.1.6/go.mod h1:7lz79JAnuoMNDAWE9MeeIr1/c/VpSUWatBv2FH9NYpI= +github.com/Antonboom/errname v0.1.7/go.mod h1:g0ONh16msHIPgJSGsecu1G/dcF2hlYR/0SddnIAGavU= +github.com/Antonboom/nilnil v0.1.1/go.mod h1:L1jBqoWM7AOeTD+tSquifKSesRHs4ZdaxvZR+xdJEaI= +github.com/Azure/azure-amqp-common-go/v2 v2.1.0/go.mod h1:R8rea+gJRuJR6QxTir/XuEd+YuKoUiazDC/N96FiDEU= github.com/Azure/azure-pipeline-go v0.2.1/go.mod h1:UGSo8XybXnIGZ3epmeBw7Jdz+HiUVpqIlpz/HKHylF4= github.com/Azure/azure-pipeline-go v0.2.2/go.mod h1:4rQ/NZncSvGqNkkOsNpOU1tgoNuIlp9AfUH5G1tvCHc= +github.com/Azure/azure-sdk-for-go v16.2.1+incompatible/go.mod h1:9XXNKU+eRnpl9moKnB4QOLf1HestfXbmab5FXxiDBjc= +github.com/Azure/azure-sdk-for-go v19.1.1+incompatible/go.mod h1:9XXNKU+eRnpl9moKnB4QOLf1HestfXbmab5FXxiDBjc= +github.com/Azure/azure-sdk-for-go v29.0.0+incompatible/go.mod h1:9XXNKU+eRnpl9moKnB4QOLf1HestfXbmab5FXxiDBjc= +github.com/Azure/azure-sdk-for-go v30.1.0+incompatible/go.mod h1:9XXNKU+eRnpl9moKnB4QOLf1HestfXbmab5FXxiDBjc= +github.com/Azure/azure-sdk-for-go v35.0.0+incompatible/go.mod h1:9XXNKU+eRnpl9moKnB4QOLf1HestfXbmab5FXxiDBjc= +github.com/Azure/azure-sdk-for-go v38.0.0+incompatible/go.mod h1:9XXNKU+eRnpl9moKnB4QOLf1HestfXbmab5FXxiDBjc= +github.com/Azure/azure-sdk-for-go v42.3.0+incompatible/go.mod h1:9XXNKU+eRnpl9moKnB4QOLf1HestfXbmab5FXxiDBjc= +github.com/Azure/azure-sdk-for-go/sdk/azcore v0.19.0/go.mod h1:h6H6c8enJmmocHUbLiiGY6sx7f9i+X3m1CHdd5c6Rdw= +github.com/Azure/azure-sdk-for-go/sdk/azcore v0.21.1/go.mod h1:fBF9PQNqB8scdgpZ3ufzaLntG0AG7C1WjPMsiFOmfHM= +github.com/Azure/azure-sdk-for-go/sdk/azidentity v0.11.0/go.mod h1:HcM1YX14R7CJcghJGOYCgdezslRSVzqwLf/q+4Y2r/0= +github.com/Azure/azure-sdk-for-go/sdk/internal v0.7.0/go.mod h1:yqy467j36fJxcRV2TzfVZ1pCb5vxm4BtZPUdYWe/Xo8= +github.com/Azure/azure-sdk-for-go/sdk/internal v0.8.3/go.mod h1:KLF4gFr6DcKFZwSuH8w8yEK6DpFl3LP5rhdvAb7Yz5I= +github.com/Azure/azure-sdk-for-go/sdk/storage/azblob v0.3.0/go.mod h1:tPaiy8S5bQ+S5sOiDlINkp7+Ef339+Nz5L5XO+cnOHo= +github.com/Azure/azure-service-bus-go v0.9.1/go.mod h1:yzBx6/BUGfjfeqbRZny9AQIbIe3AcV9WZbAdpkoXOa0= github.com/Azure/azure-storage-blob-go v0.7.0/go.mod h1:f9YQKtsG1nMisotuTPpO0tjNuEjKRYAcJU8/ydDI++4= +github.com/Azure/azure-storage-blob-go v0.8.0/go.mod h1:lPI3aLPpuLTeUwh1sViKXFxwl2B6teiRqI0deQUvsw0= github.com/Azure/go-ansiterm v0.0.0-20170929234023-d6e3b3328b78/go.mod h1:LmzpDX56iTiv29bbRTIsUNlaFfuhWRQBWjQdVyAevI8= -github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1 h1:UQHMgLO+TxOElx5B5HZ4hJQsoJ/PvUvKRhJHDQXO8P8= +github.com/Azure/go-ansiterm v0.0.0-20210608223527-2377c96fe795/go.mod h1:LmzpDX56iTiv29bbRTIsUNlaFfuhWRQBWjQdVyAevI8= github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1/go.mod h1:xomTg63KZ2rFqZQzSB4Vz2SUXa1BpHTVz9L5PTmPC4E= +github.com/Azure/go-autorest v10.8.1+incompatible/go.mod h1:r+4oMnoxhatjLLJ6zxSWATqVooLgysK6ZNox3g/xq24= +github.com/Azure/go-autorest v10.15.5+incompatible/go.mod h1:r+4oMnoxhatjLLJ6zxSWATqVooLgysK6ZNox3g/xq24= +github.com/Azure/go-autorest v12.0.0+incompatible/go.mod h1:r+4oMnoxhatjLLJ6zxSWATqVooLgysK6ZNox3g/xq24= +github.com/Azure/go-autorest v14.1.1+incompatible/go.mod h1:r+4oMnoxhatjLLJ6zxSWATqVooLgysK6ZNox3g/xq24= +github.com/Azure/go-autorest v14.2.0+incompatible/go.mod h1:r+4oMnoxhatjLLJ6zxSWATqVooLgysK6ZNox3g/xq24= github.com/Azure/go-autorest/autorest v0.9.0/go.mod h1:xyHB1BMZT0cuDHU7I0+g046+BFDTQ8rEZB0s4Yfa6bI= +github.com/Azure/go-autorest/autorest v0.9.3/go.mod h1:GsRuLYvwzLjjjRoWEIyMUaYq8GNUx2nRB378IPt/1p0= +github.com/Azure/go-autorest/autorest v0.9.6/go.mod h1:/FALq9T/kS7b5J5qsQ+RSTUdAmGFqi0vUdVNNx8q630= +github.com/Azure/go-autorest/autorest v0.10.2/go.mod h1:/FALq9T/kS7b5J5qsQ+RSTUdAmGFqi0vUdVNNx8q630= +github.com/Azure/go-autorest/autorest v0.11.1/go.mod h1:JFgpikqFJ/MleTTxwepExTKnFUKKszPS8UavbQYUMuw= +github.com/Azure/go-autorest/autorest v0.11.18/go.mod h1:dSiJPy22c3u0OtOKDNttNgqpNFY/GeWa7GH/Pz56QRA= github.com/Azure/go-autorest/autorest/adal v0.5.0/go.mod h1:8Z9fGy2MpX0PvDjB1pEgQTmVqjGhiHBW7RJJEciWzS0= github.com/Azure/go-autorest/autorest/adal v0.8.0/go.mod h1:Z6vX6WXXuyieHAXwMj0S6HY6e6wcHn37qQMBQlvY3lc= +github.com/Azure/go-autorest/autorest/adal v0.8.1/go.mod h1:ZjhuQClTqx435SRJ2iMlOxPYt3d2C/T/7TiQCVZSn3Q= +github.com/Azure/go-autorest/autorest/adal v0.8.2/go.mod h1:ZjhuQClTqx435SRJ2iMlOxPYt3d2C/T/7TiQCVZSn3Q= +github.com/Azure/go-autorest/autorest/adal v0.8.3/go.mod h1:ZjhuQClTqx435SRJ2iMlOxPYt3d2C/T/7TiQCVZSn3Q= +github.com/Azure/go-autorest/autorest/adal v0.9.0/go.mod h1:/c022QCutn2P7uY+/oQWWNcK9YU+MH96NgK+jErpbcg= +github.com/Azure/go-autorest/autorest/adal v0.9.5/go.mod h1:B7KF7jKIeC9Mct5spmyCB/A8CG/sEz1vwIRGv/bbw7A= +github.com/Azure/go-autorest/autorest/adal v0.9.13/go.mod h1:W/MM4U6nLxnIskrw4UwWzlHfGjwUS50aOsc/I3yuU8M= +github.com/Azure/go-autorest/autorest/azure/auth v0.4.2/go.mod h1:90gmfKdlmKgfjUpnCEpOJzsUEjrWDSLwHIG73tSXddM= +github.com/Azure/go-autorest/autorest/azure/cli v0.3.1/go.mod h1:ZG5p860J94/0kI9mNJVoIoLgXcirM2gF5i2kWloofxw= github.com/Azure/go-autorest/autorest/date v0.1.0/go.mod h1:plvfp3oPSKwf2DNjlBjWF/7vwR+cUD/ELuzDCXwHUVA= github.com/Azure/go-autorest/autorest/date v0.2.0/go.mod h1:vcORJHLJEh643/Ioh9+vPmf1Ij9AEBM5FuBIXLmIy0g= +github.com/Azure/go-autorest/autorest/date v0.3.0/go.mod h1:BI0uouVdmngYNUzGWeSYnokU+TrmwEsOqdt8Y6sso74= github.com/Azure/go-autorest/autorest/mocks v0.1.0/go.mod h1:OTyCOPRA2IgIlWxVYxBee2F5Gr4kF2zd2J5cFRaIDN0= github.com/Azure/go-autorest/autorest/mocks v0.2.0/go.mod h1:OTyCOPRA2IgIlWxVYxBee2F5Gr4kF2zd2J5cFRaIDN0= github.com/Azure/go-autorest/autorest/mocks v0.3.0/go.mod h1:a8FDP3DYzQ4RYfVAxAN3SVSiiO77gL2j2ronKKP0syM= +github.com/Azure/go-autorest/autorest/mocks v0.4.0/go.mod h1:LTp+uSrOhSkaKrUy935gNZuuIPPVsHlr9DSOxSayd+k= +github.com/Azure/go-autorest/autorest/mocks v0.4.1/go.mod h1:LTp+uSrOhSkaKrUy935gNZuuIPPVsHlr9DSOxSayd+k= +github.com/Azure/go-autorest/autorest/to v0.2.0/go.mod h1:GunWKJp1AEqgMaGLV+iocmRAJWqST1wQYhyyjXJ3SJc= +github.com/Azure/go-autorest/autorest/to v0.3.0/go.mod h1:MgwOyqaIuKdG4TL/2ywSsIWKAfJfgHDo8ObuUk3t5sA= +github.com/Azure/go-autorest/autorest/validation v0.1.0/go.mod h1:Ha3z/SqBeaalWQvokg3NZAlQTalVMtOIAs1aGK7G6u8= +github.com/Azure/go-autorest/autorest/validation v0.2.0/go.mod h1:3EEqHnBxQGHXRYq3HT1WyXAvT7LLY3tl70hw6tQIbjI= github.com/Azure/go-autorest/logger v0.1.0/go.mod h1:oExouG+K6PryycPJfVSxi/koC6LSNgds39diKLz7Vrc= +github.com/Azure/go-autorest/logger v0.2.0/go.mod h1:T9E3cAhj2VqvPOtCYAvby9aBXkZmbF5NWuPV8+WeEW8= +github.com/Azure/go-autorest/logger v0.2.1/go.mod h1:T9E3cAhj2VqvPOtCYAvby9aBXkZmbF5NWuPV8+WeEW8= github.com/Azure/go-autorest/tracing v0.5.0/go.mod h1:r/s2XiOKccPW3HrqB+W0TQzfbtp2fGCgRFtBroKn4Dk= +github.com/Azure/go-autorest/tracing v0.6.0/go.mod h1:+vhtPC754Xsa23ID7GlGsrdKBpUA79WCAKPPZVC2DeU= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= +github.com/BurntSushi/toml v0.4.1/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ= +github.com/BurntSushi/toml v1.1.0/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ= +github.com/BurntSushi/toml v1.2.0/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ= +github.com/BurntSushi/toml v1.2.1/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ= github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= -github.com/ChainSafe/go-schnorrkel v0.0.0-20200405005733-88cbf1b4c40d h1:nalkkPQcITbvhmL4+C4cKA87NW0tfm3Kl9VXRoPywFg= github.com/ChainSafe/go-schnorrkel v0.0.0-20200405005733-88cbf1b4c40d/go.mod h1:URdX5+vg25ts3aCh8H5IFZybJYKWhJHYMTnf+ULtoC4= +github.com/DATA-DOG/go-sqlmock v1.3.3/go.mod h1:f/Ixk793poVmq4qj/V1dPUg2JEAKC73Q5eFN3EC/SaM= +github.com/DATA-DOG/go-sqlmock v1.5.0/go.mod h1:f/Ixk793poVmq4qj/V1dPUg2JEAKC73Q5eFN3EC/SaM= github.com/DataDog/datadog-go v3.2.0+incompatible/go.mod h1:LButxg5PwREeZtORoXG3tL4fMGNddJ+vMq1mwgfaqoQ= github.com/DataDog/zstd v1.4.1/go.mod h1:1jcaCB/ufaK+sKp1NBhlGmpz41jOoPQ35bpF36t7BBo= github.com/DataDog/zstd v1.4.5/go.mod h1:1jcaCB/ufaK+sKp1NBhlGmpz41jOoPQ35bpF36t7BBo= +github.com/DataDog/zstd v1.5.2/go.mod h1:g4AWEaM3yOg3HYfnJ3YIawPnVdXJh9QME85blwSAmyw= +github.com/Djarvur/go-err113 v0.0.0-20200410182137-af658d038157/go.mod h1:4UJr5HIiMZrwgkSPdsjy2uOQExX/WEILpIrO9UPGuXs= +github.com/Djarvur/go-err113 v0.0.0-20210108212216-aea10b59be24/go.mod h1:4UJr5HIiMZrwgkSPdsjy2uOQExX/WEILpIrO9UPGuXs= +github.com/Djarvur/go-err113 v0.1.0/go.mod h1:4UJr5HIiMZrwgkSPdsjy2uOQExX/WEILpIrO9UPGuXs= +github.com/GaijinEntertainment/go-exhaustruct/v2 v2.1.0/go.mod h1:LGOGuvEgCfCQsy3JF2tRmpGDpzA53iZfyGEWSPwQ6/4= +github.com/GaijinEntertainment/go-exhaustruct/v2 v2.3.0/go.mod h1:b3g59n2Y+T5xmcxJL+UEG2f8cQploZm1mR/v6BW0mU0= +github.com/GoogleCloudPlatform/cloudsql-proxy v0.0.0-20191009163259-e802c2cb94ae/go.mod h1:mjwGPas4yKduTyubHvD1Atl9r1rUq8DfVy+gkVvZ+oo= +github.com/GoogleCloudPlatform/k8s-cloud-provider v0.0.0-20190822182118-27a4ced34534/go.mod h1:iroGtC8B3tQiqtds1l+mgk/BBOrxbqjH+eUfFQYRc14= +github.com/HdrHistogram/hdrhistogram-go v1.1.0/go.mod h1:yDgFjdqOqDEKOvasDdhWNXYg9BVp4O+o5f6V/ehm6Oo= +github.com/HdrHistogram/hdrhistogram-go v1.1.2/go.mod h1:yDgFjdqOqDEKOvasDdhWNXYg9BVp4O+o5f6V/ehm6Oo= github.com/Knetic/govaluate v3.0.1-0.20171022003610-9aa49832a739+incompatible/go.mod h1:r7JcOSlj0wfOMncg0iLm8Leh48TZaKVeNIfJntJ2wa0= +github.com/Masterminds/goutils v1.1.0/go.mod h1:8cTjp+g8YejhMuvIA5y2vz3BpJxksy863GQaJW2MFNU= +github.com/Masterminds/semver v1.4.2/go.mod h1:MB6lktGJrhw8PrUyiEoblNEGEQ+RzHPF078ddwwvV3Y= +github.com/Masterminds/semver v1.5.0/go.mod h1:MB6lktGJrhw8PrUyiEoblNEGEQ+RzHPF078ddwwvV3Y= +github.com/Masterminds/semver/v3 v3.0.3/go.mod h1:VPu/7SZ7ePZ3QOrcuXROw5FAcLl4a0cBrbBpGY/8hQs= +github.com/Masterminds/semver/v3 v3.1.0/go.mod h1:VPu/7SZ7ePZ3QOrcuXROw5FAcLl4a0cBrbBpGY/8hQs= +github.com/Masterminds/sprig v2.15.0+incompatible/go.mod h1:y6hNFY5UBTIWBxnzTeuNhlNS5hqE0NB0E6fgfo2Br3o= +github.com/Masterminds/sprig v2.22.0+incompatible/go.mod h1:y6hNFY5UBTIWBxnzTeuNhlNS5hqE0NB0E6fgfo2Br3o= +github.com/Microsoft/go-winio v0.4.11/go.mod h1:VhR8bwka0BXejwEJY73c50VrPtXAaKcyvVC4A4RozmA= github.com/Microsoft/go-winio v0.4.14/go.mod h1:qXqCSQ3Xa7+6tgxaGTIe4Kpcdsi+P8jBhyzoq1bpyYA= +github.com/Microsoft/go-winio v0.4.15-0.20190919025122-fc70bd9a86b5/go.mod h1:tTuCMEN+UleMWgg9dVx4Hu52b1bJo+59jBh3ajtinzw= +github.com/Microsoft/go-winio v0.4.15-0.20200908182639-5b44b70ab3ab/go.mod h1:tTuCMEN+UleMWgg9dVx4Hu52b1bJo+59jBh3ajtinzw= +github.com/Microsoft/go-winio v0.4.15/go.mod h1:tTuCMEN+UleMWgg9dVx4Hu52b1bJo+59jBh3ajtinzw= +github.com/Microsoft/go-winio v0.4.16-0.20201130162521-d1ffc52c7331/go.mod h1:XB6nPKklQyQ7GC9LdcBEcBl8PF76WugXOPRXwdLnMv0= +github.com/Microsoft/go-winio v0.4.16/go.mod h1:XB6nPKklQyQ7GC9LdcBEcBl8PF76WugXOPRXwdLnMv0= +github.com/Microsoft/go-winio v0.4.17-0.20210211115548-6eac466e5fa3/go.mod h1:JPGBdM1cNvN/6ISo+n8V5iA4v8pBzdOpzfwIujj1a84= +github.com/Microsoft/go-winio v0.4.17-0.20210324224401-5516f17a5958/go.mod h1:JPGBdM1cNvN/6ISo+n8V5iA4v8pBzdOpzfwIujj1a84= +github.com/Microsoft/go-winio v0.4.17/go.mod h1:JPGBdM1cNvN/6ISo+n8V5iA4v8pBzdOpzfwIujj1a84= github.com/Microsoft/go-winio v0.5.0/go.mod h1:JPGBdM1cNvN/6ISo+n8V5iA4v8pBzdOpzfwIujj1a84= -github.com/Microsoft/go-winio v0.6.0 h1:slsWYD/zyx7lCXoZVlvQrj0hPTM1HI4+v1sIda2yDvg= -github.com/Nvveen/Gotty v0.0.0-20120604004816-cd527374f1e5 h1:TngWCqHvy9oXAN6lEVMRuU21PR1EtLVZJmdB18Gu3Rw= +github.com/Microsoft/go-winio v0.5.1/go.mod h1:JPGBdM1cNvN/6ISo+n8V5iA4v8pBzdOpzfwIujj1a84= +github.com/Microsoft/go-winio v0.5.2/go.mod h1:WpS1mjBmmwHBEWmogvA2mj8546UReBk4v8QkMxJ6pZY= +github.com/Microsoft/go-winio v0.6.0/go.mod h1:cTAf44im0RAYeL23bpB+fzCyDH2MJiz2BO69KH/soAE= +github.com/Microsoft/hcsshim v0.8.6/go.mod h1:Op3hHsoHPAvb6lceZHDtd9OkTew38wNoXnJs8iY7rUg= +github.com/Microsoft/hcsshim v0.8.7-0.20190325164909-8abdbb8205e4/go.mod h1:Op3hHsoHPAvb6lceZHDtd9OkTew38wNoXnJs8iY7rUg= +github.com/Microsoft/hcsshim v0.8.7/go.mod h1:OHd7sQqRFrYd3RmSgbgji+ctCwkbq2wbEYNSzOYtcBQ= +github.com/Microsoft/hcsshim v0.8.9/go.mod h1:5692vkUqntj1idxauYlpoINNKeqCiG6Sg38RRsjT5y8= +github.com/Microsoft/hcsshim v0.8.10/go.mod h1:g5uw8EV2mAlzqe94tfNBNdr89fnbD/n3HV0OhsddkmM= +github.com/Microsoft/hcsshim v0.8.14/go.mod h1:NtVKoYxQuTLx6gEq0L96c9Ju4JbRJ4nY2ow3VK6a9Lg= +github.com/Microsoft/hcsshim v0.8.15/go.mod h1:x38A4YbHbdxJtc0sF6oIz+RG0npwSCAvn69iY6URG00= +github.com/Microsoft/hcsshim v0.8.16/go.mod h1:o5/SZqmR7x9JNKsW3pu+nqHm0MF8vbA+VxGOoXdC600= +github.com/Microsoft/hcsshim v0.8.20/go.mod h1:+w2gRZ5ReXQhFOrvSQeNfhrYB/dg3oDwTOcER2fw4I4= +github.com/Microsoft/hcsshim v0.8.21/go.mod h1:+w2gRZ5ReXQhFOrvSQeNfhrYB/dg3oDwTOcER2fw4I4= +github.com/Microsoft/hcsshim v0.8.23/go.mod h1:4zegtUJth7lAvFyc6cH2gGQ5B3OFQim01nnU2M8jKDg= +github.com/Microsoft/hcsshim v0.9.2/go.mod h1:7pLA8lDk46WKDWlVsENo92gC0XFa8rbKfyFRBqxEbCc= +github.com/Microsoft/hcsshim v0.9.4/go.mod h1:7pLA8lDk46WKDWlVsENo92gC0XFa8rbKfyFRBqxEbCc= +github.com/Microsoft/hcsshim/test v0.0.0-20200826032352-301c83a30e7c/go.mod h1:30A5igQ91GEmhYJF8TaRP79pMBOYynRsyOByfVV0dU4= +github.com/Microsoft/hcsshim/test v0.0.0-20201218223536-d3e5debf77da/go.mod h1:5hlzMzRKMLyo42nCZ9oml8AdTlq/0cvIaBv6tK1RehU= +github.com/Microsoft/hcsshim/test v0.0.0-20210227013316-43a75bb4edd3/go.mod h1:mw7qgWloBUl75W/gVH3cQszUg1+gUITj7D6NY7ywVnY= +github.com/NYTimes/gziphandler v0.0.0-20170623195520-56545f4a5d46/go.mod h1:3wb06e3pkSAbeQ52E9H9iFoQsEEwGN64994WTCIhntQ= +github.com/NYTimes/gziphandler v1.1.1/go.mod h1:n/CVRwUEOgIxrgPvAQhUUr9oeUtvrhMomdKFjzJNB0c= github.com/Nvveen/Gotty v0.0.0-20120604004816-cd527374f1e5/go.mod h1:lmUJ/7eu/Q8D7ML55dXQrVaamCz2vxCfdQBasLZfHKk= -github.com/OneOfOne/xxhash v1.2.2 h1:KMrpdQIwFcEqXDklaen+P1axHaj9BSKzvpUUfnHldSE= github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= +github.com/OpenPeeDeeP/depguard v1.0.1/go.mod h1:xsIw86fROiiwelg+jB2uM9PiKihMMmUx/1V+TNhjQvM= +github.com/OpenPeeDeeP/depguard v1.1.0/go.mod h1:JtAMzWkmFEzDPyAd+W0NHl1lvpQKTvT9jnRVsohBKpc= +github.com/OpenPeeDeeP/depguard v1.1.1/go.mod h1:JtAMzWkmFEzDPyAd+W0NHl1lvpQKTvT9jnRVsohBKpc= +github.com/PuerkitoBio/purell v1.0.0/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0= +github.com/PuerkitoBio/purell v1.1.1/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0= +github.com/PuerkitoBio/urlesc v0.0.0-20160726150825-5bd2802263f2/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE= +github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE= +github.com/Shopify/logrus-bugsnag v0.0.0-20171204204709-577dee27f20d/go.mod h1:HI8ITrYtUY+O+ZhtlqUnD8+KwNPOyugEhfP9fdUIaEQ= github.com/Shopify/sarama v1.19.0/go.mod h1:FVkBWblsNy7DGZRfXLU0O9RCGt5g3g3yEuWXgklEdEo= github.com/Shopify/toxiproxy v2.1.4+incompatible/go.mod h1:OXgGpZ6Cli1/URJOF1DMxUHB2q5Ap20/P/eIdh4G0pI= github.com/StackExchange/wmi v0.0.0-20180116203802-5d049714c4a6/go.mod h1:3eOhrUMpNV+6aFIbp5/iudMxNCF27Vw2OZgy4xEx0Fg= github.com/VictoriaMetrics/fastcache v1.5.7/go.mod h1:ptDBkNMQI4RtmVo8VS/XwRY6RoTu1dAWCbrk+6WsEM8= -github.com/VictoriaMetrics/fastcache v1.12.0 h1:vnVi/y9yKDcD9akmc4NqAoqgQhJrOwUF+j9LTgn4QDE= +github.com/VictoriaMetrics/fastcache v1.6.0/go.mod h1:0qHz5QP0GMX4pfmMA/zt5RgfNuXJrTP0zS7DqpHGGTw= github.com/VictoriaMetrics/fastcache v1.12.0/go.mod h1:tjiYeEfYXCqacuvYw/7UoDIeJaNxq6132xHICNP77w8= -github.com/VividCortex/gohistogram v1.0.0 h1:6+hBz+qvs0JOrrNhhmR7lFxo5sINxBCGXrdtl/UvroE= github.com/VividCortex/gohistogram v1.0.0/go.mod h1:Pf5mBqqDxYaXu3hDrrU+w6nw50o/4+TcAqDqk/vUH7g= github.com/Workiva/go-datastructures v1.0.52/go.mod h1:Z+F2Rca0qCsVYDS8z7bAGm8f3UkzuWYS/oBZz5a7VVA= -github.com/Workiva/go-datastructures v1.0.53 h1:J6Y/52yX10Xc5JjXmGtWoSSxs3mZnGSaq37xZZh7Yig= github.com/Workiva/go-datastructures v1.0.53/go.mod h1:1yZL+zfsztete+ePzZz/Zb1/t5BnDuE2Ya2MMGhzP6A= github.com/Zilliqa/gozilliqa-sdk v1.2.1-0.20201201074141-dd0ecada1be6/go.mod h1:eSYp2T6f0apnuW8TzhV3f6Aff2SE8Dwio++U4ha4yEM= github.com/adlio/schema v1.1.13/go.mod h1:L5Z7tw+7lRK1Fnpi/LT/ooCP1elkXn0krMWBQHUhEDE= -github.com/adlio/schema v1.3.3 h1:oBJn8I02PyTB466pZO1UZEn1TV5XLlifBSyMrmHl/1I= +github.com/adlio/schema v1.3.3/go.mod h1:1EsRssiv9/Ce2CMzq5DoL7RiMshhuigQxrR4DMV9fHg= github.com/aead/siphash v1.0.1/go.mod h1:Nywa3cDsYNNK3gaciGTWPwHt0wlpNV15vwmswBAUSII= github.com/afex/hystrix-go v0.0.0-20180502004556-fa1af6a1f4f5/go.mod h1:SkGFH1ia65gfNATL8TAiHDNxPzPdmEL5uirI2Uyuz6c= +github.com/agext/levenshtein v1.2.3/go.mod h1:JEDfjyjHDjOF/1e4FlBE/PkbqA9OfWu2ki2W0IB5558= +github.com/ajstarks/deck v0.0.0-20200831202436-30c9fc6549a9/go.mod h1:JynElWSGnm/4RlzPXRlREEwqTHAN3T56Bv2ITsFT3gY= +github.com/ajstarks/deck/generate v0.0.0-20210309230005-c3f852c02e19/go.mod h1:T13YZdzov6OU0A1+RfKZiZN9ca6VeKdBdyDV+BY97Tk= +github.com/ajstarks/svgo v0.0.0-20180226025133-644b8db467af/go.mod h1:K08gAheRH3/J6wwsYMMT4xOr94bZjxIelGM0+d/wbFw= +github.com/ajstarks/svgo v0.0.0-20211024235047-1546f124cd8b/go.mod h1:1KcenG0jGWcpt8ov532z81sp/kMMUG485J2InIOyADM= +github.com/alecthomas/kingpin v2.2.6+incompatible/go.mod h1:59OFYbFVLKQKq+mqrL6Rw5bR0c3ACQaawgXx0QYndlE= github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= github.com/alecthomas/units v0.0.0-20190717042225-c3de453c63f4/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= github.com/alecthomas/units v0.0.0-20190924025748-f65c72e2690d/go.mod h1:rBZYJk541a8SKzHPHnH3zbiI+7dagKZ0cgpgrD7Fyho= -github.com/allegro/bigcache v1.2.1-0.20190218064605-e24eb225f156 h1:eMwmnE/GDgah4HI848JfFxHt+iPb26b4zyfspmqY0/8= +github.com/alexflint/go-filemutex v0.0.0-20171022225611-72bdc8eae2ae/go.mod h1:CgnQgUtFrFz9mxFNtED3jI5tLDjKlOM+oUF/sTk6ps0= +github.com/alexflint/go-filemutex v1.1.0/go.mod h1:7P4iRhttt/nUvUOrYIhcpMzv2G6CY9UnI16Z+UJqRyk= +github.com/alexkohler/prealloc v1.0.0/go.mod h1:VetnK3dIgFBBKmg0YnD9F9x6Icjd+9cvfHR56wJVlKE= +github.com/alingse/asasalint v0.0.11/go.mod h1:nCaoMhw7a9kSJObvQyVzNTPBDbNpdocqrSP7t/cW5+I= github.com/allegro/bigcache v1.2.1-0.20190218064605-e24eb225f156/go.mod h1:Cb/ax3seSYIx7SuZdm2G2xzfwmv3TPSk2ucNfQESPXM= +github.com/andreyvit/diff v0.0.0-20170406064948-c7f18ee00883/go.mod h1:rCTlJbsFo29Kk6CurOXKm700vrz8f0KW0JNfpkRJY/8= +github.com/andybalholm/brotli v1.0.2/go.mod h1:loMXtMfwqflxFJPmdbJO0a3KNoPuLBgiu3qAvBg8x/Y= +github.com/andybalholm/brotli v1.0.3/go.mod h1:fO7iG3H7G2nSZ7m0zPUDn85XEX2GTukHGRSepvi9Eig= +github.com/anmitsu/go-shlex v0.0.0-20161002113705-648efa622239/go.mod h1:2FmKhYUyUczH0OGQWaF5ceTx0UBShxjsH6f8oGKYe2c= +github.com/antihax/optional v0.0.0-20180407024304-ca021399b1a6/go.mod h1:V8iCPQYkqmusNa815XgQio277wI47sdRh1dUOLdyC6Q= github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY= +github.com/aokoli/goutils v1.0.1/go.mod h1:SijmP0QR8LtwsmDs8Yii5Z/S4trXFGFC2oO5g9DP+DQ= +github.com/apache/arrow/go/arrow v0.0.0-20191024131854-af6fa24be0db/go.mod h1:VTxUBvSJ3s3eHAg65PNgrsn5BtqCRPdmyXh6rAfdxN0= github.com/apache/thrift v0.12.0/go.mod h1:cp2SuWMxlEZw2r+iP2GNCdIi4C1qmUzdZFSVb+bacwQ= github.com/apache/thrift v0.13.0/go.mod h1:cp2SuWMxlEZw2r+iP2GNCdIi4C1qmUzdZFSVb+bacwQ= +github.com/apex/log v1.1.4/go.mod h1:AlpoD9aScyQfJDVHmLMEcx4oU6LqzkWp4Mg9GdAcEvQ= +github.com/apex/log v1.3.0/go.mod h1:jd8Vpsr46WAe3EZSQ/IUMs2qQD/GOycT5rPWCO1yGcs= +github.com/apex/logs v0.0.4/go.mod h1:XzxuLZ5myVHDy9SAmYpamKKRNApGj54PfYLcFrXqDwo= +github.com/aphistic/golf v0.0.0-20180712155816-02c07f170c5a/go.mod h1:3NqKYiepwy8kCu4PNA+aP7WUV72eXWJeP9/r3/K9aLE= +github.com/aphistic/sweet v0.2.0/go.mod h1:fWDlIh/isSE9n6EPsRmC0det+whmX6dJid3stzu0Xys= github.com/aristanetworks/goarista v0.0.0-20170210015632-ea17b1a17847/go.mod h1:D/tb0zPVXnP7fmsLZjtdUhSsumbK/ij54UXjjVgMGxQ= github.com/armon/circbuf v0.0.0-20150827004946-bbbad097214e/go.mod h1:3U/XgcO3hCbHZ8TKRvWD2dDTCfh9M9ya+I9JpbB7O8o= +github.com/armon/circbuf v0.0.0-20190214190532-5111143e8da2/go.mod h1:3U/XgcO3hCbHZ8TKRvWD2dDTCfh9M9ya+I9JpbB7O8o= github.com/armon/consul-api v0.0.0-20180202201655-eb2c6b5be1b6/go.mod h1:grANhF5doyWs3UAsr3K4I6qtAmlQcZDesFNEHPZAzj8= github.com/armon/go-metrics v0.0.0-20180917152333-f0300d1749da/go.mod h1:Q73ZrmVTwzkszR9V5SSuryQ31EELlFMUz1kKyl939pY= github.com/armon/go-metrics v0.3.9/go.mod h1:4O98XIr/9W0sxpJ8UaYkvjk10Iff7SnFrb4QAOwNTFc= -github.com/armon/go-metrics v0.4.1 h1:hR91U9KYmb6bLBYLQjyM+3j+rcd/UhE+G78SFnF8gJA= +github.com/armon/go-metrics v0.3.10/go.mod h1:4O98XIr/9W0sxpJ8UaYkvjk10Iff7SnFrb4QAOwNTFc= +github.com/armon/go-metrics v0.4.0/go.mod h1:E6amYzXo6aW1tqzoZGT755KkbgrJsSdpwZ+3JqfkOG4= github.com/armon/go-metrics v0.4.1/go.mod h1:E6amYzXo6aW1tqzoZGT755KkbgrJsSdpwZ+3JqfkOG4= github.com/armon/go-radix v0.0.0-20180808171621-7fddfc383310/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8= +github.com/armon/go-radix v1.0.0/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8= github.com/aryann/difflib v0.0.0-20170710044230-e206f873d14a/go.mod h1:DAHtR1m6lCRdSC2Tm3DSWRPvIPr6xNKyeHdqDQSQT+A= +github.com/asaskevich/govalidator v0.0.0-20190424111038-f61b66f89f4a/go.mod h1:lB+ZfQJz7igIIfQNfa7Ml4HSf2uFQQRzpGGRXenZAgY= +github.com/ashanbrown/forbidigo v1.3.0/go.mod h1:vVW7PEdqEFqapJe95xHkTfB1+XvZXBFg8t0sG2FIxmI= +github.com/ashanbrown/makezero v1.1.1/go.mod h1:i1bJLCRSCHOcOa9Y6MyF2FTfMZMFdHvxKHxgO5Z1axI= github.com/aws/aws-lambda-go v1.13.3/go.mod h1:4UKl9IzQMoD+QF79YdCuzCwp8VbmG4VAQwij/eHl5CU= +github.com/aws/aws-sdk-go v1.15.11/go.mod h1:mFuSZ37Z9YOHbQEwBWztmVzqXrEkub65tZoCYDt7FT0= +github.com/aws/aws-sdk-go v1.15.27/go.mod h1:mFuSZ37Z9YOHbQEwBWztmVzqXrEkub65tZoCYDt7FT0= +github.com/aws/aws-sdk-go v1.15.90/go.mod h1:es1KtYUFs7le0xQ3rOihkuoVD90z7D0fR2Qm4S00/gU= +github.com/aws/aws-sdk-go v1.16.26/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo= +github.com/aws/aws-sdk-go v1.19.18/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo= +github.com/aws/aws-sdk-go v1.19.45/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo= +github.com/aws/aws-sdk-go v1.20.6/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo= +github.com/aws/aws-sdk-go v1.23.20/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo= +github.com/aws/aws-sdk-go v1.25.11/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo= +github.com/aws/aws-sdk-go v1.25.37/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo= github.com/aws/aws-sdk-go v1.25.48/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo= github.com/aws/aws-sdk-go v1.27.0/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo= +github.com/aws/aws-sdk-go v1.27.1/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo= +github.com/aws/aws-sdk-go v1.31.6/go.mod h1:5zCpMtNQVjRREroY7sYe8lOMRSxkhG6MZveU8YkpAk0= +github.com/aws/aws-sdk-go v1.36.30/go.mod h1:hcU610XS61/+aQV88ixoOzUoG7v3b31pl2zKMmprdro= +github.com/aws/aws-sdk-go v1.40.45/go.mod h1:585smgzpB/KqRA+K3y/NL/oYRqQvpNJYvLm+LY1U59Q= github.com/aws/aws-sdk-go-v2 v0.18.0/go.mod h1:JWVYvqSMppoMJC0x5wdwiImzgXTI9FuZwxzkQq9wy+g= +github.com/aws/aws-sdk-go-v2 v1.2.0/go.mod h1:zEQs02YRBw1DjK0PoJv3ygDYOFTre1ejlJWl8FwAuQo= +github.com/aws/aws-sdk-go-v2 v1.9.1/go.mod h1:cK/D0BBs0b/oWPIcX/Z/obahJK1TT7IPVjy53i/mX/4= +github.com/aws/aws-sdk-go-v2/config v1.1.1/go.mod h1:0XsVy9lBI/BCXm+2Tuvt39YmdHwS5unDQmxZOYe8F5Y= +github.com/aws/aws-sdk-go-v2/credentials v1.1.1/go.mod h1:mM2iIjwl7LULWtS6JCACyInboHirisUUdkBPoTHMOUo= +github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.0.2/go.mod h1:3hGg3PpiEjHnrkrlasTfxFqUsZ2GCk/fMUn4CbKgSkM= +github.com/aws/aws-sdk-go-v2/service/cloudwatch v1.8.1/go.mod h1:CM+19rL1+4dFWnOQKwDc7H1KwXTz+h61oUSHyhV0b3o= +github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.0.2/go.mod h1:45MfaXZ0cNbeuT0KQ1XJylq8A6+OpVV2E5kvY/Kq+u8= +github.com/aws/aws-sdk-go-v2/service/route53 v1.1.1/go.mod h1:rLiOUrPLW/Er5kRcQ7NkwbjlijluLsrIbu/iyl35RO4= +github.com/aws/aws-sdk-go-v2/service/sso v1.1.1/go.mod h1:SuZJxklHxLAXgLTc1iFXbEWkXs7QRTQpCLGaKIprQW0= +github.com/aws/aws-sdk-go-v2/service/sts v1.1.1/go.mod h1:Wi0EBZwiz/K44YliU0EKxqTCJGUfYTWXrrBwkq736bM= +github.com/aws/smithy-go v1.1.0/go.mod h1:EzMw8dbp/YJL4A5/sbhGddag+NPT7q084agLbB9LgIw= +github.com/aws/smithy-go v1.8.0/go.mod h1:SObp3lf9smib00L/v3U2eAKG8FyQ7iLrJnQiAmR5n+E= +github.com/aybabtme/rgbterm v0.0.0-20170906152045-cc83f3b3ce59/go.mod h1:q/89r3U2H7sSsE2t6Kca0lfwTK8JdoNGS/yzM/4iH5I= +github.com/benbjohnson/clock v1.0.3/go.mod h1:bGMdMPoPVvcYyt1gHDf4J2KE153Yf9BuiUKYMaxlTDM= +github.com/benbjohnson/clock v1.1.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA= +github.com/benbjohnson/clock v1.3.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA= +github.com/beorn7/perks v0.0.0-20160804104726-4c0e84591b9a/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8= -github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= -github.com/bgentry/speakeasy v0.1.0 h1:ByYyxL9InA1OWqxJqqp2A5pYHUrCiAL6K3J+LKSsQkY= github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= +github.com/bitly/go-simplejson v0.5.0/go.mod h1:cXHtHw4XUPsvGaxgjIAn8PhEWG9NfngEKAMDJEczWVA= github.com/bits-and-blooms/bitset v1.2.0/go.mod h1:gIdJ4wp64HaoK2YrL1Q5/N7Y16edYb8uY+O0FJTyyDA= github.com/bketelsen/crypt v0.0.3-0.20200106085610-5cbc8cc4026c/go.mod h1:MKsuJmJgSg28kpZDP6UIiPt0e0Oz0kqKNGyRaWEPv84= github.com/bketelsen/crypt v0.0.4/go.mod h1:aI6NrJ0pMGgvZKL1iVgXLnfIFJtfV+bKCoqOes/6LfM= +github.com/bkielbasa/cyclop v1.2.0/go.mod h1:qOI0yy6A7dYC4Zgsa72Ppm9kONl0RoIlPbzot9mhmeI= +github.com/blakesmith/ar v0.0.0-20190502131153-809d4375e1fb/go.mod h1:PkYb9DJNAwrSvRx5DYA+gUcOIgTGVMNkfSCbZM8cWpI= +github.com/blang/semver v3.1.0+incompatible/go.mod h1:kRBLl5iJ+tD4TcOOxsy/0fnwebNt5EWlYSAyrTnjyyk= +github.com/blang/semver v3.5.0+incompatible/go.mod h1:kRBLl5iJ+tD4TcOOxsy/0fnwebNt5EWlYSAyrTnjyyk= +github.com/blang/semver v3.5.1+incompatible/go.mod h1:kRBLl5iJ+tD4TcOOxsy/0fnwebNt5EWlYSAyrTnjyyk= +github.com/blizzy78/varnamelen v0.8.0/go.mod h1:V9TzQZ4fLJ1DSrjVDfl89H7aMnTvKkApdHeyESmyR7k= +github.com/bmizerany/assert v0.0.0-20160611221934-b7ed37b82869/go.mod h1:Ekp36dRnpXw/yCqJaO+ZrUyxD+3VXMFFr56k5XYrpB4= +github.com/bmizerany/pat v0.0.0-20170815010413-6226ea591a40/go.mod h1:8rLXio+WjiTceGBHIoTvn60HIbs7Hm7bcHjyrSqYB9c= +github.com/boltdb/bolt v1.3.1/go.mod h1:clJnj/oiGkjum5o1McbSZDSLxVThjynRyGBgiAx27Ps= +github.com/bombsimon/wsl/v2 v2.0.0/go.mod h1:mf25kr/SqFEPhhcxW1+7pxzGlW+hIl/hYTKY95VwV8U= +github.com/bombsimon/wsl/v2 v2.2.0/go.mod h1:Azh8c3XGEJl9LyX0/sFC+CKMc7Ssgua0g+6abzXN4Pg= +github.com/bombsimon/wsl/v3 v3.0.0/go.mod h1:st10JtZYLE4D5sC7b8xV4zTKZwAQjCH/Hy2Pm1FNZIc= +github.com/bombsimon/wsl/v3 v3.1.0/go.mod h1:st10JtZYLE4D5sC7b8xV4zTKZwAQjCH/Hy2Pm1FNZIc= +github.com/bombsimon/wsl/v3 v3.3.0/go.mod h1:st10JtZYLE4D5sC7b8xV4zTKZwAQjCH/Hy2Pm1FNZIc= +github.com/boombuler/barcode v1.0.0/go.mod h1:paBWMcWSl3LHKBqUq+rly7CNSldXjb2rDl3JlRe0mD8= +github.com/boombuler/barcode v1.0.1/go.mod h1:paBWMcWSl3LHKBqUq+rly7CNSldXjb2rDl3JlRe0mD8= +github.com/bradfitz/go-smtpd v0.0.0-20170404230938-deb6d6237625/go.mod h1:HYsPBTaaSFSlLx/70C2HPIMNZpVV8+vt/A+FMnYP11g= +github.com/breml/bidichk v0.2.3/go.mod h1:8u2C6DnAy0g2cEq+k/A2+tr9O1s+vHGxWn0LTc70T2A= +github.com/breml/errchkjson v0.3.0/go.mod h1:9Cogkyv9gcT8HREpzi3TiqBxCqDzo8awa92zSDFcofU= +github.com/bshuster-repo/logrus-logstash-hook v0.4.1/go.mod h1:zsTqEiSzDgAa/8GZR7E1qaXrhYNDKBYy5/dWPTIflbk= github.com/btcsuite/btcd v0.0.0-20171128150713-2e60448ffcc6/go.mod h1:Dmm/EzmjnCiweXmzRIAiUWCInVmPgjkzgv5k4tVyXiQ= github.com/btcsuite/btcd v0.0.0-20190115013929-ed77733ec07d/go.mod h1:d3C0AkH6BRcvO8T0UEPu53cnw4IbV63x1bEjildYhO0= github.com/btcsuite/btcd v0.0.0-20190315201642-aa6e0f35703c/go.mod h1:DrZx5ec/dmnfpw9KyYoQyYo7d0KEvTkk/5M/vbZjAr8= github.com/btcsuite/btcd v0.20.1-beta/go.mod h1:wVuoA8VJLEcwgqHBwHmzLRazpKxTv13Px/pDuV7OomQ= github.com/btcsuite/btcd v0.21.0-beta/go.mod h1:ZSWyehm27aAuS9bvkATT+Xte3hjHZ+MRgMY/8NJ7K94= +github.com/btcsuite/btcd v0.21.0-beta.0.20201114000516-e9c7a5ac6401/go.mod h1:Sv4JPQ3/M+teHz9Bo5jBpkNcP0x6r7rdihlNL/7tTAs= github.com/btcsuite/btcd v0.22.0-beta/go.mod h1:9n5ntfhhHQBIhUvlhDvD3Qg6fRUj4jkN0VB8L8svzOA= -github.com/btcsuite/btcd v0.22.1 h1:CnwP9LM/M9xuRrGSCGeMVs9iv09uMqwsVX7EeIpgV2c= github.com/btcsuite/btcd v0.22.1/go.mod h1:wqgTSL29+50LRkmOVknEdmt8ZojIzhuWvgu/iptuN7Y= -github.com/btcsuite/btcd/btcec/v2 v2.3.2 h1:5n0X6hX0Zk+6omWcihdYvdAlGf2DfasC0GMf7DClJ3U= -github.com/btcsuite/btcd/chaincfg/chainhash v1.0.1 h1:q0rUy8C/TYNBQS1+CGKw68tLOFYSNEs0TFnxxnS9+4U= +github.com/btcsuite/btcd/btcec/v2 v2.2.0/go.mod h1:U7MHm051Al6XmscBQ0BoNydpOTsFAn707034b5nY8zU= +github.com/btcsuite/btcd/btcec/v2 v2.3.2/go.mod h1:zYzJ8etWJQIv1Ogk7OzpWjowwOdXY1W/17j2MW85J04= +github.com/btcsuite/btcd/chaincfg/chainhash v1.0.1/go.mod h1:7SFka0XMvUgj3hfZtydOrQY2mwhPclbT2snogU7SQQc= github.com/btcsuite/btclog v0.0.0-20170628155309-84c8d2346e9f/go.mod h1:TdznJufoqS23FtqVCzL0ZqgP5MqXbb4fg/WgDys70nA= github.com/btcsuite/btcutil v0.0.0-20180706230648-ab6388e0c60a/go.mod h1:+5NJ2+qvTyV9exUAL/rxXi3DcLg2Ts+ymUAY5y4NvMg= github.com/btcsuite/btcutil v0.0.0-20190207003914-4c204d697803/go.mod h1:+5NJ2+qvTyV9exUAL/rxXi3DcLg2Ts+ymUAY5y4NvMg= github.com/btcsuite/btcutil v0.0.0-20190425235716-9e5f4b9a998d/go.mod h1:+5NJ2+qvTyV9exUAL/rxXi3DcLg2Ts+ymUAY5y4NvMg= github.com/btcsuite/btcutil v1.0.2/go.mod h1:j9HUFwoQRsZL3V4n+qG+CUnEGHOarIxfC3Le2Yhbcts= -github.com/btcsuite/btcutil v1.0.3-0.20201208143702-a53e38424cce h1:YtWJF7RHm2pYCvA5t0RPmAaLUhREsKuKd+SLhxFbFeQ= github.com/btcsuite/btcutil v1.0.3-0.20201208143702-a53e38424cce/go.mod h1:0DVlHczLPewLcPGEIeUEzfOJhqGPQ0mJJRDBtD307+o= github.com/btcsuite/go-socks v0.0.0-20170105172521-4720035b7bfd/go.mod h1:HHNXQzUsZCxOoE+CPiyCTO6x34Zs86zZUiwtpXoGdtg= github.com/btcsuite/goleveldb v0.0.0-20160330041536-7834afc9e8cd/go.mod h1:F+uVaaLLH7j4eDXPRvw78tMflu7Ie2bzYOH4Y8rRKBY= @@ -150,200 +503,537 @@ github.com/btcsuite/snappy-go v0.0.0-20151229074030-0bdef8d06723/go.mod h1:8woku github.com/btcsuite/snappy-go v1.0.0/go.mod h1:8woku9dyThutzjeg+3xrA5iCpBRH8XEEg3lh6TiUghc= github.com/btcsuite/websocket v0.0.0-20150119174127-31079b680792/go.mod h1:ghJtEyQwv5/p4Mg4C0fgbePVuGr935/5ddU9Z3TmDRY= github.com/btcsuite/winsvc v1.0.0/go.mod h1:jsenWakMcC0zFBFurPLEAyrnc/teJEM1O46fmI40EZs= +github.com/bufbuild/buf v1.4.0/go.mod h1:mwHG7klTHnX+rM/ym8LXGl7vYpVmnwT96xWoRB4H5QI= +github.com/bufbuild/buf v1.9.0/go.mod h1:1Q+rMHiMVcfgScEF/GOldxmu4o9TrQ2sQQh58K6MscE= +github.com/bufbuild/connect-go v1.0.0/go.mod h1:9iNvh/NOsfhNBUH5CtvXeVUskQO1xsrEviH7ZArwZ3I= +github.com/bufbuild/protocompile v0.1.0/go.mod h1:ix/MMMdsT3fzxfw91dvbfzKW3fRRnuPCP47kpAm5m/4= +github.com/buger/jsonparser v0.0.0-20180808090653-f4dd9f5a6b44/go.mod h1:bbYlZJ7hK1yFx9hf58LP0zeX7UjIGs20ufpu3evjr+s= +github.com/buger/jsonparser v1.1.1/go.mod h1:6RYKKt7H4d4+iWqouImQ9R2FZql3VbhNgx27UK13J/0= +github.com/bugsnag/bugsnag-go v0.0.0-20141110184014-b1d153021fcd/go.mod h1:2oa8nejYd4cQ/b0hMIopN0lCRxU0bueqREvZLWFrtK8= +github.com/bugsnag/osext v0.0.0-20130617224835-0dd3f918b21b/go.mod h1:obH5gd0BsqsP2LwDJ9aOkm/6J86V6lyAXCoQWGw3K50= +github.com/bugsnag/panicwrap v0.0.0-20151223152923-e2c28503fcd0/go.mod h1:D/8v3kj0zr8ZAKg1AQ6crr+5VwKN5eIywRkfhyM/+dE= +github.com/butuzov/ireturn v0.1.1/go.mod h1:Wh6Zl3IMtTpaIKbmwzqi6olnM9ptYQxxVacMsOEFPoc= +github.com/bwesterb/go-ristretto v1.2.0/go.mod h1:fUIoIZaG73pV5biE2Blr2xEzDoMj7NFEuV9ekS419A0= +github.com/c-bata/go-prompt v0.2.2/go.mod h1:VzqtzE2ksDBcdln8G7mk2RX9QyGjH+OVqOCSiVIqS34= +github.com/caarlos0/ctrlc v1.0.0/go.mod h1:CdXpj4rmq0q/1Eb44M9zi2nKB0QraNKuRGYGrrHhcQw= +github.com/campoy/unique v0.0.0-20180121183637-88950e537e7e/go.mod h1:9IOqJGCPMSc6E5ydlp5NIonxObaeu/Iub/X03EKPVYo= github.com/casbin/casbin/v2 v2.1.2/go.mod h1:YcPU1XXisHhLzuxH9coDNf2FbKpjGlbCg3n9yuLkIJQ= -github.com/cenkalti/backoff v2.2.1+incompatible h1:tNowT99t7UNflLxfYYSlKYsBpXdEet03Pg2g16Swow4= +github.com/casbin/casbin/v2 v2.37.0/go.mod h1:vByNa/Fchek0KZUgG5wEsl7iFsiviAYKRtgrQfcJqHg= +github.com/cavaliercoder/go-cpio v0.0.0-20180626203310-925f9528c45e/go.mod h1:oDpT4efm8tSYHXV5tHSdRvBet/b/QzxZ+XyyPehvm3A= github.com/cenkalti/backoff v2.2.1+incompatible/go.mod h1:90ReRw6GdpyfrHakVjL/QHaoyV4aDUVVkXQJJJ3NXXM= github.com/cenkalti/backoff/v4 v4.1.1/go.mod h1:scbssz8iZGpm3xbr14ovlUdkxfGXNInqkPWOWmG2CLw= -github.com/cenkalti/backoff/v4 v4.1.3 h1:cFAlzYUlVYDysBEH2T5hyJZMh3+5+WCBvSnK6Q8UtC4= +github.com/cenkalti/backoff/v4 v4.1.2/go.mod h1:scbssz8iZGpm3xbr14ovlUdkxfGXNInqkPWOWmG2CLw= github.com/cenkalti/backoff/v4 v4.1.3/go.mod h1:scbssz8iZGpm3xbr14ovlUdkxfGXNInqkPWOWmG2CLw= +github.com/census-instrumentation/opencensus-proto v0.2.0/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= +github.com/census-instrumentation/opencensus-proto v0.3.0/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= +github.com/certifi/gocertifi v0.0.0-20191021191039-0944d244cd40/go.mod h1:sGbDF6GwGcLpkNXPUTkMRoywsNa/ol15pxFe6ERfguA= +github.com/certifi/gocertifi v0.0.0-20200922220541-2c3bb06c6054/go.mod h1:sGbDF6GwGcLpkNXPUTkMRoywsNa/ol15pxFe6ERfguA= github.com/cespare/cp v0.1.0/go.mod h1:SOGHArjBr4JWaSDEVpWpo/hNg6RoKrls6Oh40hiwW+s= -github.com/cespare/xxhash v1.1.0 h1:a6HrQnmkObjyL+Gs60czilIUGqrzKutQD6XZog3p+ko= github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= -github.com/cespare/xxhash/v2 v2.1.2 h1:YRXhKfTDauu4ajMg1TPgFO5jnlC2HCbmLXMcTG5cbYE= github.com/cespare/xxhash/v2 v2.1.2/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= +github.com/charithe/durationcheck v0.0.9/go.mod h1:SSbRIBVfMjCi/kEB6K65XEA83D6prSM8ap1UCpNKtgg= +github.com/chavacava/garif v0.0.0-20220316182200-5cad0b5181d4/go.mod h1:W8EnPSQ8Nv4fUjc/v1/8tHFqhuOJXnRub0dTfuAQktU= +github.com/chavacava/garif v0.0.0-20220630083739-93517212f375/go.mod h1:4m1Rv7xfuwWPNKXlThldNuJvutYM6J95wNuuVmn55To= +github.com/checkpoint-restore/go-criu/v4 v4.1.0/go.mod h1:xUQBLp4RLc5zJtWY++yjOoMoB5lihDt7fai+75m+rGw= github.com/checkpoint-restore/go-criu/v5 v5.0.0/go.mod h1:cfwC0EG7HMUenopBsUf9d89JlCLQIfgVcNsNN0t6T2M= +github.com/checkpoint-restore/go-criu/v5 v5.3.0/go.mod h1:E/eQpaFtUKGOOSEBZgmKAcn+zUUwWxqcaKZlF54wK8E= github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI= github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI= github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= +github.com/cilium/ebpf v0.0.0-20200110133405-4032b1d8aae3/go.mod h1:MA5e5Lr8slmEg9bt0VpxxWqJlO4iwu3FBdHUzV7wQVg= +github.com/cilium/ebpf v0.0.0-20200702112145-1c8d4c9ef775/go.mod h1:7cR51M8ViRLIdUjrmSXlK9pkrsDlLHbO8jiB8X8JnOc= +github.com/cilium/ebpf v0.2.0/go.mod h1:To2CFviqOWL/M0gIMsvSMlqe7em/l1ALkX1PyjrX2Qs= +github.com/cilium/ebpf v0.4.0/go.mod h1:4tRaxcgiL706VnOzHOdBlY8IEAIdxINsQBcU4xJJXRs= github.com/cilium/ebpf v0.6.2/go.mod h1:4tRaxcgiL706VnOzHOdBlY8IEAIdxINsQBcU4xJJXRs= +github.com/cilium/ebpf v0.7.0/go.mod h1:/oI2+1shJiTGAMgl6/RgJr36Eo1jzrRcAWbcXO2usCA= github.com/circonus-labs/circonus-gometrics v2.3.1+incompatible/go.mod h1:nmEj6Dob7S7YxXgwXpfOuvO54S+tGdZdw9fuRZt25Ag= github.com/circonus-labs/circonusllhist v0.1.3/go.mod h1:kMXHVDlOchFAehlya5ePtbp5jckzBHf4XRpQvBOLI+I= +github.com/clbanning/mxj v1.8.4/go.mod h1:BVjHeAH+rl9rs6f+QIpeRl0tfu10SXn1pUSa5PVGJng= github.com/clbanning/x2j v0.0.0-20191024224557-825249438eec/go.mod h1:jMjuTZXRI4dUb/I5gc9Hdhagfvm9+RyrPryS/auMzxE= +github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= github.com/cloudflare/cloudflare-go v0.10.2-0.20190916151808-a80f83b9add9/go.mod h1:1MxXX1Ux4x6mqPmjkUgTP1CdXIBXKX7T+Jk9Gxrmx+U= +github.com/cloudflare/cloudflare-go v0.14.0/go.mod h1:EnwdgGMaFOruiPZRFSgn+TsQ3hQ7C/YWzIGLeu5c304= github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= +github.com/cncf/udpa/go v0.0.0-20210930031921-04548b0d99d4/go.mod h1:6pvJx4me5XPnfI9Z40ddWsdw2W/uZgQLFXToKeRcDiI= +github.com/cncf/xds/go v0.0.0-20210922020428-25de7278fc84/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= +github.com/cncf/xds/go v0.0.0-20211001041855-01bcc9b48dfe/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= +github.com/cncf/xds/go v0.0.0-20211130200136-a8f946100490/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/cockroachdb/datadriven v0.0.0-20190809214429-80d97fb3cbaa/go.mod h1:zn76sxSg3SzpJ0PPJaLDCu+Bu0Lg3sKTORVIj19EIF8= +github.com/cockroachdb/datadriven v0.0.0-20200714090401-bf6692d28da5/go.mod h1:h6jFvWxBdQXxjopDMZyH2UVceIRfR84bdzbkoKrsWNo= +github.com/cockroachdb/errors v1.2.4/go.mod h1:rQD95gz6FARkaKkQXUksEje/d9a6wBJoCr5oaCLELYA= +github.com/cockroachdb/logtags v0.0.0-20190617123548-eb05cc24525f/go.mod h1:i/u985jwjWRlyHXQbwatDASoW0RMlZ/3i9yJHE2xLkI= +github.com/codahale/hdrhistogram v0.0.0-20160425231609-f8ad88b59a58/go.mod h1:sE/e/2PUdi/liOCUjSTXgM1o87ZssimdTWN964YiIeI= github.com/codahale/hdrhistogram v0.0.0-20161010025455-3a0bb77429bd/go.mod h1:sE/e/2PUdi/liOCUjSTXgM1o87ZssimdTWN964YiIeI= +github.com/coinbase/kryptology v1.8.0/go.mod h1:RYXOAPdzOGUe3qlSFkMGn58i3xUA8hmxYHksuq+8ciI= github.com/coinbase/rosetta-sdk-go v0.7.0/go.mod h1:7nD3oBPIiHqhRprqvMgPoGxe/nyq3yftRmpsy29coWE= -github.com/coinbase/rosetta-sdk-go v0.8.2 h1:+sNgMUPpntOsYLy5aRsHqBY6I0MTxZkS4JXV1Un3DKc= github.com/coinbase/rosetta-sdk-go v0.8.2/go.mod h1:tXPR6AIW9ogsH4tYIaFOKOgfJNanCvcyl7JKLd4DToc= -github.com/coniks-sys/coniks-go v0.0.0-20180722014011-11acf4819b71 h1:MFLTqgfJclmtaQ1SRUrWwmDX/1UBok3XWUethkJ2swQ= github.com/coniks-sys/coniks-go v0.0.0-20180722014011-11acf4819b71/go.mod h1:TrHYHH4Wze7v7Hkwu1MH1W+mCPQKM+gs+PicdEV14o8= +github.com/consensys/bavard v0.1.8-0.20210406032232-f3452dc9b572/go.mod h1:Bpd0/3mZuaj6Sj+PqrmIquiOKy397AKGThQPaGzNXAQ= +github.com/consensys/bavard v0.1.8-0.20210915155054-088da2f7f54a/go.mod h1:9ItSMtA/dXMAiL7BG6bqW2m3NdSEObYWoH223nGHukI= +github.com/consensys/gnark-crypto v0.4.1-0.20210426202927-39ac3d4b3f1f/go.mod h1:815PAHg3wvysy0SyIqanF8gZ0Y1wjk/hrDHD/iT88+Q= +github.com/consensys/gnark-crypto v0.5.3/go.mod h1:hOdPlWQV1gDLp7faZVeg8Y0iEPFaOUnCc4XeCCk96p0= +github.com/containerd/aufs v0.0.0-20200908144142-dab0cbea06f4/go.mod h1:nukgQABAEopAHvB6j7cnP5zJ+/3aVcE7hCYqvIwAHyE= +github.com/containerd/aufs v0.0.0-20201003224125-76a6863f2989/go.mod h1:AkGGQs9NM2vtYHaUen+NljV0/baGCAPELGm2q9ZXpWU= +github.com/containerd/aufs v0.0.0-20210316121734-20793ff83c97/go.mod h1:kL5kd6KM5TzQjR79jljyi4olc1Vrx6XBlcyj3gNv2PU= +github.com/containerd/aufs v1.0.0/go.mod h1:kL5kd6KM5TzQjR79jljyi4olc1Vrx6XBlcyj3gNv2PU= +github.com/containerd/btrfs v0.0.0-20201111183144-404b9149801e/go.mod h1:jg2QkJcsabfHugurUvvPhS3E08Oxiuh5W/g1ybB4e0E= +github.com/containerd/btrfs v0.0.0-20210316141732-918d888fb676/go.mod h1:zMcX3qkXTAi9GI50+0HOeuV8LU2ryCE/V2vG/ZBiTss= +github.com/containerd/btrfs v1.0.0/go.mod h1:zMcX3qkXTAi9GI50+0HOeuV8LU2ryCE/V2vG/ZBiTss= +github.com/containerd/cgroups v0.0.0-20190717030353-c4b9ac5c7601/go.mod h1:X9rLEHIqSf/wfK8NsPqxJmeZgW4pcfzdXITDrUSJ6uI= +github.com/containerd/cgroups v0.0.0-20190919134610-bf292b21730f/go.mod h1:OApqhQ4XNSNC13gXIwDjhOQxjWa/NxkwZXJ1EvqT0ko= +github.com/containerd/cgroups v0.0.0-20200531161412-0dbf7f05ba59/go.mod h1:pA0z1pT8KYB3TCXK/ocprsh7MAkoW8bZVzPdih9snmM= +github.com/containerd/cgroups v0.0.0-20200710171044-318312a37340/go.mod h1:s5q4SojHctfxANBDvMeIaIovkq29IP48TKAxnhYRxvo= +github.com/containerd/cgroups v0.0.0-20200824123100-0b889c03f102/go.mod h1:s5q4SojHctfxANBDvMeIaIovkq29IP48TKAxnhYRxvo= +github.com/containerd/cgroups v0.0.0-20210114181951-8a68de567b68/go.mod h1:ZJeTFisyysqgcCdecO57Dj79RfL0LNeGiFUqLYQRYLE= +github.com/containerd/cgroups v1.0.1/go.mod h1:0SJrPIenamHDcZhEcJMNBB85rHcUsw4f25ZfBiPYRkU= +github.com/containerd/cgroups v1.0.3/go.mod h1:/ofk34relqNjSGyqPrmEULrO4Sc8LJhvJmWbUCUKqj8= +github.com/containerd/console v0.0.0-20180822173158-c12b1e7919c1/go.mod h1:Tj/on1eG8kiEhd0+fhSDzsPAFESxzBBvdyEgyryXffw= +github.com/containerd/console v0.0.0-20181022165439-0650fd9eeb50/go.mod h1:Tj/on1eG8kiEhd0+fhSDzsPAFESxzBBvdyEgyryXffw= +github.com/containerd/console v0.0.0-20191206165004-02ecf6a7291e/go.mod h1:8Pf4gM6VEbTNRIT26AyyU7hxdQU3MvAvxVI0sc00XBE= +github.com/containerd/console v1.0.0/go.mod h1:8Pf4gM6VEbTNRIT26AyyU7hxdQU3MvAvxVI0sc00XBE= +github.com/containerd/console v1.0.1/go.mod h1:XUsP6YE/mKtz6bxc+I8UiKKTP04qjQL4qcS3XoQ5xkw= github.com/containerd/console v1.0.2/go.mod h1:ytZPjGgY2oeTkAONYafi2kSj0aYggsf8acV1PGKCbzQ= +github.com/containerd/console v1.0.3/go.mod h1:7LqA/THxQ86k76b8c/EMSiaJ3h1eZkMkXar0TQ1gf3U= +github.com/containerd/containerd v1.2.10/go.mod h1:bC6axHOhabU15QhwfG7w5PipXdVtMXFTttgp+kVtyUA= +github.com/containerd/containerd v1.3.0-beta.2.0.20190828155532-0293cbd26c69/go.mod h1:bC6axHOhabU15QhwfG7w5PipXdVtMXFTttgp+kVtyUA= +github.com/containerd/containerd v1.3.0/go.mod h1:bC6axHOhabU15QhwfG7w5PipXdVtMXFTttgp+kVtyUA= +github.com/containerd/containerd v1.3.1-0.20191213020239-082f7e3aed57/go.mod h1:bC6axHOhabU15QhwfG7w5PipXdVtMXFTttgp+kVtyUA= +github.com/containerd/containerd v1.3.2/go.mod h1:bC6axHOhabU15QhwfG7w5PipXdVtMXFTttgp+kVtyUA= +github.com/containerd/containerd v1.4.0-beta.2.0.20200729163537-40b22ef07410/go.mod h1:bC6axHOhabU15QhwfG7w5PipXdVtMXFTttgp+kVtyUA= +github.com/containerd/containerd v1.4.0/go.mod h1:bC6axHOhabU15QhwfG7w5PipXdVtMXFTttgp+kVtyUA= +github.com/containerd/containerd v1.4.1-0.20201117152358-0edc412565dc/go.mod h1:bC6axHOhabU15QhwfG7w5PipXdVtMXFTttgp+kVtyUA= +github.com/containerd/containerd v1.4.1/go.mod h1:bC6axHOhabU15QhwfG7w5PipXdVtMXFTttgp+kVtyUA= +github.com/containerd/containerd v1.4.3/go.mod h1:bC6axHOhabU15QhwfG7w5PipXdVtMXFTttgp+kVtyUA= +github.com/containerd/containerd v1.4.9/go.mod h1:bC6axHOhabU15QhwfG7w5PipXdVtMXFTttgp+kVtyUA= +github.com/containerd/containerd v1.5.0-beta.1/go.mod h1:5HfvG1V2FsKesEGQ17k5/T7V960Tmcumvqn8Mc+pCYQ= +github.com/containerd/containerd v1.5.0-beta.3/go.mod h1:/wr9AVtEM7x9c+n0+stptlo/uBBoBORwEx6ardVcmKU= +github.com/containerd/containerd v1.5.0-beta.4/go.mod h1:GmdgZd2zA2GYIBZ0w09ZvgqEq8EfBp/m3lcVZIvPHhI= +github.com/containerd/containerd v1.5.0-rc.0/go.mod h1:V/IXoMqNGgBlabz3tHD2TWDoTJseu1FGOKuoA4nNb2s= +github.com/containerd/containerd v1.5.1/go.mod h1:0DOxVqwDy2iZvrZp2JUx/E+hS0UNTVn7dJnIOwtYR4g= +github.com/containerd/containerd v1.5.7/go.mod h1:gyvv6+ugqY25TiXxcZC3L5yOeYgEw0QMhscqVp1AR9c= +github.com/containerd/containerd v1.5.8/go.mod h1:YdFSv5bTFLpG2HIYmfqDpSYYTDX+mc5qtSuYx1YUb/s= +github.com/containerd/containerd v1.6.1/go.mod h1:1nJz5xCZPusx6jJU8Frfct988y0NpumIq9ODB0kLtoE= +github.com/containerd/containerd v1.6.3-0.20220401172941-5ff8fce1fcc6/go.mod h1:WSt2SnDLAGWlu+Vl+EWay37seZLKqgRt6XLjIMy8SYM= +github.com/containerd/containerd v1.6.8/go.mod h1:By6p5KqPK0/7/CgO/A6t/Gz+CUYUu2zf1hUaaymVXB0= +github.com/containerd/continuity v0.0.0-20190426062206-aaeac12a7ffc/go.mod h1:GL3xCUCBDV3CZiTSEKksMWbLE66hEyuu9qyDOOqM47Y= +github.com/containerd/continuity v0.0.0-20190815185530-f2a389ac0a02/go.mod h1:GL3xCUCBDV3CZiTSEKksMWbLE66hEyuu9qyDOOqM47Y= github.com/containerd/continuity v0.0.0-20190827140505-75bee3e2ccb6/go.mod h1:GL3xCUCBDV3CZiTSEKksMWbLE66hEyuu9qyDOOqM47Y= -github.com/containerd/continuity v0.3.0 h1:nisirsYROK15TAMVukJOUyGJjz4BNQJBVsNvAXZJ/eg= +github.com/containerd/continuity v0.0.0-20191127005431-f65d91d395eb/go.mod h1:GL3xCUCBDV3CZiTSEKksMWbLE66hEyuu9qyDOOqM47Y= +github.com/containerd/continuity v0.0.0-20200710164510-efbc4488d8fe/go.mod h1:cECdGN1O8G9bgKTlLhuPJimka6Xb/Gg7vYzCTNVxhvo= +github.com/containerd/continuity v0.0.0-20201208142359-180525291bb7/go.mod h1:kR3BEg7bDFaEddKm54WSmrol1fKWDU1nKYkgrcgZT7Y= +github.com/containerd/continuity v0.0.0-20210208174643-50096c924a4e/go.mod h1:EXlVlkqNba9rJe3j7w3Xa924itAMLgZH4UD/Q4PExuQ= +github.com/containerd/continuity v0.1.0/go.mod h1:ICJu0PwR54nI0yPEnJ6jcS+J7CZAUXrLh8lPo2knzsM= +github.com/containerd/continuity v0.2.2/go.mod h1:pWygW9u7LtS1o4N/Tn0FoCFDIXZ7rxcMX7HX1Dmibvk= +github.com/containerd/continuity v0.2.3-0.20220330195504-d132b287edc8/go.mod h1:pWygW9u7LtS1o4N/Tn0FoCFDIXZ7rxcMX7HX1Dmibvk= +github.com/containerd/continuity v0.3.0/go.mod h1:wJEAIwKOm/pBZuBd0JmeTvnLquTB1Ag8espWhkykbPM= +github.com/containerd/fifo v0.0.0-20180307165137-3d5202aec260/go.mod h1:ODA38xgv3Kuk8dQz2ZQXpnv/UZZUHUCL7pnLehbXgQI= +github.com/containerd/fifo v0.0.0-20190226154929-a9fb20d87448/go.mod h1:ODA38xgv3Kuk8dQz2ZQXpnv/UZZUHUCL7pnLehbXgQI= +github.com/containerd/fifo v0.0.0-20200410184934-f15a3290365b/go.mod h1:jPQ2IAeZRCYxpS/Cm1495vGFww6ecHmMk1YJH2Q5ln0= +github.com/containerd/fifo v0.0.0-20201026212402-0724c46b320c/go.mod h1:jPQ2IAeZRCYxpS/Cm1495vGFww6ecHmMk1YJH2Q5ln0= +github.com/containerd/fifo v0.0.0-20210316144830-115abcc95a1d/go.mod h1:ocF/ME1SX5b1AOlWi9r677YJmCPSwwWnQ9O123vzpE4= +github.com/containerd/fifo v1.0.0/go.mod h1:ocF/ME1SX5b1AOlWi9r677YJmCPSwwWnQ9O123vzpE4= +github.com/containerd/fuse-overlayfs-snapshotter v1.0.2/go.mod h1:nRZceC8a7dRm3Ao6cJAwuJWPFiBPaibHiFntRUnzhwU= +github.com/containerd/go-cni v1.0.1/go.mod h1:+vUpYxKvAF72G9i1WoDOiPGRtQpqsNW/ZHtSlv++smU= +github.com/containerd/go-cni v1.0.2/go.mod h1:nrNABBHzu0ZwCug9Ije8hL2xBCYh/pjfMb1aZGrrohk= +github.com/containerd/go-cni v1.1.0/go.mod h1:Rflh2EJ/++BA2/vY5ao3K6WJRR/bZKsX123aPk+kUtA= +github.com/containerd/go-cni v1.1.3/go.mod h1:Rflh2EJ/++BA2/vY5ao3K6WJRR/bZKsX123aPk+kUtA= +github.com/containerd/go-cni v1.1.4/go.mod h1:Rflh2EJ/++BA2/vY5ao3K6WJRR/bZKsX123aPk+kUtA= +github.com/containerd/go-cni v1.1.6/go.mod h1:BWtoWl5ghVymxu6MBjg79W9NZrCRyHIdUtk4cauMe34= +github.com/containerd/go-runc v0.0.0-20180907222934-5a6d9f37cfa3/go.mod h1:IV7qH3hrUgRmyYrtgEeGWJfWbgcHL9CSRruz2Vqcph0= +github.com/containerd/go-runc v0.0.0-20190911050354-e029b79d8cda/go.mod h1:IV7qH3hrUgRmyYrtgEeGWJfWbgcHL9CSRruz2Vqcph0= +github.com/containerd/go-runc v0.0.0-20200220073739-7016d3ce2328/go.mod h1:PpyHrqVs8FTi9vpyHwPwiNEGaACDxT/N/pLcvMSRA9g= +github.com/containerd/go-runc v0.0.0-20201020171139-16b287bc67d0/go.mod h1:cNU0ZbCgCQVZK4lgG3P+9tn9/PaJNmoDXPpoJhDR+Ok= +github.com/containerd/go-runc v1.0.0/go.mod h1:cNU0ZbCgCQVZK4lgG3P+9tn9/PaJNmoDXPpoJhDR+Ok= +github.com/containerd/imgcrypt v1.0.1/go.mod h1:mdd8cEPW7TPgNG4FpuP3sGBiQ7Yi/zak9TYCG3juvb0= +github.com/containerd/imgcrypt v1.0.4-0.20210301171431-0ae5c75f59ba/go.mod h1:6TNsg0ctmizkrOgXRNQjAPFWpMYRWuiB6dSF4Pfa5SA= +github.com/containerd/imgcrypt v1.1.1-0.20210312161619-7ed62a527887/go.mod h1:5AZJNI6sLHJljKuI9IHnw1pWqo/F0nGDOuR9zgTs7ow= +github.com/containerd/imgcrypt v1.1.1/go.mod h1:xpLnwiQmEUJPvQoAapeb2SNCxz7Xr6PJrXQb0Dpc4ms= +github.com/containerd/imgcrypt v1.1.3/go.mod h1:/TPA1GIDXMzbj01yd8pIbQiLdQxed5ue1wb8bP7PQu4= +github.com/containerd/imgcrypt v1.1.4/go.mod h1:LorQnPtzL/T0IyCeftcsMEO7AqxUDbdO8j/tSUpgxvo= +github.com/containerd/nri v0.0.0-20201007170849-eb1350a75164/go.mod h1:+2wGSDGFYfE5+So4M5syatU0N0f0LbWpuqyMi4/BE8c= +github.com/containerd/nri v0.0.0-20210316161719-dbaa18c31c14/go.mod h1:lmxnXF6oMkbqs39FiCt1s0R2HSMhcLel9vNL3m4AaeY= +github.com/containerd/nri v0.1.0/go.mod h1:lmxnXF6oMkbqs39FiCt1s0R2HSMhcLel9vNL3m4AaeY= +github.com/containerd/stargz-snapshotter v0.0.0-20201027054423-3a04e4c2c116/go.mod h1:o59b3PCKVAf9jjiKtCc/9hLAd+5p/rfhBfm6aBcTEr4= +github.com/containerd/stargz-snapshotter v0.11.3/go.mod h1:2j2EAUyvrLU4D9unYlTIwGhDKQIk74KJ9E71lJsQCVM= +github.com/containerd/stargz-snapshotter/estargz v0.4.1/go.mod h1:x7Q9dg9QYb4+ELgxmo4gBUeJB0tl5dqH1Sdz0nJU1QM= +github.com/containerd/stargz-snapshotter/estargz v0.11.3/go.mod h1:7vRJIcImfY8bpifnMjt+HTJoQxASq7T28MYbP15/Nf0= +github.com/containerd/ttrpc v0.0.0-20190828154514-0e0f228740de/go.mod h1:PvCDdDGpgqzQIzDW1TphrGLssLDZp2GuS+X5DkEJB8o= +github.com/containerd/ttrpc v0.0.0-20190828172938-92c8520ef9f8/go.mod h1:PvCDdDGpgqzQIzDW1TphrGLssLDZp2GuS+X5DkEJB8o= +github.com/containerd/ttrpc v0.0.0-20191028202541-4f1b8fe65a5c/go.mod h1:LPm1u0xBw8r8NOKoOdNMeVHSawSsltak+Ihv+etqsE8= +github.com/containerd/ttrpc v1.0.1/go.mod h1:UAxOpgT9ziI0gJrmKvgcZivgxOp8iFPSk8httJEt98Y= +github.com/containerd/ttrpc v1.0.2/go.mod h1:UAxOpgT9ziI0gJrmKvgcZivgxOp8iFPSk8httJEt98Y= +github.com/containerd/ttrpc v1.1.0/go.mod h1:XX4ZTnoOId4HklF4edwc4DcqskFZuvXB1Evzy5KFQpQ= +github.com/containerd/typeurl v0.0.0-20180627222232-a93fcdb778cd/go.mod h1:Cm3kwCdlkCfMSHURc+r6fwoGH6/F1hH3S4sg0rLFWPc= +github.com/containerd/typeurl v0.0.0-20190911142611-5eb25027c9fd/go.mod h1:GeKYzf2pQcqv7tJ0AoCuuhtnqhva5LNU3U+OyKxxJpk= +github.com/containerd/typeurl v1.0.1/go.mod h1:TB1hUtrpaiO88KEK56ijojHS1+NeF0izUACaJW2mdXg= +github.com/containerd/typeurl v1.0.2/go.mod h1:9trJWW2sRlGub4wZJRTW83VtbOLS6hwcDZXTn6oPz9s= +github.com/containerd/zfs v0.0.0-20200918131355-0a33824f23a2/go.mod h1:8IgZOBdv8fAgXddBT4dBXJPtxyRsejFIpXoklgxgEjw= +github.com/containerd/zfs v0.0.0-20210301145711-11e8f1707f62/go.mod h1:A9zfAbMlQwE+/is6hi0Xw8ktpL+6glmqZYtevJgaB8Y= +github.com/containerd/zfs v0.0.0-20210315114300-dde8f0fda960/go.mod h1:m+m51S1DvAP6r3FcmYCp54bQ34pyOwTieQDNRIRHsFY= +github.com/containerd/zfs v0.0.0-20210324211415-d5c4544f0433/go.mod h1:m+m51S1DvAP6r3FcmYCp54bQ34pyOwTieQDNRIRHsFY= +github.com/containerd/zfs v1.0.0/go.mod h1:m+m51S1DvAP6r3FcmYCp54bQ34pyOwTieQDNRIRHsFY= +github.com/containernetworking/cni v0.7.1/go.mod h1:LGwApLUm2FpoOfxTDEeq8T9ipbpZ61X79hmU3w8FmsY= +github.com/containernetworking/cni v0.8.0/go.mod h1:LGwApLUm2FpoOfxTDEeq8T9ipbpZ61X79hmU3w8FmsY= +github.com/containernetworking/cni v0.8.1/go.mod h1:LGwApLUm2FpoOfxTDEeq8T9ipbpZ61X79hmU3w8FmsY= +github.com/containernetworking/cni v1.0.1/go.mod h1:AKuhXbN5EzmD4yTNtfSsX3tPcmtrBI6QcRV0NiNt15Y= +github.com/containernetworking/cni v1.1.1/go.mod h1:sDpYKmGVENF3s6uvMvGgldDWeG8dMxakj/u+i9ht9vw= +github.com/containernetworking/plugins v0.8.6/go.mod h1:qnw5mN19D8fIwkqW7oHHYDHVlzhJpcY6TQxn/fUyDDM= +github.com/containernetworking/plugins v0.9.1/go.mod h1:xP/idU2ldlzN6m4p5LmGiwRDjeJr6FLK6vuiUwoH7P8= +github.com/containernetworking/plugins v1.0.1/go.mod h1:QHCfGpaTwYTbbH+nZXKVTxNBDZcxSOplJT5ico8/FLE= +github.com/containernetworking/plugins v1.1.1/go.mod h1:Sr5TH/eBsGLXK/h71HeLfX19sZPp3ry5uHSkI4LPxV8= +github.com/containers/ocicrypt v1.0.1/go.mod h1:MeJDzk1RJHv89LjsH0Sp5KTY3ZYkjXO/C+bKAeWFIrc= +github.com/containers/ocicrypt v1.1.0/go.mod h1:b8AOe0YR67uU8OqfVNcznfFpAzu3rdgUV4GP9qXPfu4= +github.com/containers/ocicrypt v1.1.1/go.mod h1:Dm55fwWm1YZAjYRaJ94z2mfZikIyIN4B0oB3dj3jFxY= +github.com/containers/ocicrypt v1.1.2/go.mod h1:Dm55fwWm1YZAjYRaJ94z2mfZikIyIN4B0oB3dj3jFxY= +github.com/containers/ocicrypt v1.1.3/go.mod h1:xpdkbVAuaH3WzbEabUd5yDsl9SwJA5pABH85425Es2g= github.com/coreos/bbolt v1.3.2/go.mod h1:iRUV2dpdMOn7Bo10OQBFzIJO9kkE559Wcmn+qkEiiKk= github.com/coreos/etcd v3.3.10+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= github.com/coreos/etcd v3.3.13+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= github.com/coreos/go-etcd v2.0.0+incompatible/go.mod h1:Jez6KQU2B/sWsbdaef3ED8NzMklzPG4d5KIOhIy30Tk= +github.com/coreos/go-iptables v0.4.5/go.mod h1:/mVI274lEDI2ns62jHCDnCyBF9Iwsmekav8Dbxlm1MU= +github.com/coreos/go-iptables v0.5.0/go.mod h1:/mVI274lEDI2ns62jHCDnCyBF9Iwsmekav8Dbxlm1MU= +github.com/coreos/go-iptables v0.6.0/go.mod h1:Qe8Bv2Xik5FyTXwgIbLAnv2sWSBmvWdFETJConOQ//Q= +github.com/coreos/go-oidc v2.1.0+incompatible/go.mod h1:CgnwVTmzoESiwO9qyAFEMiHoZ1nMCKZlZ9V6mm3/LKc= github.com/coreos/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= github.com/coreos/go-semver v0.3.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= +github.com/coreos/go-systemd v0.0.0-20161114122254-48702e0da86b/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= github.com/coreos/go-systemd v0.0.0-20180511133405-39ca1b05acc7/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= +github.com/coreos/go-systemd v0.0.0-20181012123002-c6f51f82210d/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= github.com/coreos/go-systemd v0.0.0-20190321100706-95778dfbb74e/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= +github.com/coreos/go-systemd v0.0.0-20190620071333-e64a0ec8b42a/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= +github.com/coreos/go-systemd/v22 v22.0.0/go.mod h1:xO0FLkIi5MaZafQlIrOotqXZ90ih+1atmu1JpKERPPk= +github.com/coreos/go-systemd/v22 v22.1.0/go.mod h1:xO0FLkIi5MaZafQlIrOotqXZ90ih+1atmu1JpKERPPk= github.com/coreos/go-systemd/v22 v22.3.2/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc= github.com/coreos/go-systemd/v22 v22.3.3-0.20220203105225-a9a7ef127534/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc= github.com/coreos/pkg v0.0.0-20160727233714-3ac0863d7acf/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= +github.com/coreos/pkg v0.0.0-20180108230652-97fdf19511ea/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= github.com/coreos/pkg v0.0.0-20180928190104-399ea9e2e55f/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= github.com/cosmos/btcutil v1.0.4/go.mod h1:Ffqc8Hn6TJUdDgHBwIZLtrLQC1KdJ9jGJl/TvgUaxbU= -github.com/cosmos/btcutil v1.0.5 h1:t+ZFcX77LpKtDBhjucvnOH8C2l2ioGsBNEQ3jef8xFk= github.com/cosmos/btcutil v1.0.5/go.mod h1:IyB7iuqZMJlthe2tkIFL33xPyzbFYP0XVdS8P5lUPis= -github.com/cosmos/cosmos-sdk v0.45.1 h1:PY79YxPea5qlRLExRnzg8/rT1Scc8GGgRs22p7DX99Q= github.com/cosmos/cosmos-sdk v0.45.1/go.mod h1:XXS/asyCqWNWkx2rW6pSuen+EVcpAFxq6khrhnZgHaQ= -github.com/cosmos/cosmos-sdk/ics23/go v0.8.0 h1:iKclrn3YEOwk4jQHT2ulgzuXyxmzmPczUalMwW4XH9k= github.com/cosmos/cosmos-sdk/ics23/go v0.8.0/go.mod h1:2a4dBq88TUoqoWAU5eu0lGvpFP3wWDPgdHPargtyw30= github.com/cosmos/go-bip39 v0.0.0-20180819234021-555e2067c45d/go.mod h1:tSxLoYXyBmiFeKpvmq4dzayMdCjCnu8uqmCysIGBT2Y= -github.com/cosmos/go-bip39 v1.0.0 h1:pcomnQdrdH22njcAatO0yWojsUnCO3y2tNoV1cb6hHY= github.com/cosmos/go-bip39 v1.0.0/go.mod h1:RNJv0H/pOIVgxw6KS7QeX2a0Uo0aKUlfhZ4xuwvCdJw= -github.com/cosmos/gorocksdb v1.2.0 h1:d0l3jJG8M4hBouIZq0mDUHZ+zjOx044J3nGRskwTb4Y= +github.com/cosmos/gogoproto v1.4.2/go.mod h1:cLxOsn1ljAHSV527CHOtaIP91kK6cCrZETRBrkzItWU= github.com/cosmos/gorocksdb v1.2.0/go.mod h1:aaKvKItm514hKfNJpUJXnnOWeBnk2GL4+Qw9NHizILw= github.com/cosmos/iavl v0.17.3/go.mod h1:prJoErZFABYZGDHka1R6Oay4z9PrNeFFiMKHDAMOi4w= -github.com/cosmos/iavl v0.19.4 h1:t82sN+Y0WeqxDLJRSpNd8YFX5URIrT+p8n6oJbJ2Dok= github.com/cosmos/iavl v0.19.4/go.mod h1:X9PKD3J0iFxdmgNLa7b2LYWdsGd90ToV5cAONApkEPw= -github.com/cosmos/interchain-accounts v0.1.0 h1:QmuwNsf1Hxl3P5GSGt7Z+JeuHPiZw4Z34R/038P5T6s= +github.com/cosmos/ibc-go/v3 v3.0.0/go.mod h1:Mb+1NXiPOLd+CPFlOC6BKeAUaxXlhuWenMmRiUiSmwY= github.com/cosmos/interchain-accounts v0.1.0/go.mod h1:Fv6LXDs+0ng4mIDVWwEJMXbAIMxY4kiq+A7Bw1Fb9AY= github.com/cosmos/ledger-cosmos-go v0.11.1/go.mod h1:J8//BsAGTo3OC/vDLjMRFLW6q0WAaXvHnVc7ZmE8iUY= -github.com/cosmos/ledger-cosmos-go v0.12.1 h1:sMBxza5p/rNK/06nBSNmsI/WDqI0pVJFVNihy1Y984w= github.com/cosmos/ledger-cosmos-go v0.12.1/go.mod h1:dhO6kj+Y+AHIOgAe4L9HL/6NDdyyth4q238I9yFpD2g= github.com/cosmos/ledger-go v0.9.2/go.mod h1:oZJ2hHAZROdlHiwTg4t7kP+GKIIkBT+o6c9QWFanOyI= github.com/cpuguy83/go-md2man v1.0.10/go.mod h1:SmD6nW6nTyfqj6ABTjUi3V3JVMnlJmwcJI5acqYI6dE= github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= github.com/cpuguy83/go-md2man/v2 v2.0.0/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= +github.com/cpuguy83/go-md2man/v2 v2.0.1/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= github.com/cpuguy83/go-md2man/v2 v2.0.2/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= +github.com/creachadair/taskgroup v0.3.2/go.mod h1:wieWwecHVzsidg2CsUnFinW1faVN4+kq+TDlRJQ0Wbk= github.com/creack/pty v1.1.7/go.mod h1:lj5s0c3V2DBrqTV7llrYr5NG6My20zk30Fl46Y7DoTY= github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= +github.com/creack/pty v1.1.11/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= +github.com/cristalhq/acmd v0.8.1/go.mod h1:LG5oa43pE/BbxtfMoImHCQN++0Su7dzipdgBjMCBVDQ= +github.com/curioswitch/go-reassign v0.2.0/go.mod h1:x6OpXuWvgfQaMGks2BZybTngWjT84hqJfKoO8Tt/Roc= +github.com/cyberdelia/templates v0.0.0-20141128023046-ca7fffd4298c/go.mod h1:GyV+0YP4qX0UQ7r2MoYZ+AvYDp12OF5yg4q8rGnyNh4= github.com/cyphar/filepath-securejoin v0.2.2/go.mod h1:FpkQEhXnPnOthhzymB7CGsFk2G9VLXONKD9G7QGMM+4= +github.com/cyphar/filepath-securejoin v0.2.3/go.mod h1:aPGpWjXOXUn2NCNjFvBE6aRxGGx79pTxQpKOJNYHHl4= +github.com/d2g/dhcp4 v0.0.0-20170904100407-a1d1b6c41b1c/go.mod h1:Ct2BUK8SB0YC1SMSibvLzxjeJLnrYEVLULFNiHY9YfQ= +github.com/d2g/dhcp4client v1.0.0/go.mod h1:j0hNfjhrt2SxUOw55nL0ATM/z4Yt3t2Kd1mW34z5W5s= +github.com/d2g/dhcp4server v0.0.0-20181031114812-7d4a0a7f59a5/go.mod h1:Eo87+Kg/IX2hfWJfwxMzLyuSZyxSoAug2nGa1G2QAi8= +github.com/d2g/hardwareaddr v0.0.0-20190221164911-e7d9fbe030e4/go.mod h1:bMl4RjIciD2oAxI7DmWRx6gbeqrkoLqv3MV0vzNad+I= +github.com/daixiang0/gci v0.3.3/go.mod h1:1Xr2bxnQbDxCqqulUOv8qpGqkgRw9RSCGGjEC2LjF8o= +github.com/daixiang0/gci v0.8.1/go.mod h1:EpVfrztufwVgQRXjnX4zuNinEpLj5OmMjtu/+MB0V0c= github.com/danieljoos/wincred v1.0.2/go.mod h1:SnuYRW9lp1oJrZX/dXJqr0cPK5gYXqx3EJbmjhLdK9U= -github.com/danieljoos/wincred v1.1.2 h1:QLdCxFs1/Yl4zduvBdcHB8goaYk9RARS2SgLLRuAyr0= +github.com/danieljoos/wincred v1.1.0/go.mod h1:XYlo+eRTsVA9aHGp7NGjFkPla4m+DCL7hqDjlFjiygg= github.com/danieljoos/wincred v1.1.2/go.mod h1:GijpziifJoIBfYh+S7BbkdUTU4LfM+QnGqR5Vl2tAx0= +github.com/dave/jennifer v1.2.0/go.mod h1:fIb+770HOpJ2fmN9EPPKOqm1vMGhB+TwXKMZhrIygKg= +github.com/davecgh/go-spew v0.0.0-20151105211317-5215b55f46b2/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/davecgh/go-spew v0.0.0-20161028175848-04cdfd42973b/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v0.0.0-20171005155431-ecdeabc65495/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/deckarep/golang-set v0.0.0-20180603214616-504e848d77ea/go.mod h1:93vsz/8Wt4joVM7c2AVqh+YRMiUSc14yDtF28KmMOgQ= -github.com/decred/dcrd/dcrec/secp256k1/v4 v4.0.1 h1:YLtO71vCjJRCBcrPMtQ9nqBsqpA1m5sE92cU+pd5Mcc= +github.com/deckarep/golang-set v1.8.0/go.mod h1:5nI87KwE7wgsBU1F4GKAw2Qod7p5kyS383rP6+o6qqo= +github.com/decred/dcrd/crypto/blake256 v1.0.0/go.mod h1:sQl2p6Y26YV+ZOcSTP6thNdn47hh8kt6rqSlvmrXFAc= +github.com/decred/dcrd/dcrec/secp256k1/v4 v4.0.1/go.mod h1:hyedUtir6IdtD/7lIxGeCxkaw7y45JueMRL4DIyJDKs= github.com/decred/dcrd/lru v1.0.0/go.mod h1:mxKOwFd7lFjN2GZYsiz/ecgqR6kkYAl+0pz0tEMk218= -github.com/desertbit/timer v0.0.0-20180107155436-c41aec40b27f h1:U5y3Y5UE0w7amNe7Z5G/twsBW0KEalRQXZzf8ufSh9I= +github.com/deepmap/oapi-codegen v1.6.0/go.mod h1:ryDa9AgbELGeB+YEXE1dR53yAjHwFvE9iAUlWl9Al3M= +github.com/deepmap/oapi-codegen v1.8.2/go.mod h1:YLgSKSDv/bZQB7N4ws6luhozi3cEdRktEqrX88CvjIw= +github.com/denis-tingaikin/go-header v0.4.3/go.mod h1:0wOCWuN71D5qIgE2nz9KrKmuYBAC2Mra5RassOIQ2/c= +github.com/denisenkom/go-mssqldb v0.12.0/go.mod h1:iiK0YP1ZeepvmBQk/QpLEhhTNJgfzrpArPY/aFvc9yU= +github.com/denverdino/aliyungo v0.0.0-20190125010748-a747050bb1ba/go.mod h1:dV8lFg6daOBZbT6/BDGIz6Y3WFGn8juu6G+CQ6LHtl0= github.com/desertbit/timer v0.0.0-20180107155436-c41aec40b27f/go.mod h1:xH/i4TFMt8koVQZ6WFms69WAsDWr2XsYL3Hkl7jkoLE= +github.com/devigned/tab v0.1.1/go.mod h1:XG9mPq0dFghrYvoBF3xdRrJzSTX1b7IQrvaL9mzjeJY= github.com/dgraph-io/badger/v2 v2.2007.2/go.mod h1:26P/7fbL4kUZVEVKLAKXkBXKOydDmM2p1e+NhhnBCAE= -github.com/dgraph-io/badger/v2 v2.2007.4 h1:TRWBQg8UrlUhaFdco01nO2uXwzKS7zd+HVdwV/GHc4o= github.com/dgraph-io/badger/v2 v2.2007.4/go.mod h1:vSw/ax2qojzbN6eXHIx6KPKtCSHJN/Uz0X0VPruTIhk= github.com/dgraph-io/ristretto v0.0.3-0.20200630154024-f66de99634de/go.mod h1:KPxhHT9ZxKefz+PCeOGsrHpl1qZ7i70dGTu2u+Ahh6E= github.com/dgraph-io/ristretto v0.0.3/go.mod h1:KPxhHT9ZxKefz+PCeOGsrHpl1qZ7i70dGTu2u+Ahh6E= -github.com/dgraph-io/ristretto v0.1.0 h1:Jv3CGQHp9OjuMBSne1485aDpUkTKEcUqF+jm/LuerPI= github.com/dgraph-io/ristretto v0.1.0/go.mod h1:fux0lOrBhrVCJd3lcTHsIJhq1T2rokOu6v9Vcb3Q9ug= +github.com/dgrijalva/jwt-go v0.0.0-20170104182250-a601269ab70c/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= +github.com/dgryski/go-bitstream v0.0.0-20180413035011-3522498ce2c8/go.mod h1:VMaSuZ+SZcx/wljOQKvp5srsbCiKDEb6K2wC4+PiBmQ= github.com/dgryski/go-farm v0.0.0-20190423205320-6a90982ecee2/go.mod h1:SqUrOPUnsFjfmXRMNPybcSiG0BgUW2AuFH8PAnS2iTw= -github.com/dgryski/go-farm v0.0.0-20200201041132-a6ae2369ad13 h1:fAjc9m62+UWV/WAFKLNi6ZS0675eEUC9y3AlwSbQu1Y= github.com/dgryski/go-farm v0.0.0-20200201041132-a6ae2369ad13/go.mod h1:SqUrOPUnsFjfmXRMNPybcSiG0BgUW2AuFH8PAnS2iTw= github.com/dgryski/go-sip13 v0.0.0-20181026042036-e10d5fee7954/go.mod h1:vAd38F8PWV+bWy6jNmig1y/TA+kYO4g3RSRF0IAv0no= +github.com/dimchansky/utfbom v1.1.0/go.mod h1:rO41eb7gLfo8SF1jd9F8HplJm1Fewwi4mQvIirEdv+8= +github.com/dimchansky/utfbom v1.1.1/go.mod h1:SxdoEBH5qIqFocHMyGOXVAybYJdr71b1Q/j0mACtrfE= github.com/dlclark/regexp2 v1.2.0/go.mod h1:2pZnwuY/m+8K6iRw6wQdMtk+rH5tNGR1i55kozfMjCc= +github.com/dlclark/regexp2 v1.4.1-0.20201116162257-a2a8dda75c91/go.mod h1:2pZnwuY/m+8K6iRw6wQdMtk+rH5tNGR1i55kozfMjCc= +github.com/dnaeon/go-vcr v1.0.1/go.mod h1:aBB1+wY4s93YsC3HHjMBMrwTj2R9FHDzUr9KyGc8n1E= +github.com/dnaeon/go-vcr v1.1.0/go.mod h1:M7tiix8f0r6mKKJ3Yq/kqU1OYf3MnfmBWVbPx/yU9ko= +github.com/dnaeon/go-vcr v1.2.0/go.mod h1:R4UdLID7HZT3taECzJs4YgbbH6PIGXB6W/sc5OLb6RQ= +github.com/docker/cli v0.0.0-20190925022749-754388324470/go.mod h1:JLrzqnKDaYBop7H2jaqPtU4hHvMKP+vjCwu2uszcLI8= +github.com/docker/cli v0.0.0-20191017083524-a8ff7f821017/go.mod h1:JLrzqnKDaYBop7H2jaqPtU4hHvMKP+vjCwu2uszcLI8= +github.com/docker/cli v20.10.0-beta1.0.20201029214301-1d20b15adc38+incompatible/go.mod h1:JLrzqnKDaYBop7H2jaqPtU4hHvMKP+vjCwu2uszcLI8= +github.com/docker/cli v20.10.13+incompatible/go.mod h1:JLrzqnKDaYBop7H2jaqPtU4hHvMKP+vjCwu2uszcLI8= +github.com/docker/cli v20.10.14+incompatible/go.mod h1:JLrzqnKDaYBop7H2jaqPtU4hHvMKP+vjCwu2uszcLI8= +github.com/docker/cli v20.10.17+incompatible/go.mod h1:JLrzqnKDaYBop7H2jaqPtU4hHvMKP+vjCwu2uszcLI8= +github.com/docker/distribution v0.0.0-20190905152932-14b96e55d84c/go.mod h1:0+TTO4EOBfRPhZXAeF1Vu+W3hHZ8eLp8PgKVZlcvtFY= +github.com/docker/distribution v2.6.0-rc.1.0.20180327202408-83389a148052+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w= +github.com/docker/distribution v2.7.1-0.20190205005809-0d3efadf0154+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w= +github.com/docker/distribution v2.7.1+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w= +github.com/docker/distribution v2.8.1+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w= +github.com/docker/docker v0.0.0-20200511152416-a93e9eb0e95c/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= +github.com/docker/docker v0.7.3-0.20190327010347-be7ac8be2ae0/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= +github.com/docker/docker v1.4.2-0.20180531152204-71cd53e4a197/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= github.com/docker/docker v1.4.2-0.20180625184442-8e610b2b55bf/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= -github.com/docker/go-connections v0.4.0 h1:El9xVISelRB7BuFusrZozjnkIM5YnzCViNKohAFqRJQ= +github.com/docker/docker v1.4.2-0.20190924003213-a8608b5b67c7/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= +github.com/docker/docker v1.6.2/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= +github.com/docker/docker v17.12.0-ce-rc1.0.20200730172259-9f28837c1d93+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= +github.com/docker/docker v20.10.0-beta1.0.20201110211921-af34b94a78a1+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= +github.com/docker/docker v20.10.3-0.20211208011758-87521affb077+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= +github.com/docker/docker v20.10.7+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= +github.com/docker/docker v20.10.17+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= +github.com/docker/docker v20.10.19+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= +github.com/docker/docker-credential-helpers v0.6.3/go.mod h1:WRaJzqw3CTB9bk10avuGsjVBZsD05qeibJ1/TYlvc0Y= +github.com/docker/docker-credential-helpers v0.6.4/go.mod h1:ofX3UI0Gz1TteYBjtgs07O36Pyasyp66D2uKT7H8W1c= github.com/docker/go-connections v0.4.0/go.mod h1:Gbd7IOopHjR8Iph03tsViu4nIes5XhDvyHbTtUxmeec= +github.com/docker/go-events v0.0.0-20170721190031-9461782956ad/go.mod h1:Uw6UezgYA44ePAFQYUehOuCzmy5zmg/+nl2ZfMWGkpA= +github.com/docker/go-events v0.0.0-20190806004212-e31b211e4f1c/go.mod h1:Uw6UezgYA44ePAFQYUehOuCzmy5zmg/+nl2ZfMWGkpA= +github.com/docker/go-metrics v0.0.0-20180209012529-399ea8c73916/go.mod h1:/u0gXw0Gay3ceNrsHubL3BtdOL2fHf93USgMTe0W5dI= +github.com/docker/go-metrics v0.0.1/go.mod h1:cG1hvH2utMXtqgqqYE9plW6lDxS3/5ayHzueweSI3Vw= +github.com/docker/go-units v0.3.3/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk= github.com/docker/go-units v0.4.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk= -github.com/docker/go-units v0.5.0 h1:69rxXcBk27SvSaaxTtLh/8llcHD8vYHT7WSdRZ/jvr4= +github.com/docker/go-units v0.5.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk= +github.com/docker/libnetwork v0.8.0-dev.2.0.20200917202933-d0951081b35f/go.mod h1:93m0aTqz6z+g32wla4l4WxTrdtvBRmVzYRkYvasA5Z8= +github.com/docker/libtrust v0.0.0-20150114040149-fa567046d9b1/go.mod h1:cyGadeNEkKy96OOhEzfZl+yxihPEzKnqJwvfuSUqbZE= +github.com/docker/spdystream v0.0.0-20160310174837-449fdfce4d96/go.mod h1:Qh8CwZgvJUkLughtfhJv5dyTYa91l1fOUCrgjqmcifM= +github.com/docopt/docopt-go v0.0.0-20180111231733-ee0de3bc6815/go.mod h1:WwZ+bS3ebgob9U8Nd0kOddGdZWjyMGR8Wziv+TBNwSE= github.com/dop251/goja v0.0.0-20200721192441-a695b0cdd498/go.mod h1:Mw6PkjjMXWbTj+nnj4s3QPXq1jaT0s5pC0iFD4+BOAA= +github.com/dop251/goja v0.0.0-20220405120441-9037c2b61cbf/go.mod h1:R9ET47fwRVRPZnOGvHxxhuZcbrMCuiqOz3Rlrh4KSnk= +github.com/dop251/goja_nodejs v0.0.0-20210225215109-d91c329300e7/go.mod h1:hn7BA7c8pLvoGndExHudxTDKZ84Pyvv+90pbBjbTz0Y= github.com/dustin/go-humanize v0.0.0-20171111073723-bb3d318650d4/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= -github.com/dustin/go-humanize v1.0.0 h1:VSnTsYCnlFHaM2/igO1h6X3HA71jcobQuxemgkq4zYo= github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= github.com/dvsekhvalnov/jose2go v0.0.0-20200901110807-248326c1351b/go.mod h1:7BvyPhdbLxMXIYTFPLsyJRFMsKmOZnQmzh6Gb+uquuM= -github.com/dvsekhvalnov/jose2go v1.5.0 h1:3j8ya4Z4kMCwT5nXIKFSV84YS+HdqSSO0VsTQxaLAeM= github.com/dvsekhvalnov/jose2go v1.5.0/go.mod h1:QsHjhyTlD/lAVqn/NSbVZmSCGeDehTB/mPZadG+mhXU= github.com/dvyukov/go-fuzz v0.0.0-20200318091601-be3528f3a813/go.mod h1:11Gm+ccJnvAhCNLlf5+cS9KjtbaD5I5zaZpFMsTHWTw= github.com/eapache/go-resiliency v1.1.0/go.mod h1:kFI+JgMyC7bLPUVY133qvEBtVayf5mFgVsvEsIPBvNs= github.com/eapache/go-xerial-snappy v0.0.0-20180814174437-776d5712da21/go.mod h1:+020luEh2TKB4/GOp8oxxtq0Daoen/Cii55CzbTV6DU= github.com/eapache/queue v1.1.0/go.mod h1:6eCeP0CKFpHLu8blIFXhExK/dRa7WDZfr6jVFPTqq+I= +github.com/eclipse/paho.mqtt.golang v1.2.0/go.mod h1:H9keYFcgq3Qr5OUJm/JZI/i6U7joQ8SYLhZwfeOo6Ts= github.com/edsrzf/mmap-go v0.0.0-20160512033002-935e0e8a636c/go.mod h1:YO35OhQPt3KJa3ryjFM5Bs14WD66h8eGKpfaBNrHW5M= github.com/edsrzf/mmap-go v1.0.0/go.mod h1:YO35OhQPt3KJa3ryjFM5Bs14WD66h8eGKpfaBNrHW5M= +github.com/elazarl/goproxy v0.0.0-20170405201442-c4fc26588b6e/go.mod h1:/Zj4wYkgs4iZTTu3o/KG3Itv/qCCa8VVMlb3i9OVuzc= +github.com/elazarl/goproxy v0.0.0-20180725130230-947c36da3153/go.mod h1:/Zj4wYkgs4iZTTu3o/KG3Itv/qCCa8VVMlb3i9OVuzc= +github.com/emicklei/go-restful v0.0.0-20170410110728-ff4f55a20633/go.mod h1:otzb+WCGbkyDHkqmQmT5YD2WR4BBwUdeQoFo8l/7tVs= +github.com/emicklei/go-restful v2.9.5+incompatible/go.mod h1:otzb+WCGbkyDHkqmQmT5YD2WR4BBwUdeQoFo8l/7tVs= github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= +github.com/envoyproxy/go-control-plane v0.10.1/go.mod h1:AY7fTTXNdv/aJ2O5jwpxAPOWUZ7hQAEvzN5Pf27BkQQ= +github.com/envoyproxy/protoc-gen-validate v0.0.14/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= +github.com/envoyproxy/protoc-gen-validate v0.6.2/go.mod h1:2t7qjJNvHPx8IjnBOzl9E9/baC+qXE/TeeyBRzgJDws= +github.com/esimonov/ifshort v1.0.4/go.mod h1:Pe8zjlRrJ80+q2CxHLfEOfTwxCZ4O+MuhcHcfgNWTk0= github.com/ethereum/go-ethereum v1.9.25/go.mod h1:vMkFiYLHI4tgPw4k2j4MHKoovchFE8plZ0M9VMk4/oM= +github.com/ethereum/go-ethereum v1.10.21/go.mod h1:EYFyF19u3ezGLD4RqOkLq+ZCXzYbLoNDdZlMt7kyKFg= +github.com/ettle/strcase v0.1.1/go.mod h1:hzDLsPC7/lwKyBOywSHEP89nt2pDgdy+No1NBA9o9VY= +github.com/evanphx/json-patch v4.2.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk= +github.com/evanphx/json-patch v4.9.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk= +github.com/evanphx/json-patch v4.11.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk= +github.com/evanphx/json-patch v4.12.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk= github.com/facebookgo/ensure v0.0.0-20160127193407-b4ab57deab51/go.mod h1:Yg+htXGokKKdzcwhuNDwVvN+uBxDGXJ7G/VN1d8fa64= -github.com/facebookgo/ensure v0.0.0-20200202191622-63f1cf65ac4c h1:8ISkoahWXwZR41ois5lSJBSVw4D0OV19Ht/JSTzvSv0= -github.com/facebookgo/stack v0.0.0-20160209184415-751773369052 h1:JWuenKqqX8nojtoVVWjGfOF9635RETekkoH6Cc9SX0A= +github.com/facebookgo/ensure v0.0.0-20200202191622-63f1cf65ac4c/go.mod h1:Yg+htXGokKKdzcwhuNDwVvN+uBxDGXJ7G/VN1d8fa64= github.com/facebookgo/stack v0.0.0-20160209184415-751773369052/go.mod h1:UbMTZqLaRiH3MsBH8va0n7s1pQYcu3uTb8G4tygF4Zg= github.com/facebookgo/subset v0.0.0-20150612182917-8dac2c3c4870/go.mod h1:5tD+neXqOorC30/tWg0LCSkrqj/AR6gu8yY8/fpw1q0= -github.com/facebookgo/subset v0.0.0-20200203212716-c811ad88dec4 h1:7HZCaLC5+BZpmbhCOZJ293Lz68O7PYrF2EzeiFMwCLk= +github.com/facebookgo/subset v0.0.0-20200203212716-c811ad88dec4/go.mod h1:5tD+neXqOorC30/tWg0LCSkrqj/AR6gu8yY8/fpw1q0= github.com/fatih/color v1.3.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= +github.com/fatih/color v1.9.0/go.mod h1:eQcE1qtQxscV5RaZvpXrrb8Drkc3/DdQ+uUYCNjL+zU= github.com/fatih/color v1.10.0/go.mod h1:ELkj/draVOlAH/xkhN6mQ50Qd0MPOk5AAr3maGEBuJM= -github.com/felixge/httpsnoop v1.0.1 h1:lvB5Jl89CsZtGIWuTcDM1E/vkVs49/Ml7JJe07l8SPQ= +github.com/fatih/color v1.12.0/go.mod h1:ELkj/draVOlAH/xkhN6mQ50Qd0MPOk5AAr3maGEBuJM= +github.com/fatih/color v1.13.0/go.mod h1:kLAiJbzzSOZDVNGyDpeOxJ47H46qBXwg5ILebYFFOfk= +github.com/fatih/structtag v1.2.0/go.mod h1:mBJUNpUnHmRKrKlQQlmCrh5PuhftFbNv8Ys4/aAZl94= github.com/felixge/httpsnoop v1.0.1/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= +github.com/felixge/httpsnoop v1.0.2/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= +github.com/firefart/nonamedreturns v1.0.1/go.mod h1:D3dpIBojGGNh5UfElmwPu73SwDCm+VKhHYqwlNOk2uQ= +github.com/firefart/nonamedreturns v1.0.4/go.mod h1:TDhe/tjI1BXo48CmYbUduTV7BdIga8MAO/xbKdcVsGI= +github.com/fjl/gencodec v0.0.0-20220412091415-8bb9e558978c/go.mod h1:AzA8Lj6YtixmJWL+wkKoBGsLWy9gFrAzi4g+5bCKwpY= github.com/fjl/memsize v0.0.0-20180418122429-ca190fb6ffbc/go.mod h1:VvhXpOYNQvB+uIk2RvXzuaQtkQJzzIx6lSBe1xv7hi0= -github.com/fortytw2/leaktest v1.3.0 h1:u8491cBMTQ8ft8aeV+adlcytMZylmA5nnwwkRZjI8vw= +github.com/fjl/memsize v0.0.0-20190710130421-bcb5799ab5e5/go.mod h1:VvhXpOYNQvB+uIk2RvXzuaQtkQJzzIx6lSBe1xv7hi0= +github.com/flynn/go-shlex v0.0.0-20150515145356-3f9db97f8568/go.mod h1:xEzjJPgXI435gkrCt3MPfRiAkVrwSbHsst4LCFVfpJc= +github.com/fogleman/gg v1.2.1-0.20190220221249-0403632d5b90/go.mod h1:R/bRT+9gY/C5z7JzPU0zXsXHKM4/ayA+zqcVNZzPa1k= +github.com/fogleman/gg v1.3.0/go.mod h1:R/bRT+9gY/C5z7JzPU0zXsXHKM4/ayA+zqcVNZzPa1k= +github.com/form3tech-oss/jwt-go v3.2.2+incompatible/go.mod h1:pbq4aXjuKjdthFRnoDwaVPLA+WlJuPGy+QneDUgJi2k= +github.com/form3tech-oss/jwt-go v3.2.3+incompatible/go.mod h1:pbq4aXjuKjdthFRnoDwaVPLA+WlJuPGy+QneDUgJi2k= +github.com/fortytw2/leaktest v1.2.0/go.mod h1:jDsjWgpAGjm2CA7WthBh/CdZYEPF31XHquHwclZch5g= github.com/fortytw2/leaktest v1.3.0/go.mod h1:jDsjWgpAGjm2CA7WthBh/CdZYEPF31XHquHwclZch5g= github.com/franela/goblin v0.0.0-20200105215937-c9ffbefa60db/go.mod h1:7dvUGVsVBjqR7JHJk0brhHOZYGmfBYOrK0ZhYMEtBr4= +github.com/franela/goblin v0.0.0-20210519012713-85d372ac71e2/go.mod h1:VzmDKDJVZI3aJmnRI9VjAn9nJ8qPPsN1fqzr9dqInIo= github.com/franela/goreq v0.0.0-20171204163338-bcd34c9993f8/go.mod h1:ZhphrRTfi2rbfLwlschooIH4+wKKDR4Pdxhh+TRoA20= github.com/frankban/quicktest v1.11.3/go.mod h1:wRf/ReqHper53s+kmmSZizM8NamnL3IM0I9ntUbOk+k= -github.com/frankban/quicktest v1.14.3 h1:FJKSZTDHjyhriyC81FLQ0LY93eSai0ZyR/ZIkd3ZUKE= +github.com/frankban/quicktest v1.14.2/go.mod h1:mgiwOwqx65TmIk1wJ6Q7wvnVMocbUorkibMOrVTHZps= +github.com/frankban/quicktest v1.14.3/go.mod h1:mgiwOwqx65TmIk1wJ6Q7wvnVMocbUorkibMOrVTHZps= github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ= -github.com/fsnotify/fsnotify v1.6.0 h1:n+5WquG0fcWoWp6xPWfHdbskMCQaFnG6PfBrh1Ky4HY= +github.com/fsnotify/fsnotify v1.5.1/go.mod h1:T3375wBYaZdLLcVNkcVbzGHY7f1l/uK5T5Ai1i3InKU= +github.com/fsnotify/fsnotify v1.5.4/go.mod h1:OVB6XrOHzAwXMpEM7uPOzcehqUV2UqJxmVXmkdnm1bU= github.com/fsnotify/fsnotify v1.6.0/go.mod h1:sl3t1tCWJFWoRz9R8WJCbQihKKwmorjAbSClcnxKAGw= +github.com/fullsailor/pkcs7 v0.0.0-20190404230743-d7302db945fa/go.mod h1:KnogPXtdwXqoenmZCw6S+25EAm2MkxbG0deNDu4cbSA= +github.com/fullstorydev/grpcurl v1.6.0/go.mod h1:ZQ+ayqbKMJNhzLmbpCiurTVlaK2M/3nqZCxaQ2Ze/sM= +github.com/fzipp/gocyclo v0.5.1/go.mod h1:rXPyn8fnlpa0R2csP/31uerbiVBugk5whMdlyaLkLoA= +github.com/fzipp/gocyclo v0.6.0/go.mod h1:rXPyn8fnlpa0R2csP/31uerbiVBugk5whMdlyaLkLoA= +github.com/garslo/gogen v0.0.0-20170306192744-1d203ffc1f61/go.mod h1:Q0X6pkwTILDlzrGEckF6HKjXe48EgsY/l7K7vhY4MW8= +github.com/garyburd/redigo v0.0.0-20150301180006-535138d7bcd7/go.mod h1:NR3MbYisc3/PwhQ00EMzDiPmrwpPxAn5GI05/YaO1SY= github.com/gballet/go-libpcsclite v0.0.0-20190607065134-2772fd86a8ff/go.mod h1:x7DCsMOv1taUwEWCzT4cmDeAkigA5/QCwUodaVOe8Ww= +github.com/getkin/kin-openapi v0.53.0/go.mod h1:7Yn5whZr5kJi6t+kShccXS8ae1APpYTW6yheSwk8Yi4= +github.com/getkin/kin-openapi v0.61.0/go.mod h1:7Yn5whZr5kJi6t+kShccXS8ae1APpYTW6yheSwk8Yi4= +github.com/getkin/kin-openapi v0.76.0/go.mod h1:660oXbgy5JFMKreazJaQTw7o+X00qeSyhcnluiMv+Xg= +github.com/getsentry/raven-go v0.2.0/go.mod h1:KungGk8q33+aIAZUIVWZDr2OfAEBsO49PX4NzFV5kcQ= +github.com/ghodss/yaml v0.0.0-20150909031657-73d445a93680/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= -github.com/gin-contrib/sse v0.1.0 h1:Y/yl/+YNO8GZSjAhjMsSuLt29uWRFHdHYUb5lYOV9qE= github.com/gin-contrib/sse v0.1.0/go.mod h1:RHrZQHXnP2xjPF+u1gW/2HnVO7nvIa9PG3Gm+fLHvGI= -github.com/gin-gonic/gin v1.7.0 h1:jGB9xAJQ12AIGNB4HguylppmDK1Am9ppF7XnGXXJuoU= github.com/gin-gonic/gin v1.7.0/go.mod h1:jD2toBW3GZUr5UMcdrwQA10I7RuaFOl/SGeDjXkfUtY= +github.com/gliderlabs/ssh v0.1.1/go.mod h1:U7qILu1NlMHj9FlMhZLlkCdDnU1DBEAqr0aevW3Awn0= +github.com/glycerine/go-unsnap-stream v0.0.0-20180323001048-9f0cb55181dd/go.mod h1:/20jfyN9Y5QPEAprSgKAUr+glWDY39ZiUEAYOEv5dsE= +github.com/glycerine/goconvey v0.0.0-20190410193231-58a59202ab31/go.mod h1:Ogl1Tioa0aV7gstGFO7KhffUsb9M4ydbEbbxpcEDc24= +github.com/go-chi/chi/v5 v5.0.0/go.mod h1:BBug9lr0cqtdAhsu6R4AAdvufI0/XBzAQSsUqJpoZOs= +github.com/go-chi/chi/v5 v5.0.7/go.mod h1:DslCQbL2OYiznFReuXYUmQ2hGd1aDpCnlMNITLSKoi8= +github.com/go-critic/go-critic v0.4.1/go.mod h1:7/14rZGnZbY6E38VEGk2kVhoq6itzc1E68facVDK23g= +github.com/go-critic/go-critic v0.4.3/go.mod h1:j4O3D4RoIwRqlZw5jJpx0BNfXWWbpcJoKu5cYSe4YmQ= +github.com/go-critic/go-critic v0.6.3/go.mod h1:c6b3ZP1MQ7o6lPR7Rv3lEf7pYQUmAcx8ABHgdZCQt/k= +github.com/go-critic/go-critic v0.6.5/go.mod h1:ezfP/Lh7MA6dBNn4c6ab5ALv3sKnZVLx37tr00uuaOY= +github.com/go-fonts/dejavu v0.1.0/go.mod h1:4Wt4I4OU2Nq9asgDCteaAaWZOV24E+0/Pwo0gppep4g= +github.com/go-fonts/latin-modern v0.2.0/go.mod h1:rQVLdDMK+mK1xscDwsqM5J8U2jrRa3T0ecnM9pNujks= +github.com/go-fonts/liberation v0.1.1/go.mod h1:K6qoJYypsmfVjWg8KOVDQhLc8UDgIK2HYqyqAO9z7GY= +github.com/go-fonts/liberation v0.2.0/go.mod h1:K6qoJYypsmfVjWg8KOVDQhLc8UDgIK2HYqyqAO9z7GY= +github.com/go-fonts/stix v0.1.0/go.mod h1:w/c1f0ldAUlJmLBvlbkvVXLAD+tAMqobIIQpmnUIzUY= github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU= github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= +github.com/go-ini/ini v1.25.4/go.mod h1:ByCAeIL28uOIIG0E3PJtZPDL8WnHpFKFOtgjp+3Ies8= github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= github.com/go-kit/kit v0.9.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= github.com/go-kit/kit v0.10.0/go.mod h1:xUsJbQ/Fp4kEt7AFgCuvyX4a71u8h9jB8tj/ORgOZ7o= -github.com/go-kit/kit v0.12.0 h1:e4o3o3IsBfAKQh5Qbbiqyfu97Ku7jrO/JbohvztANh4= github.com/go-kit/kit v0.12.0/go.mod h1:lHd+EkCZPIwYItmGDDRdhinkzX2A1sj+M9biaEaizzs= github.com/go-kit/log v0.1.0/go.mod h1:zbhenjAZHb184qTLMA9ZjW7ThYL0H2mk7Q6pNt4vbaY= -github.com/go-kit/log v0.2.1 h1:MRVx0/zhvdseW+Gza6N9rVzU/IVzaeE1SFI4raAhmBU= +github.com/go-kit/log v0.2.0/go.mod h1:NwTd00d/i8cPZ3xOwwiv2PO5MOcx78fFErGNcVmBjv0= github.com/go-kit/log v0.2.1/go.mod h1:NwTd00d/i8cPZ3xOwwiv2PO5MOcx78fFErGNcVmBjv0= +github.com/go-latex/latex v0.0.0-20210118124228-b3d85cf34e07/go.mod h1:CO1AlKB2CSIqUrmQPqA0gdRIlnLEY0gK5JGjh37zN5U= +github.com/go-latex/latex v0.0.0-20210823091927-c0d11ff05a81/go.mod h1:SX0U8uGpxhq9o2S/CELCSUxEWWAuoCUcVCQWv7G2OCk= +github.com/go-lintpack/lintpack v0.5.2/go.mod h1:NwZuYi2nUHho8XEIZ6SIxihrnPoqBTDqfpXvXAN0sXM= github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE= github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk= github.com/go-logfmt/logfmt v0.5.0/go.mod h1:wCYkCAKZfumFQihp8CzCvQ3paCTfi41vtzG1KdI/P7A= -github.com/go-logfmt/logfmt v0.5.1 h1:otpy5pqBCBZ1ng9RQ0dPu4PN7ba75Y/aA+UpowDyNVA= github.com/go-logfmt/logfmt v0.5.1/go.mod h1:WYhtIu8zTZfxdn5+rREduYbwxfcBr/Vr6KEVveWlfTs= +github.com/go-logr/logr v0.1.0/go.mod h1:ixOQHD9gLJUVQQ2ZOR7zLEifBX6tGkNJF4QyIY7sIas= +github.com/go-logr/logr v0.2.0/go.mod h1:z6/tIYblkpsD+a4lm/fGIIU9mZ+XfAiaFtq7xTgseGU= +github.com/go-logr/logr v0.4.0/go.mod h1:z6/tIYblkpsD+a4lm/fGIIU9mZ+XfAiaFtq7xTgseGU= +github.com/go-logr/logr v1.2.0/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= +github.com/go-logr/logr v1.2.1/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= +github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= +github.com/go-logr/logr v1.2.3/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= +github.com/go-logr/stdr v1.2.0/go.mod h1:YkVgnZu1ZjjL7xTxrfm/LLZBfkhTqSR1ydtm6jTKKwI= +github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE= github.com/go-ole/go-ole v1.2.1/go.mod h1:7FAglXiTm7HKlQRDeOQ6ZNUHidzCWXuZWq/1dTyBNF8= +github.com/go-ole/go-ole v1.2.6/go.mod h1:pprOEPIfldk/42T2oK7lQ4v4JSDwmV0As9GaiUsvbm0= +github.com/go-openapi/jsonpointer v0.0.0-20160704185906-46af16f9f7b1/go.mod h1:+35s3my2LFTysnkMfxsJBAMHj/DoqoB9knIWoYG/Vk0= +github.com/go-openapi/jsonpointer v0.19.2/go.mod h1:3akKfEdA7DF1sugOqz1dVQHBcuDBPKZGEoHC/NkiQRg= +github.com/go-openapi/jsonpointer v0.19.3/go.mod h1:Pl9vOtqEWErmShwVjC8pYs9cog34VGT37dQOVbmoatg= +github.com/go-openapi/jsonpointer v0.19.5/go.mod h1:Pl9vOtqEWErmShwVjC8pYs9cog34VGT37dQOVbmoatg= +github.com/go-openapi/jsonreference v0.0.0-20160704190145-13c6e3589ad9/go.mod h1:W3Z9FmVs9qj+KR4zFKmDPGiLdk1D9Rlm7cyMvf57TTg= +github.com/go-openapi/jsonreference v0.19.2/go.mod h1:jMjeRr2HHw6nAVajTXJ4eiUwohSTlpa0o73RUL1owJc= +github.com/go-openapi/jsonreference v0.19.3/go.mod h1:rjx6GuL8TTa9VaixXglHmQmIL98+wF9xc8zWvFonSJ8= +github.com/go-openapi/jsonreference v0.19.5/go.mod h1:RdybgQwPxbL4UEjuAruzK1x3nE69AqPYEJeo/TWfEeg= +github.com/go-openapi/spec v0.0.0-20160808142527-6aced65f8501/go.mod h1:J8+jY1nAiCcj+friV/PDoE1/3eeccG9LYBs0tYvLOWc= +github.com/go-openapi/spec v0.19.3/go.mod h1:FpwSN1ksY1eteniUU7X0N/BgJ7a4WvBFVA8Lj9mJglo= +github.com/go-openapi/swag v0.0.0-20160704191624-1d0bd113de87/go.mod h1:DXUve3Dpr1UfpPtxFw+EFuQ41HhCWZfha5jSVRG7C7I= +github.com/go-openapi/swag v0.19.2/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk= +github.com/go-openapi/swag v0.19.5/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk= +github.com/go-openapi/swag v0.19.14/go.mod h1:QYRuS/SOXUCsnplDa677K7+DxSOj6IPNl/eQntq43wQ= +github.com/go-pdf/fpdf v0.5.0/go.mod h1:HzcnA+A23uwogo0tp9yU+l3V+KXhiESpt1PMayhOh5M= +github.com/go-pdf/fpdf v0.6.0/go.mod h1:HzcnA+A23uwogo0tp9yU+l3V+KXhiESpt1PMayhOh5M= github.com/go-playground/assert/v2 v2.0.1/go.mod h1:VDjEfimB/XKnb+ZQfWdccd7VUvScMdVu0Titje2rxJ4= -github.com/go-playground/locales v0.13.0 h1:HyWk6mgj5qFqCT5fjGBuRArbVDfE4hi8+e8ceBS/t7Q= github.com/go-playground/locales v0.13.0/go.mod h1:taPMhCMXrRLJO55olJkUXHZBHCxTMfnGwq/HNwmWNS8= -github.com/go-playground/universal-translator v0.17.0 h1:icxd5fm+REJzpZx7ZfpaD876Lmtgy7VtROAbHHXk8no= github.com/go-playground/universal-translator v0.17.0/go.mod h1:UkSxE5sNxxRwHyU+Scu5vgOQjsIJAF8j9muTVoKLVtA= -github.com/go-playground/validator/v10 v10.4.1 h1:pH2c5ADXtd66mxoE0Zm9SUhxE20r7aM3F26W0hOn+GE= github.com/go-playground/validator/v10 v10.4.1/go.mod h1:nlOn6nFhuKACm19sB/8EGNn9GlaMV7XkbRSipzJ0Ii4= +github.com/go-redis/redis v6.15.8+incompatible/go.mod h1:NAIEuMOZ/fxfXJIrKDQDz8wamY7mA7PouImQ2Jvg6kA= github.com/go-sourcemap/sourcemap v2.1.2+incompatible/go.mod h1:F8jJfvm2KbVjc5NqelyYJmf/v5J0dwNLS2mL4sNA1Jg= +github.com/go-sourcemap/sourcemap v2.1.3+incompatible/go.mod h1:F8jJfvm2KbVjc5NqelyYJmf/v5J0dwNLS2mL4sNA1Jg= github.com/go-sql-driver/mysql v1.4.0/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w= +github.com/go-sql-driver/mysql v1.4.1/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w= +github.com/go-sql-driver/mysql v1.5.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg= +github.com/go-sql-driver/mysql v1.6.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg= github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= github.com/go-task/slim-sprig v0.0.0-20210107165309-348f09dbbbc0/go.mod h1:fyg7847qk6SyHyPtNmDHnmrv/HOrqktSC+C9fM+CJOE= -github.com/gobwas/httphead v0.0.0-20180130184737-2c6c146eadee h1:s+21KNqlpePfkah2I+gwHF8xmJWRjooY+5248k6m4A0= +github.com/go-toolsmith/astcast v1.0.0/go.mod h1:mt2OdQTeAQcY4DQgPSArJjHCcOwlX+Wl/kwN+LbLGQ4= +github.com/go-toolsmith/astcopy v1.0.0/go.mod h1:vrgyG+5Bxrnz4MZWPF+pI4R8h3qKRjjyvV/DSez4WVQ= +github.com/go-toolsmith/astcopy v1.0.2/go.mod h1:4TcEdbElGc9twQEYpVo/aieIXfHhiuLh4aLAck6dO7Y= +github.com/go-toolsmith/astequal v0.0.0-20180903214952-dcb477bfacd6/go.mod h1:H+xSiq0+LtiDC11+h1G32h7Of5O3CYFJ99GVbS5lDKY= +github.com/go-toolsmith/astequal v1.0.0/go.mod h1:H+xSiq0+LtiDC11+h1G32h7Of5O3CYFJ99GVbS5lDKY= +github.com/go-toolsmith/astequal v1.0.1/go.mod h1:4oGA3EZXTVItV/ipGiOx7NWkY5veFfcsOJVS2YxltLw= +github.com/go-toolsmith/astequal v1.0.2/go.mod h1:9Ai4UglvtR+4up+bAD4+hCj7iTo4m/OXVTSLnCyTAx4= +github.com/go-toolsmith/astequal v1.0.3/go.mod h1:9Ai4UglvtR+4up+bAD4+hCj7iTo4m/OXVTSLnCyTAx4= +github.com/go-toolsmith/astfmt v0.0.0-20180903215011-8f8ee99c3086/go.mod h1:mP93XdblcopXwlyN4X4uodxXQhldPGZbcEJIimQHrkg= +github.com/go-toolsmith/astfmt v1.0.0/go.mod h1:cnWmsOAuq4jJY6Ct5YWlVLmcmLMn1JUPuQIHCY7CJDw= +github.com/go-toolsmith/astinfo v0.0.0-20180906194353-9809ff7efb21/go.mod h1:dDStQCHtmZpYOmjRP/8gHHnCCch3Zz3oEgCdZVdtweU= +github.com/go-toolsmith/astp v0.0.0-20180903215135-0af7e3c24f30/go.mod h1:SV2ur98SGypH1UjcPpCatrV5hPazG6+IfNHbkDXBRrk= +github.com/go-toolsmith/astp v1.0.0/go.mod h1:RSyrtpVlfTFGDYRbrjyWP1pYu//tSFcvdYrA8meBmLI= +github.com/go-toolsmith/pkgload v0.0.0-20181119091011-e9e65178eee8/go.mod h1:WoMrjiy4zvdS+Bg6z9jZH82QXwkcgCBX6nOfnmdaHks= +github.com/go-toolsmith/pkgload v1.0.0/go.mod h1:5eFArkbO80v7Z0kdngIxsRXRMTaX4Ilcwuh3clNrQJc= +github.com/go-toolsmith/pkgload v1.0.2-0.20220101231613-e814995d17c5/go.mod h1:3NAwwmD4uY/yggRxoEjk/S00MIV3A+H7rrE3i87eYxM= +github.com/go-toolsmith/strparse v1.0.0/go.mod h1:YI2nUKP9YGZnL/L1/DLFBfixrcjslWct4wyljWhSRy8= +github.com/go-toolsmith/typep v1.0.0/go.mod h1:JSQCQMUPdRlMZFswiq3TGpNp1GMktqkR2Ns5AIQkATU= +github.com/go-toolsmith/typep v1.0.2/go.mod h1:JSQCQMUPdRlMZFswiq3TGpNp1GMktqkR2Ns5AIQkATU= +github.com/go-xmlfmt/xmlfmt v0.0.0-20191208150333-d5b6f63a941b/go.mod h1:aUCEOzzezBEjDBbFBoSiya/gduyIiWYRP6CnSFIV8AM= +github.com/go-zookeeper/zk v1.0.2/go.mod h1:nOB03cncLtlp4t+UAkGSV+9beXP/akpekBwL+UX1Qcw= +github.com/gobwas/glob v0.2.3/go.mod h1:d3Ez4x06l9bZtSvzIay5+Yzi0fmZzPgnTbPcKjJAkT8= github.com/gobwas/httphead v0.0.0-20180130184737-2c6c146eadee/go.mod h1:L0fX3K22YWvt/FAX9NnzrNzcI4wNYi9Yku4O0LKYflo= -github.com/gobwas/pool v0.2.0 h1:QEmUOlnSjWtnpRGHF3SauEiOsy82Cup83Vf2LcMlnc8= github.com/gobwas/pool v0.2.0/go.mod h1:q8bcK0KcYlCgd9e7WYLm9LpyS+YeLd8JVDW6WezmKEw= -github.com/gobwas/ws v1.0.2 h1:CoAavW/wd/kulfZmSIBt6p24n4j7tHgNVCjsfHVNUbo= github.com/gobwas/ws v1.0.2/go.mod h1:szmBTxLgaFppYjEmNtny/v3w89xOydFnnZMcgRRu/EM= -github.com/godbus/dbus v0.0.0-20190726142602-4481cbc300e2 h1:ZpnhV/YsD2/4cESfV5+Hoeu/iUR3ruzNvZ+yQfO03a0= +github.com/godbus/dbus v0.0.0-20151105175453-c7fdd8b5cd55/go.mod h1:/YcGZj5zSblfDWMMoOzV4fas9FZnQYTkDnsGvmh2Grw= +github.com/godbus/dbus v0.0.0-20180201030542-885f9cc04c9c/go.mod h1:/YcGZj5zSblfDWMMoOzV4fas9FZnQYTkDnsGvmh2Grw= +github.com/godbus/dbus v0.0.0-20190422162347-ade71ed3457e/go.mod h1:bBOAhwG1umN6/6ZUMtDFBMQR8jRg9O75tm9K00oMsK4= github.com/godbus/dbus v0.0.0-20190726142602-4481cbc300e2/go.mod h1:bBOAhwG1umN6/6ZUMtDFBMQR8jRg9O75tm9K00oMsK4= +github.com/godbus/dbus/v5 v5.0.3/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= -github.com/gogo/gateway v1.1.0 h1:u0SuhL9+Il+UbjM9VIE3ntfRujKbvVpFvNB4HbjeVQ0= +github.com/godbus/dbus/v5 v5.0.6/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= +github.com/gofrs/flock v0.0.0-20190320160742-5135e617513b/go.mod h1:F1TvTiK9OcQqauNUHlbJvyl9Qa1QvF/gOUDKA14jxHU= +github.com/gofrs/flock v0.7.3/go.mod h1:F1TvTiK9OcQqauNUHlbJvyl9Qa1QvF/gOUDKA14jxHU= +github.com/gofrs/flock v0.8.1/go.mod h1:F1TvTiK9OcQqauNUHlbJvyl9Qa1QvF/gOUDKA14jxHU= +github.com/gofrs/uuid v3.3.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM= +github.com/gofrs/uuid v4.2.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM= +github.com/gofrs/uuid v4.3.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM= github.com/gogo/gateway v1.1.0/go.mod h1:S7rR8FRQyG3QFESeSv4l2WnsyzlCLG0CzBbUUo/mbic= +github.com/gogo/googleapis v1.2.0/go.mod h1:Njal3psf3qN6dwBtQfUmBZh2ybovJ0tlu3o/AC7HYjU= +github.com/gogo/googleapis v1.3.2/go.mod h1:5YRNX2z1oM5gXdAkurHa942MDgEJyk02w4OecKY87+c= +github.com/gogo/googleapis v1.4.0/go.mod h1:5YRNX2z1oM5gXdAkurHa942MDgEJyk02w4OecKY87+c= +github.com/gogo/googleapis v1.4.1/go.mod h1:2lpHqI5OcWCtVElxXnPt+s8oJvMpySlOyM6xDCrzib4= +github.com/golang-jwt/jwt/v4 v4.0.0/go.mod h1:/xlHOz8bRuivTWchD4jCa+NbatV+wEUSzwAxVc6locg= +github.com/golang-jwt/jwt/v4 v4.1.0/go.mod h1:/xlHOz8bRuivTWchD4jCa+NbatV+wEUSzwAxVc6locg= +github.com/golang-jwt/jwt/v4 v4.3.0/go.mod h1:/xlHOz8bRuivTWchD4jCa+NbatV+wEUSzwAxVc6locg= +github.com/golang-sql/civil v0.0.0-20190719163853-cb61b32ac6fe/go.mod h1:8vg3r2VgvsThLBIFL93Qb5yWzgyZWhEmBwUJWevAkK0= +github.com/golang-sql/sqlexp v0.0.0-20170517235910-f1bb20e5a188/go.mod h1:vXjM/+wXQnTPR4KqTKDgJukSZ6amVRtWMPEjE6sQoK8= +github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0/go.mod h1:E/TSTwGwJL78qG/PmXZO1EjYhfJinVAhrmmHX6Z8B9k= +github.com/golang/geo v0.0.0-20190916061304-5b978397cfec/go.mod h1:QZ0nwyI2jOfgRAoBvP+ab5aRr7c9x7lhGEJrKvBwjWI= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= -github.com/golang/glog v1.0.0 h1:nfP3RFugxnNRyKgeWd4oI1nYvXpxrx8ck8ZrcizshdQ= github.com/golang/glog v1.0.0/go.mod h1:EWib/APOK0SL3dFbYqvxE3UYd8E6s1ouQ7iEp/0LWV4= github.com/golang/groupcache v0.0.0-20160516000752-02826c3e7903/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20190129154638-5b532d6fd5ef/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20191227052852-215e87163ea7/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= +github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/mock v1.2.0/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= github.com/golang/mock v1.3.1/go.mod h1:sBzyDLLjw3U8JLTeZvSv8jJB+tU5PVekmnlKIyFUx0Y= github.com/golang/mock v1.4.0/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= @@ -351,8 +1041,9 @@ github.com/golang/mock v1.4.1/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt github.com/golang/mock v1.4.3/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= github.com/golang/mock v1.4.4/go.mod h1:l3mdAwkq5BuhzHwde/uurv3sEJeZMXNpwsxVWU71h+4= github.com/golang/mock v1.5.0/go.mod h1:CWnOUgYIOo4TcNZ0wHX3YZCqsaM1I1Jvs6v3mP3KVu8= -github.com/golang/mock v1.6.0 h1:ErTB+efbowRARo13NNdxyJji2egdxLGQhRaY+DUumQc= github.com/golang/mock v1.6.0/go.mod h1:p6yTPP+5HYm5mzsMV8JkE6ZKdX+/wYM6Hr+LicevLPs= +github.com/golang/protobuf v0.0.0-20161109072736-4bd1920723d7/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/golang/protobuf v1.1.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.3.0/go.mod h1:Qd/q+1AKNOZr9uGQzbzCmRO6sUih6GTPZv6a1/R87v0= github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= @@ -370,18 +1061,47 @@ github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= github.com/golang/protobuf v1.5.1/go.mod h1:DopwsBzvsk0Fs44TXzsVbJyPhcCPeIwnvohx4u74HPM= -github.com/golang/protobuf v1.5.2 h1:ROPKBNFfQgOUMifHyP+KYbvpjbdoFNs+aK7DXlji0Tw= github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= github.com/golang/snappy v0.0.0-20180518054509-2e65f85255db/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/golang/snappy v0.0.1/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/golang/snappy v0.0.3-0.20201103224600-674baa8c7fc3/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/golang/snappy v0.0.3/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= -github.com/golang/snappy v0.0.4 h1:yAGX7huGHXlcLOEtBnF4w7FQwA26wojNCwOYAEhLjQM= github.com/golang/snappy v0.0.4/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= +github.com/golangci/check v0.0.0-20180506172741-cfe4005ccda2/go.mod h1:k9Qvh+8juN+UKMCS/3jFtGICgW8O96FVaZsaxdzDkR4= +github.com/golangci/dupl v0.0.0-20180902072040-3e9179ac440a/go.mod h1:ryS0uhF+x9jgbj/N71xsEqODy9BN81/GonCZiOzirOk= +github.com/golangci/errcheck v0.0.0-20181223084120-ef45e06d44b6/go.mod h1:DbHgvLiFKX1Sh2T1w8Q/h4NAI8MHIpzCdnBUDTXU3I0= +github.com/golangci/go-misc v0.0.0-20180628070357-927a3d87b613/go.mod h1:SyvUF2NxV+sN8upjjeVYr5W7tyxaT1JVtvhKhOn2ii8= +github.com/golangci/go-misc v0.0.0-20220329215616-d24fe342adfe/go.mod h1:gjqyPShc/m8pEMpk0a3SeagVb0kaqvhscv+i9jI5ZhQ= +github.com/golangci/goconst v0.0.0-20180610141641-041c5f2b40f3/go.mod h1:JXrF4TWy4tXYn62/9x8Wm/K/dm06p8tCKwFRDPZG/1o= +github.com/golangci/gocyclo v0.0.0-20180528134321-2becd97e67ee/go.mod h1:ozx7R9SIwqmqf5pRP90DhR2Oay2UIjGuKheCBCNwAYU= +github.com/golangci/gocyclo v0.0.0-20180528144436-0a533e8fa43d/go.mod h1:ozx7R9SIwqmqf5pRP90DhR2Oay2UIjGuKheCBCNwAYU= +github.com/golangci/gofmt v0.0.0-20190930125516-244bba706f1a/go.mod h1:9qCChq59u/eW8im404Q2WWTrnBUQKjpNYKMbU4M7EFU= +github.com/golangci/gofmt v0.0.0-20220901101216-f2edd75033f2/go.mod h1:9wOXstvyDRshQ9LggQuzBCGysxs3b6Uo/1MvYCR2NMs= +github.com/golangci/golangci-lint v1.23.7/go.mod h1:g/38bxfhp4rI7zeWSxcdIeHTQGS58TCak8FYcyCmavQ= +github.com/golangci/golangci-lint v1.27.0/go.mod h1:+eZALfxIuthdrHPtfM7w/R3POJLjHDfJJw8XZl9xOng= +github.com/golangci/golangci-lint v1.46.2/go.mod h1:3DkdHnxn9eoTTrpT2gB0TEv8KSziuoqe9FitgQLHvAY= +github.com/golangci/golangci-lint v1.50.1/go.mod h1:AQjHBopYS//oB8xs0y0M/dtxdKHkdhl0RvmjUct0/4w= +github.com/golangci/ineffassign v0.0.0-20190609212857-42439a7714cc/go.mod h1:e5tpTHCfVze+7EpLEozzMB3eafxo2KT5veNg1k6byQU= +github.com/golangci/lint-1 v0.0.0-20181222135242-d2cdd8c08219/go.mod h1:/X8TswGSh1pIozq4ZwCfxS0WA5JGXguxk94ar/4c87Y= +github.com/golangci/lint-1 v0.0.0-20191013205115-297bf364a8e0/go.mod h1:66R6K6P6VWk9I95jvqGxkqJxVWGFy9XlDwLwVz1RCFg= +github.com/golangci/maligned v0.0.0-20180506175553-b1d89398deca/go.mod h1:tvlJhZqDe4LMs4ZHD0oMUlt9G2LWuDGoisJTBzLMV9o= +github.com/golangci/misspell v0.0.0-20180809174111-950f5d19e770/go.mod h1:dEbvlSfYbMQDtrpRMQU675gSDLDNa8sCPPChZ7PhiVA= +github.com/golangci/misspell v0.3.5/go.mod h1:dEbvlSfYbMQDtrpRMQU675gSDLDNa8sCPPChZ7PhiVA= +github.com/golangci/prealloc v0.0.0-20180630174525-215b22d4de21/go.mod h1:tf5+bzsHdTM0bsB7+8mt0GUMvjCgwLpTapNZHU8AajI= +github.com/golangci/revgrep v0.0.0-20180526074752-d9c87f5ffaf0/go.mod h1:qOQCunEYvmd/TLamH+7LlVccLvUH5kZNhbCgTHoBbp4= +github.com/golangci/revgrep v0.0.0-20180812185044-276a5c0a1039/go.mod h1:qOQCunEYvmd/TLamH+7LlVccLvUH5kZNhbCgTHoBbp4= +github.com/golangci/revgrep v0.0.0-20210930125155-c22e5001d4f2/go.mod h1:LK+zW4MpyytAWQRz0M4xnzEk50lSvqDQKfx304apFkY= +github.com/golangci/revgrep v0.0.0-20220804021717-745bb2f7c2e6/go.mod h1:0AKcRCkMoKvUvlf89F6O7H2LYdhr1zBh736mBItOdRs= +github.com/golangci/unconvert v0.0.0-20180507085042-28b1c447d1f4/go.mod h1:Izgrg8RkN3rCIMLGE9CyYmU9pY2Jer6DgANEnZ/L/cQ= +github.com/google/btree v0.0.0-20180124185431-e89373fe6b4a/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= -github.com/google/btree v1.1.2 h1:xf4v41cLI2Z6FxbKm+8Bu+m8ifhj15JuZ9sa0jZCMUU= +github.com/google/btree v1.0.1/go.mod h1:xXMiIv4Fb/0kKde4SpL7qlzvu5cMJDRkFDxJfI9uaxA= github.com/google/btree v1.1.2/go.mod h1:qOPhT0dTNdNzV6Z/lhRX0YXUafgPLFUh+gZMl761Gm4= +github.com/google/certificate-transparency-go v1.0.21/go.mod h1:QeJfpSbVSfYc7RgB3gJFj9cbuQMMchQxrWXz8Ruopmg= +github.com/google/certificate-transparency-go v1.1.1/go.mod h1:FDKqPvSXawb2ecErVRrD+nfy23RCzyl7eqVCEmlT1Zs= +github.com/google/crfs v0.0.0-20191108021818-71d77da419c9/go.mod h1:etGhoOqfwPkooV6aqoX3eBGQOJblqdoc9XvWOeuxpPw= +github.com/google/flatbuffers v1.11.0/go.mod h1:1AeVuKshWv4vARoZatz6mlQ0JxURH0Kv5+zNeJKJCa8= github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= @@ -393,16 +1113,29 @@ github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/ github.com/google/go-cmp v0.5.3/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38= +github.com/google/go-cmp v0.5.6/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.7/go.mod h1:n+brtR0CgQNWTVd5ZUFpTBC8YFBDLK/h/bpaJ8/DtOE= +github.com/google/go-cmp v0.5.8/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= +github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= +github.com/google/go-containerregistry v0.0.0-20191010200024-a3d713f9b7f8/go.mod h1:KyKXa9ciM8+lgMXwOVsXi7UxGrsf9mM61Mzs+xKUrKE= +github.com/google/go-containerregistry v0.1.2/go.mod h1:GPivBPgdAyd2SU+vf6EpsgOtWDuPqjW0hJZt4rNdTZ4= +github.com/google/go-containerregistry v0.5.1/go.mod h1:Ct15B4yir3PLOP5jsy0GNeYVaIZs/MK/Jz5any1wFW0= +github.com/google/go-github v17.0.0+incompatible/go.mod h1:zLgOLi98H3fifZn+44m+umXrS52loVEgC2AApnigrVQ= +github.com/google/go-github/v28 v28.1.1/go.mod h1:bsqJWQX05omyWVmc00nEUql9mhQyv38lDZ8kPZcQVoM= +github.com/google/go-querystring v1.0.0/go.mod h1:odCYkC5MyYFN7vkCjXpyrEuKhc/BUO6wN/zVPAxq5ck= +github.com/google/go-replayers/grpcreplay v0.1.0/go.mod h1:8Ig2Idjpr6gifRd6pNVggX6TC1Zw6Jx74AKp7QNH2QE= +github.com/google/go-replayers/httpreplay v0.1.0/go.mod h1:YKZViNhiGgqdBlUbI2MwGpq4pXxNmhJLPHQ7cv2b5no= +github.com/google/gofuzz v0.0.0-20161122191042-44d81051d367/go.mod h1:HP5RmnzzSNb993RKQDq4+1A4ia9nllfqcQFTQJedwGI= github.com/google/gofuzz v0.0.0-20170612174753-24818f796faf/go.mod h1:HP5RmnzzSNb993RKQDq4+1A4ia9nllfqcQFTQJedwGI= github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= +github.com/google/gofuzz v1.1.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= github.com/google/gofuzz v1.1.1-0.20200604201612-c04b05f3adfa/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= -github.com/google/gofuzz v1.2.0 h1:xRy4A+RhZaiKjJ1bPfwQ8sedCA+YS2YcCHW6ec7JMi0= github.com/google/gofuzz v1.2.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs= +github.com/google/martian v2.1.1-0.20190517191504-25dcb96d9e51+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs= github.com/google/martian/v3 v3.0.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= github.com/google/martian/v3 v3.1.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= -github.com/google/orderedcode v0.0.1 h1:UzfcAexk9Vhv8+9pNOgRu41f16lHq725vPwnSeiG/Us= +github.com/google/martian/v3 v3.2.1/go.mod h1:oBOf6HBosgwRXnUGWUB05QECsc6uvmMiJ3+6W4l/CUk= github.com/google/orderedcode v0.0.1/go.mod h1:iVyU4/qPKHY5h/wSd6rZZCDcLJNxiWO6dvsYES2Sb20= github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= github.com/google/pprof v0.0.0-20190515194954-54271f7e092f/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= @@ -410,349 +1143,758 @@ github.com/google/pprof v0.0.0-20191218002539-d4f498aebedc/go.mod h1:ZgVRPoUq/hf github.com/google/pprof v0.0.0-20200212024743-f11f1df84d12/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= github.com/google/pprof v0.0.0-20200229191704-1ebb73c60ed3/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= github.com/google/pprof v0.0.0-20200430221834-fc25d7d30c6d/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= +github.com/google/pprof v0.0.0-20200507031123-427632fa3b1c/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= github.com/google/pprof v0.0.0-20200708004538-1a94d8640e99/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= github.com/google/pprof v0.0.0-20201023163331-3e6fc7fc9c4c/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/pprof v0.0.0-20201203190320-1bf35d6f28c2/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/pprof v0.0.0-20201218002935-b9804c9f04c2/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/pprof v0.0.0-20210122040257-d980be63207e/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/pprof v0.0.0-20210226084205-cbba55b83ad5/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= +github.com/google/pprof v0.0.0-20210407192527-94a9f03dee38/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= +github.com/google/pprof v0.0.0-20210601050228-01bbb1931b22/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= +github.com/google/pprof v0.0.0-20210609004039-a478d1d731e9/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= +github.com/google/pprof v0.0.0-20210720184732-4bb14d4b1be1/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= +github.com/google/rpmpack v0.0.0-20191226140753-aa36bfddb3a0/go.mod h1:RaTPr0KUf2K7fnZYLNDrr8rxAamWs3iNywJLtQ2AzBg= +github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510/go.mod h1:pupxD2MaaD3pAXIBCelhxNneeOaAeabZDe5s4K6zSpQ= +github.com/google/subcommands v1.0.1/go.mod h1:ZjhPrFU+Olkh9WazFPsl27BQ4UPiG37m3yTrtFlrHVk= +github.com/google/trillian v1.3.11/go.mod h1:0tPraVHrSDkA3BO6vKX67zgLXs6SsOAbHEivX+9mPgw= +github.com/google/uuid v0.0.0-20161128191214-064e2069ce9c/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.0.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/google/uuid v1.2.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/google/wire v0.3.0/go.mod h1:i1DMg/Lu8Sz5yYl25iOdmc5CT5qusaa+zmRWs16741s= +github.com/google/wire v0.4.0/go.mod h1:ngWDr9Qvq3yZA10YrxfyGELY/AFWGVpy9c1LTRi1EoU= +github.com/googleapis/enterprise-certificate-proxy v0.0.0-20220520183353-fd19c99a87aa/go.mod h1:17drOmN3MwGY7t0e+Ei9b45FFGA3fBs3x36SsCg1hq8= +github.com/googleapis/enterprise-certificate-proxy v0.1.0/go.mod h1:17drOmN3MwGY7t0e+Ei9b45FFGA3fBs3x36SsCg1hq8= +github.com/googleapis/enterprise-certificate-proxy v0.2.0/go.mod h1:8C0jb7/mgJe/9KK8Lm7X9ctZC2t60YyIpYEI16jx0Qg= +github.com/googleapis/gax-go v2.0.0+incompatible/go.mod h1:SFVmujtThgffbyetf+mdk2eWhX2bMyUtNHzFKcPA9HY= +github.com/googleapis/gax-go v2.0.2+incompatible/go.mod h1:SFVmujtThgffbyetf+mdk2eWhX2bMyUtNHzFKcPA9HY= github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg= github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk= +github.com/googleapis/gax-go/v2 v2.1.0/go.mod h1:Q3nei7sK6ybPYH7twZdmQpAd1MKb7pfu6SK+H1/DsU0= +github.com/googleapis/gax-go/v2 v2.1.1/go.mod h1:hddJymUZASv3XPyGkUpKj8pPO47Rmb0eJc8R6ouapiM= +github.com/googleapis/gax-go/v2 v2.2.0/go.mod h1:as02EH8zWkzwUoLbBaFeQ+arQaj/OthfcblKl4IGNaM= +github.com/googleapis/gax-go/v2 v2.3.0/go.mod h1:b8LNqSzNabLiUpXKkY7HAR5jr6bIT99EXz9pXxye9YM= +github.com/googleapis/gax-go/v2 v2.4.0/go.mod h1:XOTVJ59hdnfJLIP/dh8n5CGryZR2LxK9wbMD5+iXC6c= +github.com/googleapis/gax-go/v2 v2.5.1/go.mod h1:h6B0KMMFNtI2ddbGJn3T3ZbwkeT6yqEF02fYlzkUCyo= +github.com/googleapis/gax-go/v2 v2.6.0/go.mod h1:1mjbznJAPHFpesgE5ucqfYEscaz5kMdcIDwU/6+DDoY= +github.com/googleapis/gnostic v0.0.0-20170729233727-0c5108395e2d/go.mod h1:sJBsCZ4ayReDTBIg8b9dl28c5xFWyhBTVRp3pOg5EKY= +github.com/googleapis/gnostic v0.2.2/go.mod h1:sJBsCZ4ayReDTBIg8b9dl28c5xFWyhBTVRp3pOg5EKY= +github.com/googleapis/gnostic v0.4.1/go.mod h1:LRhVm6pbyptWbWbuZ38d1eyptfvIytN3ir6b65WBswg= +github.com/googleapis/gnostic v0.5.1/go.mod h1:6U4PtQXGIEt/Z3h5MAT7FNofLnw9vXk2cUuW7uA/OeU= +github.com/googleapis/gnostic v0.5.5/go.mod h1:7+EbHbldMins07ALC74bsA81Ovc97DwqyJO1AENw9kA= +github.com/googleapis/go-type-adapters v1.0.0/go.mod h1:zHW75FOG2aur7gAO2B+MLby+cLsWGBF62rFAi7WjWO4= github.com/googleapis/google-cloud-go-testing v0.0.0-20200911160855-bcd43fbb19e8/go.mod h1:dvDLG8qkwmyD9a/MJJN3XJcT3xFxOKAvTZGvuZmac9g= +github.com/gookit/color v1.2.4/go.mod h1:AhIE+pS6D4Ql0SQWbBeXPHw7gY0/sjHoA4s/n1KB7xg= +github.com/gookit/color v1.5.0/go.mod h1:43aQb+Zerm/BWh2GnrgOQm7ffz7tvQXEKV6BFMl7wAo= +github.com/gookit/color v1.5.1/go.mod h1:wZFzea4X8qN6vHOSP2apMb4/+w/orMznEzYsIHPaqKM= +github.com/gophercloud/gophercloud v0.1.0/go.mod h1:vxM41WHh5uqHVBMZHzuwNOHh8XEoIEcSTewFxm1c5g8= github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= github.com/gordonklaus/ineffassign v0.0.0-20200309095847-7953dde2c7bf/go.mod h1:cuNKsD1zp2v6XfE/orVX2QE1LC+i254ceGcVeDT3pTU= +github.com/gordonklaus/ineffassign v0.0.0-20210914165742-4cc7213b9bc8/go.mod h1:Qcp2HIAYhR7mNUVSIxZww3Guk4it82ghYcEXIAk+QT0= +github.com/goreleaser/goreleaser v0.136.0/go.mod h1:wiKrPUeSNh6Wu8nUHxZydSOVQ/OZvOaO7DTtFqie904= +github.com/goreleaser/nfpm v1.2.1/go.mod h1:TtWrABZozuLOttX2uDlYyECfQX7x5XYkVxhjYcR6G9w= +github.com/goreleaser/nfpm v1.3.0/go.mod h1:w0p7Kc9TAUgWMyrub63ex3M2Mgw88M4GZXoTq5UCb40= +github.com/gorhill/cronexpr v0.0.0-20180427100037-88b0669f7d75/go.mod h1:g2644b03hfBX9Ov0ZBDgXXens4rxSxmqFBbhvKv2yVA= github.com/gorilla/context v1.1.1/go.mod h1:kBGZzfjB9CEq2AlWe17Uuf7NDRt0dE0s8S51q0aT7Yg= -github.com/gorilla/handlers v1.5.1 h1:9lRY6j8DEeeBT10CvO9hGW0gmky0BprnvDI5vfhUHH4= +github.com/gorilla/handlers v0.0.0-20150720190736-60c7bfde3e33/go.mod h1:Qkdc/uu4tH4g6mTK6auzZ766c4CA0Ng8+o/OAirnOIQ= github.com/gorilla/handlers v1.5.1/go.mod h1:t8XrUpc4KVXb7HGyJ4/cEnwQiaxrX/hz1Zv/4g96P1Q= github.com/gorilla/mux v1.6.2/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs= +github.com/gorilla/mux v1.7.2/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs= github.com/gorilla/mux v1.7.3/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs= -github.com/gorilla/mux v1.8.0 h1:i40aqfkR1h2SlN9hojwV5ZA91wcXFOvkdNIeFDP5koI= github.com/gorilla/mux v1.8.0/go.mod h1:DVbg23sWSpFRCP0SfiEN6jmj59UnW/n46BH5rLB71So= github.com/gorilla/websocket v0.0.0-20170926233335-4201258b820c/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ= +github.com/gorilla/websocket v1.4.0/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ= github.com/gorilla/websocket v1.4.1-0.20190629185528-ae1634f6a989/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ= github.com/gorilla/websocket v1.4.1/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= -github.com/gorilla/websocket v1.5.0 h1:PPwGk2jz7EePpoHN/+ClbZu8SPxiqlu12wZP/3sWmnc= github.com/gorilla/websocket v1.5.0/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= +github.com/gostaticanalysis/analysisutil v0.0.0-20190318220348-4088753ea4d3/go.mod h1:eEOZF4jCKGi+aprrirO9e7WKB3beBRtWgqGunKl6pKE= +github.com/gostaticanalysis/analysisutil v0.0.3/go.mod h1:eEOZF4jCKGi+aprrirO9e7WKB3beBRtWgqGunKl6pKE= +github.com/gostaticanalysis/analysisutil v0.1.0/go.mod h1:dMhHRU9KTiDcuLGdy87/2gTR8WruwYZrKdRq9m1O6uw= +github.com/gostaticanalysis/analysisutil v0.4.1/go.mod h1:18U/DLpRgIUd459wGxVHE0fRgmo1UgHDcbw7F5idXu0= +github.com/gostaticanalysis/analysisutil v0.7.1/go.mod h1:v21E3hY37WKMGSnbsw2S/ojApNWb6C1//mXO48CXbVc= +github.com/gostaticanalysis/comment v1.3.0/go.mod h1:xMicKDx7XRXYdVwY9f9wQpDJVnqWxw9wCauCMKp+IBI= +github.com/gostaticanalysis/comment v1.4.1/go.mod h1:ih6ZxzTHLdadaiSnF5WY3dxUoXfXAlTaRzuaNDlSado= +github.com/gostaticanalysis/comment v1.4.2/go.mod h1:KLUTGDv6HOCotCH8h2erHKmpci2ZoR8VPu34YA2uzdM= +github.com/gostaticanalysis/forcetypeassert v0.1.0/go.mod h1:qZEedyP/sY1lTGV1uJ3VhWZ2mqag3IkWsDHVbplHXak= +github.com/gostaticanalysis/nilerr v0.1.1/go.mod h1:wZYb6YI5YAxxq0i1+VJbY0s2YONW0HU0GPE3+5PWN4A= +github.com/gostaticanalysis/testutil v0.3.1-0.20210208050101-bfb5c8eec0e4/go.mod h1:D+FIZ+7OahH3ePw/izIEeH5I06eKs1IKI4Xr64/Am3M= +github.com/gostaticanalysis/testutil v0.4.0/go.mod h1:bLIoPefWXrRi/ssLFWX1dx7Repi5x3CuviD3dgAZaBU= github.com/gotestyourself/gotestyourself v2.2.0+incompatible/go.mod h1:zZKM6oeNM8k+FRljX1mnzVYeS8wiGgQyvST1/GafPbY= github.com/graph-gophers/graphql-go v0.0.0-20191115155744-f33e81362277/go.mod h1:9CQHMSxwO4MprSdzoIEobiHpoLtHm77vfxsvsIN5Vuc= +github.com/graph-gophers/graphql-go v1.3.0/go.mod h1:9CQHMSxwO4MprSdzoIEobiHpoLtHm77vfxsvsIN5Vuc= +github.com/gregjones/httpcache v0.0.0-20180305231024-9cad4c3443a7/go.mod h1:FecbI9+v66THATjSRHfNgh1IVFe/9kFxbXtjV0ctIMA= +github.com/gregjones/httpcache v0.0.0-20190611155906-901d90724c79/go.mod h1:FecbI9+v66THATjSRHfNgh1IVFe/9kFxbXtjV0ctIMA= github.com/grpc-ecosystem/go-grpc-middleware v1.0.0/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs= github.com/grpc-ecosystem/go-grpc-middleware v1.0.1-0.20190118093823-f849b5445de4/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs= +github.com/grpc-ecosystem/go-grpc-middleware v1.2.0/go.mod h1:mJzapYve32yjrKlk9GbyCZHuPgZsrbyIbyKhSzOpg6s= github.com/grpc-ecosystem/go-grpc-middleware v1.2.2/go.mod h1:EaizFBKfUKtMIF5iaDEhniwNedqGo9FuLFzppDr3uwI= -github.com/grpc-ecosystem/go-grpc-middleware v1.3.0 h1:+9834+KizmvFV7pXQGSXQTsaWhq2GjuNUt0aUU0YBYw= github.com/grpc-ecosystem/go-grpc-middleware v1.3.0/go.mod h1:z0ButlSOZa5vEBq9m2m2hlwIgKw+rp3sdCBRoJY+30Y= github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgfV/d3M/q6VIi02HzZEHgUlZvzk= +github.com/grpc-ecosystem/grpc-gateway v1.5.0/go.mod h1:RSKVYQBd5MCa4OVpNdGskqpgL2+G+NZTnrVHpWWfpdw= +github.com/grpc-ecosystem/grpc-gateway v1.6.2/go.mod h1:RSKVYQBd5MCa4OVpNdGskqpgL2+G+NZTnrVHpWWfpdw= github.com/grpc-ecosystem/grpc-gateway v1.8.5/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= github.com/grpc-ecosystem/grpc-gateway v1.9.0/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= +github.com/grpc-ecosystem/grpc-gateway v1.9.2/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= github.com/grpc-ecosystem/grpc-gateway v1.9.5/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= -github.com/grpc-ecosystem/grpc-gateway v1.16.0 h1:gmcG1KaJ57LophUzW0Hy8NmPhnMZb4M0+kPpLofRdBo= +github.com/grpc-ecosystem/grpc-gateway v1.12.1/go.mod h1:8XEsbTttt/W+VvjtQhLACqCisSPWTxCZ7sBRjU6iH9c= github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw= -github.com/gsterjov/go-libsecret v0.0.0-20161001094733-a6f4afe4910c h1:6rhixN/i8ZofjG1Y75iExal34USq5p+wiN1tpie8IrU= +github.com/grpc-ecosystem/grpc-opentracing v0.0.0-20180507213350-8e809c8a8645/go.mod h1:6iZfnjpejD4L/4DwD7NryNaJyCQdzwWwH2MWhCA90Kw= github.com/gsterjov/go-libsecret v0.0.0-20161001094733-a6f4afe4910c/go.mod h1:NMPJylDgVpX0MLRlPy15sqSwOFv/U1GZ2m21JhFfek0= github.com/gtank/merlin v0.1.1-0.20191105220539-8318aed1a79f/go.mod h1:T86dnYJhcGOh5BjZFCJWTDeTK7XW8uE+E21Cy/bIQ+s= -github.com/gtank/merlin v0.1.1 h1:eQ90iG7K9pOhtereWsmyRJ6RAwcP4tHTDBHXNg+u5is= github.com/gtank/merlin v0.1.1/go.mod h1:T86dnYJhcGOh5BjZFCJWTDeTK7XW8uE+E21Cy/bIQ+s= -github.com/gtank/ristretto255 v0.1.2 h1:JEqUCPA1NvLq5DwYtuzigd7ss8fwbYay9fi4/5uMzcc= github.com/gtank/ristretto255 v0.1.2/go.mod h1:Ph5OpO6c7xKUGROZfWVLiJf9icMDwUeIvY4OmlYW69o= +github.com/hanwen/go-fuse v1.0.0/go.mod h1:unqXarDXqzAk0rt98O2tVndEPIpUgLD9+rwFisZH3Ok= +github.com/hanwen/go-fuse/v2 v2.0.3/go.mod h1:0EQM6aH2ctVpvZ6a+onrQ/vaykxh2GH7hy3e13vzTUY= +github.com/hanwen/go-fuse/v2 v2.1.1-0.20220112183258-f57e95bda82d/go.mod h1:B1nGE/6RBFyBRC1RRnf23UpwCdyJ31eukw34oAKukAc= github.com/hashicorp/consul/api v1.1.0/go.mod h1:VmuI/Lkw1nC05EYQWNKwWGbkg+FbDBtguAZLlVdkD9Q= github.com/hashicorp/consul/api v1.3.0/go.mod h1:MmDNSzIMUjNpY/mQ398R4bk2FnqQLoPndWW5VkKPlCE= +github.com/hashicorp/consul/api v1.10.1/go.mod h1:XjsvQN+RJGWI2TWy1/kqaE16HrR2J/FWgkYjdZQsX9M= +github.com/hashicorp/consul/api v1.11.0/go.mod h1:XjsvQN+RJGWI2TWy1/kqaE16HrR2J/FWgkYjdZQsX9M= +github.com/hashicorp/consul/api v1.12.0/go.mod h1:6pVBMo0ebnYdt2S3H87XhekM/HHrUoTD2XXb/VrZVy0= +github.com/hashicorp/consul/api v1.15.3/go.mod h1:/g/qgcoBcEXALCNZgRRisyTW0nY86++L0KbeAMXYCeY= github.com/hashicorp/consul/sdk v0.1.1/go.mod h1:VKf9jXwCTEY1QZP2MOLRhb5i/I/ssyNV1vwHyQBF0x8= github.com/hashicorp/consul/sdk v0.3.0/go.mod h1:VKf9jXwCTEY1QZP2MOLRhb5i/I/ssyNV1vwHyQBF0x8= +github.com/hashicorp/consul/sdk v0.8.0/go.mod h1:GBvyrGALthsZObzUGsfgHZQDXjg4lOjagTIwIR1vPms= +github.com/hashicorp/consul/sdk v0.11.0/go.mod h1:yPkX5Q6CsxTFMjQQDJwzeNmUUF5NUGGbrDsv9wTb8cw= +github.com/hashicorp/errwrap v0.0.0-20141028054710-7554cd9344ce/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= +github.com/hashicorp/errwrap v1.1.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= +github.com/hashicorp/go-bexpr v0.1.10/go.mod h1:oxlubA2vC/gFVfX1A6JGp7ls7uCDlfJn732ehYYg+g0= github.com/hashicorp/go-cleanhttp v0.5.0/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80= github.com/hashicorp/go-cleanhttp v0.5.1/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80= +github.com/hashicorp/go-cleanhttp v0.5.2/go.mod h1:kO/YDlP8L1346E6Sodw+PrpBSV4/SoxCXGY6BqNFT48= +github.com/hashicorp/go-hclog v0.9.2/go.mod h1:5CU+agLiy3J7N7QjHK5d05KxGsuXiQLrjA0H7acj2lQ= +github.com/hashicorp/go-hclog v0.12.0/go.mod h1:whpDNt7SSdeAju8AWKIWsul05p54N/39EeqMAyrmvFQ= +github.com/hashicorp/go-hclog v0.14.1/go.mod h1:whpDNt7SSdeAju8AWKIWsul05p54N/39EeqMAyrmvFQ= +github.com/hashicorp/go-hclog v0.16.2/go.mod h1:whpDNt7SSdeAju8AWKIWsul05p54N/39EeqMAyrmvFQ= +github.com/hashicorp/go-hclog v1.0.0/go.mod h1:whpDNt7SSdeAju8AWKIWsul05p54N/39EeqMAyrmvFQ= +github.com/hashicorp/go-hclog v1.2.0/go.mod h1:whpDNt7SSdeAju8AWKIWsul05p54N/39EeqMAyrmvFQ= github.com/hashicorp/go-immutable-radix v1.0.0/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60= -github.com/hashicorp/go-immutable-radix v1.3.1 h1:DKHmCUm2hRBK510BaiZlwvpD40f8bJFeZnpfm2KLowc= +github.com/hashicorp/go-immutable-radix v1.3.0/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60= github.com/hashicorp/go-immutable-radix v1.3.1/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60= github.com/hashicorp/go-msgpack v0.5.3/go.mod h1:ahLV/dePpqEmjfWmKiqvPkv/twdG7iPBM1vqhUKIvfM= +github.com/hashicorp/go-msgpack v0.5.5/go.mod h1:ahLV/dePpqEmjfWmKiqvPkv/twdG7iPBM1vqhUKIvfM= +github.com/hashicorp/go-multierror v0.0.0-20161216184304-ed905158d874/go.mod h1:JMRHfdO9jKNzS/+BTlxCjKNQHg/jZAft8U7LloJvN7I= github.com/hashicorp/go-multierror v1.0.0/go.mod h1:dHtQlpGsu+cZNNAkkCN/P3hoUDHhCYQXV3UM06sGGrk= +github.com/hashicorp/go-multierror v1.1.0/go.mod h1:spPvp8C1qA32ftKqdAHm4hHTbPw+vmowP0z+KUhOZdA= +github.com/hashicorp/go-multierror v1.1.1/go.mod h1:iw975J/qwKPdAO1clOe2L8331t/9/fmwbPZ6JB6eMoM= github.com/hashicorp/go-retryablehttp v0.5.3/go.mod h1:9B5zBasrRhHXnJnui7y6sL7es7NDiJgTc6Er0maI1Xs= +github.com/hashicorp/go-retryablehttp v0.6.4/go.mod h1:vAew36LZh98gCBJNLH42IQ1ER/9wtLZZ8meHqQvEYWY= +github.com/hashicorp/go-retryablehttp v0.6.6/go.mod h1:vAew36LZh98gCBJNLH42IQ1ER/9wtLZZ8meHqQvEYWY= +github.com/hashicorp/go-retryablehttp v0.7.0/go.mod h1:vAew36LZh98gCBJNLH42IQ1ER/9wtLZZ8meHqQvEYWY= github.com/hashicorp/go-rootcerts v1.0.0/go.mod h1:K6zTfqpRlCUIjkwsN4Z+hiSfzSTQa6eBIzfwKfwNnHU= +github.com/hashicorp/go-rootcerts v1.0.2/go.mod h1:pqUvnprVnM5bf7AOirdbb01K4ccR319Vf4pU3K5EGc8= github.com/hashicorp/go-sockaddr v1.0.0/go.mod h1:7Xibr9yA9JjQq1JpNB2Vw7kxv8xerXegt+ozgdvDeDU= +github.com/hashicorp/go-sockaddr v1.0.2/go.mod h1:rB4wwRAUzs07qva3c5SdrY/NEtAUjGlgmH/UkBUC97A= github.com/hashicorp/go-syslog v1.0.0/go.mod h1:qPfqrKkXGihmCqbJM2mZgkZGvKG1dFdvsLplgctolz4= github.com/hashicorp/go-uuid v1.0.0/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= -github.com/hashicorp/go-uuid v1.0.1 h1:fv1ep09latC32wFoVwnqcnKJGnMSdBanPczbHAYm1BE= github.com/hashicorp/go-uuid v1.0.1/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= +github.com/hashicorp/go-uuid v1.0.2/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= github.com/hashicorp/go-version v1.2.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= +github.com/hashicorp/go-version v1.2.1/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= +github.com/hashicorp/go-version v1.4.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= +github.com/hashicorp/go-version v1.6.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= github.com/hashicorp/go.net v0.0.1/go.mod h1:hjKkEWcCURg++eb33jQU7oqQcI9XDCnUzHA0oac0k90= github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= +github.com/hashicorp/golang-lru v0.5.3/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4= github.com/hashicorp/golang-lru v0.5.4/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4= -github.com/hashicorp/golang-lru v0.5.5-0.20210104140557-80c98217689d h1:dg1dEPuWpEqDnvIw251EVy4zlP8gWbsGj4BsUKCRpYs= github.com/hashicorp/golang-lru v0.5.5-0.20210104140557-80c98217689d/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4= -github.com/hashicorp/hcl v1.0.0 h1:0Anlzjpi4vEasTeNFn2mLJgTSwt0+6sfsiTG8qcWGx4= github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ= github.com/hashicorp/logutils v1.0.0/go.mod h1:QIAnNjmIWmVIIkWDTG1z5v++HQmx9WQRO+LraFDTW64= github.com/hashicorp/mdns v1.0.0/go.mod h1:tL+uN++7HEJ6SQLQ2/p+z2pH24WQKWjBPkE0mNTz8vQ= +github.com/hashicorp/mdns v1.0.1/go.mod h1:4gW7WsVCke5TE7EPeYliwHlRUyBtfCwuFwuMg2DmyNY= +github.com/hashicorp/mdns v1.0.4/go.mod h1:mtBihi+LeNXGtG8L9dX59gAEa12BDtBQSp4v/YAJqrc= github.com/hashicorp/memberlist v0.1.3/go.mod h1:ajVTdAv/9Im8oMAAj5G31PhhMCZJV2pPBoIllUwCN7I= +github.com/hashicorp/memberlist v0.2.2/go.mod h1:MS2lj3INKhZjWNqd3N0m3J+Jxf3DAOnAH9VT3Sh9MUE= +github.com/hashicorp/memberlist v0.3.0/go.mod h1:MS2lj3INKhZjWNqd3N0m3J+Jxf3DAOnAH9VT3Sh9MUE= +github.com/hashicorp/memberlist v0.3.1/go.mod h1:MS2lj3INKhZjWNqd3N0m3J+Jxf3DAOnAH9VT3Sh9MUE= github.com/hashicorp/serf v0.8.2/go.mod h1:6hOLApaqBFA1NXqRQAsxw9QxuDEvNxSQRwA/JwenrHc= +github.com/hashicorp/serf v0.9.5/go.mod h1:UWDWwZeL5cuWDJdl0C6wrvrUwEqtQ4ZKBKKENpqIUyk= +github.com/hashicorp/serf v0.9.6/go.mod h1:TXZNMjZQijwlDvp+r0b63xZ45H7JmCmgg4gpTwn9UV4= +github.com/hashicorp/serf v0.9.7/go.mod h1:TXZNMjZQijwlDvp+r0b63xZ45H7JmCmgg4gpTwn9UV4= +github.com/hashicorp/serf v0.9.8/go.mod h1:TXZNMjZQijwlDvp+r0b63xZ45H7JmCmgg4gpTwn9UV4= +github.com/hashicorp/uuid v0.0.0-20160311170451-ebb0a03e909c/go.mod h1:fHzc09UnyJyqyW+bFuq864eh+wC7dj65aXmXLRe5to0= +github.com/hdevalence/ed25519consensus v0.0.0-20200813231810-1694d75e712a/go.mod h1:V0zo781scjlo5OzNQb2GI8wMt6CD4vs7y1beXtxZEhM= github.com/hdevalence/ed25519consensus v0.0.0-20210204194344-59a8610d2b87/go.mod h1:XGsKKeXxeRr95aEOgipvluMPlgjr7dGlk9ZTWOjcUcg= -github.com/hdevalence/ed25519consensus v0.0.0-20220222234857-c00d1f31bab3 h1:aSVUgRRRtOrZOC1fYmY9gV0e9z/Iu+xNVSASWjsuyGU= github.com/hdevalence/ed25519consensus v0.0.0-20220222234857-c00d1f31bab3/go.mod h1:5PC6ZNPde8bBqU/ewGZig35+UIZtw9Ytxez8/q5ZyFE= -github.com/herumi/bls-eth-go-binary v0.0.0-20220509081320-2d8ab06de53c h1:ppGSVyhAFh8VAGyDuNeLEGMYRJR5iDI92QgDNrMIqK0= github.com/herumi/bls-eth-go-binary v0.0.0-20220509081320-2d8ab06de53c/go.mod h1:luAnRm3OsMQeokhGzpYmc0ZKwawY7o87PUEP11Z7r7U= +github.com/hexops/gotextdiff v1.0.3/go.mod h1:pSWU5MAI3yDq+fZBTazCSJysOMbxWL1BSow5/V2vxeg= +github.com/holiman/bloomfilter/v2 v2.0.3/go.mod h1:zpoh+gs7qcpqrHr3dB55AMiJwo0iURXE7ZOP9L9hSkA= github.com/holiman/uint256 v1.1.1/go.mod h1:y4ga/t+u+Xwd7CpDgZESaRcWy0I7XMlTMA25ApIH5Jw= +github.com/holiman/uint256 v1.2.0/go.mod h1:y4ga/t+u+Xwd7CpDgZESaRcWy0I7XMlTMA25ApIH5Jw= github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= +github.com/huandu/xstrings v1.0.0/go.mod h1:4qWG/gcEcfX4z/mBDHJ++3ReCw9ibxbsNJbcucJdbSo= +github.com/huandu/xstrings v1.2.0/go.mod h1:DvyZB1rfVYsBIigL8HwpZgxHwXozlTgGqn63UyNX5k4= github.com/hudl/fargo v1.3.0/go.mod h1:y3CKSmjA+wD2gak7sUSXTAoopbhU08POFhmITJgmKTg= +github.com/hudl/fargo v1.4.0/go.mod h1:9Ai6uvFy5fQNq6VPKtg+Ceq1+eTY4nKUlR2JElEOcDo= github.com/huin/goupnp v1.0.0/go.mod h1:n9v9KO1tAxYH82qOn+UTIFQDmx5n1Zxd/ClZDMX7Bnc= +github.com/huin/goupnp v1.0.3/go.mod h1:ZxNlw5WqJj6wSsRK5+YfflQGXYfccj5VgQsMNixHM7Y= github.com/huin/goutil v0.0.0-20170803182201-1ca381bf3150/go.mod h1:PpLOETDnJ0o3iZrZfqZzyLl6l7F3c6L1oWn7OICBi6o= +github.com/iancoleman/strcase v0.2.0/go.mod h1:iwCmte+B7n89clKwxIoIXy/HfoL7AsD47ZCWhYzw7ho= github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= github.com/ianlancetaylor/demangle v0.0.0-20200824232613-28f6c0f3b639/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= +github.com/imdario/mergo v0.3.4/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA= +github.com/imdario/mergo v0.3.5/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA= +github.com/imdario/mergo v0.3.8/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA= +github.com/imdario/mergo v0.3.9/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA= +github.com/imdario/mergo v0.3.10/go.mod h1:jmQim1M+e3UYxmgPu/WyfjB3N3VflVyUjjjwH0dnCYA= +github.com/imdario/mergo v0.3.11/go.mod h1:jmQim1M+e3UYxmgPu/WyfjB3N3VflVyUjjjwH0dnCYA= +github.com/imdario/mergo v0.3.12/go.mod h1:jmQim1M+e3UYxmgPu/WyfjB3N3VflVyUjjjwH0dnCYA= +github.com/imdario/mergo v0.3.13/go.mod h1:4lJ1jqUDcsbIECGy0RUJAXNIhg+6ocWgb1ALK2O4oXg= github.com/improbable-eng/grpc-web v0.14.1/go.mod h1:zEjGHa8DAlkoOXmswrNvhUGEYQA9UI7DhrGeHR1DMGU= -github.com/improbable-eng/grpc-web v0.15.0 h1:BN+7z6uNXZ1tQGcNAuaU1YjsLTApzkjt2tzCixLaUPQ= github.com/improbable-eng/grpc-web v0.15.0/go.mod h1:1sy9HKV4Jt9aEs9JSnkWlRJPuPtwNr0l57L4f878wP8= github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8= -github.com/inconshreveable/mousetrap v1.0.1 h1:U3uMjPSQEBMNp1lFxmllqCPM6P5u/Xq7Pgzkat/bFNc= github.com/inconshreveable/mousetrap v1.0.1/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw= +github.com/influxdata/flux v0.65.1/go.mod h1:J754/zds0vvpfwuq7Gc2wRdVwEodfpCFM7mYlOw2LqY= github.com/influxdata/influxdb v1.2.3-0.20180221223340-01288bdb0883/go.mod h1:qZna6X/4elxqT3yI9iZYdZrWWdeFOOprn86kgg4+IzY= +github.com/influxdata/influxdb v1.8.3/go.mod h1:JugdFhsvvI8gadxOI6noqNeeBHvWNTbfYGtiAn+2jhI= +github.com/influxdata/influxdb-client-go/v2 v2.4.0/go.mod h1:vLNHdxTJkIf2mSLvGrpj8TCcISApPoXkaxP8g9uRlW8= github.com/influxdata/influxdb1-client v0.0.0-20191209144304-8bf82d3c094d/go.mod h1:qj24IKcXYK6Iy9ceXlo3Tc+vtHo9lIhSX5JddghvEPo= +github.com/influxdata/influxdb1-client v0.0.0-20200827194710-b269163b24ab/go.mod h1:qj24IKcXYK6Iy9ceXlo3Tc+vtHo9lIhSX5JddghvEPo= +github.com/influxdata/influxql v1.1.1-0.20200828144457-65d3ef77d385/go.mod h1:gHp9y86a/pxhjJ+zMjNXiQAA197Xk9wLxaz+fGG+kWk= +github.com/influxdata/line-protocol v0.0.0-20180522152040-32c6aa80de5e/go.mod h1:4kt73NQhadE3daL3WhR5EJ/J2ocX0PZzwxQ0gXJ7oFE= +github.com/influxdata/line-protocol v0.0.0-20200327222509-2487e7298839/go.mod h1:xaLFMmpvUxqXtVkUJfg9QmT88cDaCJ3ZKgdZ78oO8Qo= +github.com/influxdata/line-protocol v0.0.0-20210311194329-9aa0e372d097/go.mod h1:xaLFMmpvUxqXtVkUJfg9QmT88cDaCJ3ZKgdZ78oO8Qo= +github.com/influxdata/promql/v2 v2.12.0/go.mod h1:fxOPu+DY0bqCTCECchSRtWfc+0X19ybifQhZoQNF5D8= +github.com/influxdata/roaring v0.4.13-0.20180809181101-fc520f41fab6/go.mod h1:bSgUQ7q5ZLSO+bKBGqJiCBGAl+9DxyW63zLTujjUlOE= +github.com/influxdata/tdigest v0.0.0-20181121200506-bf2b5ad3c0a9/go.mod h1:Js0mqiSBE6Ffsg94weZZ2c+v/ciT8QRHFOap7EKDrR0= +github.com/influxdata/usage-client v0.0.0-20160829180054-6d3895376368/go.mod h1:Wbbw6tYNvwa5dlB6304Sd+82Z3f7PmVZHVKU637d4po= +github.com/informalsystems/tm-load-test v1.0.0/go.mod h1:WVaSKaQdfZK3v0C74EMzn7//+3aeCZF8wkIKBz2/M74= +github.com/intel/goresctrl v0.2.0/go.mod h1:+CZdzouYFn5EsxgqAQTEzMfwKwuc0fVdMrT9FCCAVRQ= +github.com/ishidawataru/sctp v0.0.0-20191218070446-00ab2ac2db07/go.mod h1:co9pwDoBCm1kGxawmb4sPq0cSIOOWNPT4KnHotMP1Zg= +github.com/j-keck/arping v0.0.0-20160618110441-2cf9dc699c56/go.mod h1:ymszkNOg6tORTn+6F6j+Jc8TOr5osrynvN6ivFWZ2GA= +github.com/j-keck/arping v1.0.2/go.mod h1:aJbELhR92bSk7tp79AWM/ftfc90EfEi2bQJrbBFOsPw= github.com/jackpal/go-nat-pmp v1.0.2-0.20160603034137-1fa385a6f458/go.mod h1:QPH045xvCAeXUZOxsnwmrtiCoxIr9eob+4orBN1SBKc= +github.com/jackpal/go-nat-pmp v1.0.2/go.mod h1:QPH045xvCAeXUZOxsnwmrtiCoxIr9eob+4orBN1SBKc= +github.com/jaguilar/vt100 v0.0.0-20150826170717-2703a27b14ea/go.mod h1:QMdK4dGB3YhEW2BmA1wgGpPYI3HZy/5gD705PXKUVSg= +github.com/jarcoal/httpmock v1.0.5/go.mod h1:ATjnClrvW/3tijVmpL/va5Z3aAyGvqU3gCT8nX0Txik= +github.com/jdxcode/netrc v0.0.0-20210204082910-926c7f70242a/go.mod h1:Zi/ZFkEqFHTm7qkjyNJjaWH4LQA9LQhGJyF0lTYGpxw= github.com/jedisct1/go-minisign v0.0.0-20190909160543-45766022959e/go.mod h1:G1CVv03EnqU1wYL2dFwXxW2An0az9JTl/ZsqXQeBlkU= +github.com/jellevandenhooff/dkim v0.0.0-20150330215556-f50fe3d243e1/go.mod h1:E0B/fFc00Y+Rasa88328GlI/XbtyysCtTHZS8h7IrBU= github.com/jessevdk/go-flags v0.0.0-20141203071132-1679536dcc89/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= github.com/jessevdk/go-flags v1.4.0/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= +github.com/jgautheron/goconst v1.5.1/go.mod h1:aAosetZ5zaeC/2EfMeRswtxUFBpe2Hr7HzkgX4fanO4= +github.com/jhump/gopoet v0.0.0-20190322174617-17282ff210b3/go.mod h1:me9yfT6IJSlOL3FCfrg+L6yzUEZ+5jW6WHt4Sk+UPUI= +github.com/jhump/gopoet v0.1.0/go.mod h1:me9yfT6IJSlOL3FCfrg+L6yzUEZ+5jW6WHt4Sk+UPUI= +github.com/jhump/goprotoc v0.5.0/go.mod h1:VrbvcYrQOrTi3i0Vf+m+oqQWk9l72mjkJCYo7UvLHRQ= +github.com/jhump/protocompile v0.0.0-20220216033700-d705409f108f/go.mod h1:qr2b5kx4HbFS7/g4uYO5qv9ei8303JMsC7ESbYiqr2Q= +github.com/jhump/protoreflect v1.6.1/go.mod h1:RZQ/lnuN+zqeRVpQigTwO6o0AJUkxbnSnpuG7toUTG4= github.com/jhump/protoreflect v1.9.0/go.mod h1:7GcYQDdMU/O/BBrl/cX6PNHpXh6cenjd8pneu5yW7Tg= -github.com/jhump/protoreflect v1.12.1-0.20220721211354-060cc04fc18b h1:izTof8BKh/nE1wrKOrloNA5q4odOarjf+Xpe+4qow98= +github.com/jhump/protoreflect v1.11.0/go.mod h1:U7aMIjN0NWq9swDP7xDdoMfRHb35uiuTd3Z9nFXJf5E= +github.com/jhump/protoreflect v1.12.1-0.20220417024638-438db461d753/go.mod h1:JytZfP5d0r8pVNLZvai7U/MCuTWITgrI4tTg7puQFKI= +github.com/jhump/protoreflect v1.12.1-0.20220721211354-060cc04fc18b/go.mod h1:JytZfP5d0r8pVNLZvai7U/MCuTWITgrI4tTg7puQFKI= +github.com/jhump/protoreflect v1.13.1-0.20220928232736-101791cb1b4c/go.mod h1:JytZfP5d0r8pVNLZvai7U/MCuTWITgrI4tTg7puQFKI= +github.com/jingyugao/rowserrcheck v0.0.0-20191204022205-72ab7603b68a/go.mod h1:xRskid8CManxVta/ALEhJha/pweKBaVG6fWgc0yH25s= +github.com/jingyugao/rowserrcheck v1.1.1/go.mod h1:4yvlZSDb3IyDTUZJUmpZfm2Hwok+Dtp+nu2qOq+er9c= +github.com/jirfag/go-printf-func-name v0.0.0-20191110105641-45db9963cdd3/go.mod h1:HEWGJkRDzjJY2sqdDwxccsGicWEf9BQOZsq2tV+xzM0= +github.com/jirfag/go-printf-func-name v0.0.0-20200119135958-7558a9eaa5af/go.mod h1:HEWGJkRDzjJY2sqdDwxccsGicWEf9BQOZsq2tV+xzM0= +github.com/jmespath/go-jmespath v0.0.0-20160202185014-0b12d6b521d8/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k= +github.com/jmespath/go-jmespath v0.0.0-20160803190731-bd40a432e4c7/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k= github.com/jmespath/go-jmespath v0.0.0-20180206201540-c2b33e8439af/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k= -github.com/jmhodges/levigo v1.0.0 h1:q5EC36kV79HWeTBWsod3mG11EgStG3qArTKcvlksN1U= +github.com/jmespath/go-jmespath v0.3.0/go.mod h1:9QtRXoHjLGCJ5IBSaohpXITPlowMeeYCZ7fLUTSywik= +github.com/jmespath/go-jmespath v0.4.0/go.mod h1:T8mJZnbsbmF+m6zOOFylbeCJqk5+pHWvzYPziyZiYoo= +github.com/jmespath/go-jmespath/internal/testify v1.5.1/go.mod h1:L3OGu8Wl2/fWfCI6z80xFu9LTZmf1ZRjMHUOPmWr69U= github.com/jmhodges/levigo v1.0.0/go.mod h1:Q6Qx+uH3RAqyK4rFQroq9RL7mdkABMcfhEI+nNuzMJQ= +github.com/jmoiron/sqlx v1.2.0/go.mod h1:1FEQNm3xlJgrMD+FBdI9+xvCksHtbpVBBw5dYhBSsks= +github.com/jmoiron/sqlx v1.2.1-0.20190826204134-d7d95172beb5/go.mod h1:1FEQNm3xlJgrMD+FBdI9+xvCksHtbpVBBw5dYhBSsks= +github.com/joefitzgerald/rainbow-reporter v0.1.0/go.mod h1:481CNgqmVHQZzdIbN52CupLJyoVwB10FQ/IQlF1pdL8= +github.com/joho/godotenv v1.3.0/go.mod h1:7hK45KPybAkOC6peb+G5yklZfMxEjkZhHbwpqxOKXbg= github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo= -github.com/josharian/intern v1.0.0 h1:vlS4z54oSdjm0bgjRigI+G1HpF+tI+9rE5LLzOg8HmY= +github.com/jonboulle/clockwork v0.2.0/go.mod h1:Pkfl5aHPm1nk2H9h0bjmnJD/BcgbGXUBGnn1kMkgxc8= +github.com/jonboulle/clockwork v0.2.2/go.mod h1:Pkfl5aHPm1nk2H9h0bjmnJD/BcgbGXUBGnn1kMkgxc8= github.com/josharian/intern v1.0.0/go.mod h1:5DoeVV0s6jJacbCEi61lwdGj/aVlrQvzHFFd8Hwg//Y= +github.com/josharian/txtarfs v0.0.0-20210218200122-0702f000015a/go.mod h1:izVPOvVRsHiKkeGCT6tYBNWyDVuzj9wAaBb5R9qamfw= +github.com/jpillora/backoff v0.0.0-20180909062703-3050d21c67d7/go.mod h1:2iMrUgbbvHEiQClaW2NsSzMyGHqN+rDFqY705q49KG0= github.com/jpillora/backoff v1.0.0/go.mod h1:J/6gKK9jxlEcS3zixgDgUAsiuZ7yrSoa/FX5e0EB2j4= github.com/jrick/logrotate v1.0.0/go.mod h1:LNinyqDIJnpAur+b8yyulnQw/wDuN1+BYKlTRt3OuAQ= +github.com/json-iterator/go v0.0.0-20180612202835-f2b4162afba3/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= +github.com/json-iterator/go v0.0.0-20180701071628-ab8a2e0c74be/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= github.com/json-iterator/go v1.1.7/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= github.com/json-iterator/go v1.1.8/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= github.com/json-iterator/go v1.1.9/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= github.com/json-iterator/go v1.1.10/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= github.com/json-iterator/go v1.1.11/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= -github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM= +github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo= github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU= github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/XSXhF0NWZEnDohbsk= +github.com/jsternberg/zap-logfmt v1.0.0/go.mod h1:uvPs/4X51zdkcm5jXl5SYoN+4RK21K8mysFmDaM/h+o= github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU= +github.com/juju/ratelimit v1.0.1/go.mod h1:qapgC/Gy+xNh9UxzV13HGGl/6UXNN+ct+vwSgWNm/qk= github.com/julienschmidt/httprouter v1.1.1-0.20170430222011-975b5c4c7c21/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w= github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w= github.com/julienschmidt/httprouter v1.3.0/go.mod h1:JR6WtHb+2LUe8TCKY3cZOxFyyO8IZAc4RVcycCCAKdM= +github.com/julz/importas v0.1.0/go.mod h1:oSFU2R4XK/P7kNBrnL/FEQlDGN1/6WoxXEjSSXO0DV0= +github.com/jung-kurt/gofpdf v1.0.0/go.mod h1:7Id9E/uU8ce6rXgefFLlgrJj/GYY22cpxn+r32jIOes= +github.com/jung-kurt/gofpdf v1.0.3-0.20190309125859-24315acbbda5/go.mod h1:7Id9E/uU8ce6rXgefFLlgrJj/GYY22cpxn+r32jIOes= +github.com/jwilder/encoding v0.0.0-20170811194829-b4e1701a28ef/go.mod h1:Ct9fl0F6iIOGgxJ5npU/IUOhOhqlVrGjyIZc8/MagT0= +github.com/k0kubun/colorstring v0.0.0-20150214042306-9440f1994b88/go.mod h1:3w7q1U84EfirKl04SVQ/s7nPm1ZPhiXd34z40TNz36k= github.com/karalabe/usb v0.0.0-20190919080040-51dc0efba356/go.mod h1:Od972xHfMJowv7NGVDiWVxk2zxnWgjLlJzE+F4F7AGU= +github.com/karalabe/usb v0.0.2/go.mod h1:Od972xHfMJowv7NGVDiWVxk2zxnWgjLlJzE+F4F7AGU= github.com/keybase/go-keychain v0.0.0-20190712205309-48d3d31d256d/go.mod h1:JJNrCn9otv/2QP4D7SMJBgaleKpOf66PnW6F5WGNRIc= github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= +github.com/kisielk/errcheck v1.6.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= +github.com/kisielk/errcheck v1.6.2/go.mod h1:nXw/i/MfnvRHqXa7XXmQMUB0oNFGuBrNI8d8NLy0LPw= github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= +github.com/kkHAIKE/contextcheck v1.1.3/go.mod h1:PG/cwd6c0705/LM0KTr1acO2gORUxkSVWyLJOFW5qoo= github.com/kkdai/bstream v0.0.0-20161212061736-f391b8402d23/go.mod h1:J+Gs4SYgM6CZQHDETBtE9HaSEkGmuNXF86RwHhHUvq4= +github.com/klauspost/compress v1.4.0/go.mod h1:RyIbtBH6LamlWaDj8nUwkbUhJ87Yi3uG0guNDohfE1A= +github.com/klauspost/compress v1.4.1/go.mod h1:RyIbtBH6LamlWaDj8nUwkbUhJ87Yi3uG0guNDohfE1A= github.com/klauspost/compress v1.10.3/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs= +github.com/klauspost/compress v1.11.3/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs= github.com/klauspost/compress v1.11.7/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs= +github.com/klauspost/compress v1.11.13/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs= github.com/klauspost/compress v1.12.3/go.mod h1:8dP1Hq4DHOhN9w426knH3Rhby4rFm6D8eO+e+Dq5Gzg= -github.com/klauspost/compress v1.15.11 h1:Lcadnb3RKGin4FYM/orgq0qde+nc15E5Cbqg4B9Sx9c= +github.com/klauspost/compress v1.13.4/go.mod h1:8dP1Hq4DHOhN9w426knH3Rhby4rFm6D8eO+e+Dq5Gzg= +github.com/klauspost/compress v1.13.5/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk= +github.com/klauspost/compress v1.13.6/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk= +github.com/klauspost/compress v1.15.1/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk= github.com/klauspost/compress v1.15.11/go.mod h1:QPwzmACJjUTFsnSHH934V6woptycfrDDJnH7hvFVbGM= +github.com/klauspost/cpuid v0.0.0-20170728055534-ae7887de9fa5/go.mod h1:Pj4uuM528wm8OyEC2QMXAi2YiTZ96dNQPGgoMS4s3ek= +github.com/klauspost/cpuid v0.0.0-20180405133222-e7e905edc00e/go.mod h1:Pj4uuM528wm8OyEC2QMXAi2YiTZ96dNQPGgoMS4s3ek= +github.com/klauspost/cpuid v1.2.0/go.mod h1:Pj4uuM528wm8OyEC2QMXAi2YiTZ96dNQPGgoMS4s3ek= +github.com/klauspost/crc32 v0.0.0-20161016154125-cb6bfca970f6/go.mod h1:+ZoRqAPRLkC4NPOvfYeR5KNOrY6TD+/sAC3HXPZgDYg= +github.com/klauspost/pgzip v1.0.2-0.20170402124221-0bf5dcad4ada/go.mod h1:Ch1tH69qFZu15pkjo5kYi6mth2Zzwzt50oCQKQE9RUs= +github.com/klauspost/pgzip v1.2.5/go.mod h1:Ch1tH69qFZu15pkjo5kYi6mth2Zzwzt50oCQKQE9RUs= github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= +github.com/konsorten/go-windows-terminal-sequences v1.0.2/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= github.com/konsorten/go-windows-terminal-sequences v1.0.3/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= github.com/kr/fs v0.1.0/go.mod h1:FFnZGqtBN9Gxj7eW1uZ42v5BccTP0vu6NEaFoC2HwRg= github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc= github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= github.com/kr/pretty v0.2.0/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= -github.com/kr/pretty v0.3.0 h1:WgNl7dwNpEZ6jJ9k1snq4pZsg7DOEN8hP9Xw0Tsjwk0= +github.com/kr/pretty v0.3.0/go.mod h1:640gp4NfQd8pI5XOwp5fnNeVWj67G7CFk/SaSQn7NBk= github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= +github.com/kr/pty v1.1.3/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= +github.com/kr/pty v1.1.5/go.mod h1:9r2w37qlBe7rQ6e1fg1S/9xpWHSnaqNdHD3WcMdbPDA= +github.com/kr/pty v1.1.8/go.mod h1:O1sed60cT9XZ5uDucP5qwvh+TE3NnUj51EiZO/lmSfw= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= -github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= +github.com/kulti/thelper v0.6.2/go.mod h1:DsqKShOvP40epevkFrvIwkCMNYxMeTNjdWL4dqWHZ6I= +github.com/kulti/thelper v0.6.3/go.mod h1:DsqKShOvP40epevkFrvIwkCMNYxMeTNjdWL4dqWHZ6I= +github.com/kunwardeep/paralleltest v1.0.3/go.mod h1:vLydzomDFpk7yu5UX02RmP0H8QfRPOV/oFhWN85Mjb4= +github.com/kunwardeep/paralleltest v1.0.6/go.mod h1:Y0Y0XISdZM5IKm3TREQMZ6iteqn1YuwCsJO/0kL9Zes= +github.com/kylelemons/godebug v0.0.0-20170224010052-a616ab194758/go.mod h1:B69LEHPfb2qLo0BaaOLcbitczOKLWTsrBG9LczfCD4k= +github.com/kylelemons/godebug v0.0.0-20170820004349-d65d576e9348/go.mod h1:B69LEHPfb2qLo0BaaOLcbitczOKLWTsrBG9LczfCD4k= github.com/kylelemons/godebug v1.1.0/go.mod h1:9/0rRGxNHcop5bhtWyNeEfOS8JIWk580+fNqagV/RAw= -github.com/leodido/go-urn v1.2.0 h1:hpXL4XnriNwQ/ABnpepYM/1vCLWNDfUNts8dX3xTG6Y= +github.com/kyoh86/exportloopref v0.1.8/go.mod h1:1tUcJeiioIs7VWe5gcOObrux3lb66+sBqGZrRkMwPgg= +github.com/labstack/echo/v4 v4.2.1/go.mod h1:AA49e0DZ8kk5jTOOCKNuPR6oTnBS0dYiM4FW1e6jwpg= +github.com/labstack/gommon v0.3.0/go.mod h1:MULnywXg0yavhxWKc+lOruYdAhDwPK9wf0OL7NoOu+k= +github.com/ldez/gomoddirectives v0.2.3/go.mod h1:cpgBogWITnCfRq2qGoDkKMEVSaarhdBr6g8G04uz6d0= +github.com/ldez/tagliatelle v0.3.1/go.mod h1:8s6WJQwEYHbKZDsp/LjArytKOG8qaMrKQQ3mFukHs88= +github.com/leanovate/gopter v0.2.9/go.mod h1:U2L/78B+KVFIx2VmW6onHJQzXtFb+p5y3y2Sh+Jxxv8= github.com/leodido/go-urn v1.2.0/go.mod h1:+8+nEpDfqqsY+g338gtMEUOtuK+4dEMhiQEgxpxOKII= +github.com/leonklingele/grouper v1.1.0/go.mod h1:uk3I3uDfi9B6PeUjsCKi6ndcf63Uy7snXgR4yDYQVDY= +github.com/letsencrypt/pkcs11key/v4 v4.0.0/go.mod h1:EFUvBDay26dErnNb70Nd0/VW3tJiIbETBPTl9ATXQag= +github.com/lib/pq v0.0.0-20180327071824-d34b9ff171c2/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= +github.com/lib/pq v1.0.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= +github.com/lib/pq v1.1.1/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= github.com/lib/pq v1.2.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= +github.com/lib/pq v1.8.0/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o= +github.com/lib/pq v1.9.0/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o= github.com/lib/pq v1.10.2/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o= -github.com/lib/pq v1.10.7 h1:p7ZhMD+KsSRozJr34udlUrhboJwWAgCg34+/ZZNvZZw= +github.com/lib/pq v1.10.4/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o= +github.com/lib/pq v1.10.6/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o= github.com/lib/pq v1.10.7/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o= github.com/libp2p/go-buffer-pool v0.0.2/go.mod h1:MvaB6xw5vOrDl8rYZGLFdKAuk/hRoRZd1Vi32+RXyFM= -github.com/libp2p/go-buffer-pool v0.1.0 h1:oK4mSFcQz7cTQIfqbe4MIj9gLW+mnanjyFtc6cdF0Y8= github.com/libp2p/go-buffer-pool v0.1.0/go.mod h1:N+vh8gMqimBzdKkSMVuydVDq+UV5QTWy5HSiZacSbPg= github.com/lightstep/lightstep-tracer-common/golang/gogo v0.0.0-20190605223551-bc2310a04743/go.mod h1:qklhhLq1aX+mtWk9cPHPzaBjWImj5ULL6C7HFJtXQMM= github.com/lightstep/lightstep-tracer-go v0.18.1/go.mod h1:jlF1pusYV4pidLvZ+XD0UBX0ZE6WURAspgAczcDHrL4= -github.com/line/ibc-go/v3 v3.3.1 h1:tcyOlWoPbNnRhASJMdfXVzEOmqPs9kM2c/25siH++cw= github.com/line/ibc-go/v3 v3.3.1/go.mod h1:jqimrnKidXAxySD2axhpuBUSFZEyxHiLhLoLJGOZMss= -github.com/line/lbm-sdk v0.46.1-0.20230120095230-1deccf3012a3 h1:umjM0ZtuQfoTOFk+v5XS4E9VJL9UDBzF5zAe9yAMZSo= +github.com/line/lbm-sdk v0.0.0-20230113004822-8fb974447422/go.mod h1:wpkaELNQd8x+DdXC/blxYoEExOaZBKFhby6AujzGTC0= github.com/line/lbm-sdk v0.46.1-0.20230120095230-1deccf3012a3/go.mod h1:wpkaELNQd8x+DdXC/blxYoEExOaZBKFhby6AujzGTC0= -github.com/line/ostracon v1.0.7 h1:8vh/gsM6Sf6z2s38og8YufIhrWN2TwXpm4I3DqKEVyI= github.com/line/ostracon v1.0.7/go.mod h1:gmEKYdaMaDAl5xJ8sJJo0s6OvzBSZwM01nWRCGA5oDY= -github.com/line/wasmvm v1.1.1-0.11.0.0.20230113085344-89650a7edd05 h1:Gtz45izC5JFrS+H35rEJ/TEgdXJr+3WSpkynRk52M5U= github.com/line/wasmvm v1.1.1-0.11.0.0.20230113085344-89650a7edd05/go.mod h1:Lq3FVvi/rb+OOlTxqtcqcao2GGESQ4hUpuXMcjdJbco= +github.com/linuxkit/virtsock v0.0.0-20201010232012-f8cee7dfc7a3/go.mod h1:3r6x7q95whyfWQpmGZTu3gk3v2YkMi05HEzl7Tf7YEo= +github.com/logrusorgru/aurora v0.0.0-20181002194514-a7b3b318ed4e/go.mod h1:7rIyQOR62GCctdiQpZ/zOJlFyk6y+94wXzv6RNZgaR4= github.com/lucasjones/reggen v0.0.0-20180717132126-cdb49ff09d77/go.mod h1:5ELEyG+X8f+meRWHuqUOewBOhvHkl7M76pdGEansxW4= +github.com/lufeee/execinquery v1.2.1/go.mod h1:EC7DrEKView09ocscGHC+apXMIaorh4xqSxS/dy8SbM= +github.com/lufia/plan9stats v0.0.0-20211012122336-39d0f177ccd0/go.mod h1:zJYVVT2jmtg6P3p1VtQj7WsuWi/y4VnjVBn7F8KPB3I= +github.com/lyft/protoc-gen-star v0.5.3/go.mod h1:V0xaHgaf5oCCqmcxYcWiDfTiKsZsRc87/1qhoTACD8w= +github.com/magefile/mage v1.14.0/go.mod h1:z5UZb/iS3GoOSn0JgWuiw7dxlurVYTu+/jHXqQg881A= github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= github.com/magiconair/properties v1.8.1/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= github.com/magiconair/properties v1.8.5/go.mod h1:y3VJvCyxH9uVvJTWEGAELF3aiYNyPKd5NZ3oSwXrF60= -github.com/magiconair/properties v1.8.7 h1:IeQXZAiQcpL9mgcAe1Nu6cX9LLw6ExEHKjN0VQdvPDY= +github.com/magiconair/properties v1.8.6/go.mod h1:y3VJvCyxH9uVvJTWEGAELF3aiYNyPKd5NZ3oSwXrF60= github.com/magiconair/properties v1.8.7/go.mod h1:Dhd985XPs7jluiymwWYZ0G4Z61jb3vdS329zhj2hYo0= -github.com/mailru/easyjson v0.7.7 h1:UGYAvKxe3sBsEDzO8ZeWOSlIQfWFlxbzLZe7hwFURr0= +github.com/mailru/easyjson v0.0.0-20160728113105-d5b7844b561a/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= +github.com/mailru/easyjson v0.0.0-20190614124828-94de47d64c63/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= +github.com/mailru/easyjson v0.0.0-20190626092158-b2ccc519800e/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= +github.com/mailru/easyjson v0.7.0/go.mod h1:KAzv3t3aY1NaHWoQz1+4F1ccyAH66Jk7yos7ldAVICs= +github.com/mailru/easyjson v0.7.6/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc= github.com/mailru/easyjson v0.7.7/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc= +github.com/maratori/testableexamples v1.0.0/go.mod h1:4rhjL1n20TUTT4vdh3RDqSizKLyXp7K2u6HgraZCGzE= +github.com/maratori/testpackage v1.0.1/go.mod h1:ddKdw+XG0Phzhx8BFDTKgpWP4i7MpApTE5fXSKAqwDU= +github.com/maratori/testpackage v1.1.0/go.mod h1:PeAhzU8qkCwdGEMTEupsHJNlQu2gZopMC6RjbhmHeDc= +github.com/marstr/guid v1.1.0/go.mod h1:74gB1z2wpxxInTG6yaqA7KrtM0NZ+RbrcqDvYHefzho= +github.com/matoous/godox v0.0.0-20190911065817-5d6d842e92eb/go.mod h1:1BELzlh859Sh1c6+90blK8lbYy0kwQf1bYlBhBysy1s= +github.com/matoous/godox v0.0.0-20210227103229-6504466cf951/go.mod h1:1BELzlh859Sh1c6+90blK8lbYy0kwQf1bYlBhBysy1s= +github.com/matryer/is v1.4.0/go.mod h1:8I/i5uYgLzgsgEloJE1U6xx5HkBQpAZvepWuujKwMRU= +github.com/matryer/moq v0.0.0-20190312154309-6cfb0558e1bd/go.mod h1:9ELz6aaclSIGnZBoaSLZ3NAl1VTufbOrXBPvtcy6WiQ= github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= github.com/mattn/go-colorable v0.1.0/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= +github.com/mattn/go-colorable v0.1.1/go.mod h1:FuOcm+DKB9mbwrcAfNl7/TZVBZ6rcnceauSikq3lYCQ= +github.com/mattn/go-colorable v0.1.2/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE= +github.com/mattn/go-colorable v0.1.4/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE= +github.com/mattn/go-colorable v0.1.6/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= +github.com/mattn/go-colorable v0.1.7/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= github.com/mattn/go-colorable v0.1.8/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= +github.com/mattn/go-colorable v0.1.9/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= github.com/mattn/go-colorable v0.1.12/go.mod h1:u5H1YNBxpqRaxsYJYSkiCWKzEfiAb1Gb520KVy5xxl4= -github.com/mattn/go-colorable v0.1.13 h1:fFA4WZxdEF4tXPZVKMLwD8oUnCTTo08duU7wxecdEvA= github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovkB8vQcUbaXHg= github.com/mattn/go-ieproxy v0.0.0-20190610004146-91bb50d98149/go.mod h1:31jz6HNzdxOmlERGGEc4v/dMssOfmp2p5bT/okiKFFc= github.com/mattn/go-ieproxy v0.0.0-20190702010315-6dee0af9227d/go.mod h1:31jz6HNzdxOmlERGGEc4v/dMssOfmp2p5bT/okiKFFc= +github.com/mattn/go-ieproxy v0.0.1/go.mod h1:pYabZ6IHcRpFh7vIaLfK7rdcWgFEb3SFJ6/gNWuh88E= github.com/mattn/go-isatty v0.0.3/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= github.com/mattn/go-isatty v0.0.4/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= github.com/mattn/go-isatty v0.0.5-0.20180830101745-3fb116b82035/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= +github.com/mattn/go-isatty v0.0.5/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= +github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= +github.com/mattn/go-isatty v0.0.9/go.mod h1:YNRxwqDuOph6SZLI9vUUz6OYw3QyUt7WiY2yME+cCiQ= +github.com/mattn/go-isatty v0.0.10/go.mod h1:qgIWMr58cqv1PHHyhnkY9lrL7etaEgOFcMEpPG5Rm84= +github.com/mattn/go-isatty v0.0.11/go.mod h1:PhnuNfih5lzO57/f3n+odYbM4JtupLOxQOAqxQCu2WE= github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU= github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27kJ6hsGG94= github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= -github.com/mattn/go-isatty v0.0.17 h1:BTarxUcIeDqL27Mc+vyvdWYSL28zpIhv3RoTdsLMPng= github.com/mattn/go-isatty v0.0.17/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= github.com/mattn/go-runewidth v0.0.2/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= github.com/mattn/go-runewidth v0.0.3/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= github.com/mattn/go-runewidth v0.0.4/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= +github.com/mattn/go-runewidth v0.0.6/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI= +github.com/mattn/go-runewidth v0.0.9/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI= +github.com/mattn/go-shellwords v1.0.3/go.mod h1:3xCvwCdWdlDJUrvuMn7Wuy9eWs4pE8vqg+NOMyg4B2o= +github.com/mattn/go-shellwords v1.0.6/go.mod h1:3xCvwCdWdlDJUrvuMn7Wuy9eWs4pE8vqg+NOMyg4B2o= +github.com/mattn/go-shellwords v1.0.10/go.mod h1:EZzvwXDESEeg03EKmM+RmDnNOPKG4lLtQsUlTZDWQ8Y= +github.com/mattn/go-shellwords v1.0.12/go.mod h1:EZzvwXDESEeg03EKmM+RmDnNOPKG4lLtQsUlTZDWQ8Y= +github.com/mattn/go-sqlite3 v1.9.0/go.mod h1:FPy6KqzDD04eiIsT53CuJW3U88zkxoIYsOqkbpncsNc= +github.com/mattn/go-sqlite3 v1.11.0/go.mod h1:FPy6KqzDD04eiIsT53CuJW3U88zkxoIYsOqkbpncsNc= +github.com/mattn/go-sqlite3 v1.14.9/go.mod h1:NyWgC/yNuGj7Q9rpYnZvas74GogHl5/Z4A/KQRfk6bU= +github.com/mattn/go-tty v0.0.0-20180907095812-13ff1204f104/go.mod h1:XPvLUNfbS4fJH25nqRHfWLMa1ONC8Amw+mIA639KxkE= +github.com/mattn/go-zglob v0.0.1/go.mod h1:9fxibJccNxU2cnpIKLRRFA7zX7qhkJIQWBb449FYHOo= +github.com/mattn/goveralls v0.0.2/go.mod h1:8d1ZMHsd7fW6IRPKQh46F2WRpyib5/X4FOpevwGNQEw= github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= -github.com/matttproud/golang_protobuf_extensions v1.0.4 h1:mmDVorXM7PCGKw94cs5zkfA9PSy5pEvNWRP0ET0TIVo= +github.com/matttproud/golang_protobuf_extensions v1.0.2-0.20181231171920-c182affec369/go.mod h1:BSXmuO+STAnVfrANrmjBb36TMTDstsz7MSK+HVaYKv4= github.com/matttproud/golang_protobuf_extensions v1.0.4/go.mod h1:BSXmuO+STAnVfrANrmjBb36TMTDstsz7MSK+HVaYKv4= +github.com/maxbrunsfeld/counterfeiter/v6 v6.2.2/go.mod h1:eD9eIE7cdwcMi9rYluz88Jz2VyhSmden33/aXg4oVIY= +github.com/mbilski/exhaustivestruct v1.2.0/go.mod h1:OeTBVxQWoEmB2J2JCHmXWPJ0aksxSUOUy+nvtVEfzXc= +github.com/mgechev/dots v0.0.0-20210922191527-e955255bf517/go.mod h1:KQ7+USdGKfpPjXk4Ga+5XxQM4Lm4e3gAogrreFAYpOg= +github.com/mgechev/revive v1.2.1/go.mod h1:+Ro3wqY4vakcYNtkBWdZC7dBg1xSB6sp054wWwmeFm0= +github.com/mgechev/revive v1.2.4/go.mod h1:iAWlQishqCuj4yhV24FTnKSXGpbAA+0SckXB8GQMX/Q= +github.com/mgutz/ansi v0.0.0-20170206155736-9520e82c474b/go.mod h1:01TrycV0kFyexm33Z7vhZRXopbI8J3TDReVlkTgMUxE= github.com/miekg/dns v1.0.14/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg= +github.com/miekg/dns v1.1.26/go.mod h1:bPDLeHnStXmXAq1m/Ch/hvfNHr14JKNPMBo3VZKjuso= +github.com/miekg/dns v1.1.35/go.mod h1:KNUDUusw/aVsxyTYZM1oqvCicbwhgbNgztCETuNZ7xM= +github.com/miekg/dns v1.1.41/go.mod h1:p6aan82bvRIyn+zDIv9xYNUpwa73JcSh9BKwknJysuI= +github.com/miekg/dns v1.1.43/go.mod h1:+evo5L0630/F6ca/Z9+GAqzhjGyn8/c+TBaOyfEl0V4= +github.com/miekg/pkcs11 v1.0.2/go.mod h1:XsNlhZGX73bx86s2hdc/FuaLm2CPZJemRLMA+WTFxgs= +github.com/miekg/pkcs11 v1.0.3/go.mod h1:XsNlhZGX73bx86s2hdc/FuaLm2CPZJemRLMA+WTFxgs= +github.com/miekg/pkcs11 v1.1.1/go.mod h1:XsNlhZGX73bx86s2hdc/FuaLm2CPZJemRLMA+WTFxgs= github.com/mimoo/StrobeGo v0.0.0-20181016162300-f8f6d4d2b643/go.mod h1:43+3pMjjKimDBf5Kr4ZFNGbLql1zKkbImw+fZbw3geM= -github.com/mimoo/StrobeGo v0.0.0-20210601165009-122bf33a46e0 h1:QRUSJEgZn2Snx0EmT/QLXibWjSUDjKWvXIT19NBVp94= github.com/mimoo/StrobeGo v0.0.0-20210601165009-122bf33a46e0/go.mod h1:43+3pMjjKimDBf5Kr4ZFNGbLql1zKkbImw+fZbw3geM= github.com/minio/highwayhash v1.0.1/go.mod h1:BQskDq+xkJ12lmlUUi7U0M5Swg3EWR+dLTk+kldvVxY= -github.com/minio/highwayhash v1.0.2 h1:Aak5U0nElisjDCfPSG79Tgzkn2gl66NxOMspRrKnA/g= github.com/minio/highwayhash v1.0.2/go.mod h1:BQskDq+xkJ12lmlUUi7U0M5Swg3EWR+dLTk+kldvVxY= +github.com/mistifyio/go-zfs v2.1.2-0.20190413222219-f784269be439+incompatible/go.mod h1:8AuVvqP/mXw1px98n46wfvcGfQ4ci2FwoAjKYxuo3Z4= github.com/mitchellh/cli v1.0.0/go.mod h1:hNIlj7HEI86fIcpObd7a0FcrxTWetlwJDGcceTlRvqc= +github.com/mitchellh/cli v1.1.0/go.mod h1:xcISNoH86gajksDmfB23e/pu+B+GeFRMYmoHXxx3xhI= +github.com/mitchellh/copystructure v1.0.0/go.mod h1:SNtv71yrdKgLRyLFxmLdkAbkKEFWgYaq1OVrnRcwhnw= github.com/mitchellh/go-homedir v1.0.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= +github.com/mitchellh/go-ps v0.0.0-20190716172923-621e5597135b/go.mod h1:r1VsdOzOPt1ZSrGZWFoNhsAedKnEd6r9Np1+5blZCWk= +github.com/mitchellh/go-ps v1.0.0/go.mod h1:J4lOc8z8yJs6vUwklHw2XEIiT4z4C40KtWVN3nvg8Pg= github.com/mitchellh/go-testing-interface v1.0.0/go.mod h1:kRemZodwjscx+RGhAo8eIhFbs2+BFgRtFPeD/KE+zxI= +github.com/mitchellh/go-wordwrap v1.0.0/go.mod h1:ZXFpozHsX6DPmq2I0TCekCxypsnAUbP2oI0UX1GXzOo= github.com/mitchellh/gox v0.4.0/go.mod h1:Sd9lOJ0+aimLBi73mGofS1ycjY8lL3uZM3JPS42BGNg= +github.com/mitchellh/hashstructure v1.0.0/go.mod h1:QjSHrPWS+BGUVBYkbTZWEnOh3G1DutKwClXU/ABz6AQ= +github.com/mitchellh/hashstructure/v2 v2.0.2/go.mod h1:MG3aRVU/N29oo/V/IhBX8GR/zz4kQkprJgF2EVszyDE= github.com/mitchellh/iochan v1.0.0/go.mod h1:JwYml1nuB7xOzsp52dPpHFffvOCDupsG0QubkSMEySY= github.com/mitchellh/mapstructure v0.0.0-20160808181253-ca63d7c062ee/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= +github.com/mitchellh/mapstructure v1.3.1/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= github.com/mitchellh/mapstructure v1.3.3/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= github.com/mitchellh/mapstructure v1.4.1/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= -github.com/mitchellh/mapstructure v1.5.0 h1:jeMsZIYE/09sWLaz43PL7Gy6RuMjD2eJVyuac5Z2hdY= +github.com/mitchellh/mapstructure v1.4.2/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= +github.com/mitchellh/mapstructure v1.4.3/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= github.com/mitchellh/mapstructure v1.5.0/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= +github.com/mitchellh/osext v0.0.0-20151018003038-5e2d6d41470f/go.mod h1:OkQIRizQZAeMln+1tSwduZz7+Af5oFlKirV/MSYes2A= +github.com/mitchellh/pointerstructure v1.2.0/go.mod h1:BRAsLI5zgXmw97Lf6s25bs8ohIXc3tViBH44KcwB2g4= +github.com/mitchellh/reflectwalk v1.0.0/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw= +github.com/mitchellh/reflectwalk v1.0.1/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw= +github.com/moby/buildkit v0.8.1/go.mod h1:/kyU1hKy/aYCuP39GZA9MaKioovHku57N6cqlKZIaiQ= +github.com/moby/buildkit v0.10.4/go.mod h1:Yajz9vt1Zw5q9Pp4pdb3TCSUXJBIroIQGQ3TTs/sLug= +github.com/moby/locker v1.0.1/go.mod h1:S7SDdo5zpBK84bzzVlKr2V0hz+7x9hWbYC/kq7oQppc= +github.com/moby/spdystream v0.2.0/go.mod h1:f7i0iNDQJ059oMTcWxx8MA/zKFIuD/lY+0GqbN2Wy8c= +github.com/moby/sys/mount v0.1.0/go.mod h1:FVQFLDRWwyBjDTBNQXDlWnSFREqOo3OKX9aqhmeoo74= +github.com/moby/sys/mount v0.1.1/go.mod h1:FVQFLDRWwyBjDTBNQXDlWnSFREqOo3OKX9aqhmeoo74= +github.com/moby/sys/mount v0.3.0/go.mod h1:U2Z3ur2rXPFrFmy4q6WMwWrBOAQGYtYTRVM8BIvzbwk= +github.com/moby/sys/mountinfo v0.1.0/go.mod h1:w2t2Avltqx8vE7gX5l+QiBKxODu2TX0+Syr3h52Tw4o= +github.com/moby/sys/mountinfo v0.1.3/go.mod h1:w2t2Avltqx8vE7gX5l+QiBKxODu2TX0+Syr3h52Tw4o= +github.com/moby/sys/mountinfo v0.4.0/go.mod h1:rEr8tzG/lsIZHBtN/JjGG+LMYx9eXgW2JI+6q0qou+A= github.com/moby/sys/mountinfo v0.4.1/go.mod h1:rEr8tzG/lsIZHBtN/JjGG+LMYx9eXgW2JI+6q0qou+A= +github.com/moby/sys/mountinfo v0.5.0/go.mod h1:3bMD3Rg+zkqx8MRYPi7Pyb0Ie97QEBmdxbhnCLlSvSU= +github.com/moby/sys/mountinfo v0.6.0/go.mod h1:3bMD3Rg+zkqx8MRYPi7Pyb0Ie97QEBmdxbhnCLlSvSU= +github.com/moby/sys/signal v0.6.0/go.mod h1:GQ6ObYZfqacOwTtlXvcmh9A26dVRul/hbOZn88Kg8Tg= +github.com/moby/sys/symlink v0.1.0/go.mod h1:GGDODQmbFOjFsXvfLVn3+ZRxkch54RkSiGqsZeMYowQ= +github.com/moby/sys/symlink v0.2.0/go.mod h1:7uZVF2dqJjG/NsClqul95CqKOBRQyYSNnJ6BMgR/gFs= +github.com/moby/term v0.0.0-20200312100748-672ec06f55cd/go.mod h1:DdlQx2hp0Ss5/fLikoLlEeIYiATotOjgB//nb973jeo= +github.com/moby/term v0.0.0-20200915141129-7f0af18e79f2/go.mod h1:TjQg8pa4iejrUrjiz0MCtMV38jdMNW4doKSiBrEvCQQ= +github.com/moby/term v0.0.0-20201216013528-df9cb8a40635/go.mod h1:FBS0z0QWA44HXygs7VXDUOGoN/1TV3RuWkLO04am3wc= +github.com/moby/term v0.0.0-20210610120745-9d4ed1856297/go.mod h1:vgPCkQMyxTZ7IDy8SXRufE172gr8+K/JE/7hHFxHW3A= +github.com/moby/term v0.0.0-20210619224110-3f7ff695adc6/go.mod h1:E2VnQOmVuvZB6UYnnDB0qG5Nq/1tD9acaOpo6xmt0Kw= +github.com/moby/term v0.0.0-20220808134915-39b0c02b01ae/go.mod h1:E2VnQOmVuvZB6UYnnDB0qG5Nq/1tD9acaOpo6xmt0Kw= github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= -github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg= github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= +github.com/modern-go/reflect2 v0.0.0-20180320133207-05fbef0ca5da/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= -github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M= +github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk= +github.com/modocache/gover v0.0.0-20171022184752-b58185e213c5/go.mod h1:caMODM3PzxT8aQXRPkAt8xlV/e7d7w8GM5g0fa5F0D8= +github.com/mohae/deepcopy v0.0.0-20170929034955-c48cc78d4826/go.mod h1:TaXosZuwdSHYgviHp1DAtfrULt5eUgsSMsZf+YrPgl8= +github.com/moricho/tparallel v0.2.1/go.mod h1:fXEIZxG2vdfl0ZF8b42f5a78EhjjD5mX8qUplsoSU4k= +github.com/morikuni/aec v1.0.0/go.mod h1:BbKIizmSmc5MMPqRYbxO4ZU0S0+P200+tUnFx7PXmsc= +github.com/mozilla/scribe v0.0.0-20180711195314-fb71baf557c1/go.mod h1:FIczTrinKo8VaLxe6PWTPEXRXDIHz2QAwiaBaP5/4a8= +github.com/mozilla/tls-observatory v0.0.0-20190404164649-a3c1b6cfecfd/go.mod h1:SrKMQvPiws7F7iqYp8/TX+IhxCYhzr6N/1yb8cwHsGk= +github.com/mozilla/tls-observatory v0.0.0-20200317151703-4fa42e1c2dee/go.mod h1:SrKMQvPiws7F7iqYp8/TX+IhxCYhzr6N/1yb8cwHsGk= +github.com/mozilla/tls-observatory v0.0.0-20210609171429-7bc42856d2e5/go.mod h1:FUqVoUPHSEdDR0MnFM3Dh8AU0pZHLXUD127SAJGER/s= +github.com/mrunalp/fileutils v0.0.0-20200520151820-abd8a0e76976/go.mod h1:x8F1gnqOkIEiO4rqoeEEEqQbo7HjGMTvyoq3gej4iT0= github.com/mrunalp/fileutils v0.5.0/go.mod h1:M1WthSahJixYnrXQl/DFQuteStB1weuxD2QJNHXfbSQ= -github.com/mtibben/percent v0.2.1 h1:5gssi8Nqo8QU/r2pynCm+hBQHpkB/uNK7BJCFogWdzs= +github.com/mschoch/smat v0.0.0-20160514031455-90eadee771ae/go.mod h1:qAyveg+e4CE+eKJXWVjKXM4ck2QobLqTDytGJbLLhJg= github.com/mtibben/percent v0.2.1/go.mod h1:KG9uO+SZkUp+VkRHsCdYQV3XSZrrSpR3O9ibNBTZrns= +github.com/munnerz/goautoneg v0.0.0-20120707110453-a547fc61f48d/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ= +github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ= github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= -github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f h1:KUppIJq7/+SVif2QVs3tOP0zanoHgBEVAwHxUSIzRqU= github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= +github.com/mwitkow/go-proto-validators v0.0.0-20180403085117-0950a7990007/go.mod h1:m2XC9Qq0AlmmVksL6FktJCdTYyLk7V3fKyp0sl1yWQo= +github.com/mwitkow/go-proto-validators v0.2.0/go.mod h1:ZfA1hW+UH/2ZHOWvQ3HnQaU0DtnpXu850MZiy+YUgcc= github.com/mwitkow/grpc-proxy v0.0.0-20181017164139-0f1106ef9c76/go.mod h1:x5OoJHDHqxHS801UIuhqGl6QdSAEJvtausosHSdazIo= +github.com/mxk/go-flowrate v0.0.0-20140419014527-cca7078d478f/go.mod h1:ZdcZmHo+o7JKHSa8/e818NopupXU1YMK5fe1lsApnBw= +github.com/nakabonne/nestif v0.3.0/go.mod h1:dI314BppzXjJ4HsCnbo7XzrJHPszZsjnk5wEBSYHI2c= +github.com/nakabonne/nestif v0.3.1/go.mod h1:9EtoZochLn5iUprVDmDjqGKPofoUEBL8U4Ngq6aY7OE= github.com/naoina/go-stringutil v0.1.0/go.mod h1:XJ2SJL9jCtBh+P9q5btrd/Ylo8XwT/h1USek5+NqSA0= github.com/naoina/toml v0.1.2-0.20170918210437-9fafd6967416/go.mod h1:NBIhNtsFMo3G2szEBne+bO4gS192HuIYRqfvOWb4i1E= github.com/nats-io/jwt v0.3.0/go.mod h1:fRYCDE99xlTsqUzISS1Bi75UBJ6ljOJQOAAu5VglpSg= github.com/nats-io/jwt v0.3.2/go.mod h1:/euKqTS1ZD+zzjYrY7pseZrTtWQSjujC7xjPc8wL6eU= +github.com/nats-io/jwt v1.2.2/go.mod h1:/xX356yQA6LuXI9xWW7mZNpxgF2mBmGecH+Fj34sP5Q= +github.com/nats-io/jwt/v2 v2.0.3/go.mod h1:VRP+deawSXyhNjXmxPCHskrR6Mq50BqpEI5SEcNiGlY= github.com/nats-io/nats-server/v2 v2.1.2/go.mod h1:Afk+wRZqkMQs/p45uXdrVLuab3gwv3Z8C4HTBu8GD/k= +github.com/nats-io/nats-server/v2 v2.5.0/go.mod h1:Kj86UtrXAL6LwYRA6H4RqzkHhK0Vcv2ZnKD5WbQ1t3g= github.com/nats-io/nats.go v1.9.1/go.mod h1:ZjDU1L/7fJ09jvUSRVBR2e7+RnLiiIQyqyzEE/Zbp4w= +github.com/nats-io/nats.go v1.12.1/go.mod h1:BPko4oXsySz4aSWeFgOHLZs3G4Jq4ZAyE6/zMCxRT6w= github.com/nats-io/nkeys v0.1.0/go.mod h1:xpnFELMwJABBLVhffcfd1MZx6VsNRFpEugbxziKVo7w= github.com/nats-io/nkeys v0.1.3/go.mod h1:xpnFELMwJABBLVhffcfd1MZx6VsNRFpEugbxziKVo7w= +github.com/nats-io/nkeys v0.2.0/go.mod h1:XdZpAbhgyyODYqjTawOnIOI7VlbKSarI9Gfy1tqEu/s= +github.com/nats-io/nkeys v0.3.0/go.mod h1:gvUNGjVcM2IPr5rCsRsC6Wb3Hr2CQAm08dsxtV6A5y4= github.com/nats-io/nuid v1.0.1/go.mod h1:19wcPz3Ph3q0Jbyiqsd0kePYG7A95tJPxeL+1OSON2c= +github.com/nbutton23/zxcvbn-go v0.0.0-20180912185939-ae427f1e4c1d/go.mod h1:o96djdrsSGy3AWPyBgZMAGfxZNfgntdJG+11KU4QvbU= +github.com/nbutton23/zxcvbn-go v0.0.0-20210217022336-fa2cb2858354/go.mod h1:KSVJerMDfblTH7p5MZaTt+8zaT2iEk3AkVb9PQdZuE8= +github.com/ncw/swift v1.0.47/go.mod h1:23YIA4yWVnGwv2dQlN4bB7egfYX6YLn0Yo/S6zZO/ZM= github.com/neilotoole/errgroup v0.1.5/go.mod h1:Q2nLGf+594h0CLBs/Mbg6qOr7GtqDK7C2S41udRnToE= +github.com/neilotoole/errgroup v0.1.6/go.mod h1:Q2nLGf+594h0CLBs/Mbg6qOr7GtqDK7C2S41udRnToE= +github.com/networkplumbing/go-nft v0.2.0/go.mod h1:HnnM+tYvlGAsMU7yoYwXEVLLiDW9gdMmb5HoGcwpuQs= github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno= +github.com/nishanths/exhaustive v0.7.11/go.mod h1:gX+MP7DWMKJmNa1HfMozK+u04hQd3na9i0hyqf3/dOI= +github.com/nishanths/exhaustive v0.8.3/go.mod h1:qj+zJJUgJ76tR92+25+03oYUhzF4R7/2Wk7fGTfCHmg= +github.com/nishanths/predeclared v0.0.0-20190419143655-18a43bb90ffc/go.mod h1:62PewwiQTlm/7Rj+cxVYqZvDIUc+JjZq6GHAC1fsObQ= github.com/nishanths/predeclared v0.0.0-20200524104333-86fad755b4d3/go.mod h1:nt3d53pc1VYcphSCIaYAJtnPYnr3Zyn8fMq2wvPGPso= +github.com/nishanths/predeclared v0.2.2/go.mod h1:RROzoN6TnGQupbC+lqggsOlcgysk3LMK/HI84Mp280c= github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A= -github.com/nxadm/tail v1.4.8 h1:nPr65rt6Y5JFSKQO7qToXr7pePgD6Gwiw05lkbyAQTE= github.com/nxadm/tail v1.4.8/go.mod h1:+ncqLTQzXmGhMZNUePPaPqPvBxHAIsmXswZKocGu+AU= github.com/oklog/oklog v0.3.2/go.mod h1:FCV+B7mhrz4o+ueLpx+KqkyXRGMWOYEvfiXtdGtbWGs= github.com/oklog/run v1.0.0/go.mod h1:dlhp/R75TPv97u0XWUtDeV/lRKWPKSdTuV0TZvrmrQA= github.com/oklog/ulid v1.3.1/go.mod h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn4U= +github.com/oklog/ulid/v2 v2.0.2/go.mod h1:mtBL0Qe/0HAx6/a4Z30qxVIAL1eQDweXq5lxOEiwQ68= +github.com/oklog/ulid/v2 v2.1.0/go.mod h1:rcEKHmBBKfef9DhnvX7y1HZBYxjXb0cP5ExxNsTT1QQ= github.com/olekukonko/tablewriter v0.0.0-20170122224234-a0225b3f23b5/go.mod h1:vsDQFd/mU46D+Z4whnwzcISnGGzXWMclvtLoiIKAKIo= github.com/olekukonko/tablewriter v0.0.1/go.mod h1:vsDQFd/mU46D+Z4whnwzcISnGGzXWMclvtLoiIKAKIo= github.com/olekukonko/tablewriter v0.0.2-0.20190409134802-7e037d187b0c/go.mod h1:vsDQFd/mU46D+Z4whnwzcISnGGzXWMclvtLoiIKAKIo= +github.com/olekukonko/tablewriter v0.0.2/go.mod h1:rSAaSIOAGT9odnlyGlUfAJaoc5w2fSBUmeGDbRWPxyQ= +github.com/olekukonko/tablewriter v0.0.5/go.mod h1:hPp6KlRPjbx+hW8ykQs1w3UBbZlj6HuIJcUGPhkA7kY= +github.com/onsi/ginkgo v0.0.0-20151202141238-7f8ab55aaf3b/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= +github.com/onsi/ginkgo v0.0.0-20170829012221-11459a886d9c/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/ginkgo v1.7.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= +github.com/onsi/ginkgo v1.8.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= +github.com/onsi/ginkgo v1.10.1/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= +github.com/onsi/ginkgo v1.10.3/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= +github.com/onsi/ginkgo v1.11.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= +github.com/onsi/ginkgo v1.12.0/go.mod h1:oUhWkIvk5aDxtKvDDuw8gItl8pKl42LzjC9KZE0HfGg= github.com/onsi/ginkgo v1.12.1/go.mod h1:zj2OWP4+oCPe1qIXoGWkgMRwljMUYCdkwsT2108oapk= +github.com/onsi/ginkgo v1.13.0/go.mod h1:+REjRxOmWfHCjfv9TTWB1jD1Frx4XydAD3zm1lskyM0= github.com/onsi/ginkgo v1.14.0/go.mod h1:iSB4RoI2tjJc9BBv4NKIKWKya62Rps+oPG/Lv9klQyY= github.com/onsi/ginkgo v1.16.2/go.mod h1:CObGmKUOKaSC0RjmoAK7tKyn4Azo5P2IWuoMnvwxz1E= -github.com/onsi/ginkgo v1.16.4 h1:29JGrr5oVBm5ulCWet69zQkzWipVXIol6ygQUe/EzNc= github.com/onsi/ginkgo v1.16.4/go.mod h1:dX+/inL/fNMqNlz0e9LfyB9TswhZpCVdJM/Z6Vvnwo0= +github.com/onsi/ginkgo/v2 v2.0.0/go.mod h1:vw5CSIxN1JObi/U8gcbwft7ZxR2dgaR70JSE3/PpL4c= +github.com/onsi/ginkgo/v2 v2.1.3/go.mod h1:vw5CSIxN1JObi/U8gcbwft7ZxR2dgaR70JSE3/PpL4c= +github.com/onsi/ginkgo/v2 v2.1.4/go.mod h1:um6tUpWM/cxCK3/FK8BXqEiUMUwRgSM4JXG47RKZmLU= +github.com/onsi/gomega v0.0.0-20151007035656-2152b45fa28a/go.mod h1:C1qb7wdrVGGVU+Z6iS04AVkA3Q65CEZX59MT0QO5uiA= +github.com/onsi/gomega v0.0.0-20170829124025-dcabb60a477c/go.mod h1:C1qb7wdrVGGVU+Z6iS04AVkA3Q65CEZX59MT0QO5uiA= github.com/onsi/gomega v1.4.1/go.mod h1:C1qb7wdrVGGVU+Z6iS04AVkA3Q65CEZX59MT0QO5uiA= github.com/onsi/gomega v1.4.3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= +github.com/onsi/gomega v1.5.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= +github.com/onsi/gomega v1.7.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY= +github.com/onsi/gomega v1.8.1/go.mod h1:Ho0h+IUsWyvy1OpqCwxlQ/21gkhVunqlU8fDGcoTdcA= +github.com/onsi/gomega v1.9.0/go.mod h1:Ho0h+IUsWyvy1OpqCwxlQ/21gkhVunqlU8fDGcoTdcA= github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo= +github.com/onsi/gomega v1.10.3/go.mod h1:V9xEwhxec5O8UDM77eCW8vLymOMltsqPVYWrpDsH8xc= github.com/onsi/gomega v1.13.0/go.mod h1:lRk9szgn8TxENtWd0Tp4c3wjlRfMTMH27I+3Je41yGY= -github.com/onsi/gomega v1.20.0 h1:8W0cWlwFkflGPLltQvLRB7ZVD5HuP6ng320w2IS245Q= +github.com/onsi/gomega v1.15.0/go.mod h1:cIuvLEne0aoVhAgh/O6ac0Op8WWw9H6eYCriF+tEHG0= +github.com/onsi/gomega v1.17.0/go.mod h1:HnhC7FXeEQY45zxNK3PPoIUhzk/80Xly9PcubAlGdZY= +github.com/onsi/gomega v1.18.1/go.mod h1:0q+aL8jAiMXy9hbwj2mr5GziHiwhAIQpFmmtT5hitRs= +github.com/onsi/gomega v1.19.0/go.mod h1:LY+I3pBVzYsTBU1AnDwOSxaYi9WoWiqgwooUqq9yPro= +github.com/onsi/gomega v1.20.0/go.mod h1:DtrZpjmvpn2mPm4YWQa0/ALMDj9v4YxLgojwPeREyVo= github.com/op/go-logging v0.0.0-20160315200505-970db520ece7/go.mod h1:HzydrMdWErDVzsI23lYNej1Htcns9BCg93Dk0bBINWk= +github.com/opencontainers/go-digest v0.0.0-20170106003457-a6d0ee40d420/go.mod h1:cMLVZDEM3+U2I4VmLI6N8jQYUd2OVphdqWwCJHrFt2s= +github.com/opencontainers/go-digest v0.0.0-20180430190053-c9281466c8b2/go.mod h1:cMLVZDEM3+U2I4VmLI6N8jQYUd2OVphdqWwCJHrFt2s= github.com/opencontainers/go-digest v1.0.0-rc1/go.mod h1:cMLVZDEM3+U2I4VmLI6N8jQYUd2OVphdqWwCJHrFt2s= -github.com/opencontainers/go-digest v1.0.0 h1:apOUWs51W5PlhuyGyz9FCeeBIOUDA/6nW8Oi/yOhh5U= +github.com/opencontainers/go-digest v1.0.0-rc1.0.20180430190053-c9281466c8b2/go.mod h1:cMLVZDEM3+U2I4VmLI6N8jQYUd2OVphdqWwCJHrFt2s= +github.com/opencontainers/go-digest v1.0.0/go.mod h1:0JzlMkj0TRzQZfJkVvzbP0HBR3IKzErnv2BNG4W4MAM= +github.com/opencontainers/image-spec v1.0.0/go.mod h1:BtxoFyWECRxE4U/7sNtV5W15zMzWCbyJoFRP3s7yZA0= github.com/opencontainers/image-spec v1.0.1/go.mod h1:BtxoFyWECRxE4U/7sNtV5W15zMzWCbyJoFRP3s7yZA0= -github.com/opencontainers/image-spec v1.1.0-rc2 h1:2zx/Stx4Wc5pIPDvIxHXvXtQFW/7XWJGmnM7r3wg034= +github.com/opencontainers/image-spec v1.0.2-0.20211117181255-693428a734f5/go.mod h1:BtxoFyWECRxE4U/7sNtV5W15zMzWCbyJoFRP3s7yZA0= +github.com/opencontainers/image-spec v1.0.2/go.mod h1:BtxoFyWECRxE4U/7sNtV5W15zMzWCbyJoFRP3s7yZA0= +github.com/opencontainers/image-spec v1.0.3-0.20211202183452-c5a74bcca799/go.mod h1:BtxoFyWECRxE4U/7sNtV5W15zMzWCbyJoFRP3s7yZA0= +github.com/opencontainers/image-spec v1.1.0-rc2/go.mod h1:3OVijpioIKYWTqjiG0zfF6wvoJ4fAXGbjdZuI2NgsRQ= +github.com/opencontainers/runc v0.0.0-20190115041553-12f6a991201f/go.mod h1:qT5XzbpPznkRYVz/mWwUaVBUv2rmF59PVA73FjuZG0U= github.com/opencontainers/runc v0.1.1/go.mod h1:qT5XzbpPznkRYVz/mWwUaVBUv2rmF59PVA73FjuZG0U= +github.com/opencontainers/runc v1.0.0-rc10/go.mod h1:qT5XzbpPznkRYVz/mWwUaVBUv2rmF59PVA73FjuZG0U= +github.com/opencontainers/runc v1.0.0-rc8.0.20190926000215-3e425f80a8c9/go.mod h1:qT5XzbpPznkRYVz/mWwUaVBUv2rmF59PVA73FjuZG0U= +github.com/opencontainers/runc v1.0.0-rc9/go.mod h1:qT5XzbpPznkRYVz/mWwUaVBUv2rmF59PVA73FjuZG0U= +github.com/opencontainers/runc v1.0.0-rc92/go.mod h1:X1zlU4p7wOlX4+WRCz+hvlRv8phdL7UqbYD+vQwNMmE= +github.com/opencontainers/runc v1.0.0-rc93/go.mod h1:3NOsor4w32B2tC0Zbl8Knk4Wg84SM2ImC1fxBuqJ/H0= github.com/opencontainers/runc v1.0.2/go.mod h1:aTaHFFwQXuA71CiyxOdFFIorAoemI04suvGRQFzWTD0= -github.com/opencontainers/runc v1.1.3 h1:vIXrkId+0/J2Ymu2m7VjGvbSlAId9XNRPhn2p4b+d8w= +github.com/opencontainers/runc v1.0.3/go.mod h1:aTaHFFwQXuA71CiyxOdFFIorAoemI04suvGRQFzWTD0= +github.com/opencontainers/runc v1.1.0/go.mod h1:Tj1hFw6eFWp/o33uxGf5yF2BX5yz2Z6iptFpuvbbKqc= +github.com/opencontainers/runc v1.1.1/go.mod h1:Tj1hFw6eFWp/o33uxGf5yF2BX5yz2Z6iptFpuvbbKqc= +github.com/opencontainers/runc v1.1.2/go.mod h1:Tj1hFw6eFWp/o33uxGf5yF2BX5yz2Z6iptFpuvbbKqc= +github.com/opencontainers/runc v1.1.3/go.mod h1:1J5XiS+vdZ3wCyZybsuxXZWGrgSr8fFJHLXuG2PsnNg= +github.com/opencontainers/runtime-spec v0.1.2-0.20190507144316-5b71a03e2700/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0= +github.com/opencontainers/runtime-spec v1.0.1/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0= +github.com/opencontainers/runtime-spec v1.0.2-0.20190207185410-29686dbc5559/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0= +github.com/opencontainers/runtime-spec v1.0.2/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0= +github.com/opencontainers/runtime-spec v1.0.3-0.20200728170252-4d89ac9fbff6/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0= +github.com/opencontainers/runtime-spec v1.0.3-0.20200929063507-e6143ca7d51d/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0= github.com/opencontainers/runtime-spec v1.0.3-0.20210326190908-1c3f411f0417/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0= +github.com/opencontainers/runtime-tools v0.0.0-20181011054405-1d69bd0f9c39/go.mod h1:r3f7wjNzSs2extwzU3Y+6pKfobzPh+kKFJ3ofN+3nfs= +github.com/opencontainers/selinux v1.6.0/go.mod h1:VVGKuOLlE7v4PJyT6h7mNWvq1rzqiriPsEqVhc+svHE= +github.com/opencontainers/selinux v1.8.0/go.mod h1:RScLhm78qiWa2gbVCcGkC7tCGdgk3ogry1nUQF8Evvo= github.com/opencontainers/selinux v1.8.2/go.mod h1:MUIHuUEvKB1wtJjQdOyYRgOnLD2xAPP8dBsCoU0KuF8= +github.com/opencontainers/selinux v1.10.0/go.mod h1:2i0OySw99QjzBBQByd1Gr9gSjvuho1lHsJxIJ3gGbJI= +github.com/opencontainers/selinux v1.10.1/go.mod h1:2i0OySw99QjzBBQByd1Gr9gSjvuho1lHsJxIJ3gGbJI= github.com/opentracing-contrib/go-observer v0.0.0-20170622124052-a52f23424492/go.mod h1:Ngi6UdF0k5OKD5t5wlmGhe/EDKPoUM3BXZSSfIuJbis= +github.com/opentracing-contrib/go-stdlib v1.0.0/go.mod h1:qtI1ogk+2JhVPIXVc6q+NHziSmy2W5GbdQZFUHADCBU= github.com/opentracing/basictracer-go v1.0.0/go.mod h1:QfBfYuafItcjQuMwinw9GhYKwFXS9KnPs5lxoYwgW74= github.com/opentracing/opentracing-go v1.0.2/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= +github.com/opentracing/opentracing-go v1.0.3-0.20180606204148-bd9c31933947/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= github.com/opentracing/opentracing-go v1.1.0/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= +github.com/opentracing/opentracing-go v1.2.0/go.mod h1:GxEUsuufX4nBwe+T+Wl9TAgYrxe9dPLANfrWvHYVTgc= github.com/openzipkin-contrib/zipkin-go-opentracing v0.4.5/go.mod h1:/wsWhb9smxSfWAKL3wpBW7V8scJMt8N8gnaMCS9E/cA= +github.com/openzipkin/zipkin-go v0.1.1/go.mod h1:NtoC/o8u3JlF1lSlyPNswIbeQH9bJTmOf0Erfk+hxe8= +github.com/openzipkin/zipkin-go v0.1.3/go.mod h1:NtoC/o8u3JlF1lSlyPNswIbeQH9bJTmOf0Erfk+hxe8= github.com/openzipkin/zipkin-go v0.1.6/go.mod h1:QgAqvLzwWbR/WpD4A3cGpPtJrZXNIiJc5AZX7/PBEpw= github.com/openzipkin/zipkin-go v0.2.1/go.mod h1:NaW6tEwdmWMaCDZzg8sh+IBNOxHMPnhQw8ySjnjRyN4= github.com/openzipkin/zipkin-go v0.2.2/go.mod h1:NaW6tEwdmWMaCDZzg8sh+IBNOxHMPnhQw8ySjnjRyN4= -github.com/ory/dockertest v3.3.5+incompatible h1:iLLK6SQwIhcbrG783Dghaaa3WPzGc+4Emza6EbVUUGA= +github.com/openzipkin/zipkin-go v0.2.5/go.mod h1:KpXfKdgRDnnhsxw4pNIH9Md5lyFqKUa4YDFlwRYAMyE= github.com/ory/dockertest v3.3.5+incompatible/go.mod h1:1vX4m9wsvi00u5bseYwXaSnhNrne+V0E6LAcBILJdPs= +github.com/ory/dockertest/v3 v3.9.1/go.mod h1:42Ir9hmvaAPm0Mgibk6mBPi7SFvTXxEcnztDYOJ//uM= +github.com/otiai10/copy v1.2.0/go.mod h1:rrF5dJ5F0t/EWSYODDu4j9/vEeYHMkc8jt0zJChqQWw= github.com/otiai10/copy v1.6.0/go.mod h1:XWfuS3CrI0R6IE0FbgHsEazaXO8G0LpMp9o8tos0x4E= github.com/otiai10/curr v0.0.0-20150429015615-9b4961190c95/go.mod h1:9qAhocn7zKJG+0mI8eUu6xqkFDYS2kb2saOteoSB3cE= github.com/otiai10/curr v1.0.0/go.mod h1:LskTG5wDwr8Rs+nNQ+1LlxRjAtTZZjtJW4rMXl6j4vs= github.com/otiai10/mint v1.3.0/go.mod h1:F5AjcsTsWUqX+Na9fpHb52P8pcRX2CI6A3ctIT91xUo= +github.com/otiai10/mint v1.3.1/go.mod h1:/yxELlJQ0ufhjUwhshSj+wFjZ78CnZ48/1wtmBH1OTc= github.com/otiai10/mint v1.3.2/go.mod h1:/yxELlJQ0ufhjUwhshSj+wFjZ78CnZ48/1wtmBH1OTc= github.com/pact-foundation/pact-go v1.0.4/go.mod h1:uExwJY4kCzNPcHRj+hCR/HBbOOIwwtUjcrb0b5/5kLM= github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= -github.com/pascaldekloe/goe v0.1.0 h1:cBOtyMzM9HTpWjXfbbunk26uA6nG3a8n06Wieeh0MwY= github.com/pascaldekloe/goe v0.1.0/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= +github.com/paulbellamy/ratecounter v0.2.0/go.mod h1:Hfx1hDpSGoqxkVVpBi/IlYD7kChlfo5C6hzIHwPqfFE= +github.com/pborman/getopt v0.0.0-20170112200414-7148bc3a4c30/go.mod h1:85jBQOZwpVEaDAr341tbn15RS4fCAsIst0qp7i8ex1o= github.com/pborman/uuid v0.0.0-20170112150404-1b00554d8222/go.mod h1:VyrYX9gd7irzKovcSS6BIIEwPRkP2Wm2m9ufcdFSJ34= github.com/pborman/uuid v1.2.0/go.mod h1:X/NO0urCmaxf9VXbdlT7C2Yzkj2IKimNn4k+gtPdI/k= github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic= +github.com/pelletier/go-toml v1.8.0/go.mod h1:D6yutnOGMveHEPV7VQOuvI/gXY61bv+9bAOTRnLElKs= +github.com/pelletier/go-toml v1.8.1/go.mod h1:T2/BmBdy8dvIRq1a/8aqjN41wvWlN4lrapLU/GW4pbc= github.com/pelletier/go-toml v1.9.3/go.mod h1:u1nR/EPcESfeI/szUZKdtJ0xRNbUoANCkoOuaOx1Y+c= -github.com/pelletier/go-toml v1.9.5 h1:4yBQzkHv+7BHq2PQUZF3Mx0IYxG7LsP222s7Agd3ve8= +github.com/pelletier/go-toml v1.9.4/go.mod h1:u1nR/EPcESfeI/szUZKdtJ0xRNbUoANCkoOuaOx1Y+c= github.com/pelletier/go-toml v1.9.5/go.mod h1:u1nR/EPcESfeI/szUZKdtJ0xRNbUoANCkoOuaOx1Y+c= -github.com/pelletier/go-toml/v2 v2.0.5 h1:ipoSadvV8oGUjnUbMub59IDPPwfxF694nG/jwbMiyQg= +github.com/pelletier/go-toml/v2 v2.0.0-beta.8/go.mod h1:r9LEWfGN8R5k0VXJ+0BkIe7MYkRdwZOjgMj2KwnJFUo= +github.com/pelletier/go-toml/v2 v2.0.0/go.mod h1:r9LEWfGN8R5k0VXJ+0BkIe7MYkRdwZOjgMj2KwnJFUo= +github.com/pelletier/go-toml/v2 v2.0.1/go.mod h1:r9LEWfGN8R5k0VXJ+0BkIe7MYkRdwZOjgMj2KwnJFUo= +github.com/pelletier/go-toml/v2 v2.0.2/go.mod h1:MovirKjgVRESsAvNZlAjtFwV867yGuwRkXbG66OzopI= github.com/pelletier/go-toml/v2 v2.0.5/go.mod h1:OMHamSCAODeSsVrwwvcJOaoN0LIUIaFVNZzmWyNfXas= github.com/performancecopilot/speed v3.0.0+incompatible/go.mod h1:/CLtqpZ5gBg1M9iaPbIdPPGyKcA8hKdoy6hAWba7Yac= +github.com/performancecopilot/speed/v4 v4.0.0/go.mod h1:qxrSyuDGrTOWfV+uKRFhfxw6h/4HXRGUiZiufxo49BM= +github.com/peterbourgon/diskv v2.0.1+incompatible/go.mod h1:uqqh8zWWbv1HBMNONnaR/tNboyR3/BZd58JJSHlUSCU= +github.com/peterh/liner v1.0.1-0.20180619022028-8c1271fcf47f/go.mod h1:xIteQHvHuaLYG9IFj6mSxM0fCKrs34IrEQUhOYuGPHc= github.com/peterh/liner v1.1.1-0.20190123174540-a2c9a5303de7/go.mod h1:CRroGNssyjTd/qIG2FyxByd2S8JEAZXBl4qUrZf8GS0= -github.com/petermattis/goid v0.0.0-20180202154549-b0b1615b78e5 h1:q2e307iGHPdTGp0hoxKjt1H5pDo6utceo3dQVK3I5XQ= github.com/petermattis/goid v0.0.0-20180202154549-b0b1615b78e5/go.mod h1:jvVRKCrJTQWu0XVbaOlby/2lO20uSCHEMzzplHXte1o= +github.com/phayes/checkstyle v0.0.0-20170904204023-bfd46e6a821d/go.mod h1:3OzsM7FXDQlpCiw2j81fOmAwQLnZnLGXVKUzeKQXIAw= +github.com/philhofer/fwd v1.0.0/go.mod h1:gk3iGcWd9+svBvR0sR+KPcfE+RNWozjowpeBVG3ZVNU= github.com/philhofer/fwd v1.1.1/go.mod h1:gk3iGcWd9+svBvR0sR+KPcfE+RNWozjowpeBVG3ZVNU= +github.com/phpdave11/gofpdf v1.4.2/go.mod h1:zpO6xFn9yxo3YLyMvW8HcKWVdbNqgIfOOp2dXMnm1mY= +github.com/phpdave11/gofpdi v1.0.12/go.mod h1:vBmVV0Do6hSBHC8uKUQ71JGW+ZGQq74llk/7bXwjDoI= +github.com/phpdave11/gofpdi v1.0.13/go.mod h1:vBmVV0Do6hSBHC8uKUQ71JGW+ZGQq74llk/7bXwjDoI= github.com/pierrec/lz4 v1.0.2-0.20190131084431-473cd7ce01a1/go.mod h1:3/3N9NVKO0jef7pBehbT1qWhCMrIgbYNnFAZCqQ5LRc= github.com/pierrec/lz4 v2.0.5+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY= +github.com/pkg/browser v0.0.0-20180916011732-0a3d74bf9ce4/go.mod h1:4OwLy04Bl9Ef3GJJCoec+30X3LQs/0/m4HFRt/2LUSA= +github.com/pkg/browser v0.0.0-20210911075715-681adbf594b8/go.mod h1:HKlIX3XHQyzLZPlr7++PzdhaXEj94dEiJgZDTsxEqUI= +github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e/go.mod h1:pJLUxLENpZxwdsKMEsNbx1VGcRFpLqf3715MtcvvzbA= github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +github.com/pkg/errors v0.8.1-0.20171018195549-f15c970de5b7/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= -github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/profile v1.2.1/go.mod h1:hJw3o1OdXxsrSjjVksARp5W95eeEaEfptyVZyv6JUPA= +github.com/pkg/profile v1.5.0/go.mod h1:qBsxPvzyUincmltOk6iyRVxHYg4adc0OFOv72ZdLa18= +github.com/pkg/profile v1.6.0/go.mod h1:qBsxPvzyUincmltOk6iyRVxHYg4adc0OFOv72ZdLa18= github.com/pkg/sftp v1.10.1/go.mod h1:lYOWFsE0bwd1+KfKJaKeuokY15vzFx25BLbzYYoAxZI= github.com/pkg/sftp v1.13.1/go.mod h1:3HaPG6Dq1ILlpPZRO0HVMrsydcdLt6HRDccSgb87qRg= -github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= +github.com/pkg/term v0.0.0-20180730021639-bffc007b7fd5/go.mod h1:eCbImbZ95eXtAUIbLAuAVnBnwf83mjf6QIVH8SHYwqQ= +github.com/pmezard/go-difflib v0.0.0-20151028094244-d8ed2627bdf0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/polyfloyd/go-errorlint v1.0.0/go.mod h1:KZy4xxPJyy88/gldCe5OdW6OQRtNO3EZE7hXzmnebgA= +github.com/polyfloyd/go-errorlint v1.0.5/go.mod h1:APVvOesVSAnne5SClsPxPdfvZTVDojXh1/G3qb5wjGI= github.com/posener/complete v1.1.1/go.mod h1:em0nMJCgc9GFtwrmVmEMR/ZL6WyhyjMBndrE9hABlRI= +github.com/posener/complete v1.2.3/go.mod h1:WZIdtGGp+qx0sLrYKtIRAruyNpv6hFCicSgv7Sy7s/s= +github.com/power-devops/perfstat v0.0.0-20210106213030-5aafc221ea8c/go.mod h1:OmDBASR4679mdNQnz2pUhc2G8CO2JrUAVFDRBDP/hJE= +github.com/pquerna/cachecontrol v0.0.0-20171018203845-0dec1b30a021/go.mod h1:prYjPmNq4d1NPVmpShWobRqXY3q7Vp+80DqgxxUrUIA= +github.com/prometheus/client_golang v0.0.0-20180209125602-c332b6f63c06/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= +github.com/prometheus/client_golang v0.8.0/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= github.com/prometheus/client_golang v0.9.3-0.20190127221311-3c4408c8b829/go.mod h1:p2iRAGwDERtqlqzRXnrOVns+ignqQo//hLXqYxZYVNs= github.com/prometheus/client_golang v0.9.3/go.mod h1:/TN21ttK/J9q6uSwhBd54HahCDft0ttaMvbicHlPoso= github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5FsnadC4Ky3P0J6CfImo= +github.com/prometheus/client_golang v1.1.0/go.mod h1:I1FGZT9+L76gKKOs5djB6ezCbFQP1xR9D75/vuwEF3g= github.com/prometheus/client_golang v1.3.0/go.mod h1:hJaj2vgQTGQmVCsAACORcieXFeDPbaTKGT+JTgUa3og= github.com/prometheus/client_golang v1.4.0/go.mod h1:e9GMxYsXl05ICDXkRhurwBS4Q3OK1iX/F2sw+iXX5zU= github.com/prometheus/client_golang v1.7.1/go.mod h1:PY5Wy2awLA44sXw4AOSfFBetzPP4j5+D6mVACh+pe2M= github.com/prometheus/client_golang v1.8.0/go.mod h1:O9VU6huf47PktckDQfMTX0Y8tY0/7TSWwj+ITvv0TnM= github.com/prometheus/client_golang v1.11.0/go.mod h1:Z6t4BnS23TR94PD6BsDNk8yVqroYurpAkEiz0P2BEV0= -github.com/prometheus/client_golang v1.14.0 h1:nJdhIvne2eSX/XRAFV9PcvFFRbrjbcTUj0VP62TMhnw= +github.com/prometheus/client_golang v1.11.1/go.mod h1:Z6t4BnS23TR94PD6BsDNk8yVqroYurpAkEiz0P2BEV0= +github.com/prometheus/client_golang v1.12.1/go.mod h1:3Z9XVyYiZYEO+YQWt3RD2R3jrbd179Rt297l4aS6nDY= +github.com/prometheus/client_golang v1.12.2/go.mod h1:3Z9XVyYiZYEO+YQWt3RD2R3jrbd179Rt297l4aS6nDY= +github.com/prometheus/client_golang v1.13.1/go.mod h1:vTeo+zgvILHsnnj/39Ou/1fPN5nJFOEMgftOUOmlvYQ= github.com/prometheus/client_golang v1.14.0/go.mod h1:8vpkKitgIVNcqrRBWh1C4TIUQgYNtG/XQE4E/Zae36Y= +github.com/prometheus/client_model v0.0.0-20171117100541-99fa1f4be8e5/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= github.com/prometheus/client_model v0.0.0-20190115171406-56726106282f/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= github.com/prometheus/client_model v0.1.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= github.com/prometheus/client_model v0.2.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= -github.com/prometheus/client_model v0.3.0 h1:UBgGFHqYdG/TPFD1B1ogZywDqEkwp3fBMvqdiQ7Xew4= github.com/prometheus/client_model v0.3.0/go.mod h1:LDGWKZIo7rky3hgvBe+caln+Dr3dPggB5dvjtD7w9+w= +github.com/prometheus/common v0.0.0-20180110214958-89604d197083/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro= +github.com/prometheus/common v0.0.0-20180801064454-c7de2306084e/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro= github.com/prometheus/common v0.0.0-20181113130724-41aa239b4cce/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro= github.com/prometheus/common v0.2.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= github.com/prometheus/common v0.4.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= +github.com/prometheus/common v0.6.0/go.mod h1:eBmuwkDJBwy6iBfxCBob6t6dR6ENT/y+J+Zk0j9GMYc= github.com/prometheus/common v0.7.0/go.mod h1:DjGbpBbp5NYNiECxcL/VnbXCCaQpKd3tt26CguLLsqA= github.com/prometheus/common v0.9.1/go.mod h1:yhUN8i9wzaXS3w1O07YhxHEBxD+W35wd8bs7vj7HSQ4= github.com/prometheus/common v0.10.0/go.mod h1:Tlit/dnDKsSWFlCLTWaA1cyBgKHSMdTB80sz/V91rCo= @@ -760,116 +1902,229 @@ github.com/prometheus/common v0.14.0/go.mod h1:U+gB1OBLb1lF3O42bTCL+FK18tX9Oar16 github.com/prometheus/common v0.15.0/go.mod h1:U+gB1OBLb1lF3O42bTCL+FK18tX9Oar16Clt/msog/s= github.com/prometheus/common v0.26.0/go.mod h1:M7rCNAaPfAosfx8veZJCuw84e35h3Cfd9VFqTh1DIvc= github.com/prometheus/common v0.29.0/go.mod h1:vu+V0TpY+O6vW9J44gczi3Ap/oXXR10b+M/gUGO4Hls= -github.com/prometheus/common v0.39.0 h1:oOyhkDq05hPZKItWVBkJ6g6AtGxi+fy7F4JvUV8uhsI= +github.com/prometheus/common v0.30.0/go.mod h1:vu+V0TpY+O6vW9J44gczi3Ap/oXXR10b+M/gUGO4Hls= +github.com/prometheus/common v0.32.1/go.mod h1:vu+V0TpY+O6vW9J44gczi3Ap/oXXR10b+M/gUGO4Hls= +github.com/prometheus/common v0.34.0/go.mod h1:gB3sOl7P0TvJabZpLY5uQMpUqRCPPCyRLCZYc7JZTNE= +github.com/prometheus/common v0.37.0/go.mod h1:phzohg0JFMnBEFGxTDbfu3QyL5GI8gTQJFhYO5B3mfA= github.com/prometheus/common v0.39.0/go.mod h1:6XBZ7lYdLCbkAVhwRsWTZn+IN5AB9F/NXd5w0BbEX0Y= +github.com/prometheus/procfs v0.0.0-20180125133057-cb4147076ac7/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= +github.com/prometheus/procfs v0.0.0-20180725123919-05ee40e3a273/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= github.com/prometheus/procfs v0.0.0-20190117184657-bf6a532e95b1/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= github.com/prometheus/procfs v0.0.0-20190507164030-5867b95ac084/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= +github.com/prometheus/procfs v0.0.0-20190522114515-bc1a522cf7b1/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= +github.com/prometheus/procfs v0.0.3/go.mod h1:4A/X28fw3Fc593LaREMrKMqOKvUAntwMDaekg4FpcdQ= +github.com/prometheus/procfs v0.0.5/go.mod h1:4A/X28fw3Fc593LaREMrKMqOKvUAntwMDaekg4FpcdQ= github.com/prometheus/procfs v0.0.8/go.mod h1:7Qr8sr6344vo1JqZ6HhLceV9o3AJ1Ff+GxbHq6oeK9A= github.com/prometheus/procfs v0.1.3/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU= github.com/prometheus/procfs v0.2.0/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU= github.com/prometheus/procfs v0.3.0/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU= github.com/prometheus/procfs v0.6.0/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA= -github.com/prometheus/procfs v0.8.0 h1:ODq8ZFEaYeCaZOJlZZdJA2AbQR98dSHSM1KW/You5mo= +github.com/prometheus/procfs v0.7.3/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA= github.com/prometheus/procfs v0.8.0/go.mod h1:z7EfXMXOkbkqb9IINtpCn86r/to3BnA0uaxHdg830/4= github.com/prometheus/tsdb v0.6.2-0.20190402121629-4f204dcbc150/go.mod h1:qhTCs0VvXwvX/y3TZrWD7rabWM+ijKTux40TwIPHuXU= github.com/prometheus/tsdb v0.7.1/go.mod h1:qhTCs0VvXwvX/y3TZrWD7rabWM+ijKTux40TwIPHuXU= -github.com/r2ishiguro/vrf v0.0.0-20180716233122-192de52975eb h1:3kW8n+FfBaUoqlHxCa6e90PXWpGCWWkdyTZ6F7c9m2I= +github.com/pseudomuto/protoc-gen-doc v1.3.2/go.mod h1:y5+P6n3iGrbKG+9O04V5ld71in3v/bX88wUwgt+U8EA= +github.com/pseudomuto/protokit v0.2.0/go.mod h1:2PdH30hxVHsup8KpBTOXTBeMVhJZVio3Q8ViKSAXT0Q= +github.com/quasilyte/go-consistent v0.0.0-20190521200055-c6f3937de18c/go.mod h1:5STLWrekHfjyYwxBRVRXNOSewLJ3PWfDJd1VyTS21fI= +github.com/quasilyte/go-ruleguard v0.1.2-0.20200318202121-b00d7a75d3d8/go.mod h1:CGFX09Ci3pq9QZdj86B+VGIdNj4VyCo2iPOGS9esB/k= +github.com/quasilyte/go-ruleguard v0.3.1-0.20210203134552-1b5a410e1cc8/go.mod h1:KsAh3x0e7Fkpgs+Q9pNLS5XpFSvYCEVl5gP9Pp1xp30= +github.com/quasilyte/go-ruleguard v0.3.16-0.20220213074421-6aa060fab41a/go.mod h1:VMX+OnnSw4LicdiEGtRSD/1X8kW7GuEscjYNr4cOIT4= +github.com/quasilyte/go-ruleguard v0.3.18/go.mod h1:lOIzcYlgxrQ2sGJ735EHXmf/e9MJ516j16K/Ifcttvs= +github.com/quasilyte/go-ruleguard/dsl v0.3.0/go.mod h1:KeCP03KrjuSO0H1kTuZQCWlQPulDV6YMIXmpQss17rU= +github.com/quasilyte/go-ruleguard/dsl v0.3.16/go.mod h1:KeCP03KrjuSO0H1kTuZQCWlQPulDV6YMIXmpQss17rU= +github.com/quasilyte/go-ruleguard/dsl v0.3.19/go.mod h1:KeCP03KrjuSO0H1kTuZQCWlQPulDV6YMIXmpQss17rU= +github.com/quasilyte/go-ruleguard/dsl v0.3.21/go.mod h1:KeCP03KrjuSO0H1kTuZQCWlQPulDV6YMIXmpQss17rU= +github.com/quasilyte/go-ruleguard/rules v0.0.0-20201231183845-9e62ed36efe1/go.mod h1:7JTjp89EGyU1d6XfBiXihJNG37wB2VRkd125Q1u7Plc= +github.com/quasilyte/go-ruleguard/rules v0.0.0-20211022131956-028d6511ab71/go.mod h1:4cgAphtvu7Ftv7vOT2ZOYhC6CvBxZixcasr8qIOTA50= +github.com/quasilyte/gogrep v0.0.0-20220120141003-628d8b3623b5/go.mod h1:wSEyW6O61xRV6zb6My3HxrQ5/8ke7NE2OayqCHa3xRM= +github.com/quasilyte/gogrep v0.0.0-20220828223005-86e4605de09f/go.mod h1:Cm9lpz9NZjEoL1tgZ2OgeUKPIxL1meE7eo60Z6Sk+Ng= +github.com/quasilyte/regex/syntax v0.0.0-20200407221936-30656e2c4a95/go.mod h1:rlzQ04UMyJXu/aOvhd8qT+hvDrFpiwqp8MRXDY9szc0= +github.com/quasilyte/stdinfo v0.0.0-20220114132959-f7386bf02567/go.mod h1:DWNGW8A4Y+GyBgPuaQJuWiy0XYftx4Xm/y5Jqk9I6VQ= github.com/r2ishiguro/vrf v0.0.0-20180716233122-192de52975eb/go.mod h1:2NzHJUkr/ERaPNQ2IUuNbB2jMTWYp2DxhcraWbzZj00= -github.com/rakyll/statik v0.1.7 h1:OF3QCZUuyPxuGEP7B4ypUa7sB/iHtqOTDYZXGM8KOdQ= github.com/rakyll/statik v0.1.7/go.mod h1:AlZONWzMtEnMs7W4e/1LURLiI49pIMmp6V9Unghqrcc= github.com/rcrowley/go-metrics v0.0.0-20181016184325-3113b8401b8a/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4= github.com/rcrowley/go-metrics v0.0.0-20200313005456-10cdbea86bc0/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4= -github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475 h1:N/ElC8H3+5XpJzTSTfLsJV/mx9Q9g7kxmchpfZyxgzM= github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4= github.com/regen-network/cosmos-proto v0.3.1 h1:rV7iM4SSFAagvy8RiyhiACbWEGotmqzywPxOvwMdxcg= github.com/regen-network/cosmos-proto v0.3.1/go.mod h1:jO0sVX6a1B36nmE8C9xBFXpNwWejXC7QqCOnH3O0+YM= github.com/regen-network/protobuf v1.3.3-alpha.regen.1 h1:OHEc+q5iIAXpqiqFKeLpu5NwTIkVXUs48vFMwzqpqY4= github.com/regen-network/protobuf v1.3.3-alpha.regen.1/go.mod h1:2DjTFR1HhMQhiWC5sZ4OhQ3+NtdbZ6oBDKQwq5Ou+FI= +github.com/remyoudompheng/bigfft v0.0.0-20170806203942-52369c62f446/go.mod h1:uYEyJGbgTkfkS4+E/PavXkNJcbFIpEtjt2B0KDQ5+9M= +github.com/remyoudompheng/go-dbus v0.0.0-20121104212943-b7232d34b1d5/go.mod h1:+u151txRmLpwxBmpYn9z3d1sdJdjRPQpsXuYeY9jNls= +github.com/remyoudompheng/go-liblzma v0.0.0-20190506200333-81bf2d431b96/go.mod h1:90HvCY7+oHHUKkbeMCiHt1WuFR2/hPJ9QrljDG+v6ls= +github.com/remyoudompheng/go-misc v0.0.0-20190427085024-2d6ac652a50e/go.mod h1:80FQABjoFzZ2M5uEa6FUaJYEmqU2UOKojlFVak1UAwI= +github.com/retailnext/hllpp v1.0.1-0.20180308014038-101a6d2f8b52/go.mod h1:RDpi1RftBQPUCDRw6SmxeaREsAaRKnOclghuzp/WRzc= github.com/rjeczalik/notify v0.9.1/go.mod h1:rKwnCoCGeuQnwBtTSPL9Dad03Vh2n40ePRrjvIXnJho= github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg= +github.com/rogpeppe/fastuuid v1.1.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= -github.com/rogpeppe/go-internal v1.9.0 h1:73kH8U+JUqXU8lRuOHeVHaa/SZPifC7BkcraZVejAe8= +github.com/rogpeppe/go-internal v1.5.2/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTEfhy4qGm1nDQc= +github.com/rogpeppe/go-internal v1.6.1/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTEfhy4qGm1nDQc= +github.com/rogpeppe/go-internal v1.8.1/go.mod h1:JeRgkft04UBgHMgCIwADu4Pn6Mtm5d4nPKWu0nJ5d+o= +github.com/rogpeppe/go-internal v1.9.0/go.mod h1:WtVeX8xhTBvf0smdhujwtBcq4Qrzq/fJaraNFVN+nFs= github.com/rs/cors v0.0.0-20160617231935-a62a804a8a00/go.mod h1:gFx+x8UowdsKA9AchylcLynDq+nNFfI8FkUZdN/jGCU= github.com/rs/cors v1.7.0/go.mod h1:gFx+x8UowdsKA9AchylcLynDq+nNFfI8FkUZdN/jGCU= -github.com/rs/cors v1.8.2 h1:KCooALfAYGs415Cwu5ABvv9n9509fSiG5SQJn/AQo4U= github.com/rs/cors v1.8.2/go.mod h1:XyqrcTp5zjWr1wsJ8PIRZssZ8b/WMcMf71DJnit4EMU= github.com/rs/xhandler v0.0.0-20160618193221-ed27b6fd6521/go.mod h1:RvLn4FgxWubrpZHtQLnOf6EwhN2hEMusxZOhcW9H3UQ= github.com/rs/xid v1.2.1/go.mod h1:+uKXf+4Djp6Md1KODXJxgGQPKngRmWyn10oCKFzNHOQ= +github.com/rs/xid v1.3.0/go.mod h1:trrq9SKmegXys3aeAKXMUTdJsYXVwGY3RLcfgqegfbg= github.com/rs/xid v1.4.0/go.mod h1:trrq9SKmegXys3aeAKXMUTdJsYXVwGY3RLcfgqegfbg= github.com/rs/zerolog v1.23.0/go.mod h1:6c7hFfxPOy7TacJc4Fcdi24/J0NKYGzjG8FWRI916Qo= -github.com/rs/zerolog v1.28.0 h1:MirSo27VyNi7RJYP3078AA1+Cyzd2GB66qy3aUHvsWY= +github.com/rs/zerolog v1.27.0/go.mod h1:7frBqO0oezxmnO7GF86FY++uy8I0Tk/If5ni1G9Qc0U= github.com/rs/zerolog v1.28.0/go.mod h1:NILgTygv/Uej1ra5XxGf82ZFSLk58MFGAUS2o6usyD0= +github.com/rubiojr/go-vhd v0.0.0-20160810183302-0bfd3b39853c/go.mod h1:DM5xW0nvfNNm2uytzsvhI3OnX8uzaRAg8UX/CnDqbto= github.com/russross/blackfriday v1.5.2/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g= +github.com/russross/blackfriday v1.6.0/go.mod h1:ti0ldHuxg49ri4ksnFxlkCfN+hvslNlmVHqNRXXJNAY= github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= +github.com/ruudk/golang-pdf417 v0.0.0-20181029194003-1af4ab5afa58/go.mod h1:6lfFZQK844Gfx8o5WFuvpxWRwnSoipWe/p622j1v06w= +github.com/ruudk/golang-pdf417 v0.0.0-20201230142125-a7e3863a1245/go.mod h1:pQAZKsJ8yyVxGRWYNEm9oFB8ieLgKFnamEyDmSA0BRk= +github.com/ryancurrah/gomodguard v1.0.4/go.mod h1:9T/Cfuxs5StfsocWr4WzDL36HqnX0fVb9d5fSEaLhoE= +github.com/ryancurrah/gomodguard v1.1.0/go.mod h1:4O8tr7hBODaGE6VIhfJDHcwzh5GUccKSJBU0UMXJFVM= +github.com/ryancurrah/gomodguard v1.2.3/go.mod h1:rYbA/4Tg5c54mV1sv4sQTP5WOPBcoLtnBZ7/TEhXAbg= +github.com/ryancurrah/gomodguard v1.2.4/go.mod h1:+Kem4VjWwvFpUJRJSwa16s1tBJe+vbv02+naTow2f6M= +github.com/ryanrolds/sqlclosecheck v0.3.0/go.mod h1:1gREqxyTGR3lVtpngyFo3hZAgk0KCtEdgEkHwDbigdA= github.com/ryanuber/columnize v0.0.0-20160712163229-9b3edd62028f/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts= +github.com/ryanuber/columnize v2.1.0+incompatible/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts= +github.com/safchain/ethtool v0.0.0-20190326074333-42ed695e3de8/go.mod h1:Z0q5wiBQGYcxhMZ6gUqHn6pYNLypFAvaL3UvgZLR0U4= +github.com/safchain/ethtool v0.0.0-20210803160452-9aa261dae9b1/go.mod h1:Z0q5wiBQGYcxhMZ6gUqHn6pYNLypFAvaL3UvgZLR0U4= +github.com/sagikazarmark/crypt v0.3.0/go.mod h1:uD/D+6UF4SrIR1uGEv7bBNkNqLGqUr43MRiaGWX1Nig= +github.com/sagikazarmark/crypt v0.4.0/go.mod h1:ALv2SRj7GxYV4HO9elxH9nS6M9gW+xDNxqmyJ6RfDFM= +github.com/sagikazarmark/crypt v0.5.0/go.mod h1:l+nzl7KWh51rpzp2h7t4MZWyiEWdhNpOAnclKvg+mdA= +github.com/sagikazarmark/crypt v0.6.0/go.mod h1:U8+INwJo3nBv1m6A/8OBXAq7Jnpspk5AxSgDyEQcea8= +github.com/sagikazarmark/crypt v0.8.0/go.mod h1:TmKwZAo97S4Fy4sfMH/HX/cQP5D+ijra2NyLpNNmttY= github.com/samuel/go-zookeeper v0.0.0-20190923202752-2cc03de413da/go.mod h1:gi+0XIa01GRL2eRQVjQkKGqKF3SF9vZR/HnPullcV2E= +github.com/sanposhiho/wastedassign/v2 v2.0.6/go.mod h1:KyZ0MWTwxxBmfwn33zh3k1dmsbF2ud9pAAGfoLfjhtI= github.com/sasha-s/go-deadlock v0.2.1-0.20190427202633-1595213edefa/go.mod h1:F73l+cr82YSh10GxyRI6qZiCgK64VaZjwesgfQ1/iLM= -github.com/sasha-s/go-deadlock v0.3.1 h1:sqv7fDNShgjcaxkO0JNcOAlr8B9+cV5Ey/OB71efZx0= github.com/sasha-s/go-deadlock v0.3.1/go.mod h1:F73l+cr82YSh10GxyRI6qZiCgK64VaZjwesgfQ1/iLM= +github.com/sashamelentyev/interfacebloat v1.1.0/go.mod h1:+Y9yU5YdTkrNvoX0xHc84dxiN1iBi9+G8zZIhPVoNjQ= +github.com/sashamelentyev/usestdlibvars v1.20.0/go.mod h1:0GaP+ecfZMXShS0A94CJn6aEuPRILv8h/VuWI9n1ygg= +github.com/sassoftware/go-rpmutils v0.0.0-20190420191620-a8f1baeba37b/go.mod h1:am+Fp8Bt506lA3Rk3QCmSqmYmLMnPDhdDUcosQCAx+I= +github.com/satori/go.uuid v1.2.0/go.mod h1:dA0hQrYB0VpLJoorglMZABFdXlWrHn1NEOzdhQKdks0= +github.com/sclevine/agouti v3.0.0+incompatible/go.mod h1:b4WX9W9L1sfQKXeJf1mUTLZKJ48R1S7H23Ji7oFO5Bw= +github.com/sclevine/spec v1.2.0/go.mod h1:W4J29eT/Kzv7/b9IWLB055Z+qvVC9vt0Arko24q7p+U= github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc= github.com/seccomp/libseccomp-golang v0.9.1/go.mod h1:GbW5+tmTXfcxTToHLXlScSlAvWlF4P2Ca7zGrPiEpWo= +github.com/seccomp/libseccomp-golang v0.9.2-0.20210429002308-3879420cc921/go.mod h1:JA8cRccbGaA1s33RQf7Y1+q9gHmZX1yB/z9WDN1C6fg= +github.com/seccomp/libseccomp-golang v0.9.2-0.20220502022130-f33da4d89646/go.mod h1:JA8cRccbGaA1s33RQf7Y1+q9gHmZX1yB/z9WDN1C6fg= +github.com/securego/gosec v0.0.0-20200103095621-79fbf3af8d83/go.mod h1:vvbZ2Ae7AzSq3/kywjUDxSNq2SJ27RxCz2un0H3ePqE= +github.com/securego/gosec v0.0.0-20200401082031-e946c8c39989/go.mod h1:i9l/TNj+yDFh9SZXUTvspXTjbFXgZGP/UvhU1S65A4A= +github.com/securego/gosec/v2 v2.3.0/go.mod h1:UzeVyUXbxukhLeHKV3VVqo7HdoQR9MrRfFmZYotn8ME= +github.com/securego/gosec/v2 v2.11.0/go.mod h1:SX8bptShuG8reGC0XS09+a4H2BoWSJi+fscA+Pulbpo= +github.com/securego/gosec/v2 v2.13.1/go.mod h1:EO1sImBMBWFjOTFzMWfTRrZW6M15gm60ljzrmy/wtHo= github.com/segmentio/fasthash v1.0.3/go.mod h1:waKX8l2N8yckOgmSsXJi7x1ZfdKZ4x7KRMzBtS3oedY= +github.com/segmentio/kafka-go v0.1.0/go.mod h1:X6itGqS9L4jDletMsxZ7Dz+JFWxM6JHfPOCvTvk+EJo= +github.com/segmentio/kafka-go v0.2.0/go.mod h1:X6itGqS9L4jDletMsxZ7Dz+JFWxM6JHfPOCvTvk+EJo= +github.com/sergi/go-diff v1.0.0/go.mod h1:0CfEIISq7TuYL3j771MWULgwwjU+GofnZX9QAmXWZgo= +github.com/sergi/go-diff v1.1.0/go.mod h1:STckp+ISIX8hZLjrqAeVduY0gWCT9IjLuqbuNXdaHfM= +github.com/serialx/hashring v0.0.0-20190422032157-8b2912629002/go.mod h1:/yeG0My1xr/u+HZrFQ1tOQQQQrOawfyMUH13ai5brBc= +github.com/shazow/go-diff v0.0.0-20160112020656-b6b7b6733b8c/go.mod h1:/PevMnwAxekIXwN8qQyfc5gl2NlkB3CQlkizAbOkeBs= +github.com/shirou/gopsutil v0.0.0-20190901111213-e4ec7b275ada/go.mod h1:WWnYX4lzhCH5h/3YBfyVA3VbLYjlMZZAQcW9ojMexNc= github.com/shirou/gopsutil v2.20.5+incompatible/go.mod h1:5b4v6he4MtMOwMlS0TUMTu2PcXUg8+E1lC7eC3UO/RA= +github.com/shirou/gopsutil v3.21.4-0.20210419000835-c7a38de76ee5+incompatible/go.mod h1:5b4v6he4MtMOwMlS0TUMTu2PcXUg8+E1lC7eC3UO/RA= +github.com/shirou/gopsutil/v3 v3.22.4/go.mod h1:D01hZJ4pVHPpCTZ3m3T2+wDF2YAGfd+H4ifUguaQzHM= +github.com/shirou/gopsutil/v3 v3.22.9/go.mod h1:bBYl1kjgEJpWpxeHmLI+dVHWtyAwfcmSBLDsp2TNT8A= +github.com/shirou/w32 v0.0.0-20160930032740-bb4de0191aa4/go.mod h1:qsXQc7+bwAM3Q1u/4XEfrquwF8Lw7D7y5cD8CuHnfIc= +github.com/shurcooL/go v0.0.0-20180423040247-9e1955d9fb6e/go.mod h1:TDJrrUr11Vxrven61rcy3hJMUqaf/CLWYhHNPmT14Lk= +github.com/shurcooL/go-goon v0.0.0-20170922171312-37c2f522c041/go.mod h1:N5mDOmsrJOB+vfqUK+7DmDyjhSLIIBnXo9lvZJj3MWQ= github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc= +github.com/sirupsen/logrus v1.0.4-0.20170822132746-89742aefa4b2/go.mod h1:pMByvHTf9Beacp5x1UXfOR9xyW/9antXMhjMPG0dEzc= +github.com/sirupsen/logrus v1.0.6/go.mod h1:pMByvHTf9Beacp5x1UXfOR9xyW/9antXMhjMPG0dEzc= github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= github.com/sirupsen/logrus v1.4.1/go.mod h1:ni0Sbl8bgC9z8RoU9G6nDWqqs/fq4eDPysMBDgk/93Q= github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= github.com/sirupsen/logrus v1.6.0/go.mod h1:7uNnSEd1DgxDLC74fIahvMZmmYsHGZGEOFrfsX/uA88= github.com/sirupsen/logrus v1.7.0/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= github.com/sirupsen/logrus v1.8.1/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= -github.com/sirupsen/logrus v1.9.0 h1:trlNQbNUG3OdDrDil03MCb1H2o9nJ1x4/5LYw7byDE0= +github.com/sirupsen/logrus v1.9.0/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ= +github.com/sivchari/containedctx v1.0.2/go.mod h1:PwZOeqm4/DLoJOqMSIJs3aKqXRX4YO+uXww087KZ7Bw= +github.com/sivchari/nosnakecase v1.7.0/go.mod h1:CwDzrzPea40/GB6uynrNLiorAlgFRvRbFSgJx2Gs+QY= +github.com/sivchari/tenv v1.5.0/go.mod h1:64yStXKSOxDfX47NlhVwND4dHwfZDdbp2Lyl018Icvg= +github.com/sivchari/tenv v1.7.0/go.mod h1:64yStXKSOxDfX47NlhVwND4dHwfZDdbp2Lyl018Icvg= github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc= +github.com/smartystreets/assertions v1.0.0/go.mod h1:kHHU4qYBaI3q23Pp3VPrmWhuIUrLW/7eUrw0BU5VaoM= +github.com/smartystreets/go-aws-auth v0.0.0-20180515143844-0c1422d1fdb9/go.mod h1:SnhjPscd9TpLiy1LpzGSKh3bXCfxxXuqd9xmQJy3slM= +github.com/smartystreets/goconvey v0.0.0-20190330032615-68dc04aab96a/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA= github.com/smartystreets/goconvey v1.6.4/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA= -github.com/snikch/goodman v0.0.0-20171125024755-10e37e294daa h1:YJfZp12Z3AFhSBeXOlv4BO55RMwPn2NoQeDsrdWnBtY= +github.com/smartystreets/gunit v1.0.0/go.mod h1:qwPWnhz6pn0NnRBP++URONOVyNkPyr4SauJk4cUOwJs= github.com/snikch/goodman v0.0.0-20171125024755-10e37e294daa/go.mod h1:oJyF+mSPHbB5mVY2iO9KV3pTt/QbIkGaO8gQ2WrDbP4= github.com/soheilhy/cmux v0.1.4/go.mod h1:IM3LyeVVIOuxMH7sFAkER9+bJ4dT7Ms6E4xg4kGIyLM= +github.com/soheilhy/cmux v0.1.5/go.mod h1:T7TcVDs9LWfQgPlPsdngu6I6QIoyIFZDDC6sNE1GqG0= +github.com/sonatard/noctx v0.0.1/go.mod h1:9D2D/EoULe8Yy2joDHJj7bv3sZoq9AaSb8B4lqBjiZI= github.com/sony/gobreaker v0.4.1/go.mod h1:ZKptC7FHNvhBz7dN2LGjPVBz2sZJmc0/PkyDJOjmxWY= +github.com/sourcegraph/go-diff v0.5.1/go.mod h1:j2dHj3m8aZgQO8lMTcTnBcXkRRRqi34cd2MNlA9u1mE= +github.com/sourcegraph/go-diff v0.5.3/go.mod h1:v9JDtjCE4HHHCZGId75rg8gkKKa98RVjBcBGsVmMmak= +github.com/sourcegraph/go-diff v0.6.1/go.mod h1:iBszgVvyxdc8SFZ7gm69go2KDdt3ag071iBaWPF6cjs= github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= -github.com/spaolacci/murmur3 v1.1.0 h1:7c1g84S4BPRrfL5Xrdp6fOJ206sU9y293DDHaoy0bLI= github.com/spaolacci/murmur3 v1.1.0/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= github.com/spf13/afero v1.1.2/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B0CQ= +github.com/spf13/afero v1.2.2/go.mod h1:9ZxEEn6pIJ8Rxe320qSDBk6AsU0r9pR7Q4OcevTdifk= +github.com/spf13/afero v1.3.3/go.mod h1:5KUK8ByomD5Ti5Artl0RtHeI5pTF7MIDuXL3yY520V4= github.com/spf13/afero v1.6.0/go.mod h1:Ai8FlHk4v/PARR026UzYexafAt9roJ7LcLMAmO6Z93I= -github.com/spf13/afero v1.9.2 h1:j49Hj62F0n+DaZ1dDCvhABaPNSGNkt32oRFxI33IEMw= +github.com/spf13/afero v1.8.2/go.mod h1:CtAatgMJh6bJEIs48Ay/FOnkljP3WeGUG0MC1RfAqwo= github.com/spf13/afero v1.9.2/go.mod h1:iUV7ddyEEZPO5gA3zD4fJt6iStLlL+Lg4m2cihcDf8Y= github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= github.com/spf13/cast v1.3.1/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= -github.com/spf13/cast v1.5.0 h1:rj3WzYc11XZaIZMPKmwP96zkFEnnAmV8s6XbB2aY32w= +github.com/spf13/cast v1.4.1/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= github.com/spf13/cast v1.5.0/go.mod h1:SpXXQ5YoyJw6s3/6cMTQuxvgRl3PCJiyaX9p6b155UU= +github.com/spf13/cobra v0.0.2-0.20171109065643-2da4a54c5cee/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ= github.com/spf13/cobra v0.0.3/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ= github.com/spf13/cobra v0.0.5/go.mod h1:3K3wKZymM7VvHMDS9+Akkh4K60UwM26emMESw8tLCHU= +github.com/spf13/cobra v1.0.0/go.mod h1:/6GTrnGXV9HjY+aR4k0oJ5tcvakLuG6EuKReYlHNrgE= github.com/spf13/cobra v1.1.1/go.mod h1:WnodtKOvamDL/PwE2M4iKs8aMDBZ5Q5klgD3qfVJQMI= +github.com/spf13/cobra v1.1.3/go.mod h1:pGADOWyqRD/YMrPZigI/zbliZ2wVD/23d+is3pSWzOo= github.com/spf13/cobra v1.2.1/go.mod h1:ExllRjgxM/piMAM+3tAZvg8fsklGAf3tPfi+i8t68Nk= -github.com/spf13/cobra v1.6.1 h1:o94oiPyS4KD1mPy2fmcYYHHfCxLqYjJOhGsCHFZtEzA= +github.com/spf13/cobra v1.3.0/go.mod h1:BrRVncBjOJa/eUcVVm9CE+oC6as8k+VYr4NY7WCi9V4= +github.com/spf13/cobra v1.4.0/go.mod h1:Wo4iy3BUC+X2Fybo0PDqwJIv3dNRiZLHQymsfxlB84g= +github.com/spf13/cobra v1.5.0/go.mod h1:dWXEIy2H428czQCjInthrTRUg7yKbok+2Qi/yBIJoUM= +github.com/spf13/cobra v1.6.0/go.mod h1:IOw/AERYS7UzyrGinqmz6HLUo219MORXGxhbaJUqzrY= github.com/spf13/cobra v1.6.1/go.mod h1:IOw/AERYS7UzyrGinqmz6HLUo219MORXGxhbaJUqzrY= github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo= -github.com/spf13/jwalterweatherman v1.1.0 h1:ue6voC5bR5F8YxI5S67j9i582FU4Qvo2bmqnqMYADFk= github.com/spf13/jwalterweatherman v1.1.0/go.mod h1:aNWZUN0dPAAO/Ljvb5BEdw96iTZ0EXowPYD95IqWIGo= +github.com/spf13/pflag v0.0.0-20170130214245-9ff6c6923cff/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= +github.com/spf13/pflag v1.0.1-0.20171106142849-4c012f6dcd95/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= github.com/spf13/pflag v1.0.1/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= -github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA= github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= github.com/spf13/viper v1.3.2/go.mod h1:ZiWeW+zYFKm7srdB9IoDzzZXaJaI5eL9QjNiN/DMA2s= +github.com/spf13/viper v1.4.0/go.mod h1:PTJ7Z/lr49W6bUbkmS1V3by4uWynFiR9p7+dSq/yZzE= +github.com/spf13/viper v1.6.1/go.mod h1:t3iDnF5Jlj76alVNuyFBk5oUMCvsrkbvZK0WQdfDi5k= github.com/spf13/viper v1.7.0/go.mod h1:8WkrPz2fc9jxqZNCJI/76HCieCp4Q8HaLFoCha5qpdg= github.com/spf13/viper v1.7.1/go.mod h1:8WkrPz2fc9jxqZNCJI/76HCieCp4Q8HaLFoCha5qpdg= github.com/spf13/viper v1.8.1/go.mod h1:o0Pch8wJ9BVSWGQMbra6iw0oQ5oktSIBaujf1rJH9Ns= -github.com/spf13/viper v1.14.0 h1:Rg7d3Lo706X9tHsJMUjdiwMpHB7W8WnSVOssIY+JElU= +github.com/spf13/viper v1.10.0/go.mod h1:SoyBPwAtKDzypXNDFKN5kzH7ppppbGZtls1UpIy5AsM= +github.com/spf13/viper v1.10.1/go.mod h1:IGlFPqhNAPKRxohIzWpI5QEy4kuI7tcl5WvR+8qy1rU= +github.com/spf13/viper v1.11.0/go.mod h1:djo0X/bA5+tYVoCn+C7cAYJGcVn/qYLFTG8gdUsX7Zk= +github.com/spf13/viper v1.12.0/go.mod h1:b6COn30jlNxbm/V2IqWiNWkJ+vZNiMNksliPCiuKtSI= +github.com/spf13/viper v1.13.0/go.mod h1:Icm2xNL3/8uyh/wFuB1jI7TiTNKp8632Nwegu+zgdYw= github.com/spf13/viper v1.14.0/go.mod h1:WT//axPky3FdvXHzGw33dNdXXXfFQqmEalje+egj8As= +github.com/ssgreg/nlreturn/v2 v2.2.1/go.mod h1:E/iiPB78hV7Szg2YfRgyIrk1AD6JVMTRkkxBiELzh2I= github.com/status-im/keycard-go v0.0.0-20190316090335-8537d3370df4/go.mod h1:RZLeN1LMWmRsyYjvAu+I6Dm9QmlDaIIt+Y+4Kd7Tp+Q= +github.com/stbenjam/no-sprintf-host-port v0.1.1/go.mod h1:TLhvtIvONRzdmkFiio4O8LHsN9N74I+PhRquPsxpL0I= github.com/steakknife/bloomfilter v0.0.0-20180922174646-6819c0d2a570/go.mod h1:8OR4w3TdeIHIh1g6EMY5p0gVNOovcWC+1vpc7naMuAw= github.com/steakknife/hamming v0.0.0-20180906055917-c99c65617cd3/go.mod h1:hpGUWaI9xL8pRQCTXQgocU38Qw1g0Us7n5PxxTwTCYU= +github.com/stefanberger/go-pkcs11uri v0.0.0-20201008174630-78d3cae3a980/go.mod h1:AO3tvPzVZ/ayst6UlUKUv6rcPQInYe3IknH3jYhAKu8= +github.com/stoewer/go-strcase v1.2.0/go.mod h1:IBiWB2sKIp3wVVQ3Y035++gc+knqhUQag1KpM8ahLw8= github.com/streadway/amqp v0.0.0-20190404075320-75d898a42a94/go.mod h1:AZpEONHx3DKn8O/DFsRAY58/XVQiIPMTMB1SddzLXVw= github.com/streadway/amqp v0.0.0-20190827072141-edfb9018d271/go.mod h1:AZpEONHx3DKn8O/DFsRAY58/XVQiIPMTMB1SddzLXVw= +github.com/streadway/amqp v1.0.0/go.mod h1:AZpEONHx3DKn8O/DFsRAY58/XVQiIPMTMB1SddzLXVw= github.com/streadway/handy v0.0.0-20190108123426-d5acb3125c2a/go.mod h1:qNTQ5P5JnDBl6z3cMAg/SywNDC5ABu5ApDIw6lUbRmI= +github.com/streadway/handy v0.0.0-20200128134331-0f66f006fb2e/go.mod h1:qNTQ5P5JnDBl6z3cMAg/SywNDC5ABu5ApDIw6lUbRmI= +github.com/stretchr/objx v0.0.0-20180129172003-8a3f7159479f/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.2.0/go.mod h1:qt09Ya8vawLte6SNmTgCsAVtYtaKzEcn8ATUoHMkEqE= +github.com/stretchr/objx v0.3.0/go.mod h1:qt09Ya8vawLte6SNmTgCsAVtYtaKzEcn8ATUoHMkEqE= github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= -github.com/stretchr/objx v0.5.0 h1:1zr/of2m5FGMsad5YfcqgdqdWrIhu+EBEJRhR1U7z/c= github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= +github.com/stretchr/testify v0.0.0-20151208002404-e3a8ff8ce365/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= +github.com/stretchr/testify v0.0.0-20170130113145-4d4bfba8f1d1/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= +github.com/stretchr/testify v0.0.0-20180303142811-b89eecf5ca5d/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= +github.com/stretchr/testify v1.1.4/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= +github.com/stretchr/testify v1.2.0/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= @@ -877,75 +2132,210 @@ github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5 github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/stretchr/testify v1.7.2/go.mod h1:R6va5+xMeoiuVRoj+gSkQ7d3FALtqAAGI1FQKckRals= +github.com/stretchr/testify v1.7.5/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= -github.com/stretchr/testify v1.8.1 h1:w7B6lhMri9wdJUVmEZPGGhZzrYTPvgJArz7wNPgYKsk= github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= github.com/subosito/gotenv v1.2.0/go.mod h1:N0PQaV/YGNqwC0u51sEeR/aUtSLEXKX9iv69rRypqCw= -github.com/subosito/gotenv v1.4.1 h1:jyEFiXpy21Wm81FBN71l9VoMMV8H8jG+qIK3GCpY6Qs= +github.com/subosito/gotenv v1.3.0/go.mod h1:YzJjq/33h7nrwdY+iHMhEOEEbW0ovIz0tB6t6PwAXzs= +github.com/subosito/gotenv v1.4.0/go.mod h1:mZd6rFysKEcUhUHXJk0C/08wAgyDBFuwEYL7vWWGaGo= github.com/subosito/gotenv v1.4.1/go.mod h1:ayKnFf/c6rvx/2iiLrJUk1e6plDbT3edrFNGqEflhK0= +github.com/supranational/blst v0.3.8-0.20220526154634-513d2456b344/go.mod h1:jZJtfjgudtNl4en1tzwPIV3KjUnQUvG3/j+w+fVonLw= +github.com/sylvia7788/contextcheck v1.0.4/go.mod h1:vuPKJMQ7MQ91ZTqfdyreNKwZjyUg6KO+IebVyQDedZQ= +github.com/syndtr/gocapability v0.0.0-20170704070218-db04d3cc01c8/go.mod h1:hkRG7XYTFWNJGYcbNJQlaLq0fg1yr4J4t/NcTQtrfww= +github.com/syndtr/gocapability v0.0.0-20180916011248-d98352740cb2/go.mod h1:hkRG7XYTFWNJGYcbNJQlaLq0fg1yr4J4t/NcTQtrfww= github.com/syndtr/gocapability v0.0.0-20200815063812-42c35b437635/go.mod h1:hkRG7XYTFWNJGYcbNJQlaLq0fg1yr4J4t/NcTQtrfww= github.com/syndtr/goleveldb v1.0.1-0.20200815110645-5c35d600f0ca/go.mod h1:u2MKkTVTVJWe5D1rCvame8WqhBd88EuIwODJZ1VHCPM= -github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7 h1:epCh84lMvA70Z7CTTCmYQn2CKbY8j86K7/FAIr141uY= github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7/go.mod h1:q4W45IWZaF22tdD+VEXcAWRA037jwmWEB5VWYORlTpc= +github.com/tarm/serial v0.0.0-20180830185346-98f6abe2eb07/go.mod h1:kDXzergiv9cbyO7IOYJZWg1U88JhDg3PB6klq9Hg2pA= +github.com/tchap/go-patricia v2.2.6+incompatible/go.mod h1:bmLyhP68RS6kStMGxByiQ23RP/odRBOTVjwp2cDyi6I= +github.com/tdakkota/asciicheck v0.0.0-20200416190851-d7f85be797a2/go.mod h1:yHp0ai0Z9gUljN3o0xMhYJnH/IcvkdTBOX2fmJ93JEM= +github.com/tdakkota/asciicheck v0.0.0-20200416200610-e657995f937b/go.mod h1:yHp0ai0Z9gUljN3o0xMhYJnH/IcvkdTBOX2fmJ93JEM= +github.com/tdakkota/asciicheck v0.1.1/go.mod h1:yHp0ai0Z9gUljN3o0xMhYJnH/IcvkdTBOX2fmJ93JEM= github.com/tecbot/gorocksdb v0.0.0-20191217155057-f0fad39f321c/go.mod h1:ahpPrc7HpcfEWDQRZEmnXMzHY03mLDYMCxeDzy46i+8= -github.com/tendermint/btcd v0.1.1 h1:0VcxPfflS2zZ3RiOAHkBiFUcPvbtRj5O7zHmcJWHV7s= github.com/tendermint/btcd v0.1.1/go.mod h1:DC6/m53jtQzr/NFmMNEu0rxf18/ktVoVtMrnDD5pN+U= -github.com/tendermint/crypto v0.0.0-20191022145703-50d29ede1e15 h1:hqAk8riJvK4RMWx1aInLzndwxKalgi5rTqgfXxOxbEI= github.com/tendermint/crypto v0.0.0-20191022145703-50d29ede1e15/go.mod h1:z4YtwM70uOnk8h0pjJYlj3zdYwi9l03By6iAIF5j/Pk= -github.com/tendermint/go-amino v0.16.0 h1:GyhmgQKvqF82e2oZeuMSp9JTN0N09emoSZlb2lyGa2E= github.com/tendermint/go-amino v0.16.0/go.mod h1:TQU0M1i/ImAo+tYpZi73AU3V/dKeCoMC9Sphe2ZwGME= github.com/tendermint/tendermint v0.34.14/go.mod h1:FrwVm3TvsVicI9Z7FlucHV6Znfd5KBc/Lpp69cCwtk0= -github.com/tendermint/tendermint v0.34.24 h1:879MKKJWYYPJEMMKME+DWUTY4V9f/FBpnZDI82ky+4k= +github.com/tendermint/tendermint v0.34.20/go.mod h1:KtOwCLYJcsS1ymtAfnjjAtXfXClbqcqjdqzFt2Em1Ac= github.com/tendermint/tendermint v0.34.24/go.mod h1:rXVrl4OYzmIa1I91av3iLv2HS0fGSiucyW9J4aMTpKI= github.com/tendermint/tm-db v0.6.4/go.mod h1:dptYhIpJ2M5kUuenLr+Yyf3zQOv1SgBZcl8/BmWlMBw= -github.com/tendermint/tm-db v0.6.7 h1:fE00Cbl0jayAoqlExN6oyQJ7fR/ZtoVOmvPJ//+shu8= +github.com/tendermint/tm-db v0.6.6/go.mod h1:wP8d49A85B7/erz/r4YbKssKw6ylsO/hKtFk7E1aWZI= github.com/tendermint/tm-db v0.6.7/go.mod h1:byQDzFkZV1syXr/ReXS808NxA2xvyuuVgXOJ/088L6I= +github.com/tenntenn/modver v1.0.1/go.mod h1:bePIyQPb7UeioSRkw3Q0XeMhYZSMx9B8ePqg6SAMGH0= +github.com/tenntenn/text/transform v0.0.0-20200319021203-7eef512accb3/go.mod h1:ON8b8w4BN/kE1EOhwT0o+d62W65a6aPw1nouo9LMgyY= +github.com/tetafro/godot v0.3.7/go.mod h1:/7NLHhv08H1+8DNj0MElpAACw1ajsCuf3TKNQxA5S+0= +github.com/tetafro/godot v0.4.2/go.mod h1:/7NLHhv08H1+8DNj0MElpAACw1ajsCuf3TKNQxA5S+0= +github.com/tetafro/godot v1.4.11/go.mod h1:LR3CJpxDVGlYOWn3ZZg1PgNZdTUvzsZWu8xaEohUpn8= github.com/tidwall/gjson v1.6.7/go.mod h1:zeFuBCIqD4sN/gmqBzZ4j7Jd6UcA2Fc56x7QFsv+8fI= +github.com/tidwall/gjson v1.12.1/go.mod h1:/wbyibRr2FHMks5tjHJ5F8dMZh3AcwJEMf5vlfC0lxk= +github.com/tidwall/gjson v1.14.1/go.mod h1:/wbyibRr2FHMks5tjHJ5F8dMZh3AcwJEMf5vlfC0lxk= github.com/tidwall/match v1.0.3/go.mod h1:eRSPERbgtNPcGhD8UCthc6PmLEQXEWd3PRB5JTxsfmM= +github.com/tidwall/match v1.1.1/go.mod h1:eRSPERbgtNPcGhD8UCthc6PmLEQXEWd3PRB5JTxsfmM= github.com/tidwall/pretty v1.0.2/go.mod h1:XNkn88O1ChpSDQmQeStsy+sBenx6DDtFZJxhVysOjyk= +github.com/tidwall/pretty v1.2.0/go.mod h1:ITEVvHYasfjBbM0u2Pg8T2nJnzm8xPwvNhhsoaGGjNU= github.com/tidwall/sjson v1.1.4/go.mod h1:wXpKXu8CtDjKAZ+3DrKY5ROCorDFahq8l0tey/Lx1fg= +github.com/tidwall/sjson v1.2.4/go.mod h1:098SZ494YoMWPmMO6ct4dcFnqxwj9r/gF0Etp19pSNM= +github.com/timakin/bodyclose v0.0.0-20190930140734-f7f2e9bca95e/go.mod h1:Qimiffbc6q9tBWlVV6x0P9sat/ao1xEkREYPPj9hphk= +github.com/timakin/bodyclose v0.0.0-20200424151742-cb6215831a94/go.mod h1:Qimiffbc6q9tBWlVV6x0P9sat/ao1xEkREYPPj9hphk= +github.com/timakin/bodyclose v0.0.0-20210704033933-f49887972144/go.mod h1:Qimiffbc6q9tBWlVV6x0P9sat/ao1xEkREYPPj9hphk= +github.com/timonwong/loggercheck v0.9.3/go.mod h1:wUqnk9yAOIKtGA39l1KLE9Iz0QiTocu/YZoOf+OzFdw= +github.com/tinylib/msgp v1.0.2/go.mod h1:+d+yLhGm8mzTaHzB+wgMYrodPfmZrzkirds8fDWklFE= github.com/tinylib/msgp v1.1.5/go.mod h1:eQsjooMTnV42mHu917E26IogZ2930nFyBQdofk10Udg= +github.com/tj/assert v0.0.0-20171129193455-018094318fb0/go.mod h1:mZ9/Rh9oLWpLLDRpvE+3b7gP/C2YyLFYxNmcLnPTMe0= +github.com/tj/go-elastic v0.0.0-20171221160941-36157cbbebc2/go.mod h1:WjeM0Oo1eNAjXGDx2yma7uG2XoyRZTq1uv3M/o7imD0= +github.com/tj/go-kinesis v0.0.0-20171128231115-08b17f58cb1b/go.mod h1:/yhzCV0xPfx6jb1bBgRFjl5lytqVqZXEaeqWP8lTEao= +github.com/tj/go-spin v1.1.0/go.mod h1:Mg1mzmePZm4dva8Qz60H2lHwmJ2loum4VIrLgVnKwh4= +github.com/tklauser/go-sysconf v0.3.5/go.mod h1:MkWzOF4RMCshBAMXuhXJs64Rte09mITnppBXY/rYEFI= +github.com/tklauser/go-sysconf v0.3.10/go.mod h1:C8XykCvCb+Gn0oNCWPIlcb0RuglQTYaQ2hGm7jmxEFk= +github.com/tklauser/numcpus v0.2.2/go.mod h1:x3qojaO3uyYt0i56EW/VUYs7uBvdl2fkfZFu0T9wgjM= +github.com/tklauser/numcpus v0.4.0/go.mod h1:1+UI3pD8NW14VMwdgJNJ1ESk2UnwhAnz5hMwiKKqXCQ= github.com/tmc/grpc-websocket-proxy v0.0.0-20170815181823-89b8d40f7ca8/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= github.com/tmc/grpc-websocket-proxy v0.0.0-20190109142713-0ad062ec5ee5/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= +github.com/tmc/grpc-websocket-proxy v0.0.0-20200427203606-3cfed13b9966/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= +github.com/tmc/grpc-websocket-proxy v0.0.0-20201229170055-e5319fda7802/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= +github.com/tomarrell/wrapcheck/v2 v2.6.1/go.mod h1:Eo+Opt6pyMW1b6cNllOcDSSoHO0aTJ+iF6BfCUbHltA= +github.com/tomarrell/wrapcheck/v2 v2.7.0/go.mod h1:ao7l5p0aOlUNJKI0qVwB4Yjlqutd0IvAB9Rdwyilxvg= +github.com/tomasen/realip v0.0.0-20180522021738-f0c99a92ddce/go.mod h1:o8v6yHRoik09Xen7gje4m9ERNah1d1PPsVq1VEx9vE4= +github.com/tommy-muehle/go-mnd v1.1.1/go.mod h1:dSUh0FtTP8VhvkL1S+gUR1OKd9ZnSaozuI6r3m6wOig= +github.com/tommy-muehle/go-mnd v1.3.1-0.20200224220436-e6f9a994e8fa/go.mod h1:dSUh0FtTP8VhvkL1S+gUR1OKd9ZnSaozuI6r3m6wOig= +github.com/tommy-muehle/go-mnd/v2 v2.5.0/go.mod h1:WsUAkMJMYww6l/ufffCD3m+P7LEvr8TnZn9lwVDlgzw= +github.com/tommy-muehle/go-mnd/v2 v2.5.1/go.mod h1:WsUAkMJMYww6l/ufffCD3m+P7LEvr8TnZn9lwVDlgzw= +github.com/tonistiigi/fsutil v0.0.0-20201103201449-0834f99b7b85/go.mod h1:a7cilN64dG941IOXfhJhlH0qB92hxJ9A1ewrdUmJ6xo= +github.com/tonistiigi/fsutil v0.0.0-20220115021204-b19f7f9cb274/go.mod h1:oPAfvw32vlUJSjyDcQ3Bu0nb2ON2B+G0dtVN/SZNJiA= +github.com/tonistiigi/go-actions-cache v0.0.0-20220404170428-0bdeb6e1eac7/go.mod h1:qqvyZqkfwkoJuPU/bw61bItaoO0SJ8YSW0vSVRRvsRg= +github.com/tonistiigi/go-archvariant v1.0.0/go.mod h1:TxFmO5VS6vMq2kvs3ht04iPXtu2rUT/erOnGFYfk5Ho= +github.com/tonistiigi/units v0.0.0-20180711220420-6950e57a87ea/go.mod h1:WPnis/6cRcDZSUvVmezrxJPkiO87ThFYsoUiMwWNDJk= +github.com/tonistiigi/vt100 v0.0.0-20210615222946-8066bb97264f/go.mod h1:ulncasL3N9uLrVann0m+CDlJKWsIAP34MPcOJF6VRvc= github.com/ttacon/chalk v0.0.0-20160626202418-22c06c80ed31/go.mod h1:onvgF043R+lC5RZ8IT9rBXDaEDnpnw/Cl+HFiw+v/7Q= github.com/tv42/httpunix v0.0.0-20150427012821-b75d8614f926/go.mod h1:9ESjWnEqriFuLhtthL60Sar/7RFoluCcXsuvEwTV5KM= +github.com/tv42/httpunix v0.0.0-20191220191345-2ba4b9c3382c/go.mod h1:hzIxponao9Kjc7aWznkXaL4U4TWaDSs8zcsY4Ka08nM= github.com/tyler-smith/go-bip39 v1.0.1-0.20181017060643-dbb3b84ba2ef/go.mod h1:sJ5fKU0s6JVwZjjcUEX2zFOnvq0ASQ2K9Zr6cf67kNs= github.com/tyler-smith/go-bip39 v1.0.2/go.mod h1:sJ5fKU0s6JVwZjjcUEX2zFOnvq0ASQ2K9Zr6cf67kNs= -github.com/ugorji/go v1.1.7 h1:/68gy2h+1mWMrwZFeD1kQialdSzAb432dtpeJ42ovdo= +github.com/uber/jaeger-client-go v2.25.0+incompatible/go.mod h1:WVhlPFC8FDjOFMMWRy2pZqQJSXxYSwNYOkTr/Z6d3Kk= +github.com/uber/jaeger-lib v2.2.0+incompatible/go.mod h1:ComeNDZlWwrWnDv8aPp0Ba6+uUTzImX/AauajbLI56U= +github.com/ugorji/go v1.1.4/go.mod h1:uQMGLiO92mf5W77hV/PUCpI3pbzQx3CRekS0kk+RGrc= github.com/ugorji/go v1.1.7/go.mod h1:kZn38zHttfInRq0xu/PH0az30d+z6vm202qpg1oXVMw= github.com/ugorji/go/codec v0.0.0-20181204163529-d75b2dcb6bc8/go.mod h1:VFNgLljTbGfSG7qAOspJ7OScBnGdDN/yBr0sguwnwf0= -github.com/ugorji/go/codec v1.1.7 h1:2SvQaVZ1ouYrrKKwoSk2pzd4A9evlKJb9oTL+OaLUSs= github.com/ugorji/go/codec v1.1.7/go.mod h1:Ax+UKWsSmolVDwsd+7N3ZtXu+yMGCf907BLYF3GoBXY= +github.com/ulikunitz/xz v0.5.6/go.mod h1:2bypXElzHzzJZwzH67Y6wb67pO62Rzfn7BSiF4ABRW8= +github.com/ulikunitz/xz v0.5.7/go.mod h1:nbz6k7qbPmH4IRqmfOplQw/tblSgqTqBwxkY0oWt/14= +github.com/ultraware/funlen v0.0.2/go.mod h1:Dp4UiAus7Wdb9KUZsYWZEWiRzGuM2kXM1lPbfaF6xhA= +github.com/ultraware/funlen v0.0.3/go.mod h1:Dp4UiAus7Wdb9KUZsYWZEWiRzGuM2kXM1lPbfaF6xhA= +github.com/ultraware/whitespace v0.0.4/go.mod h1:aVMh/gQve5Maj9hQ/hg+F75lr/X5A89uZnzAmWSineA= +github.com/ultraware/whitespace v0.0.5/go.mod h1:aVMh/gQve5Maj9hQ/hg+F75lr/X5A89uZnzAmWSineA= +github.com/urfave/cli v0.0.0-20171014202726-7bc6a0acffa5/go.mod h1:70zkFmudgCuE/ngEzBv17Jvp/497gISqfk5gWijbERA= github.com/urfave/cli v1.20.0/go.mod h1:70zkFmudgCuE/ngEzBv17Jvp/497gISqfk5gWijbERA= github.com/urfave/cli v1.22.1/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0= +github.com/urfave/cli v1.22.2/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0= +github.com/urfave/cli v1.22.4/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0= +github.com/urfave/cli/v2 v2.3.0/go.mod h1:LJmUH05zAU44vOAcrfzZQKsZbVcdbOG8rtL3/XcUArI= +github.com/urfave/cli/v2 v2.10.2/go.mod h1:f8iq5LtQ/bLxafbdBSLPPNsgaW0l/2fYYEHhAyPlwvo= +github.com/uudashr/gocognit v1.0.1/go.mod h1:j44Ayx2KW4+oB6SWMv8KsmHzZrOInQav7D3cQMJ5JUM= +github.com/uudashr/gocognit v1.0.5/go.mod h1:wgYz0mitoKOTysqxTDMOUXg+Jb5SvtihkfmugIZYpEA= +github.com/uudashr/gocognit v1.0.6/go.mod h1:nAIUuVBnYU7pcninia3BHOvQkpQCeO76Uscky5BOwcY= +github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyCJ6HpOuEn7z0Csc= +github.com/valyala/fasthttp v1.2.0/go.mod h1:4vX61m6KN+xDduDNwXrhIAVZaZaZiQ1luJk8LWSxF3s= +github.com/valyala/fasthttp v1.30.0/go.mod h1:2rsYD01CKFrjjsvFxx75KlEUNpWNBY9JWD3K/7o2Cus= +github.com/valyala/fasttemplate v1.0.1/go.mod h1:UQGH1tvbgY+Nz5t2n7tXsz52dQxojPUpymEIMZ47gx8= +github.com/valyala/fasttemplate v1.2.1/go.mod h1:KHLXt3tVN2HBp8eijSv/kGJopbvo7S+qRAEEKiv+SiQ= +github.com/valyala/quicktemplate v1.2.0/go.mod h1:EH+4AkTd43SvgIbQHYu59/cJyxDoOVRUAfrukLPuGJ4= +github.com/valyala/quicktemplate v1.7.0/go.mod h1:sqKJnoaOF88V07vkO+9FL8fb9uZg/VPSJnLYn+LmLk8= +github.com/valyala/tcplisten v0.0.0-20161114210144-ceec8f93295a/go.mod h1:v3UYOV9WzVtRmSR+PDvWpU/qWl4Wa5LApYYX4ZtKbio= +github.com/valyala/tcplisten v1.0.0/go.mod h1:T0xQ8SeCZGxckz9qRXTfG43PvQ/mcWh7FwZEA7Ioqkc= +github.com/vbatts/tar-split v0.11.2/go.mod h1:vV3ZuO2yWSVsz+pfFzDG/upWH1JhjOiEaWq6kXyQ3VI= +github.com/vdemeester/k8s-pkg-credentialprovider v1.17.4/go.mod h1:inCTmtUdr5KJbreVojo06krnTgaeAz/Z7lynpPk/Q2c= +github.com/vektra/mockery/v2 v2.14.0/go.mod h1:bnD1T8tExSgPD1ripLkDbr60JA9VtQeu12P3wgLZd7M= +github.com/viki-org/dnscache v0.0.0-20130720023526-c70c1f23c5d8/go.mod h1:dniwbG03GafCjFohMDmz6Zc6oCuiqgH6tGNyXTkHzXE= +github.com/vishvananda/netlink v0.0.0-20181108222139-023a6dafdcdf/go.mod h1:+SR5DhBJrl6ZM7CoCKvpw5BKroDKQ+PJqOg65H/2ktk= github.com/vishvananda/netlink v1.1.0/go.mod h1:cTgwzPIzzgDAYoQrMm0EdrjRUBkTqKYppBueQtXaqoE= +github.com/vishvananda/netlink v1.1.1-0.20201029203352-d40f9887b852/go.mod h1:twkDnbuQxJYemMlGd4JFIcuhgX83tXhKS2B/PRMpOho= +github.com/vishvananda/netlink v1.1.1-0.20210330154013-f5de75959ad5/go.mod h1:twkDnbuQxJYemMlGd4JFIcuhgX83tXhKS2B/PRMpOho= +github.com/vishvananda/netns v0.0.0-20180720170159-13995c7128cc/go.mod h1:ZjcWmFBXmLKZu9Nxj3WKYEafiSqer2rnvPr0en9UNpI= github.com/vishvananda/netns v0.0.0-20191106174202-0a2b9b5464df/go.mod h1:JP3t17pCcGlemwknint6hfoeCVQrEMVwxRLRjXpq+BU= +github.com/vishvananda/netns v0.0.0-20200728191858-db3c7e526aae/go.mod h1:DD4vA1DwXk04H54A1oHXtwZmA0grkVMdPxx/VGLCah0= +github.com/vishvananda/netns v0.0.0-20210104183010-2eb08e3e575f/go.mod h1:DD4vA1DwXk04H54A1oHXtwZmA0grkVMdPxx/VGLCah0= github.com/vmihailenco/msgpack/v5 v5.1.4/go.mod h1:C5gboKD0TJPqWDTVTtrQNfRbiBwHZGo8UTqP/9/XvLI= +github.com/vmihailenco/msgpack/v5 v5.3.5/go.mod h1:7xyJ9e+0+9SaZT0Wt1RGleJXzli6Q/V5KbhBonMG9jc= github.com/vmihailenco/tagparser v0.1.2/go.mod h1:OeAg3pn3UbLjkWt+rN9oFYB6u/cQgqMEUPoW2WPyhdI= +github.com/vmihailenco/tagparser/v2 v2.0.0/go.mod h1:Wri+At7QHww0WTrCBeu4J6bNtoV6mEfg5OIWRZA9qds= +github.com/vmware/govmomi v0.20.3/go.mod h1:URlwyTFZX72RmxtxuaFL2Uj3fD1JTvZdx59bHWk6aFU= +github.com/willf/bitset v1.1.3/go.mod h1:RjeCKbqT1RxIR/KWY6phxZiaY1IyutSBfGjNPySAYV4= +github.com/willf/bitset v1.1.11-0.20200630133818-d5bec3311243/go.mod h1:RjeCKbqT1RxIR/KWY6phxZiaY1IyutSBfGjNPySAYV4= +github.com/willf/bitset v1.1.11/go.mod h1:83CECat5yLh5zVOf4P1ErAgKA5UDvKtgyUABdr3+MjI= github.com/wsddn/go-ecdh v0.0.0-20161211032359-48726bab9208/go.mod h1:IotVbo4F+mw0EzQ08zFqg7pK3FebNXpaMsRy2RT+Ees= +github.com/xanzy/go-gitlab v0.31.0/go.mod h1:sPLojNBn68fMUWSxIJtdVVIP8uSBYqesTfDUseX11Ug= +github.com/xanzy/go-gitlab v0.32.0/go.mod h1:sPLojNBn68fMUWSxIJtdVVIP8uSBYqesTfDUseX11Ug= +github.com/xeipuuv/gojsonpointer v0.0.0-20180127040702-4e3ac2762d5f/go.mod h1:N2zxlSyiKSe5eX1tZViRH5QA0qijqEDrYZiPEAiq3wU= +github.com/xeipuuv/gojsonpointer v0.0.0-20190905194746-02993c407bfb/go.mod h1:N2zxlSyiKSe5eX1tZViRH5QA0qijqEDrYZiPEAiq3wU= +github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415/go.mod h1:GwrjFmJcFw6At/Gs6z4yjiIwzuJ1/+UwLxMQDVQXShQ= +github.com/xeipuuv/gojsonschema v0.0.0-20180618132009-1d523034197f/go.mod h1:5yf86TLmAcydyeJq5YvxkGPE2fm/u4myDekKRoLuqhs= +github.com/xeipuuv/gojsonschema v1.2.0/go.mod h1:anYRn/JVcOK2ZgGU+IjEV4nwlhoK5sQluxsYJ78Id3Y= +github.com/xi2/xz v0.0.0-20171230120015-48954b6210f8/go.mod h1:HUYIGzjTL3rfEspMxjDjgmT5uz5wzYJKVo23qUhYTos= github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU= +github.com/xlab/treeprint v0.0.0-20180616005107-d6fb6747feb6/go.mod h1:ce1O1j6UtZfjr22oyGxGLbauSBp2YVXpARAosm7dHBg= +github.com/xo/terminfo v0.0.0-20210125001918-ca9a967f8778/go.mod h1:2MuV+tbUrU1zIOPMxZ5EncGwgmMJsa+9ucAQZXxsObs= github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1:aYKd//L2LvnjZzWKhF00oedf4jCCReLcmhLdhm1A27Q= -github.com/yahoo/coname v0.0.0-20170609175141-84592ddf8673 h1:PSg2cEFd+9Ae/r5x5iO8cJ3VmTbZNQp6X8tHDmVJAbA= +github.com/xrash/smetrics v0.0.0-20201216005158-039620a65673/go.mod h1:N3UwUGtsrSj3ccvlPHLoLsHnpR27oXr4ZE984MbSER8= +github.com/yagipy/maintidx v1.0.0/go.mod h1:0qNf/I/CCZXSMhsRsrEPDZ+DkekpKLXAJfsTACwgXLk= +github.com/yahoo/coname v0.0.0-20170609175141-84592ddf8673/go.mod h1:Wq2sZrP++Us4tAw1h58MHS8BGIpC4NmKHfvw2QWBe9U= github.com/ybbus/jsonrpc v2.1.2+incompatible/go.mod h1:XJrh1eMSzdIYFbM08flv0wp5G35eRniyeGut1z+LSiE= +github.com/yeya24/promlinter v0.2.0/go.mod h1:u54lkmBOZrpEbQQ6gox2zWKKLKu2SGe+2KOiextY+IA= +github.com/yudai/gojsondiff v1.0.0/go.mod h1:AY32+k2cwILAkW1fbgxQ5mUmMiZFgLIV+FBNExI05xg= +github.com/yudai/golcs v0.0.0-20170316035057-ecda9a501e82/go.mod h1:lgjkn3NuSvDfVJdfcVVdX+jpBxNmX4rDAzaS45IcYoM= +github.com/yudai/pp v2.0.1+incompatible/go.mod h1:PuxR/8QJ7cyCkFp/aUDS+JY727OFEZkTdatxwunjIkc= github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= +github.com/yuin/goldmark v1.4.0/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= +github.com/yuin/goldmark v1.4.1/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= +github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= +github.com/yusufpapurcu/wmi v1.2.2/go.mod h1:SBZ9tNy3G9/m5Oi98Zks0QjeHVDvuK0qfxQmPyzfmi0= +github.com/yvasiyarov/go-metrics v0.0.0-20140926110328-57bccd1ccd43/go.mod h1:aX5oPXxHm3bOH+xeAttToC8pqch2ScQN/JoXYupl6xs= +github.com/yvasiyarov/gorelic v0.0.0-20141212073537-a9bba5b9ab50/go.mod h1:NUSPSUX/bi6SeDMUh6brw0nXpxHnc96TguQh0+r/ssA= +github.com/yvasiyarov/newrelic_platform_go v0.0.0-20140908184405-b21fdbd4370f/go.mod h1:GlGEuHIJweS1mbCqG+7vt2nvWLzLLnRHbXz5JKd/Qbg= github.com/zondax/hid v0.9.0/go.mod h1:l5wttcP0jwtdLjqjMMWFVEE7d1zO0jvSPA9OPZxWpEM= -github.com/zondax/hid v0.9.1 h1:gQe66rtmyZ8VeGFcOpbuH3r7erYtNEAezCAYu8LdkJo= github.com/zondax/hid v0.9.1/go.mod h1:l5wttcP0jwtdLjqjMMWFVEE7d1zO0jvSPA9OPZxWpEM= -github.com/zondax/ledger-go v0.14.0 h1:dlMC7aO8Wss1CxBq2I96kZ69Nh1ligzbs8UWOtq/AsA= github.com/zondax/ledger-go v0.14.0/go.mod h1:fZ3Dqg6qcdXWSOJFKMG8GCTnD7slO/RL2feOQv8K320= +gitlab.com/bosi/decorder v0.2.1/go.mod h1:6C/nhLSbF6qZbYD8bRmISBwc6vcWdNsiIBkRvjJFrH0= +gitlab.com/bosi/decorder v0.2.3/go.mod h1:9K1RB5+VPNQYtXtTDAzd2OEftsZb1oV0IrJrzChSdGE= go.etcd.io/bbolt v1.3.2/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= go.etcd.io/bbolt v1.3.3/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= +go.etcd.io/bbolt v1.3.4/go.mod h1:G5EMThwa9y8QZGBClrRx5EY+Yw9kAhnjy3bSjsnlVTQ= go.etcd.io/bbolt v1.3.5/go.mod h1:G5EMThwa9y8QZGBClrRx5EY+Yw9kAhnjy3bSjsnlVTQ= -go.etcd.io/bbolt v1.3.6 h1:/ecaJf0sk1l4l6V4awd65v2C3ILy7MSj+s/x1ADCIMU= go.etcd.io/bbolt v1.3.6/go.mod h1:qXsaaIqmgQH0T+OPdb99Bf+PKfBBQVAdyD6TY9G8XM4= go.etcd.io/etcd v0.0.0-20191023171146-3cf2f69b5738/go.mod h1:dnLIgRNXwCJa5e+c6mIZCrds/GIG4ncV9HhK5PX7jPg= +go.etcd.io/etcd v0.0.0-20200513171258-e048e166ab9c/go.mod h1:xCI7ZzBfRuGgBXyXO6yfWfDmlWd35khcWpUa4L0xI/k= +go.etcd.io/etcd v0.5.0-alpha.5.0.20200910180754-dd1b699fc489/go.mod h1:yVHk9ub3CSBatqGNg7GRmsnfLWtoW60w4eDYfh7vHDg= go.etcd.io/etcd/api/v3 v3.5.0/go.mod h1:cbVKeC6lCfl7j/8jBhAK6aIYO9XOjdptoxU/nLQcPvs= +go.etcd.io/etcd/api/v3 v3.5.1/go.mod h1:cbVKeC6lCfl7j/8jBhAK6aIYO9XOjdptoxU/nLQcPvs= +go.etcd.io/etcd/api/v3 v3.5.2/go.mod h1:5GB2vv4A4AOn3yk7MftYGHkUfGtDHnEraIjym4dYz5A= +go.etcd.io/etcd/api/v3 v3.5.4/go.mod h1:5GB2vv4A4AOn3yk7MftYGHkUfGtDHnEraIjym4dYz5A= +go.etcd.io/etcd/api/v3 v3.5.5/go.mod h1:KFtNaxGDw4Yx/BA4iPPwevUTAuqcsPxzyX8PHydchN8= go.etcd.io/etcd/client/pkg/v3 v3.5.0/go.mod h1:IJHfcCEKxYu1Os13ZdwCwIUTUVGYTSAM3YSwc9/Ac1g= +go.etcd.io/etcd/client/pkg/v3 v3.5.1/go.mod h1:IJHfcCEKxYu1Os13ZdwCwIUTUVGYTSAM3YSwc9/Ac1g= +go.etcd.io/etcd/client/pkg/v3 v3.5.2/go.mod h1:IJHfcCEKxYu1Os13ZdwCwIUTUVGYTSAM3YSwc9/Ac1g= +go.etcd.io/etcd/client/pkg/v3 v3.5.4/go.mod h1:IJHfcCEKxYu1Os13ZdwCwIUTUVGYTSAM3YSwc9/Ac1g= +go.etcd.io/etcd/client/pkg/v3 v3.5.5/go.mod h1:ggrwbk069qxpKPq8/FKkQ3Xq9y39kbFR4LnKszpRXeQ= go.etcd.io/etcd/client/v2 v2.305.0/go.mod h1:h9puh54ZTgAKtEbut2oe9P4L/oqKCVB6xsXlzd7alYQ= +go.etcd.io/etcd/client/v2 v2.305.1/go.mod h1:pMEacxZW7o8pg4CrFE7pquyCJJzZvkvdD2RibOCCCGs= +go.etcd.io/etcd/client/v2 v2.305.2/go.mod h1:2D7ZejHVMIfog1221iLSYlQRzrtECw3kz4I4VAQm3qI= +go.etcd.io/etcd/client/v2 v2.305.4/go.mod h1:Ud+VUwIi9/uQHOMA+4ekToJ12lTxlv0zB/+DHwTGEbU= +go.etcd.io/etcd/client/v2 v2.305.5/go.mod h1:zQjKllfqfBVyVStbt4FaosoX2iYd8fV/GRy/PbowgP4= +go.etcd.io/etcd/client/v3 v3.5.0/go.mod h1:AIKXXVX/DQXtfTEqBryiLTUXwON+GuvO6Z7lLS/oTh0= +go.etcd.io/etcd/client/v3 v3.5.4/go.mod h1:ZaRkVgBZC+L+dLCjTcF1hRXpgZXQPOvnA/Ak/gq3kiY= +go.etcd.io/etcd/client/v3 v3.5.5/go.mod h1:aApjR4WGlSumpnJ2kloS75h6aHUmAyaPLjHMxpc7E7c= +go.etcd.io/etcd/pkg/v3 v3.5.0/go.mod h1:UzJGatBQ1lXChBkQF0AuAtkRQMYnHubxAEYIrC3MSsE= +go.etcd.io/etcd/raft/v3 v3.5.0/go.mod h1:UFOHSIvO/nKwd4lhkwabrTD3cqW5yVyYYf/KlD00Szc= +go.etcd.io/etcd/server/v3 v3.5.0/go.mod h1:3Ah5ruV+M+7RZr0+Y/5mNLwC+eQlni+mQmOVdCRJoS4= +go.mozilla.org/mozlog v0.0.0-20170222151521-4bb13139d403/go.mod h1:jHoPAGnDrCy6kaI2tAze5Prf0Nr0w/oNkROt2lw3n3o= +go.mozilla.org/pkcs7 v0.0.0-20200128120323-432b2356ecb1/go.mod h1:SNgMg+EgDFwmvSmLRTNKC5fegJjB7v23qTQ0XLGUNHk= +go.opencensus.io v0.15.0/go.mod h1:UffZAU+4sDEINUGP/B7UfBBkq4fqLu9zXAX7ke6CHW0= +go.opencensus.io v0.18.0/go.mod h1:vKdFvxhtzZ9onBp9VKHK8z/sRpBMnKAsufL7wlDrCOA= +go.opencensus.io v0.19.1/go.mod h1:gug0GbSHa8Pafr0d2urOSgoXHZ6x/RUlaiT0d9pqb4A= +go.opencensus.io v0.19.2/go.mod h1:NO/8qkisMZLZ1FCsKNqtJPwc8/TaclWyY0B6wcYNg9M= go.opencensus.io v0.20.1/go.mod h1:6WKK9ahsWS3RSO+PY9ZHZUfv2irvY6gN279GOPZjmmk= go.opencensus.io v0.20.2/go.mod h1:6WKK9ahsWS3RSO+PY9ZHZUfv2irvY6gN279GOPZjmmk= go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU= @@ -955,46 +2345,134 @@ go.opencensus.io v0.22.3/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= go.opencensus.io v0.22.4/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= go.opencensus.io v0.22.5/go.mod h1:5pWMHQbX5EPX2/62yrJeAkowc+lfs/XD7Uxpq3pI6kk= go.opencensus.io v0.23.0/go.mod h1:XItmlyltB5F7CS4xOC1DcqMoFqwtC6OG2xF7mCv7P7E= +go.opentelemetry.io/contrib v0.20.0/go.mod h1:G/EtFaa6qaN7+LxqfIAT3GiZa7Wv5DTBUzl5H4LY0Kc= +go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.20.0/go.mod h1:oVGt1LRbBOBq1A5BQLlUg9UaU/54aiHw8cgjV3aWZ/E= +go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.28.0/go.mod h1:vEhqr0m4eTc+DWxfsXoXue2GBgV2uUwVznkGIHW/e5w= +go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.29.0/go.mod h1:LsankqVDx4W+RhZNA5uWarULII/MBhF5qwCYxTuyXjs= +go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.36.3/go.mod h1:Dts42MGkzZne2yCru741+bFiTMWkIj/LLRizad7b9tw= +go.opentelemetry.io/contrib/instrumentation/net/http/httptrace/otelhttptrace v0.29.0/go.mod h1:vHItvsnJtp7ES++nFLLFBzUWny7fJQSvTlxFcqQGUr4= +go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.20.0/go.mod h1:2AboqHi0CiIZU0qwhtUfCYD1GeUzvvIXWNkhDt7ZMG4= +go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.29.0/go.mod h1:tLYsuf2v8fZreBVwp9gVMhefZlLFZaUiNVSq8QxXRII= +go.opentelemetry.io/otel v0.20.0/go.mod h1:Y3ugLH2oa81t5QO+Lty+zXf8zC9L26ax4Nzoxm/dooo= +go.opentelemetry.io/otel v1.3.0/go.mod h1:PWIKzi6JCp7sM0k9yZ43VX+T345uNbAkDKwHVjb2PTs= +go.opentelemetry.io/otel v1.4.0/go.mod h1:jeAqMFKy2uLIxCtKxoFj0FAL5zAPKQagc3+GtBWakzk= +go.opentelemetry.io/otel v1.4.1/go.mod h1:StM6F/0fSwpd8dKWDCdRr7uRvEPYdW0hBSlbdTiUde4= +go.opentelemetry.io/otel v1.11.0/go.mod h1:H2KtuEphyMvlhZ+F7tg9GRhAOe60moNx61Ex+WmiKkk= +go.opentelemetry.io/otel/exporters/jaeger v1.4.1/go.mod h1:ZW7vkOu9nC1CxsD8bHNHCia5JUbwP39vxgd1q4Z5rCI= +go.opentelemetry.io/otel/exporters/otlp v0.20.0/go.mod h1:YIieizyaN77rtLJra0buKiNBOm9XQfkPEKBeuhoMwAM= +go.opentelemetry.io/otel/exporters/otlp/internal/retry v1.3.0/go.mod h1:VpP4/RMn8bv8gNo9uK7/IMY4mtWLELsS+JIP0inH0h4= +go.opentelemetry.io/otel/exporters/otlp/internal/retry v1.4.1/go.mod h1:VpP4/RMn8bv8gNo9uK7/IMY4mtWLELsS+JIP0inH0h4= +go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.3.0/go.mod h1:hO1KLR7jcKaDDKDkvI9dP/FIhpmna5lkqPUQdEjFAM8= +go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.4.1/go.mod h1:o5RW5o2pKpJLD5dNTCmjF1DorYwMeFJmb/rKr5sLaa8= +go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.3.0/go.mod h1:keUU7UfnwWTWpJ+FWnyqmogPa82nuU5VUANFq49hlMY= +go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.4.1/go.mod h1:c6E4V3/U+miqjs/8l950wggHGL1qzlp0Ypj9xoGrPqo= +go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.3.0/go.mod h1:QNX1aly8ehqqX1LEa6YniTU7VY9I6R3X/oPxhGdTceE= +go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.4.1/go.mod h1:VwYo0Hak6Efuy0TXsZs8o1hnV3dHDPNtDbycG0hI8+M= +go.opentelemetry.io/otel/internal/metric v0.27.0/go.mod h1:n1CVxRqKqYZtqyTh9U/onvKapPGv7y/rpyOTI+LFNzw= +go.opentelemetry.io/otel/metric v0.20.0/go.mod h1:598I5tYlH1vzBjn+BTuhzTCSb/9debfNp6R3s7Pr1eU= +go.opentelemetry.io/otel/metric v0.27.0/go.mod h1:raXDJ7uP2/Jc0nVZWQjJtzoyssOYWu/+pjZqRzfvZ7g= +go.opentelemetry.io/otel/metric v0.32.3/go.mod h1:pgiGmKohxHyTPHGOff+vrtIH39/R9fiO/WoenUQ3kcc= +go.opentelemetry.io/otel/oteltest v0.20.0/go.mod h1:L7bgKf9ZB7qCwT9Up7i9/pn0PWIa9FqQ2IQ8LoxiGnw= +go.opentelemetry.io/otel/sdk v0.20.0/go.mod h1:g/IcepuwNsoiX5Byy2nNV0ySUF1em498m7hBWC279Yc= +go.opentelemetry.io/otel/sdk v1.3.0/go.mod h1:rIo4suHNhQwBIPg9axF8V9CA72Wz2mKF1teNrup8yzs= +go.opentelemetry.io/otel/sdk v1.4.1/go.mod h1:NBwHDgDIBYjwK2WNu1OPgsIc2IJzmBXNnvIJxJc8BpE= +go.opentelemetry.io/otel/sdk/export/metric v0.20.0/go.mod h1:h7RBNMsDJ5pmI1zExLi+bJK+Dr8NQCh0qGhm1KDnNlE= +go.opentelemetry.io/otel/sdk/metric v0.20.0/go.mod h1:knxiS8Xd4E/N+ZqKmUPf3gTTZ4/0TjTXukfxjzSTpHE= +go.opentelemetry.io/otel/trace v0.20.0/go.mod h1:6GjCW8zgDjwGHGa6GkyeB8+/5vjT16gUEi0Nf1iBdgw= +go.opentelemetry.io/otel/trace v1.3.0/go.mod h1:c/VDhno8888bvQYmbYLqe41/Ldmr/KKunbvWM4/fEjk= +go.opentelemetry.io/otel/trace v1.4.0/go.mod h1:uc3eRsqDfWs9R7b92xbQbU42/eTNz4N+gLP8qJCi4aE= +go.opentelemetry.io/otel/trace v1.4.1/go.mod h1:iYEVbroFCNut9QkwEczV9vMRPHNKSSwYZjulEtsmhFc= +go.opentelemetry.io/otel/trace v1.11.0/go.mod h1:nyYjis9jy0gytE9LXGU+/m1sHTKbRY0fX0hulNNDP1U= +go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqeYNgFYFoEGnI= +go.opentelemetry.io/proto/otlp v0.11.0/go.mod h1:QpEjXPrNQzrFDZgoTo49dgHR9RYRSrg3NAKnUGl9YpQ= +go.opentelemetry.io/proto/otlp v0.12.0/go.mod h1:TsIjwGWIx5VFYv9KGVlOpxoBl5Dy+63SUguV7GGvlSQ= go.uber.org/atomic v1.3.2/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= go.uber.org/atomic v1.5.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ= go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= +go.uber.org/atomic v1.9.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= +go.uber.org/atomic v1.10.0/go.mod h1:LUxbIzbOniOlMKjJjyPfpl4v+PKK2cNJn91OQbhoJI0= +go.uber.org/goleak v1.1.10/go.mod h1:8a7PlsEVH3e/a/GLqe5IIrQx6GzcnRmZEufDUTk4A7A= +go.uber.org/goleak v1.1.11-0.20210813005559-691160354723/go.mod h1:cwTWslyiVhfpKIDGSZEM2HlOvcqm+tG4zioyIeLoqMQ= +go.uber.org/goleak v1.1.11/go.mod h1:cwTWslyiVhfpKIDGSZEM2HlOvcqm+tG4zioyIeLoqMQ= +go.uber.org/goleak v1.1.12/go.mod h1:cwTWslyiVhfpKIDGSZEM2HlOvcqm+tG4zioyIeLoqMQ= go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0= go.uber.org/multierr v1.3.0/go.mod h1:VgVr7evmIr6uPjLBxg28wmKNXyqE9akIJ5XnfpiKl+4= +go.uber.org/multierr v1.4.0/go.mod h1:VgVr7evmIr6uPjLBxg28wmKNXyqE9akIJ5XnfpiKl+4= go.uber.org/multierr v1.6.0/go.mod h1:cdWPpRnG4AhwMwsgIHip0KRBQjJy5kYEpYjJxpXp9iU= +go.uber.org/multierr v1.7.0/go.mod h1:7EAYxJLBy9rStEaz58O2t4Uvip6FSURkq8/ppBp95ak= +go.uber.org/multierr v1.8.0/go.mod h1:7EAYxJLBy9rStEaz58O2t4Uvip6FSURkq8/ppBp95ak= go.uber.org/tools v0.0.0-20190618225709-2cfd321de3ee/go.mod h1:vJERXedbb3MVM5f9Ejo0C68/HhF8uaILCdgjnY+goOA= +go.uber.org/zap v1.9.1/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= go.uber.org/zap v1.13.0/go.mod h1:zwrFLgMcdUuIBviXEYEH1YKNaOBnKXsx2IPda5bBwHM= go.uber.org/zap v1.17.0/go.mod h1:MXVU+bhUf/A7Xi2HNOnopQOrmycQ5Ih87HtOu4q5SSo= +go.uber.org/zap v1.19.1/go.mod h1:j3DNczoxDZroyBnOT1L/Q79cfUMGZxlv/9dzN7SM1rI= +go.uber.org/zap v1.21.0/go.mod h1:wjWOCqI0f2ZZrJF/UufIOkiC8ii6tm1iqIsLo76RfJw= +go.uber.org/zap v1.23.0/go.mod h1:D+nX8jyLsMHMYrln8A0rJjFt/T/9/bGgIhAqxv5URuY= +go4.org v0.0.0-20180809161055-417644f6feb5/go.mod h1:MkTOUMDaeVYJUOUsaDXIhWPZYa1yOyC1qaOBpL57BhE= +gocloud.dev v0.19.0/go.mod h1:SmKwiR8YwIMMJvQBKLsC3fHNyMwXLw3PMDO+VVteJMI= +golang.org/x/build v0.0.0-20190314133821-5284462c4bec/go.mod h1:atTaCNAy0f16Ah5aV1gMSwgiKVHwu/JncqDpuRr7lS4= golang.org/x/crypto v0.0.0-20170930174604-9419663f5a44/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= +golang.org/x/crypto v0.0.0-20171113213409-9f005a07e0d3/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= +golang.org/x/crypto v0.0.0-20180501155221-613d6eafa307/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= +golang.org/x/crypto v0.0.0-20181009213950-7c1a557ab941/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20181029021203-45a5f77698d3/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= +golang.org/x/crypto v0.0.0-20181030102418-4d3f4d9ffa16/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20181203042331-505ab145d0a9/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= +golang.org/x/crypto v0.0.0-20190211182817-74369b46fc67/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20190426145343-a29dc8fdc734/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20190611184440-5c40567a22f8/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190701094942-4def268fd1a4/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190820162420-60c769a6c586/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190909091759-094676da4a83/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20190923035154-9ee001bba392/go.mod h1:/lpIB1dKB+9EgE3H3cr1v9wB50oz8l4C4h62xy7jSTY= +golang.org/x/crypto v0.0.0-20191002192127-34f69633bfdc/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20191206172530-e9b2fee46413/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200115085410-6d4e4cb37c7d/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/crypto v0.0.0-20200220183623-bac4c82f6975/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/crypto v0.0.0-20200323165209-0ec3e9974c59/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200510223506-06a226fb4e37/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200728195943-123391ffb6de/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200820211705-5c72a883971a/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/crypto v0.0.0-20201002170205-7f63de1d35b0/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/crypto v0.0.0-20201016220609-9e8e0b390897/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20201117144127-c1f2f97bffc9/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I= +golang.org/x/crypto v0.0.0-20201221181555-eec23a3978ad/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I= +golang.org/x/crypto v0.0.0-20210220033148-5ea612d1eb83/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I= +golang.org/x/crypto v0.0.0-20210314154223-e6e6c4f2bb5b/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= +golang.org/x/crypto v0.0.0-20210322153248-0c34fe9e7dc2/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= golang.org/x/crypto v0.0.0-20210421170649-83a5a9bb288b/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= +golang.org/x/crypto v0.0.0-20210513164829-c07d793c2f9a/go.mod h1:P+XmwS30IXTQdn5tA2iutPOUgjI07+tq3H3K9MVA1s8= +golang.org/x/crypto v0.0.0-20210616213533-5ff15b29337e/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= +golang.org/x/crypto v0.0.0-20210711020723-a769d52b0f97/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.0.0-20210817164053-32db794688a5/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= +golang.org/x/crypto v0.0.0-20210915214749-c084706c2272/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= +golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.0.0-20211108221036-ceb1ce70b4fa/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= -golang.org/x/crypto v0.5.0 h1:U/0M97KRkSFvyD/3FSmdP5W5swImpNgle/EHFhOsQPE= +golang.org/x/crypto v0.0.0-20211202192323-5770296d904e/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= +golang.org/x/crypto v0.0.0-20220313003712-b769efc7c000/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= +golang.org/x/crypto v0.0.0-20220411220226-7b82a4e95df4/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= +golang.org/x/crypto v0.0.0-20220525230936-793ad666bf5e/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= +golang.org/x/crypto v0.0.0-20220722155217-630584e8d5aa/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= +golang.org/x/crypto v0.1.0/go.mod h1:RecgLatLF4+eUMCP1PoPZQb+cVrJcOPbHkTkbkB9sbw= golang.org/x/crypto v0.5.0/go.mod h1:NK/OQwhpMQP3MwtdjgLlYHnH9ebylxKWv3e0fK+mkQU= +golang.org/x/exp v0.0.0-20180321215751-8460e604b9de/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= +golang.org/x/exp v0.0.0-20180807140117-3d87b88a115f/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= +golang.org/x/exp v0.0.0-20190125153040-c74c464bbbf2/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= +golang.org/x/exp v0.0.0-20190312203227-4b39c73a6495/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= golang.org/x/exp v0.0.0-20190731235908-ec7cb31e5a56/go.mod h1:JhuoJpWY28nO4Vef9tZUw9qufEGTyX1+7lmHxV5q5G4= golang.org/x/exp v0.0.0-20190829153037-c13cbed26979/go.mod h1:86+5VVa7VpoJ4kLfm080zCjGlMRFzhUhsZKEZO7MGek= +golang.org/x/exp v0.0.0-20191002040644-a1355ae1e2c3/go.mod h1:NOZ3BPKG0ec/BKJQgnvsSFpcKLM5xXVWnvZS97DWHgE= golang.org/x/exp v0.0.0-20191030013958-a1ab85dbe136/go.mod h1:JXzH8nQsPlswgeRAPE3MuO9GYsAcnJvJ4vnMwN/5qkY= golang.org/x/exp v0.0.0-20191129062945-2f5052295587/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= golang.org/x/exp v0.0.0-20191227195350-da58074b4299/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= @@ -1002,10 +2480,26 @@ golang.org/x/exp v0.0.0-20200119233911-0405dc783f0a/go.mod h1:2RIsYlXP63K8oxa1u0 golang.org/x/exp v0.0.0-20200207192155-f17229e696bd/go.mod h1:J/WKrq2StrnmMY6+EHIKF9dgMWnmCNThgcyBT1FY9mM= golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6/go.mod h1:3jZMyOhIsHpP37uCMkUooju7aAi5cS1Q23tOzKc+0MU= golang.org/x/exp v0.0.0-20200331195152-e8c3332aa8e5/go.mod h1:4M0jN8W1tt0AVLNr8HDosyJCDCDuyL9N9+3m7wDWgKw= -golang.org/x/exp v0.0.0-20220722155223-a9213eeb770e h1:+WEEuIdZHnUeJJmEUjyYC2gfUMj69yZXw17EnHg/otA= +golang.org/x/exp v0.0.0-20220426173459-3bcf042a4bf5/go.mod h1:lgLbSvA5ygNOMpwM/9anMpWVlVJ7Z+cHWq/eFuinpGE= golang.org/x/exp v0.0.0-20220722155223-a9213eeb770e/go.mod h1:Kr81I6Kryrl9sr8s2FK3vxD90NdsKWRuOIl2O4CvYbA= +golang.org/x/exp/typeparams v0.0.0-20220218215828-6cf2b201936e/go.mod h1:AbB0pIl9nAr9wVwH+Z2ZpaocVmF5I4GyWCDIsVjR0bk= +golang.org/x/exp/typeparams v0.0.0-20220428152302-39d4317da171/go.mod h1:AbB0pIl9nAr9wVwH+Z2ZpaocVmF5I4GyWCDIsVjR0bk= +golang.org/x/exp/typeparams v0.0.0-20220613132600-b0d781184e0d/go.mod h1:AbB0pIl9nAr9wVwH+Z2ZpaocVmF5I4GyWCDIsVjR0bk= +golang.org/x/exp/typeparams v0.0.0-20220827204233-334a2380cb91/go.mod h1:AbB0pIl9nAr9wVwH+Z2ZpaocVmF5I4GyWCDIsVjR0bk= +golang.org/x/image v0.0.0-20180708004352-c73c2afc3b81/go.mod h1:ux5Hcp/YLpHSI86hEcLt0YII63i6oz57MZXIpbrjZUs= golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= +golang.org/x/image v0.0.0-20190910094157-69e4b8554b2a/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= +golang.org/x/image v0.0.0-20200119044424-58c23975cae1/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= +golang.org/x/image v0.0.0-20200430140353-33d19683fad8/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= +golang.org/x/image v0.0.0-20200618115811-c13761719519/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= +golang.org/x/image v0.0.0-20201208152932-35266b937fa6/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= +golang.org/x/image v0.0.0-20210216034530-4410531fe030/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= +golang.org/x/image v0.0.0-20210607152325-775e3b0c77b9/go.mod h1:023OzeP/+EPmXeapQh35lcL3II3LrY8Ic+EFFKVhULM= +golang.org/x/image v0.0.0-20210628002857-a66eb6448b8d/go.mod h1:023OzeP/+EPmXeapQh35lcL3II3LrY8Ic+EFFKVhULM= +golang.org/x/image v0.0.0-20211028202545-6944b10bf410/go.mod h1:023OzeP/+EPmXeapQh35lcL3II3LrY8Ic+EFFKVhULM= +golang.org/x/image v0.0.0-20220302094943-723b81ca9867/go.mod h1:023OzeP/+EPmXeapQh35lcL3II3LrY8Ic+EFFKVhULM= +golang.org/x/lint v0.0.0-20181217174547-8f45f776aaf1/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= golang.org/x/lint v0.0.0-20190301231843-5614ed5bae6f/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= @@ -1030,12 +2524,22 @@ golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.4.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.4.1/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/mod v0.6.0 h1:b9gGHsz9/HhJ3HF5DHQytPpuwocVTChQJK3AvoLRD5I= +golang.org/x/mod v0.5.0/go.mod h1:5OXOZSfqPIIbmVBIIKWRFfZjPR0E5r58TLhUjH0a2Ro= +golang.org/x/mod v0.5.1/go.mod h1:5OXOZSfqPIIbmVBIIKWRFfZjPR0E5r58TLhUjH0a2Ro= +golang.org/x/mod v0.6.0-dev.0.20211013180041-c96bc1413d57/go.mod h1:3p9vT2HGsQu2K1YbXdKPJLVgG5VJdoTa1poYQBtP1AY= +golang.org/x/mod v0.6.0-dev.0.20220106191415-9b9b3d81d5e3/go.mod h1:3p9vT2HGsQu2K1YbXdKPJLVgG5VJdoTa1poYQBtP1AY= +golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= +golang.org/x/mod v0.6.0/go.mod h1:4mET923SAdbXp2ki8ey+zGs1SLqsuM2Y0uvdZR/fUNI= +golang.org/x/net v0.0.0-20170114055629-f2499483f923/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180719180050-a680a1efc54d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20180911220305-26e67e76b6c3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20181011144130-49bb7cea24b1/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20181023162649-9b4f9f5ad519/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20181029044818-c44066c5c816/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20181106065722-10aee1819953/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20181108082009-03003ca0c849/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20181201002055-351d144fa1fc/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20181220203305-927f97764cc3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -1046,13 +2550,19 @@ golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190501004415-9ce7a6920f09/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190503192946-f4e77d36d62c/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190522155817-f3200d17e092/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= golang.org/x/net v0.0.0-20190613194153-d28f0bde5980/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20190619014844-b5b0513f8c1b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190628185345-da137c7871d7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190724013045-ca1201d0de80/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190813141303-74dc4d7220e7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20190827160401-ba9fcec4b297/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190923162816-aa69164e4478/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20191002035440-2ec189313ef0/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20191004110552-13f9640d40b9/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20191112182307-2180aed22343/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20191209160850-c0dbc17a3553/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200114155413-6afb5195e5aa/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200202094626-16171245cfb2/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= @@ -1071,23 +2581,61 @@ golang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81R golang.org/x/net v0.0.0-20200813134508-3edf25e44fcc/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= golang.org/x/net v0.0.0-20200904194848-62affa334b73/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= +golang.org/x/net v0.0.0-20201006153459-a7d1128ccaa0/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= +golang.org/x/net v0.0.0-20201010224723-4f7140c49acb/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= golang.org/x/net v0.0.0-20201031054903-ff519b6c9102/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= +golang.org/x/net v0.0.0-20201202161906-c7110b5ffcbb/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= golang.org/x/net v0.0.0-20201209123823-ac852fbbde11/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20201224014010-6772e930b67b/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20210119194325-5f4716e94777/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= +golang.org/x/net v0.0.0-20210220033124-5f55cee0dc0d/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20210316092652-d523dce5a7f4/go.mod h1:RBQZq4jEuRlivfhVLdyRGr576XBO4/greRjx4P4O3yc= golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= +golang.org/x/net v0.0.0-20210410081132-afb366fc7cd1/go.mod h1:9tjilg8BloeKEkVJvy7fQ90B1CfIiPueXVOjqfkSzI8= golang.org/x/net v0.0.0-20210428140749-89ef3d95e781/go.mod h1:OJAsFXCWl8Ukc7SiCT/9KSuxbyM7479/AVlXFRxuMCk= +golang.org/x/net v0.0.0-20210503060351-7fd8e65b6420/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +golang.org/x/net v0.0.0-20210510120150-4163338589ed/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +golang.org/x/net v0.0.0-20210520170846-37e1c6afe023/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20210525063256-abc453219eb5/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +golang.org/x/net v0.0.0-20210610132358-84b48f89b13b/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +golang.org/x/net v0.0.0-20210614182718-04defd469f4e/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20210805182204-aaa1db679c0d/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +golang.org/x/net v0.0.0-20210813160813-60bc85c4be6d/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +golang.org/x/net v0.0.0-20210825183410-e898025ed96a/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20210903162142-ad29c8ab022f/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/net v0.5.0 h1:GyT4nK/YDHSqa1c4753ouYCDajOYKTja9Xb/OHtgvSw= +golang.org/x/net v0.0.0-20210917221730-978cfadd31cf/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +golang.org/x/net v0.0.0-20211015210444-4f30a5c0130f/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +golang.org/x/net v0.0.0-20211029224645-99673261e6eb/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +golang.org/x/net v0.0.0-20211209124913-491a49abca63/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +golang.org/x/net v0.0.0-20211216030914-fe4d6282115f/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +golang.org/x/net v0.0.0-20220127200216-cd36cc0744dd/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= +golang.org/x/net v0.0.0-20220225172249-27dd8689420f/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= +golang.org/x/net v0.0.0-20220325170049-de3da57026de/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= +golang.org/x/net v0.0.0-20220412020605-290c469a71a5/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= +golang.org/x/net v0.0.0-20220425223048-2871e0cb64e4/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= +golang.org/x/net v0.0.0-20220520000938-2e3eb7b945c2/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= +golang.org/x/net v0.0.0-20220607020251-c690dde0001d/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= +golang.org/x/net v0.0.0-20220617184016-355a448f1bc9/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= +golang.org/x/net v0.0.0-20220624214902-1bab6f366d9e/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= +golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= +golang.org/x/net v0.0.0-20220909164309-bea034e7d591/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk= +golang.org/x/net v0.0.0-20221014081412-f15817d10f9b/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk= +golang.org/x/net v0.0.0-20221017152216-f25eb7ecb193/go.mod h1:RpDiru2p0u2F0lLpEoqnP2+7xs0ifAuOcJ442g6GU2s= +golang.org/x/net v0.1.0/go.mod h1:Cx3nUiGt4eDBEyega/BKRp+/AlGL8hYe7U9odMt2Cco= +golang.org/x/net v0.3.0/go.mod h1:MBQ8lrhLObU/6UmLb4fmbmk5OcyYmqtbGd/9yIeKjEE= +golang.org/x/net v0.4.0/go.mod h1:MBQ8lrhLObU/6UmLb4fmbmk5OcyYmqtbGd/9yIeKjEE= golang.org/x/net v0.5.0/go.mod h1:DivGGAXEgPSlEBzxGzZI+ZLohi+xUj054jfeKui00ws= +golang.org/x/oauth2 v0.0.0-20180724155351-3d292e4d0cdc/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= +golang.org/x/oauth2 v0.0.0-20181017192945-9dcd33a902f4/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= +golang.org/x/oauth2 v0.0.0-20181106182150-f42d05182288/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= +golang.org/x/oauth2 v0.0.0-20181203162652-d668ce993890/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= +golang.org/x/oauth2 v0.0.0-20190402181905-9f3314589c9a/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20191202225959-858c2ad4c8b6/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= @@ -1099,10 +2647,26 @@ golang.org/x/oauth2 v0.0.0-20210220000619-9bb904979d93/go.mod h1:KelEdhl1UZF7XfJ golang.org/x/oauth2 v0.0.0-20210313182246-cd4f82c27b84/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= golang.org/x/oauth2 v0.0.0-20210402161424-2e8d93401602/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= golang.org/x/oauth2 v0.0.0-20210514164344-f6687ab2804c/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20210628180205-a41e5a781914/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20210805134026-6f1e6394065a/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20210819190943-2bc19b11175f/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20211005180243-6b3c2da341f1/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20211104180415-d3ed0bb246c8/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20220223155221-ee480838109b/go.mod h1:DAh4E804XQdzx2j+YRIaUnCqCV2RuMz24cGBJ5QYIrc= +golang.org/x/oauth2 v0.0.0-20220309155454-6242fa91716a/go.mod h1:DAh4E804XQdzx2j+YRIaUnCqCV2RuMz24cGBJ5QYIrc= +golang.org/x/oauth2 v0.0.0-20220411215720-9780585627b5/go.mod h1:DAh4E804XQdzx2j+YRIaUnCqCV2RuMz24cGBJ5QYIrc= +golang.org/x/oauth2 v0.0.0-20220608161450-d0670ef3b1eb/go.mod h1:jaDAt6Dkxork7LmZnYtzbRWj0W47D86a3TGe0YHBvmE= +golang.org/x/oauth2 v0.0.0-20220622183110-fd043fe589d2/go.mod h1:jaDAt6Dkxork7LmZnYtzbRWj0W47D86a3TGe0YHBvmE= +golang.org/x/oauth2 v0.0.0-20220822191816-0ebed06d0094/go.mod h1:h4gKUeWbJ4rQPri7E0u6Gs4e9Ri2zaLxzw5DI5XGrYg= +golang.org/x/oauth2 v0.0.0-20220909003341-f21342109be1/go.mod h1:h4gKUeWbJ4rQPri7E0u6Gs4e9Ri2zaLxzw5DI5XGrYg= +golang.org/x/oauth2 v0.0.0-20221014153046-6fdb5e3db783/go.mod h1:h4gKUeWbJ4rQPri7E0u6Gs4e9Ri2zaLxzw5DI5XGrYg= +golang.org/x/oauth2 v0.3.0/go.mod h1:rQrIauxkUhJ6CuwEXwymO2/eh4xz2ZWF1nBkcxS+tGk= +golang.org/x/perf v0.0.0-20180704124530-6e6d33e29852/go.mod h1:JLpeXjPJfIyPr5TlbXLkXWLhP8nz10XfvxElABhCtcw= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20190412183630-56d357773e84/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20200317015054-43a5402ce75a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= @@ -1110,44 +2674,74 @@ golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20220513210516-0976fa681c29/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20220601150217-0de741cfad7f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20220819030929-7fc1605a5dde/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20220929204114-8fcdb60fdcc0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sys v0.0.0-20170830134202-bb24a47a89ea/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20181026203630-95b1ffbd15a5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20181029174526-d69651ed3497/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20181107165924-66b7b1311ac8/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20181122145206-62eef0e2fa9b/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20181205085412-a5c9d58dba9a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20181218192612-074acd46bca6/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190130150945-aca44879d564/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190209173611-3b5209105503/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190502145724-3ef323f4f1fd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190514135907-3a4b5fb9f71f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190522044717-8097e1b27ff5/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190602015325-4c4f7f33c9ed/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190606203320-7fc4e5ec1444/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190616124812-15dcb6c0061f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190620070143-6f217b454f45/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190626221950-04f50cda93cb/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190712062909-fae7ac547cb7/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190801041406-cbf593c0f2f3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190812073006-9eafafc0a87e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190813064441-fde4db37ae7a/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190826190057-c7b8b68b1456/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190904154756-749cb33beabd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190916202348-b4ddaad3f8a3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190922100055-0a153f010e69/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190924154521-2837fb4f24fe/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191001151750-bb3f8db39f24/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191005200804-aed5e4c7ecf9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191008105621-543471e840be/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191022100944-742c48ecaeb7/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191112214154-59a1497f0cea/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191115151921-52ab43148777/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191120155948-bd437916bb0e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191210023423-ac6580df4449/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191220142924-d4481acd189f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191228213918-04cbcbbfeed8/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200106162015-b016eb3dc98e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200107162124-548cf772de50/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200113162924-86b910548bc1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200120151820-655fe14d7479/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200122134326-e047566fdf82/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200124204421-9fbb57f87de9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200202164722-d101bd2416d5/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200212091648-12a6c2dcc1e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200217220822-9197077df867/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200302150141-5c8b2ff67527/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -1159,49 +2753,128 @@ golang.org/x/sys v0.0.0-20200515095857-1151b9dac4a9/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20200519105757-fe76b779f299/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200523222454-059865788121/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200615200032-f1bc736245b1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200622214017-ed371f2e16b4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200625212154-ddb9806d33ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200728102440-3e129f6d46b1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200803210538-64077c9b5642/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200814200057-3d37ad5750ed/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200817155316-9781c653f443/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200824131525-c12d262b63d8/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200826173525-f9321e4c35a6/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200831180312-196b9ba8737a/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200905004654-be1d3432aa8f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200909081042-eff7692f9009/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200916030750-2334cc1a136f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200917073148-efd3b9a0ff20/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200922070232-aee5d888a860/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200923182605-d9f96fdee20d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20201013081832-0aaa2718063a/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201015000850-e3ed0017c211/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20201112073958-5cba982894dd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20201117170446-d9b008d0a637/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201201145000-ef89a241ccb3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20201202213521-69691e467435/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20201204225414-ed752295db88/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210104204734-6f8348627aad/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210112080510-489259a85091/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210220050731-9a76102bfb43/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210225134936-a50acf3fe073/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210303074136-134d130e1a04/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210304124612-50617c2ba197/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210305230114-8fe3ee5dd75b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210313202042-bd2e13477e9c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210315160823-c6e025ad8005/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210316164454-77fc1eacc6aa/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210320140829-1e4c9ba3b0c4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210324051608-47abb6519492/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210403161142-5e06dd20ab57/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210420205809-ac73e9fd8988/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210423185535-09eb48e85fd7/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210426230700-d19ff857e887/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210514084401-e8d321eab015/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210603081109-ebe580a85c40/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210603125802-9665404d3644/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210616045830-e2b7044e8c71/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210616094352-59db8d763f22/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210806184541-e5e7981a1069/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210809222454-d867a43fc93e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210816183151-1e6c022a8912/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210819135213-f52c844e1c1c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210823070655-63515b42dcdf/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210831042530-f4d43177bf5e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210903071746-97244b99971b/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210906170528-6f6e22806c34/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210908233432-aa78b53d3365/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210917161153-d61c044b1678/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210927094055-39ccf1dd6fa6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20211007075335-d3039528d8ac/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20211019181941-9d821ace8654/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20211025201205-69cdffdb9359/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20211031064116-611d5d643895/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20211105183446-c75c47738b0c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20211116061358-0a5406a5449c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20211124211545-fe61309f8881/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20211205182925-97ca703d548d/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20211210111614-af8b64212486/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20211213223007-03aa0b5f6827/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220114195835-da31bd327af9/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220128215802-99c3d69c2c27/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220204135822-1c1b9b1eba6a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220209214540-3681064d5158/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220227234510-4e6760a101f9/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220315194320-039c03cc5b86/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220319134239-a9b59b0215f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220328115105-d36c6a25d886/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220403020550-483a9cbc67c0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220405052023-b1e9470b6e64/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220405210540-1e041c57c461/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220406163625-3f8b81556e12/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220412211240-33da011f77ad/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220422013727-9388b58f7150/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220502124256-b6088ccd6cba/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220503163025-988cb79eb6c6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220610221304-9f5ed59c137d/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220615213510-4f61da869c0c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220624220833-87e55d714810/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220627191245-f75cf1eec38b/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220702020025-31831981b65f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220728004956-3c1f35247d10/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220825204002-c680a09ffe64/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220829200755-d48e67d00261/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220908164124-27713097b956/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.4.0 h1:Zr2JFtRQNX3BCZ8YtxRE9hNJYC8J6I1MVbMg6owUp18= +golang.org/x/sys v0.0.0-20220915200043-7b5979e65e41/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20221010170243-090e33056c14/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20221013171732-95e765b1cc43/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.3.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.4.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= -golang.org/x/term v0.4.0 h1:O7UWfv5+A2qiuulQk30kVinPoMtoIPeVaKLEgLpVkvg= +golang.org/x/term v0.0.0-20201210144234-2321bbc49cbf/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= +golang.org/x/term v0.0.0-20210220032956-6a3ed077a48d/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= +golang.org/x/term v0.0.0-20210615171337-6886f2dfbf5b/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= +golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= +golang.org/x/term v0.0.0-20220411215600-e5f449aeb171/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= +golang.org/x/term v0.0.0-20220526004731-065cf7ba2467/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= +golang.org/x/term v0.0.0-20220919170432-7a66f970e087/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= +golang.org/x/term v0.1.0/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= +golang.org/x/term v0.3.0/go.mod h1:q750SLmJuPmVoN1blW3UFBPREJfb1KmY3vwxfr+nFDA= golang.org/x/term v0.4.0/go.mod h1:9P2UbLfCdcvo3p/nzKvsmas4TnlujnuoV9hGgYzW1lQ= +golang.org/x/text v0.0.0-20160726164857-2910a502d2bf/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= @@ -1210,84 +2883,192 @@ golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.4/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.6.0 h1:3XmdazWV+ubf7QgHSTWeykHOci5oeekaGJBLkrkaw4k= +golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= +golang.org/x/text v0.3.8/go.mod h1:E6s5w1FMmriuDzIBO73fBruAKo1PCIq6d2Q6DHfQ8WQ= +golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= +golang.org/x/text v0.5.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/text v0.6.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/time v0.0.0-20180412165947-fbb02b2291d2/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.0.0-20200416051211-89c76fbcd5d1/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.0.0-20200630173020-3af7569d3a1e/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.0.0-20201208040808-7e3f01d25324/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.0.0-20210220033141-f8bda1e9f3ba/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.0.0-20210723032227-1f47c861a9ac/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.0.0-20220609170525-579cf78fd858/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20180525024113-a5b4c53f6e8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20181011042414-1f849cf54d09/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20181117154741-2ddaf7f79a09/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20181219222714-6e267b5cc78e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20190110163146-51295c7ec13a/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20190206041539-40960b6deb8e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20190221204921-83362c3779f5/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= +golang.org/x/tools v0.0.0-20190228203856-589c23e65e65/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= +golang.org/x/tools v0.0.0-20190307163923-6a08e3108db3/go.mod h1:25r3+/G6/xytQM8iWZKq3Hn0kr0rgFKPUNVEL/dr3z4= golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190311215038-5c2858a9cfe5/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190312151545-0bb0c0a6e846/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190312170243-e65039ee4138/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190321232350-e250d351ecad/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190322203728-c1a832b0ad89/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190328211700-ab21143f2384/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190422233926-fe54fb35175b/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190425150028-36563e24a262/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= golang.org/x/tools v0.0.0-20190506145303-2d16b83fe98c/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= +golang.org/x/tools v0.0.0-20190521203540-521d6ed310dd/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= golang.org/x/tools v0.0.0-20190606124116-d0a3d012864b/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= +golang.org/x/tools v0.0.0-20190614205625-5aca471b1d59/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= +golang.org/x/tools v0.0.0-20190624222133-a101b041ded4/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= golang.org/x/tools v0.0.0-20190628153133-6cdbf07be9d0/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= +golang.org/x/tools v0.0.0-20190706070813-72ffa07ba3db/go.mod h1:jcCCGcm9btYwXyDqrUWc6MKQKKGJCWEQ3AfLSRIbEuI= +golang.org/x/tools v0.0.0-20190719005602-e377ae9d6386/go.mod h1:jcCCGcm9btYwXyDqrUWc6MKQKKGJCWEQ3AfLSRIbEuI= golang.org/x/tools v0.0.0-20190816200558-6889da9d5479/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20190907020128-2ca718005c18/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20190910044552-dd2b5c81c578/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20190911174233-4f2ddba30aff/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20190916130336-e45ffcd953cc/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20190920225731-5eefd052ad72/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20190927191325-030b2cf1153e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191010075000-0337d82405ff/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191012152004-8de300cfc20a/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191029041327-9cc4af7d6b2c/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191029190741-b9c20aec41a5/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191108193012-7d206e10da11/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191112195655-aa38f8e97acc/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191113191852-77e3bb0ad9e7/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191113232020-e2727e816f5a/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191115202509-3a792d9c32b2/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191125144606-a911d9008d1f/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191126055441-b0650ceb63d9/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191130070609-6e064ea0cf2d/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191216052735-49a3e744a425/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20191216173652-a0e659d51361/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20191227053925-7b8e75db28f4/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200102140908-9497f49d5709/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20200103221440-774c71fcf114/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200108203644-89082a384178/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20200117012304-6edc0a871e69/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20200117161641-43d50277825c/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200117220505-0cba7a3a9ee9/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20200122220014-bf1340f18c4a/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20200130002326-2f3ba24bd6e7/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20200204074204-1cc6d1ef6c74/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200204192400-7124308813f3/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20200207183749-b753a1ba74fa/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20200212150539-ea181f53ac56/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20200224181240-023911ca70b2/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20200227222343-706bc42d1f0d/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20200304193943-95d2e580d8eb/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw= golang.org/x/tools v0.0.0-20200312045724-11d5b4c81c7d/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw= +golang.org/x/tools v0.0.0-20200324003944-a576cf524670/go.mod h1:Sl4aGygMT6LrqrWclx+PTx3U+LnKx/seiNR+3G19Ar8= +golang.org/x/tools v0.0.0-20200329025819-fd4102a86c65/go.mod h1:Sl4aGygMT6LrqrWclx+PTx3U+LnKx/seiNR+3G19Ar8= golang.org/x/tools v0.0.0-20200331025713-a30bf2db82d4/go.mod h1:Sl4aGygMT6LrqrWclx+PTx3U+LnKx/seiNR+3G19Ar8= +golang.org/x/tools v0.0.0-20200331202046-9d5940d49312/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200414032229-332987a829c3/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200422022333-3d57cf2e726e/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200426102838-f3a5411a4c3b/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200501065659-ab2804fb9c9d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200502202811-ed308ab3e770/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200505023115-26f46d2f7ef8/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200512131952-2bc93b1c0c88/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200515010526-7d3b6ebf133d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200522201501-cb1345f3a375/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200616133436-c1934b75d054/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200618134242-20370b0cb4b2/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200622203043-20e05c1c8ffa/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200624225443-88f3c62a19ff/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200625211823-6506e20df31f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200626171337-aa94e735be7f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200630154851-b2d8b0336632/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200706234117-b22de6825cf7/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= golang.org/x/tools v0.0.0-20200717024301-6ddee64345a6/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= +golang.org/x/tools v0.0.0-20200724022722-7017fd6b1305/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= golang.org/x/tools v0.0.0-20200729194436-6467de6f59a7/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= golang.org/x/tools v0.0.0-20200804011535-6c149bb5ef0d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= +golang.org/x/tools v0.0.0-20200812195022-5ae4c3c160a0/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= +golang.org/x/tools v0.0.0-20200820010801-b793a1359eac/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= golang.org/x/tools v0.0.0-20200825202427-b303f430e36d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= +golang.org/x/tools v0.0.0-20200831203904-5a2aa26beb65/go.mod h1:Cj7w3i3Rnn0Xh82ur9kSqwfTHTeVxaDqrfMjpcNT6bE= golang.org/x/tools v0.0.0-20200904185747-39188db58858/go.mod h1:Cj7w3i3Rnn0Xh82ur9kSqwfTHTeVxaDqrfMjpcNT6bE= +golang.org/x/tools v0.0.0-20200916195026-c9a70fc28ce3/go.mod h1:z6u4i615ZeAfBE4XtMziQW1fSVJXACjjbWkB/mvPzlU= +golang.org/x/tools v0.0.0-20201001104356-43ebab892c4c/go.mod h1:z6u4i615ZeAfBE4XtMziQW1fSVJXACjjbWkB/mvPzlU= +golang.org/x/tools v0.0.0-20201002184944-ecd9fd270d5d/go.mod h1:z6u4i615ZeAfBE4XtMziQW1fSVJXACjjbWkB/mvPzlU= golang.org/x/tools v0.0.0-20201022035929-9cf592e881e9/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.0.0-20201023174141-c8cfbd0f21e6/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.0.0-20201028025901-8cd080b735b3/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20201110124207-079ba7bd75cd/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20201201161351-ac6f37ff4c2a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20201208233053-a543418bbed2/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20201224043029-2b0845dc783e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.0.0-20201230224404-63754364767c/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20210105154028-b0ab187a4818/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20210108195828-e2f9c7f1fc8e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.1.0/go.mod h1:xkSsbof2nBLbhDlRMhhhyNLN/zl3eTqcnHD5viDpcZ0= +golang.org/x/tools v0.1.1-0.20210205202024-ef80cdb6ec6d/go.mod h1:9bzcO0MWcOuT0tm1iBGzDVPshzfwoVvREIui8C+MHqU= +golang.org/x/tools v0.1.1-0.20210302220138-2ac05c832e1a/go.mod h1:9bzcO0MWcOuT0tm1iBGzDVPshzfwoVvREIui8C+MHqU= golang.org/x/tools v0.1.1/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.2/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= +golang.org/x/tools v0.1.3/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= +golang.org/x/tools v0.1.4/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= -golang.org/x/tools v0.2.0 h1:G6AHpWxTMGY1KyEYoAQ5WTtIekUUvDNjan3ugu60JvE= +golang.org/x/tools v0.1.7/go.mod h1:LGqMHiF4EqQNHR1JncWGqT5BVaXmza+X+BDGol+dOxo= +golang.org/x/tools v0.1.8-0.20211029000441-d6a9af8af023/go.mod h1:nABZi5QlRsZVlzPpHl034qft6wpY4eDcsTt5AaioBiU= +golang.org/x/tools v0.1.8/go.mod h1:nABZi5QlRsZVlzPpHl034qft6wpY4eDcsTt5AaioBiU= +golang.org/x/tools v0.1.9-0.20211228192929-ee1ca4ffc4da/go.mod h1:nABZi5QlRsZVlzPpHl034qft6wpY4eDcsTt5AaioBiU= +golang.org/x/tools v0.1.9/go.mod h1:nABZi5QlRsZVlzPpHl034qft6wpY4eDcsTt5AaioBiU= +golang.org/x/tools v0.1.10/go.mod h1:Uh6Zz+xoGYZom868N8YTex3t7RhtHDBrE8Gzo9bV56E= +golang.org/x/tools v0.1.11-0.20220316014157-77aa08bb151a/go.mod h1:Uh6Zz+xoGYZom868N8YTex3t7RhtHDBrE8Gzo9bV56E= +golang.org/x/tools v0.1.11-0.20220513221640-090b14e8501f/go.mod h1:SgwaegtQh8clINPpECJMqnxLv9I09HLqnW3RMqW0CA4= +golang.org/x/tools v0.1.11/go.mod h1:SgwaegtQh8clINPpECJMqnxLv9I09HLqnW3RMqW0CA4= +golang.org/x/tools v0.1.12-0.20220628192153-7743d1d949f1/go.mod h1:SgwaegtQh8clINPpECJMqnxLv9I09HLqnW3RMqW0CA4= +golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= +golang.org/x/tools v0.2.0/go.mod h1:y4OqIKeOV/fWJetJ8bXPU1sEVniLMIyDAZWeHdV+NTA= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -gonum.org/v1/gonum v0.12.0 h1:xKuo6hzt+gMav00meVPUlXwSdoEJP46BR+wdxQEFK2o= +golang.org/x/xerrors v0.0.0-20220411194840-2f41105eb62f/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20220517211312-f3a8303e98df/go.mod h1:K8+ghG5WaK9qNqU5K3HdILfMLy1f3aNYFI/wnl100a8= +golang.org/x/xerrors v0.0.0-20220609144429-65e65417b02f/go.mod h1:K8+ghG5WaK9qNqU5K3HdILfMLy1f3aNYFI/wnl100a8= +golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2/go.mod h1:K8+ghG5WaK9qNqU5K3HdILfMLy1f3aNYFI/wnl100a8= +gonum.org/v1/gonum v0.0.0-20180816165407-929014505bf4/go.mod h1:Y+Yx5eoAFn32cQvJDxZx5Dpnq+c3wtXuadVZAcxbbBo= +gonum.org/v1/gonum v0.0.0-20181121035319-3f7ecaa7e8ca/go.mod h1:Y+Yx5eoAFn32cQvJDxZx5Dpnq+c3wtXuadVZAcxbbBo= +gonum.org/v1/gonum v0.0.0-20190331200053-3d26580ed485/go.mod h1:2ltnJ7xHfj0zHS40VVPYEAAMTa3ZGguvHGBSJeRWqE0= +gonum.org/v1/gonum v0.6.0/go.mod h1:9mxDZsDKxgMAuccQkewq682L+0eCu4dCN2yonUJTCLU= +gonum.org/v1/gonum v0.8.2/go.mod h1:oe/vMfY3deqTw+1EZJhuvEW2iwGF1bW9wwu7XCu0+v0= +gonum.org/v1/gonum v0.9.3/go.mod h1:TZumC3NeyVQskjXqmyWt4S3bINhy7B4eYwW69EbyX+0= +gonum.org/v1/gonum v0.12.0/go.mod h1:73TDxJfAAHeA8Mk9mf8NlIppyhQNo5GLTcYeqgo2lvY= +gonum.org/v1/netlib v0.0.0-20181029234149-ec6d1f5cefe6/go.mod h1:wa6Ws7BG/ESfp6dHfk7C6KdzKA7wR7u/rKwOGE66zvw= +gonum.org/v1/netlib v0.0.0-20190313105609-8cb42192e0e0/go.mod h1:wa6Ws7BG/ESfp6dHfk7C6KdzKA7wR7u/rKwOGE66zvw= +gonum.org/v1/netlib v0.0.0-20190331212654-76723241ea4e/go.mod h1:kS+toOQn6AQKjmKJ7gzohV1XkqsFehRA2FbsbkopSuQ= +gonum.org/v1/plot v0.0.0-20190515093506-e2840ee46a6b/go.mod h1:Wt8AAjI+ypCyYX3nZBvf6cAIx93T+c/OS2HFAYskSZc= +gonum.org/v1/plot v0.9.0/go.mod h1:3Pcqqmp6RHvJI72kgb8fThyUnav364FOsdDo2aGW5lY= +gonum.org/v1/plot v0.10.1/go.mod h1:VZW5OlhkL1mysU9vaqNHnsy86inf6Ot+jB3r+BczCEo= +google.golang.org/api v0.0.0-20160322025152-9bf6e6e569ff/go.mod h1:4mhQ8q/RsB7i+udVvVy5NUi08OU8ZlA0gRVgrF7VFY0= +google.golang.org/api v0.0.0-20180910000450-7ca32eb868bf/go.mod h1:4mhQ8q/RsB7i+udVvVy5NUi08OU8ZlA0gRVgrF7VFY0= +google.golang.org/api v0.0.0-20181030000543-1d582fd0359e/go.mod h1:4mhQ8q/RsB7i+udVvVy5NUi08OU8ZlA0gRVgrF7VFY0= +google.golang.org/api v0.0.0-20181220000619-583d854617af/go.mod h1:4mhQ8q/RsB7i+udVvVy5NUi08OU8ZlA0gRVgrF7VFY0= +google.golang.org/api v0.2.0/go.mod h1:IfRCZScioGtypHNTlz3gFk67J8uePVW7uDTBzXuIkhU= +google.golang.org/api v0.3.0/go.mod h1:IuvZyQh8jgscv8qWfQ4ABd8m7hEudgBFM/EdhA3BnXw= google.golang.org/api v0.3.1/go.mod h1:6wY9I6uQWHQ8EM57III9mq/AjF+i8G65rmVagqKMtkk= google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE= +google.golang.org/api v0.5.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE= +google.golang.org/api v0.6.0/go.mod h1:btoxGiFvQNVUZQ8W08zLtrVS08CNpINPEfxXxgJL1Q4= +google.golang.org/api v0.6.1-0.20190607001116-5213b8090861/go.mod h1:btoxGiFvQNVUZQ8W08zLtrVS08CNpINPEfxXxgJL1Q4= google.golang.org/api v0.7.0/go.mod h1:WtwebWUNSVBH/HAw79HIFXZNqEvBhG+Ra+ax0hx3E3M= google.golang.org/api v0.8.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= google.golang.org/api v0.9.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= +google.golang.org/api v0.10.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= google.golang.org/api v0.13.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= google.golang.org/api v0.14.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= google.golang.org/api v0.15.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= @@ -1297,6 +3078,7 @@ google.golang.org/api v0.19.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/ google.golang.org/api v0.20.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= google.golang.org/api v0.22.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= google.golang.org/api v0.24.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE= +google.golang.org/api v0.25.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE= google.golang.org/api v0.28.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE= google.golang.org/api v0.29.0/go.mod h1:Lcubydp8VUV7KeIHD9z2Bys/sm/vGKnG1UHuDBSrHWM= google.golang.org/api v0.30.0/go.mod h1:QGmEvQ87FHZNiUVJkT14jQNYJ4ZJjdRF23ZXz5138Fc= @@ -1306,28 +3088,74 @@ google.golang.org/api v0.40.0/go.mod h1:fYKFpnQN0DsDSKRVRcQSDQNtqWPfM9i+zNPxepjR google.golang.org/api v0.41.0/go.mod h1:RkxM5lITDfTzmyKFPt+wGrCJbVfniCr2ool8kTBzRTU= google.golang.org/api v0.43.0/go.mod h1:nQsDGjRXMo4lvh5hP0TKqF244gqhGcr/YSIykhUk/94= google.golang.org/api v0.44.0/go.mod h1:EBOGZqzyhtvMDoxwS97ctnh0zUmYY6CxqXsc1AvkYD8= +google.golang.org/api v0.47.0/go.mod h1:Wbvgpq1HddcWVtzsVLyfLp8lDg6AA241LmgIL59tHXo= +google.golang.org/api v0.48.0/go.mod h1:71Pr1vy+TAZRPkPs/xlCf5SsU8WjuAWv1Pfjbtukyy4= +google.golang.org/api v0.50.0/go.mod h1:4bNT5pAuq5ji4SRZm+5QIkjny9JAyVD/3gaSihNefaw= +google.golang.org/api v0.51.0/go.mod h1:t4HdrdoNgyN5cbEfm7Lum0lcLDLiise1F8qDKX00sOU= +google.golang.org/api v0.54.0/go.mod h1:7C4bFFOvVDGXjfDTAsgGwDgAxRDeQ4X8NvUedIt6z3k= +google.golang.org/api v0.55.0/go.mod h1:38yMfeP1kfjsl8isn0tliTjIb1rJXcQi4UXlbqivdVE= +google.golang.org/api v0.56.0/go.mod h1:38yMfeP1kfjsl8isn0tliTjIb1rJXcQi4UXlbqivdVE= +google.golang.org/api v0.57.0/go.mod h1:dVPlbZyBo2/OjBpmvNdpn2GRm6rPy75jyU7bmhdrMgI= +google.golang.org/api v0.59.0/go.mod h1:sT2boj7M9YJxZzgeZqXogmhfmRWDtPzT31xkieUbuZU= +google.golang.org/api v0.61.0/go.mod h1:xQRti5UdCmoCEqFxcz93fTl338AVqDgyaDRuOZ3hg9I= +google.golang.org/api v0.62.0/go.mod h1:dKmwPCydfsad4qCH08MSdgWjfHOyfpd4VtDGgRFdavw= +google.golang.org/api v0.63.0/go.mod h1:gs4ij2ffTRXwuzzgJl/56BdwJaA194ijkfn++9tDuPo= +google.golang.org/api v0.67.0/go.mod h1:ShHKP8E60yPsKNw/w8w+VYaj9H6buA5UqDp8dhbQZ6g= +google.golang.org/api v0.70.0/go.mod h1:Bs4ZM2HGifEvXwd50TtW70ovgJffJYw2oRCOFU/SkfA= +google.golang.org/api v0.71.0/go.mod h1:4PyU6e6JogV1f9eA4voyrTY2batOLdgZ5qZ5HOCc4j8= +google.golang.org/api v0.74.0/go.mod h1:ZpfMZOVRMywNyvJFeqL9HRWBgAuRfSjJFpe9QtRRyDs= +google.golang.org/api v0.75.0/go.mod h1:pU9QmyHLnzlpar1Mjt4IbapUCy8J+6HD6GeELN69ljA= +google.golang.org/api v0.77.0/go.mod h1:pU9QmyHLnzlpar1Mjt4IbapUCy8J+6HD6GeELN69ljA= +google.golang.org/api v0.78.0/go.mod h1:1Sg78yoMLOhlQTeF+ARBoytAcH1NNyyl390YMy6rKmw= +google.golang.org/api v0.80.0/go.mod h1:xY3nI94gbvBrE0J6NHXhxOmW97HG7Khjkku6AFB3Hyg= +google.golang.org/api v0.81.0/go.mod h1:FA6Mb/bZxj706H2j+j2d6mHEEaHBmbbWnkfvmorOCko= +google.golang.org/api v0.84.0/go.mod h1:NTsGnUFJMYROtiquksZHBWtHfeMC7iYthki7Eq3pa8o= +google.golang.org/api v0.85.0/go.mod h1:AqZf8Ep9uZ2pyTvgL+x0D3Zt0eoT9b5E8fmzfu6FO2g= +google.golang.org/api v0.90.0/go.mod h1:+Sem1dnrKlrXMR/X0bPnMWyluQe4RsNoYfmNLhOIkzw= +google.golang.org/api v0.93.0/go.mod h1:+Sem1dnrKlrXMR/X0bPnMWyluQe4RsNoYfmNLhOIkzw= +google.golang.org/api v0.95.0/go.mod h1:eADj+UBuxkh5zlrSntJghuNeg8HwQ1w5lTKkuqaETEI= +google.golang.org/api v0.96.0/go.mod h1:w7wJQLTM+wvQpNf5JyEcBoxK0RH7EDrh/L4qfsuJ13s= +google.golang.org/api v0.97.0/go.mod h1:w7wJQLTM+wvQpNf5JyEcBoxK0RH7EDrh/L4qfsuJ13s= +google.golang.org/api v0.98.0/go.mod h1:w7wJQLTM+wvQpNf5JyEcBoxK0RH7EDrh/L4qfsuJ13s= +google.golang.org/api v0.100.0/go.mod h1:ZE3Z2+ZOr87Rx7dqFsdRQkRBk36kDtp/h+QpHbB7a70= +google.golang.org/api v0.102.0/go.mod h1:3VFl6/fzoA+qNuS1N1/VfXY4LjoXN/wzeIp7TweWwGo= +google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= google.golang.org/appengine v1.2.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= +google.golang.org/appengine v1.3.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/appengine v1.6.1/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0= +google.golang.org/appengine v1.6.2/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0= google.golang.org/appengine v1.6.5/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= google.golang.org/appengine v1.6.6/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= google.golang.org/appengine v1.6.7/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= +google.golang.org/cloud v0.0.0-20151119220103-975617b05ea8/go.mod h1:0H1ncTHf11KCFhTc/+EFRbzSCOZx+VUbRMk55Yv5MYk= +google.golang.org/genproto v0.0.0-20170818010345-ee236bd376b0/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= google.golang.org/genproto v0.0.0-20180831171423-11092d34479b/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= +google.golang.org/genproto v0.0.0-20181029155118-b69ba1387ce2/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= +google.golang.org/genproto v0.0.0-20181107211654-5fc9ac540362/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= +google.golang.org/genproto v0.0.0-20181219182458-5a97ab628bfb/go.mod h1:7Ep/1NZk928CDR8SjdVbjWNpdIf6nzjE3BTgJDr2Atg= google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= google.golang.org/genproto v0.0.0-20190418145605-e7d98fc518a7/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= google.golang.org/genproto v0.0.0-20190425155659-357c62f0e4bb/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= google.golang.org/genproto v0.0.0-20190502173448-54afdca5d873/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= +google.golang.org/genproto v0.0.0-20190508193815-b515fa19cec8/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= +google.golang.org/genproto v0.0.0-20190522204451-c2c4e71fbf69/go.mod h1:z3L6/3dTEVtUr6QSP8miRzeRqwQOioJ9I66odjN4I7s= google.golang.org/genproto v0.0.0-20190530194941-fb225487d101/go.mod h1:z3L6/3dTEVtUr6QSP8miRzeRqwQOioJ9I66odjN4I7s= +google.golang.org/genproto v0.0.0-20190620144150-6af8c5fc6601/go.mod h1:z3L6/3dTEVtUr6QSP8miRzeRqwQOioJ9I66odjN4I7s= +google.golang.org/genproto v0.0.0-20190716160619-c506a9f90610/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= google.golang.org/genproto v0.0.0-20190801165951-fa694d86fc64/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= google.golang.org/genproto v0.0.0-20190911173649-1774047e7e51/go.mod h1:IbNlFCBrqXvoKpeg0TB2l7cyZUmoaFKYIwrEpbDKLA8= +google.golang.org/genproto v0.0.0-20190927181202-20e1ac93f88c/go.mod h1:IbNlFCBrqXvoKpeg0TB2l7cyZUmoaFKYIwrEpbDKLA8= google.golang.org/genproto v0.0.0-20191108220845-16a3f7862a1a/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= google.golang.org/genproto v0.0.0-20191115194625-c23dd37a84c9/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= google.golang.org/genproto v0.0.0-20191216164720-4f79533eabd1/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= google.golang.org/genproto v0.0.0-20191230161307-f3c370f40bfb/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20200108215221-bd8f9a0ef82f/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= google.golang.org/genproto v0.0.0-20200115191322-ca5a22157cba/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20200117163144-32f20d992d24/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= google.golang.org/genproto v0.0.0-20200122232147-0452cf42e150/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= google.golang.org/genproto v0.0.0-20200204135345-fa8e72b47b90/go.mod h1:GmwEX6Z4W5gMy59cAlVYjN9JhxgbQH6Gn+gFDQe2lzA= google.golang.org/genproto v0.0.0-20200212174721-66ed5ce911ce/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= @@ -1343,12 +3171,17 @@ google.golang.org/genproto v0.0.0-20200511104702-f5ebc3bea380/go.mod h1:55QSHmfG google.golang.org/genproto v0.0.0-20200513103714-09dca8ec2884/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= google.golang.org/genproto v0.0.0-20200515170657-fc4c6c6a6587/go.mod h1:YsZOwe1myG/8QRHRsmBRE1LrgQY60beZKjly0O1fX9U= google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo= +google.golang.org/genproto v0.0.0-20200527145253-8367513e4ece/go.mod h1:jDfRM7FcilCzHH/e9qn6dsT145K34l5v+OpcnNgKAAA= google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7FcilCzHH/e9qn6dsT145K34l5v+OpcnNgKAAA= +google.golang.org/genproto v0.0.0-20200626011028-ee7919e894b5/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20200707001353-8e8330bf89df/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200904004341-0bd0a958aa1d/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20201019141844-1ed22bb0c154/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20201109203340-2640f1f9cdfb/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20201110150050-8816d57aaa9a/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20201119123407-9b1e624d6bc4/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20201201144952-b05cb90ed32e/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20201210142538-e3217bee35cc/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= @@ -1360,13 +3193,78 @@ google.golang.org/genproto v0.0.0-20210226172003-ab064af71705/go.mod h1:FWY/as6D google.golang.org/genproto v0.0.0-20210303154014-9728d6b83eeb/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20210310155132-4ce2db91004e/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20210319143718-93e7006c17a6/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20210329143202-679c6ae281ee/go.mod h1:9lPAdzaEmUacj36I+k7YKbEc5CXzPIeORRgDAUOu28A= google.golang.org/genproto v0.0.0-20210402141018-6c239bbf2bb1/go.mod h1:9lPAdzaEmUacj36I+k7YKbEc5CXzPIeORRgDAUOu28A= +google.golang.org/genproto v0.0.0-20210513213006-bf773b8c8384/go.mod h1:P3QM42oQyzQSnHPnZ/vqoCdDmzH28fzWByN9asMeM8A= google.golang.org/genproto v0.0.0-20210602131652-f16073e35f0c/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0= +google.golang.org/genproto v0.0.0-20210604141403-392c879c8b08/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0= +google.golang.org/genproto v0.0.0-20210608205507-b6d2f5bf0d7d/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0= +google.golang.org/genproto v0.0.0-20210624195500-8bfb893ecb84/go.mod h1:SzzZ/N+nwJDaO1kznhnlzqS8ocJICar6hYhVyhi++24= +google.golang.org/genproto v0.0.0-20210713002101-d411969a0d9a/go.mod h1:AxrInvYm1dci+enl5hChSFPOmmUF1+uAa/UsgNRWd7k= +google.golang.org/genproto v0.0.0-20210716133855-ce7ef5c701ea/go.mod h1:AxrInvYm1dci+enl5hChSFPOmmUF1+uAa/UsgNRWd7k= +google.golang.org/genproto v0.0.0-20210728212813-7823e685a01f/go.mod h1:ob2IJxKrgPT52GcgX759i1sleT07tiKowYBGbczaW48= +google.golang.org/genproto v0.0.0-20210805201207-89edb61ffb67/go.mod h1:ob2IJxKrgPT52GcgX759i1sleT07tiKowYBGbczaW48= +google.golang.org/genproto v0.0.0-20210813162853-db860fec028c/go.mod h1:cFeNkxwySK631ADgubI+/XFU/xp8FD5KIVV4rj8UC5w= +google.golang.org/genproto v0.0.0-20210821163610-241b8fcbd6c8/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= google.golang.org/genproto v0.0.0-20210828152312-66f60bf46e71/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= -google.golang.org/genproto v0.0.0-20221024183307-1bc688fe9f3e h1:S9GbmC1iCgvbLyAokVCwiO6tVIrU9Y7c5oMx1V/ki/Y= +google.golang.org/genproto v0.0.0-20210831024726-fe130286e0e2/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= +google.golang.org/genproto v0.0.0-20210903162649-d08c68adba83/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= +google.golang.org/genproto v0.0.0-20210909211513-a8c4777a87af/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= +google.golang.org/genproto v0.0.0-20210917145530-b395a37504d4/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= +google.golang.org/genproto v0.0.0-20210924002016-3dee208752a0/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= +google.golang.org/genproto v0.0.0-20211008145708-270636b82663/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= +google.golang.org/genproto v0.0.0-20211028162531-8db9c33dc351/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= +google.golang.org/genproto v0.0.0-20211101144312-62acf1d99145/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= +google.golang.org/genproto v0.0.0-20211118181313-81c1377c94b1/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= +google.golang.org/genproto v0.0.0-20211129164237-f09f9a12af12/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= +google.golang.org/genproto v0.0.0-20211203200212-54befc351ae9/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= +google.golang.org/genproto v0.0.0-20211206160659-862468c7d6e0/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= +google.golang.org/genproto v0.0.0-20211208223120-3a66f561d7aa/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= +google.golang.org/genproto v0.0.0-20211221195035-429b39de9b1c/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= +google.golang.org/genproto v0.0.0-20220126215142-9970aeb2e350/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= +google.golang.org/genproto v0.0.0-20220207164111-0872dc986b00/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= +google.golang.org/genproto v0.0.0-20220218161850-94dd64e39d7c/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI= +google.golang.org/genproto v0.0.0-20220222213610-43724f9ea8cf/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI= +google.golang.org/genproto v0.0.0-20220304144024-325a89244dc8/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI= +google.golang.org/genproto v0.0.0-20220310185008-1973136f34c6/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI= +google.golang.org/genproto v0.0.0-20220314164441-57ef72a4c106/go.mod h1:hAL49I2IFola2sVEjAn7MEwsja0xp51I0tlGAf9hz4E= +google.golang.org/genproto v0.0.0-20220324131243-acbaeb5b85eb/go.mod h1:hAL49I2IFola2sVEjAn7MEwsja0xp51I0tlGAf9hz4E= +google.golang.org/genproto v0.0.0-20220407144326-9054f6ed7bac/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= +google.golang.org/genproto v0.0.0-20220413183235-5e96e2839df9/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= +google.golang.org/genproto v0.0.0-20220414192740-2d67ff6cf2b4/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= +google.golang.org/genproto v0.0.0-20220421151946-72621c1f0bd3/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= +google.golang.org/genproto v0.0.0-20220429170224-98d788798c3e/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= +google.golang.org/genproto v0.0.0-20220502173005-c8bf987b8c21/go.mod h1:RAyBrSAP7Fh3Nc84ghnVLDPuV51xc9agzmm4Ph6i0Q4= +google.golang.org/genproto v0.0.0-20220505152158-f39f71e6c8f3/go.mod h1:RAyBrSAP7Fh3Nc84ghnVLDPuV51xc9agzmm4Ph6i0Q4= +google.golang.org/genproto v0.0.0-20220518221133-4f43b3371335/go.mod h1:RAyBrSAP7Fh3Nc84ghnVLDPuV51xc9agzmm4Ph6i0Q4= +google.golang.org/genproto v0.0.0-20220519153652-3a47de7e79bd/go.mod h1:RAyBrSAP7Fh3Nc84ghnVLDPuV51xc9agzmm4Ph6i0Q4= +google.golang.org/genproto v0.0.0-20220523171625-347a074981d8/go.mod h1:RAyBrSAP7Fh3Nc84ghnVLDPuV51xc9agzmm4Ph6i0Q4= +google.golang.org/genproto v0.0.0-20220608133413-ed9918b62aac/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA= +google.golang.org/genproto v0.0.0-20220616135557-88e70c0c3a90/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA= +google.golang.org/genproto v0.0.0-20220617124728-180714bec0ad/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA= +google.golang.org/genproto v0.0.0-20220624142145-8cd45d7dbd1f/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA= +google.golang.org/genproto v0.0.0-20220628213854-d9e0b6570c03/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA= +google.golang.org/genproto v0.0.0-20220722212130-b98a9ff5e252/go.mod h1:GkXuJDJ6aQ7lnJcRF+SJVgFdQhypqgl3LB1C9vabdRE= +google.golang.org/genproto v0.0.0-20220801145646-83ce21fca29f/go.mod h1:iHe1svFLAZg9VWz891+QbRMwUv9O/1Ww+/mngYeThbc= +google.golang.org/genproto v0.0.0-20220815135757-37a418bb8959/go.mod h1:dbqgFATTzChvnt+ujMdZwITVAJHFtfyN1qUhDqEiIlk= +google.golang.org/genproto v0.0.0-20220817144833-d7fd3f11b9b1/go.mod h1:dbqgFATTzChvnt+ujMdZwITVAJHFtfyN1qUhDqEiIlk= +google.golang.org/genproto v0.0.0-20220822174746-9e6da59bd2fc/go.mod h1:dbqgFATTzChvnt+ujMdZwITVAJHFtfyN1qUhDqEiIlk= +google.golang.org/genproto v0.0.0-20220829144015-23454907ede3/go.mod h1:dbqgFATTzChvnt+ujMdZwITVAJHFtfyN1qUhDqEiIlk= +google.golang.org/genproto v0.0.0-20220829175752-36a9c930ecbf/go.mod h1:dbqgFATTzChvnt+ujMdZwITVAJHFtfyN1qUhDqEiIlk= +google.golang.org/genproto v0.0.0-20220913154956-18f8339a66a5/go.mod h1:0Nb8Qy+Sk5eDzHnzlStwW3itdNaWoZA5XeSG+R3JHSo= +google.golang.org/genproto v0.0.0-20220914142337-ca0e39ece12f/go.mod h1:0Nb8Qy+Sk5eDzHnzlStwW3itdNaWoZA5XeSG+R3JHSo= +google.golang.org/genproto v0.0.0-20220915135415-7fd63a7952de/go.mod h1:0Nb8Qy+Sk5eDzHnzlStwW3itdNaWoZA5XeSG+R3JHSo= +google.golang.org/genproto v0.0.0-20220916172020-2692e8806bfa/go.mod h1:0Nb8Qy+Sk5eDzHnzlStwW3itdNaWoZA5XeSG+R3JHSo= +google.golang.org/genproto v0.0.0-20220919141832-68c03719ef51/go.mod h1:0Nb8Qy+Sk5eDzHnzlStwW3itdNaWoZA5XeSG+R3JHSo= +google.golang.org/genproto v0.0.0-20220920201722-2b89144ce006/go.mod h1:ht8XFiar2npT/g4vkk7O0WYS1sHOHbdujxbEp7CJWbw= +google.golang.org/genproto v0.0.0-20220926165614-551eb538f295/go.mod h1:woMGP53BroOrRY3xTxlbr8Y3eB/nzAvvFM83q7kG2OI= +google.golang.org/genproto v0.0.0-20220926220553-6981cbe3cfce/go.mod h1:woMGP53BroOrRY3xTxlbr8Y3eB/nzAvvFM83q7kG2OI= +google.golang.org/genproto v0.0.0-20221010155953-15ba04fc1c0e/go.mod h1:3526vdqwhZAwq4wsRUaVG555sVgsNmIjRtO7t/JH29U= +google.golang.org/genproto v0.0.0-20221014173430-6e2ab493f96b/go.mod h1:1vXfmgAz9N9Jx0QA82PqRVauvCz1SGSz739p0f183jM= +google.golang.org/genproto v0.0.0-20221014213838-99cd37c6964a/go.mod h1:1vXfmgAz9N9Jx0QA82PqRVauvCz1SGSz739p0f183jM= google.golang.org/genproto v0.0.0-20221024183307-1bc688fe9f3e/go.mod h1:9qHF0xnpdSfF6knlcsnpzUu5y+rpwgbvsyGAZPBMg4s= -google.golang.org/grpc v1.33.2 h1:EQyQC3sa8M+p6Ulc8yy9SWSS2GVwyRc83gAbG8lrl4o= google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc= +google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.1.0/go.mod h1:6Kw0yEErY5E/yWrBtf03jp27GLLJujG4z/JK95pnjjw= google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= @@ -1380,29 +3278,45 @@ google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlba google.golang.org/protobuf v1.25.1-0.20200805231151-a709e31e5d12/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c= google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= +google.golang.org/protobuf v1.27.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= -google.golang.org/protobuf v1.28.2-0.20220831092852-f930b1dc76e8 h1:KR8+MyP7/qOlV+8Af01LtjL04bu7on42eVsxT4EyBQk= +google.golang.org/protobuf v1.28.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= +google.golang.org/protobuf v1.28.1/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= google.golang.org/protobuf v1.28.2-0.20220831092852-f930b1dc76e8/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= +gopkg.in/airbrake/gobrake.v2 v2.0.9/go.mod h1:/h5ZAUhDkGaJfjzjKLSjv6zCL6O0LLBxU4K+aSYdM/U= gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20141024133853-64131543e789/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20200902074654-038fdea0a05b/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= +gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= gopkg.in/cheggaaa/pb.v1 v1.0.25/go.mod h1:V/YB90LKu/1FcN3WVnfiiE5oMCibMjukxqG/qStrOgw= +gopkg.in/cheggaaa/pb.v1 v1.0.28/go.mod h1:V/YB90LKu/1FcN3WVnfiiE5oMCibMjukxqG/qStrOgw= gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= +gopkg.in/gcfg.v1 v1.2.0/go.mod h1:yesOnuUOFQAhST5vPY4nbZsb/huCgGGXlipJsBn0b3o= gopkg.in/gcfg.v1 v1.2.3/go.mod h1:yesOnuUOFQAhST5vPY4nbZsb/huCgGGXlipJsBn0b3o= +gopkg.in/gemnasium/logrus-airbrake-hook.v2 v2.1.2/go.mod h1:Xk6kEKp8OKb+X14hQBKWaSkCsqBpgog8nAV2xsGOxlo= +gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw= gopkg.in/ini.v1 v1.51.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= +gopkg.in/ini.v1 v1.56.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= gopkg.in/ini.v1 v1.62.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= -gopkg.in/ini.v1 v1.67.0 h1:Dgnx+6+nfE+IfzjUEISNeydPJh9AXNNsWbGP9KzCsOA= +gopkg.in/ini.v1 v1.66.2/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= +gopkg.in/ini.v1 v1.66.4/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= +gopkg.in/ini.v1 v1.66.6/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= gopkg.in/ini.v1 v1.67.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= +gopkg.in/natefinch/lumberjack.v2 v2.0.0/go.mod h1:l0ndWWf7gzL7RNwBG7wST/UCcT4T24xpD6X8LsfU/+k= gopkg.in/natefinch/npipe.v2 v2.0.0-20160621034901-c1b8fa8bdcce/go.mod h1:5AcXVHNjg+BDxry382+8OKon8SEWiKktQR07RKPsv1c= gopkg.in/olebedev/go-duktape.v3 v3.0.0-20200619000410-60c24ae608a6/go.mod h1:uAJfkITjFhyEEuUfm7bsmCZRbW5WRq8s9EY8HZ6hCns= gopkg.in/resty.v1 v1.12.0/go.mod h1:mDo4pnntr5jdWRML875a/NmxYqAlA73dVijT2AXvQQo= -gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ= +gopkg.in/square/go-jose.v2 v2.2.2/go.mod h1:M9dMgbHiYLoDGQrXy7OpJDJWiKiU//h+vD76mk0e1AI= +gopkg.in/square/go-jose.v2 v2.3.1/go.mod h1:M9dMgbHiYLoDGQrXy7OpJDJWiKiU//h+vD76mk0e1AI= +gopkg.in/square/go-jose.v2 v2.5.1/go.mod h1:M9dMgbHiYLoDGQrXy7OpJDJWiKiU//h+vD76mk0e1AI= gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw= gopkg.in/urfave/cli.v1 v1.20.0/go.mod h1:vuBzUtMdQeixQj8LVd+/98pzhxNGQoyuPBlsXHOQNO0= +gopkg.in/warnings.v0 v0.1.1/go.mod h1:jksf8JmL6Qr/oQM2OXTHunEvvTAsrWBLb6OOjuVWRNI= gopkg.in/warnings.v0 v0.1.2/go.mod h1:jksf8JmL6Qr/oQM2OXTHunEvvTAsrWBLb6OOjuVWRNI= gopkg.in/yaml.v2 v2.0.0-20170812160011-eb3733d160e7/go.mod h1:JAlM8MvJe8wmxCU4Bli9HhUf9+ttbYbLASfIpnQbh74= gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= @@ -1410,15 +3324,22 @@ gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.3/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.5/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.2.6/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.2.7/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +gopkg.in/yaml.v3 v3.0.0-20200615113413-eeeca48fe776/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= +gopkg.in/yaml.v3 v3.0.0/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gotest.tools v2.2.0+incompatible/go.mod h1:DsYFclhRJ6vuDpmuTbkuFWG+y2sxOXAzmJt81HFBacw= +gotest.tools/v3 v3.0.2/go.mod h1:3SzNCllyD9/Y+b5r9JIKQ474KzkZyqLqEfYqMsX94Bk= +gotest.tools/v3 v3.0.3/go.mod h1:Z7Lb0S5l+klDB31fvDQX8ss/FlKDxtlFlw3Oa8Ymbl8= +gotest.tools/v3 v3.2.0/go.mod h1:Mcr9QNxkg0uMvy/YElmo4SpXgJKWgQvYrT7Kw5RzJ1A= +grpc.go4.org v0.0.0-20170609214715-11d0a25b4919/go.mod h1:77eQGdRu53HpSqPFJFmuJdjuHRquDANNeA4x7B8WQ9o= +honnef.co/go/tools v0.0.0-20180920025451-e3ad64cb4ed3/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= @@ -1426,10 +3347,119 @@ honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWh honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= -nhooyr.io/websocket v1.8.6 h1:s+C3xAMLwGmlI31Nyn/eAehUlZPwfYZu2JXM621Q5/k= +honnef.co/go/tools v0.0.1-2020.1.5/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= +honnef.co/go/tools v0.1.3/go.mod h1:NgwopIslSNH47DimFoV78dnkksY2EFtX0ajyb3K/las= +honnef.co/go/tools v0.3.1/go.mod h1:vlRD9XErLMGT+mDuofSr0mMMquscM/1nQqtRSsh6m70= +honnef.co/go/tools v0.3.3/go.mod h1:jzwdWgg7Jdq75wlfblQxO4neNaFFSvgc1tD5Wv8U0Yw= +k8s.io/api v0.0.0-20180904230853-4e7be11eab3f/go.mod h1:iuAfoD4hCxJ8Onx9kaTIt30j7jUFS00AXQi6QMi99vA= +k8s.io/api v0.17.4/go.mod h1:5qxx6vjmwUVG2nHQTKGlLts8Tbok8PzHl4vHtVFuZCA= +k8s.io/api v0.19.0/go.mod h1:I1K45XlvTrDjmj5LoM5LuP/KYrhWbjUKT/SoPG0qTjw= +k8s.io/api v0.20.1/go.mod h1:KqwcCVogGxQY3nBlRpwt+wpAMF/KjaCc7RpywacvqUo= +k8s.io/api v0.20.4/go.mod h1:++lNL1AJMkDymriNniQsWRkMDzRaX2Y/POTUi8yvqYQ= +k8s.io/api v0.20.6/go.mod h1:X9e8Qag6JV/bL5G6bU8sdVRltWKmdHsFUGS3eVndqE8= +k8s.io/api v0.22.5/go.mod h1:mEhXyLaSD1qTOf40rRiKXkc+2iCem09rWLlFwhCEiAs= +k8s.io/api v0.23.4/go.mod h1:i77F4JfyNNrhOjZF7OwwNJS5Y1S9dpwvb9iYRYRczfI= +k8s.io/apimachinery v0.0.0-20180904193909-def12e63c512/go.mod h1:ccL7Eh7zubPUSh9A3USN90/OzHNSVN6zxzde07TDCL0= +k8s.io/apimachinery v0.17.4/go.mod h1:gxLnyZcGNdZTCLnq3fgzyg2A5BVCHTNDFrw8AmuJ+0g= +k8s.io/apimachinery v0.19.0/go.mod h1:DnPGDnARWFvYa3pMHgSxtbZb7gpzzAZ1pTfaUNDVlmA= +k8s.io/apimachinery v0.20.1/go.mod h1:WlLqWAHZGg07AeltaI0MV5uk1Omp8xaN0JGLY6gkRpU= +k8s.io/apimachinery v0.20.4/go.mod h1:WlLqWAHZGg07AeltaI0MV5uk1Omp8xaN0JGLY6gkRpU= +k8s.io/apimachinery v0.20.6/go.mod h1:ejZXtW1Ra6V1O5H8xPBGz+T3+4gfkTCeExAHKU57MAc= +k8s.io/apimachinery v0.22.1/go.mod h1:O3oNtNadZdeOMxHFVxOreoznohCpy0z6mocxbZr7oJ0= +k8s.io/apimachinery v0.22.5/go.mod h1:xziclGKwuuJ2RM5/rSFQSYAj0zdbci3DH8kj+WvyN0U= +k8s.io/apimachinery v0.23.4/go.mod h1:BEuFMMBaIbcOqVIJqNZJXGFTP4W6AycEpb5+m/97hrM= +k8s.io/apiserver v0.17.4/go.mod h1:5ZDQ6Xr5MNBxyi3iUZXS84QOhZl+W7Oq2us/29c0j9I= +k8s.io/apiserver v0.20.1/go.mod h1:ro5QHeQkgMS7ZGpvf4tSMx6bBOgPfE+f52KwvXfScaU= +k8s.io/apiserver v0.20.4/go.mod h1:Mc80thBKOyy7tbvFtB4kJv1kbdD0eIH8k8vianJcbFM= +k8s.io/apiserver v0.20.6/go.mod h1:QIJXNt6i6JB+0YQRNcS0hdRHJlMhflFmsBDeSgT1r8Q= +k8s.io/apiserver v0.22.5/go.mod h1:s2WbtgZAkTKt679sYtSudEQrTGWUSQAPe6MupLnlmaQ= +k8s.io/client-go v0.0.0-20180910083459-2cefa64ff137/go.mod h1:7vJpHMYJwNQCWgzmNV+VYUl1zCObLyodBc8nIyt8L5s= +k8s.io/client-go v0.17.4/go.mod h1:ouF6o5pz3is8qU0/qYL2RnoxOPqgfuidYLowytyLJmc= +k8s.io/client-go v0.19.0/go.mod h1:H9E/VT95blcFQnlyShFgnFT9ZnJOAceiUHM3MlRC+mU= +k8s.io/client-go v0.20.1/go.mod h1:/zcHdt1TeWSd5HoUe6elJmHSQ6uLLgp4bIJHVEuy+/Y= +k8s.io/client-go v0.20.4/go.mod h1:LiMv25ND1gLUdBeYxBIwKpkSC5IsozMMmOOeSJboP+k= +k8s.io/client-go v0.20.6/go.mod h1:nNQMnOvEUEsOzRRFIIkdmYOjAZrC8bgq0ExboWSU1I0= +k8s.io/client-go v0.22.5/go.mod h1:cs6yf/61q2T1SdQL5Rdcjg9J1ElXSwbjSrW2vFImM4Y= +k8s.io/client-go v0.23.4/go.mod h1:PKnIL4pqLuvYUK1WU7RLTMYKPiIh7MYShLshtRY9cj0= +k8s.io/cloud-provider v0.17.4/go.mod h1:XEjKDzfD+b9MTLXQFlDGkk6Ho8SGMpaU8Uugx/KNK9U= +k8s.io/code-generator v0.17.2/go.mod h1:DVmfPQgxQENqDIzVR2ddLXMH34qeszkKSdH/N+s+38s= +k8s.io/code-generator v0.19.7/go.mod h1:lwEq3YnLYb/7uVXLorOJfxg+cUu2oihFhHZ0n9NIla0= +k8s.io/component-base v0.17.4/go.mod h1:5BRqHMbbQPm2kKu35v3G+CpVq4K0RJKC7TRioF0I9lE= +k8s.io/component-base v0.20.1/go.mod h1:guxkoJnNoh8LNrbtiQOlyp2Y2XFCZQmrcg2n/DeYNLk= +k8s.io/component-base v0.20.4/go.mod h1:t4p9EdiagbVCJKrQ1RsA5/V4rFQNDfRlevJajlGwgjI= +k8s.io/component-base v0.20.6/go.mod h1:6f1MPBAeI+mvuts3sIdtpjljHWBQ2cIy38oBIWMYnrM= +k8s.io/component-base v0.22.5/go.mod h1:VK3I+TjuF9eaa+Ln67dKxhGar5ynVbwnGrUiNF4MqCI= +k8s.io/cri-api v0.17.3/go.mod h1:X1sbHmuXhwaHs9xxYffLqJogVsnI+f6cPRcgPel7ywM= +k8s.io/cri-api v0.20.1/go.mod h1:2JRbKt+BFLTjtrILYVqQK5jqhI+XNdF6UiGMgczeBCI= +k8s.io/cri-api v0.20.4/go.mod h1:2JRbKt+BFLTjtrILYVqQK5jqhI+XNdF6UiGMgczeBCI= +k8s.io/cri-api v0.20.6/go.mod h1:ew44AjNXwyn1s0U4xCKGodU7J1HzBeZ1MpGrpa5r8Yc= +k8s.io/cri-api v0.23.1/go.mod h1:REJE3PSU0h/LOV1APBrupxrEJqnoxZC8KWzkBUHwrK4= +k8s.io/cri-api v0.24.0-alpha.3/go.mod h1:c/NLI5Zdyup5+oEYqFO2IE32ptofNiZpS1nL2y51gAg= +k8s.io/csi-translation-lib v0.17.4/go.mod h1:CsxmjwxEI0tTNMzffIAcgR9lX4wOh6AKHdxQrT7L0oo= +k8s.io/gengo v0.0.0-20190128074634-0689ccc1d7d6/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0= +k8s.io/gengo v0.0.0-20190822140433-26a664648505/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0= +k8s.io/gengo v0.0.0-20200413195148-3a45101e95ac/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0= +k8s.io/gengo v0.0.0-20200428234225-8167cfdcfc14/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0= +k8s.io/gengo v0.0.0-20201113003025-83324d819ded/go.mod h1:FiNAH4ZV3gBg2Kwh89tzAEV2be7d5xI0vBa/VySYy3E= +k8s.io/gengo v0.0.0-20210813121822-485abfe95c7c/go.mod h1:FiNAH4ZV3gBg2Kwh89tzAEV2be7d5xI0vBa/VySYy3E= +k8s.io/klog v0.0.0-20181102134211-b9b56d5dfc92/go.mod h1:Gq+BEi5rUBO/HRz0bTSXDUcqjScdoY3a9IHpCEIOOfk= +k8s.io/klog v0.3.0/go.mod h1:Gq+BEi5rUBO/HRz0bTSXDUcqjScdoY3a9IHpCEIOOfk= +k8s.io/klog v1.0.0/go.mod h1:4Bi6QPql/J/LkTDqv7R/cd3hPo4k2DG6Ptcz060Ez5I= +k8s.io/klog/v2 v2.0.0/go.mod h1:PBfzABfn139FHAV07az/IF9Wp1bkk3vpT2XSJ76fSDE= +k8s.io/klog/v2 v2.2.0/go.mod h1:Od+F08eJP+W3HUb4pSrPpgp9DGU4GzlpG/TmITuYh/Y= +k8s.io/klog/v2 v2.4.0/go.mod h1:Od+F08eJP+W3HUb4pSrPpgp9DGU4GzlpG/TmITuYh/Y= +k8s.io/klog/v2 v2.9.0/go.mod h1:hy9LJ/NvuK+iVyP4Ehqva4HxZG/oXyIS3n3Jmire4Ec= +k8s.io/klog/v2 v2.30.0/go.mod h1:y1WjHnz7Dj687irZUWR/WLkLc5N1YHtjLdmgWjndZn0= +k8s.io/kube-openapi v0.0.0-20180731170545-e3762e86a74c/go.mod h1:BXM9ceUBTj2QnfH2MK1odQs778ajze1RxcmP6S8RVVc= +k8s.io/kube-openapi v0.0.0-20191107075043-30be4d16710a/go.mod h1:1TqjTSzOxsLGIKfj0lK8EeCP7K1iUG65v09OM0/WG5E= +k8s.io/kube-openapi v0.0.0-20200805222855-6aeccd4b50c6/go.mod h1:UuqjUnNftUyPE5H64/qeyjQoUZhGpeFDVdxjTeEVN2o= +k8s.io/kube-openapi v0.0.0-20201113171705-d219536bb9fd/go.mod h1:WOJ3KddDSol4tAGcJo0Tvi+dK12EcqSLqcWsryKMpfM= +k8s.io/kube-openapi v0.0.0-20210421082810-95288971da7e/go.mod h1:vHXdDvt9+2spS2Rx9ql3I8tycm3H9FDfdUoIuKCefvw= +k8s.io/kube-openapi v0.0.0-20211109043538-20434351676c/go.mod h1:vHXdDvt9+2spS2Rx9ql3I8tycm3H9FDfdUoIuKCefvw= +k8s.io/kube-openapi v0.0.0-20211115234752-e816edb12b65/go.mod h1:sX9MT8g7NVZM5lVL/j8QyCCJe8YSMW30QvGZWaCIDIk= +k8s.io/kubernetes v1.11.10/go.mod h1:ocZa8+6APFNC2tX1DZASIbocyYT5jHzqFVsY5aoB7Jk= +k8s.io/kubernetes v1.13.0/go.mod h1:ocZa8+6APFNC2tX1DZASIbocyYT5jHzqFVsY5aoB7Jk= +k8s.io/legacy-cloud-providers v0.17.4/go.mod h1:FikRNoD64ECjkxO36gkDgJeiQWwyZTuBkhu+yxOc1Js= +k8s.io/utils v0.0.0-20191114184206-e782cd3c129f/go.mod h1:sZAwmy6armz5eXlNoLmJcl4F1QuKu7sr+mFQ0byX7Ew= +k8s.io/utils v0.0.0-20200729134348-d5654de09c73/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA= +k8s.io/utils v0.0.0-20201110183641-67b214c5f920/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA= +k8s.io/utils v0.0.0-20210802155522-efc7438f0176/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA= +k8s.io/utils v0.0.0-20210819203725-bdf08cb9a70a/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA= +k8s.io/utils v0.0.0-20210930125809-cb0fa318a74b/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA= +k8s.io/utils v0.0.0-20211116205334-6203023598ed/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA= +modernc.org/cc v1.0.0/go.mod h1:1Sk4//wdnYJiUIxnW8ddKpaOJCF37yAdqYnkxUpaYxw= +modernc.org/golex v1.0.0/go.mod h1:b/QX9oBD/LhixY6NDh+IdGv17hgB+51fET1i2kPSmvk= +modernc.org/mathutil v1.0.0/go.mod h1:wU0vUrJsVWBZ4P6e7xtFJEhFSNsfRLJ8H458uRjg03k= +modernc.org/strutil v1.0.0/go.mod h1:lstksw84oURvj9y3tn8lGvRxyRC1S2+g5uuIzNfIOBs= +modernc.org/xc v1.0.0/go.mod h1:mRNCo0bvLjGhHO9WsyuKVU4q0ceiDDDoEeWDJHrNx8I= +mvdan.cc/gofumpt v0.3.1/go.mod h1:w3ymliuxvzVx8DAutBnVyDqYb1Niy/yCJt/lk821YCE= +mvdan.cc/gofumpt v0.4.0/go.mod h1:PljLOHDeZqgS8opHRKLzp2It2VBuSdteAgqUfzMTxlQ= +mvdan.cc/interfacer v0.0.0-20180901003855-c20040233aed/go.mod h1:Xkxe497xwlCKkIaQYRfC7CSLworTXY9RMqwhhCm+8Nc= +mvdan.cc/lint v0.0.0-20170908181259-adc824a0674b/go.mod h1:2odslEg/xrtNQqCYg2/jCoyKnw3vv5biOc3JnIcYfL4= +mvdan.cc/unparam v0.0.0-20190720180237-d51796306d8f/go.mod h1:4G1h5nDURzA3bwVMZIVpwbkw+04kSxk3rAtzlimaUJw= +mvdan.cc/unparam v0.0.0-20200501210554-b37ab49443f7/go.mod h1:HGC5lll35J70Y5v7vCGb9oLhHoScFwkHDJm/05RdSTc= +mvdan.cc/unparam v0.0.0-20211214103731-d0ef000c54e5/go.mod h1:b8RRCBm0eeiWR8cfN88xeq2G5SG3VKGO+5UPWi5FSOY= +mvdan.cc/unparam v0.0.0-20220706161116-678bad134442/go.mod h1:F/Cxw/6mVrNKqrR2YjFf5CaW0Bw4RL8RfbEf4GRggJk= nhooyr.io/websocket v1.8.6/go.mod h1:B70DZP8IakI65RVQ51MsWP/8jndNma26DVA/nFSCgW0= +pack.ag/amqp v0.11.2/go.mod h1:4/cbmt4EJXSKlG6LCfWHoqmN0uFdy5i/+YFz+fTfhV4= rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= +rsc.io/pdf v0.1.1/go.mod h1:n8OzWcQ6Sp37PL01nO98y4iUCRdTGarVfzxY20ICaU4= rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0= rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA= +rsc.io/tmplfunc v0.0.3/go.mod h1:AG3sTPzElb1Io3Yg4voV9AGZJuleGAwaVRxL9M49PhA= +sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.0.14/go.mod h1:LEScyzhFmoF5pso/YSeBstl57mOzx9xlU9n85RGrDQg= +sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.0.15/go.mod h1:LEScyzhFmoF5pso/YSeBstl57mOzx9xlU9n85RGrDQg= +sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.0.22/go.mod h1:LEScyzhFmoF5pso/YSeBstl57mOzx9xlU9n85RGrDQg= +sigs.k8s.io/json v0.0.0-20211020170558-c049b76a60c6/go.mod h1:p4QtZmO4uMYipTQNzagwnNoseA6OxSUutVw05NhYDRs= +sigs.k8s.io/structured-merge-diff v0.0.0-20190525122527-15d366b2352e/go.mod h1:wWxsB5ozmmv/SG7nM11ayaAW51xMvak/t1r0CSlcokI= +sigs.k8s.io/structured-merge-diff v1.0.1-0.20191108220359-b1b620dd3f06/go.mod h1:/ULNhyfzRopfcjskuui0cTITekDduZ7ycKN3oUT9R18= +sigs.k8s.io/structured-merge-diff/v4 v4.0.1/go.mod h1:bJZC9H9iH24zzfZ/41RGcq60oK1F7G282QMXDPYydCw= +sigs.k8s.io/structured-merge-diff/v4 v4.0.2/go.mod h1:bJZC9H9iH24zzfZ/41RGcq60oK1F7G282QMXDPYydCw= +sigs.k8s.io/structured-merge-diff/v4 v4.0.3/go.mod h1:bJZC9H9iH24zzfZ/41RGcq60oK1F7G282QMXDPYydCw= +sigs.k8s.io/structured-merge-diff/v4 v4.1.2/go.mod h1:j/nl6xW8vLS49O8YvXW1ocPhZawJtm+Yrr7PPRQ0Vg4= +sigs.k8s.io/structured-merge-diff/v4 v4.2.1/go.mod h1:j/nl6xW8vLS49O8YvXW1ocPhZawJtm+Yrr7PPRQ0Vg4= sigs.k8s.io/yaml v1.1.0/go.mod h1:UJmg0vDUVViEyp3mgSv9WPwZCDxu4rQW1olrI1uml+o= +sigs.k8s.io/yaml v1.2.0/go.mod h1:yfXDCHCao9+ENCvLSE62v9VSji2MKu5jeNfTrofGhJc= sourcegraph.com/sourcegraph/appdash v0.0.0-20190731080439-ebfcffb1b5c0/go.mod h1:hI742Nqp5OhwiqlzhgfbWU4mW4yO10fP+LoT9WOswdU= +sourcegraph.com/sqs/pbtypes v0.0.0-20180604144634-d3ebe8f20ae4/go.mod h1:ketZ/q3QxT9HOBeFhu6RdvsftgpsbFHBF5Cas6cDKZ0= +sourcegraph.com/sqs/pbtypes v1.0.0/go.mod h1:3AciMUv4qUuRHRHhOG4TZOB+72GdPVz5k+c648qsFS4= diff --git a/proto/lbm/wasm/v1/event.proto b/proto/lbm/wasm/v1/event.proto index 0fcc09dec5..32586f684c 100644 --- a/proto/lbm/wasm/v1/event.proto +++ b/proto/lbm/wasm/v1/event.proto @@ -1,7 +1,7 @@ syntax = "proto3"; package lbm.wasm.v1; -option go_package = "github.com/line/wasmd/x/wasm/lbmtypes"; +option go_package = "github.com/line/wasmd/x/wasmplus/types"; // EventDeactivateContractProposal is the event that is emitted when the contract is deactivate. message EventDeactivateContractProposal { diff --git a/proto/lbm/wasm/v1/genesis.proto b/proto/lbm/wasm/v1/genesis.proto index b4168329c9..0b4d9c5e84 100644 --- a/proto/lbm/wasm/v1/genesis.proto +++ b/proto/lbm/wasm/v1/genesis.proto @@ -5,7 +5,7 @@ import "gogoproto/gogo.proto"; import "lbm/wasm/v1/types.proto"; import "cosmwasm/wasm/v1/genesis.proto"; -option go_package = "github.com/line/wasmd/x/wasm/lbmtypes"; +option go_package = "github.com/line/wasmd/x/wasmplus/types"; // GenesisState - genesis state of x/wasm message GenesisState { diff --git a/proto/lbm/wasm/v1/proposal.proto b/proto/lbm/wasm/v1/proposal.proto index 59bfd0125c..fecb685ea7 100644 --- a/proto/lbm/wasm/v1/proposal.proto +++ b/proto/lbm/wasm/v1/proposal.proto @@ -3,7 +3,7 @@ package lbm.wasm.v1; import "gogoproto/gogo.proto"; -option go_package = "github.com/line/wasmd/x/wasm/lbmtypes"; +option go_package = "github.com/line/wasmd/x/wasmplus/types"; option (gogoproto.goproto_stringer_all) = false; option (gogoproto.goproto_getters_all) = false; option (gogoproto.equal_all) = true; diff --git a/proto/lbm/wasm/v1/query.proto b/proto/lbm/wasm/v1/query.proto index ebe47a572c..48f0cea6e5 100644 --- a/proto/lbm/wasm/v1/query.proto +++ b/proto/lbm/wasm/v1/query.proto @@ -5,7 +5,7 @@ import "gogoproto/gogo.proto"; import "google/api/annotations.proto"; import "cosmos/base/query/v1beta1/pagination.proto"; -option go_package = "github.com/line/wasmd/x/wasm/lbmtypes"; +option go_package = "github.com/line/wasmd/x/wasmplus/types"; option (gogoproto.goproto_getters_all) = false; option (gogoproto.equal_all) = false; diff --git a/proto/lbm/wasm/v1/tx.proto b/proto/lbm/wasm/v1/tx.proto index 286ba44887..3ef98b9e15 100644 --- a/proto/lbm/wasm/v1/tx.proto +++ b/proto/lbm/wasm/v1/tx.proto @@ -5,7 +5,7 @@ import "gogoproto/gogo.proto"; import "cosmos/base/v1beta1/coin.proto"; import "cosmwasm/wasm/v1/types.proto"; -option go_package = "github.com/line/wasmd/x/wasm/lbmtypes"; +option go_package = "github.com/line/wasmd/x/wasmplus/types"; option (gogoproto.goproto_getters_all) = false; // Msg defines the wasm Msg service for lbm-sdk. diff --git a/proto/lbm/wasm/v1/types.proto b/proto/lbm/wasm/v1/types.proto index a969a6987c..c60c66f1f1 100644 --- a/proto/lbm/wasm/v1/types.proto +++ b/proto/lbm/wasm/v1/types.proto @@ -4,7 +4,7 @@ package lbm.wasm.v1; import "gogoproto/gogo.proto"; import "cosmwasm/wasm/v1/types.proto"; -option go_package = "github.com/line/wasmd/x/wasm/lbmtypes"; +option go_package = "github.com/line/wasmd/x/wasmplus/types"; option (gogoproto.goproto_getters_all) = false; option (gogoproto.equal_all) = true; diff --git a/x/wasm/alias.go b/x/wasm/alias.go index 6e44fbc038..ae64d76d9c 100644 --- a/x/wasm/alias.go +++ b/x/wasm/alias.go @@ -1,14 +1,12 @@ // Package wasm nolint -package wasm - // autogenerated code using github.com/rigelrozanski/multitool // aliases generated for the following subdirectories: // ALIASGEN: github.com/Cosmwasm/wasmd/x/wasm/types // ALIASGEN: github.com/CosmWasm/wasmd/x/wasm/keeper +package wasm import ( "github.com/line/wasmd/x/wasm/keeper" - "github.com/line/wasmd/x/wasm/lbmtypes" "github.com/line/wasmd/x/wasm/types" ) @@ -132,7 +130,4 @@ type ( CustomQuerier = keeper.CustomQuerier QueryPlugins = keeper.QueryPlugins Option = keeper.Option - - MsgStoreCodeAndInstantiateContract = lbmtypes.MsgStoreCodeAndInstantiateContract - MsgStoreCodeAndInstantiateContractResponse = lbmtypes.MsgStoreCodeAndInstantiateContractResponse ) diff --git a/x/wasm/client/cli/gov_tx.go b/x/wasm/client/cli/gov_tx.go index fb11db3d2c..6c33ba4f02 100644 --- a/x/wasm/client/cli/gov_tx.go +++ b/x/wasm/client/cli/gov_tx.go @@ -15,8 +15,8 @@ import ( "github.com/line/lbm-sdk/x/gov/client/cli" govtypes "github.com/line/lbm-sdk/x/gov/types" - "github.com/line/wasmd/x/wasm/lbmtypes" "github.com/line/wasmd/x/wasm/types" + types2 "github.com/line/wasmd/x/wasmplus/types" ) func ProposalStoreCodeCmd() *cobra.Command { @@ -742,7 +742,7 @@ func ProposalDeactivateContractCmd() *cobra.Command { return err } - content := lbmtypes.DeactivateContractProposal{ + content := types2.DeactivateContractProposal{ Title: proposalTitle, Description: proposalDescr, Contract: args[0], @@ -795,7 +795,7 @@ func ProposalActivateContractCmd() *cobra.Command { return err } - content := lbmtypes.ActivateContractProposal{ + content := types2.ActivateContractProposal{ Title: proposalTitle, Description: proposalDescr, Contract: args[0], diff --git a/x/wasm/client/cli/query.go b/x/wasm/client/cli/query.go index 5edce271ea..68bc1a2f3e 100644 --- a/x/wasm/client/cli/query.go +++ b/x/wasm/client/cli/query.go @@ -19,8 +19,8 @@ import ( wasmvm "github.com/line/wasmvm" "github.com/line/wasmd/x/wasm/keeper" - "github.com/line/wasmd/x/wasm/lbmtypes" "github.com/line/wasmd/x/wasm/types" + types2 "github.com/line/wasmd/x/wasmplus/types" ) func GetQueryCmd() *cobra.Command { @@ -608,10 +608,10 @@ func GetCmdListInactiveContracts() *cobra.Command { if err != nil { return err } - queryClient := lbmtypes.NewQueryClient(clientCtx) + queryClient := types2.NewQueryClient(clientCtx) res, err := queryClient.InactiveContracts( context.Background(), - &lbmtypes.QueryInactiveContractsRequest{ + &types2.QueryInactiveContractsRequest{ Pagination: pageReq, }, ) @@ -637,10 +637,10 @@ func GetCmdIsInactiveContract() *cobra.Command { return err } - queryClient := lbmtypes.NewQueryClient(clientCtx) + queryClient := types2.NewQueryClient(clientCtx) res, err := queryClient.InactiveContract( context.Background(), - &lbmtypes.QueryInactiveContractRequest{ + &types2.QueryInactiveContractRequest{ Address: args[0], }, ) diff --git a/x/wasm/client/cli/query_test.go b/x/wasm/client/cli/query_test.go index 625c00976d..ba70fe26ce 100644 --- a/x/wasm/client/cli/query_test.go +++ b/x/wasm/client/cli/query_test.go @@ -4,7 +4,6 @@ import ( "context" "encoding/hex" "errors" - sdkerrors "github.com/line/lbm-sdk/types/errors" "google.golang.org/grpc/codes" "google.golang.org/grpc/status" "net/url" @@ -14,6 +13,7 @@ import ( "github.com/line/lbm-sdk/client" "github.com/line/lbm-sdk/codec" + sdkerrors "github.com/line/lbm-sdk/types/errors" ocabcitypes "github.com/line/ostracon/abci/types" ocrpcmocks "github.com/line/ostracon/rpc/client/mocks" ocrpctypes "github.com/line/ostracon/rpc/core/types" @@ -21,8 +21,8 @@ import ( "github.com/stretchr/testify/mock" "github.com/stretchr/testify/require" - "github.com/line/wasmd/x/wasm/lbmtypes" "github.com/line/wasmd/x/wasm/types" + types2 "github.com/line/wasmd/x/wasmplus/types" ) var ( @@ -377,7 +377,7 @@ func TestGetCmdListPinnedCode(t *testing.T) { } func TestGetCmdListInactiveContracts(t *testing.T) { - res := lbmtypes.QueryInactiveContractsResponse{} + res := types2.QueryInactiveContractsResponse{} bz, err := res.Marshal() require.NoError(t, err) ctx := makeContext(bz) @@ -404,7 +404,7 @@ func TestGetCmdListInactiveContracts(t *testing.T) { } func TestGetCmdIsInactiveContract(t *testing.T) { - res := lbmtypes.QueryInactiveContractResponse{} + res := types2.QueryInactiveContractResponse{} bz, err := res.Marshal() require.NoError(t, err) ctx := makeContext(bz) diff --git a/x/wasm/client/cli/tx.go b/x/wasm/client/cli/tx.go index 42f2447530..9c644bb1b6 100644 --- a/x/wasm/client/cli/tx.go +++ b/x/wasm/client/cli/tx.go @@ -18,8 +18,8 @@ import ( "github.com/line/wasmd/x/wasm/client/cli/os" "github.com/line/wasmd/x/wasm/ioutils" - "github.com/line/wasmd/x/wasm/lbmtypes" "github.com/line/wasmd/x/wasm/types" + types2 "github.com/line/wasmd/x/wasmplus/types" ) const ( @@ -359,10 +359,10 @@ func StoreCodeAndInstantiateContractCmd() *cobra.Command { return cmd } -func parseStoreCodeAndInstantiateContractArgs(file string, initMsg string, sender sdk.AccAddress, flags *flag.FlagSet) (lbmtypes.MsgStoreCodeAndInstantiateContract, error) { +func parseStoreCodeAndInstantiateContractArgs(file string, initMsg string, sender sdk.AccAddress, flags *flag.FlagSet) (types2.MsgStoreCodeAndInstantiateContract, error) { wasm, err := os.ReadFileWithSizeLimit(file, int64(types.MaxWasmSize)) if err != nil { - return lbmtypes.MsgStoreCodeAndInstantiateContract{}, err + return types2.MsgStoreCodeAndInstantiateContract{}, err } // gzip the wasm file @@ -370,33 +370,33 @@ func parseStoreCodeAndInstantiateContractArgs(file string, initMsg string, sende wasm, err = ioutils.GzipIt(wasm) if err != nil { - return lbmtypes.MsgStoreCodeAndInstantiateContract{}, err + return types2.MsgStoreCodeAndInstantiateContract{}, err } } else if !ioutils.IsGzip(wasm) { - return lbmtypes.MsgStoreCodeAndInstantiateContract{}, fmt.Errorf("invalid input file. Use wasm binary or gzip") + return types2.MsgStoreCodeAndInstantiateContract{}, fmt.Errorf("invalid input file. Use wasm binary or gzip") } var perm *types.AccessConfig onlyAddrStr, err := flags.GetString(flagInstantiateByAddress) if err != nil { - return lbmtypes.MsgStoreCodeAndInstantiateContract{}, fmt.Errorf("instantiate by address: %s", err) + return types2.MsgStoreCodeAndInstantiateContract{}, fmt.Errorf("instantiate by address: %s", err) } if onlyAddrStr != "" { addr, err := sdk.AccAddressFromBech32(onlyAddrStr) if err != nil { - return lbmtypes.MsgStoreCodeAndInstantiateContract{}, sdkerrors.Wrap(err, flagInstantiateByAddress) + return types2.MsgStoreCodeAndInstantiateContract{}, sdkerrors.Wrap(err, flagInstantiateByAddress) } x := types.AccessTypeOnlyAddress.With(addr) perm = &x } else { everybodyStr, err := flags.GetString(flagInstantiateByEverybody) if err != nil { - return lbmtypes.MsgStoreCodeAndInstantiateContract{}, fmt.Errorf("instantiate by everybody: %s", err) + return types2.MsgStoreCodeAndInstantiateContract{}, fmt.Errorf("instantiate by everybody: %s", err) } if everybodyStr != "" { ok, err := strconv.ParseBool(everybodyStr) if err != nil { - return lbmtypes.MsgStoreCodeAndInstantiateContract{}, fmt.Errorf("boolean value expected for instantiate by everybody: %s", err) + return types2.MsgStoreCodeAndInstantiateContract{}, fmt.Errorf("boolean value expected for instantiate by everybody: %s", err) } if ok { perm = &types.AllowEverybody @@ -406,25 +406,25 @@ func parseStoreCodeAndInstantiateContractArgs(file string, initMsg string, sende amountStr, err := flags.GetString(flagAmount) if err != nil { - return lbmtypes.MsgStoreCodeAndInstantiateContract{}, fmt.Errorf("amount: %s", err) + return types2.MsgStoreCodeAndInstantiateContract{}, fmt.Errorf("amount: %s", err) } amount, err := sdk.ParseCoinsNormalized(amountStr) if err != nil { - return lbmtypes.MsgStoreCodeAndInstantiateContract{}, fmt.Errorf("amount: %s", err) + return types2.MsgStoreCodeAndInstantiateContract{}, fmt.Errorf("amount: %s", err) } label, err := flags.GetString(flagLabel) if err != nil { - return lbmtypes.MsgStoreCodeAndInstantiateContract{}, fmt.Errorf("label: %s", err) + return types2.MsgStoreCodeAndInstantiateContract{}, fmt.Errorf("label: %s", err) } if label == "" { - return lbmtypes.MsgStoreCodeAndInstantiateContract{}, errors.New("label is required on all contracts") + return types2.MsgStoreCodeAndInstantiateContract{}, errors.New("label is required on all contracts") } adminStr, err := flags.GetString(flagAdmin) if err != nil { - return lbmtypes.MsgStoreCodeAndInstantiateContract{}, fmt.Errorf("admin: %s", err) + return types2.MsgStoreCodeAndInstantiateContract{}, fmt.Errorf("admin: %s", err) } - msg := lbmtypes.MsgStoreCodeAndInstantiateContract{ + msg := types2.MsgStoreCodeAndInstantiateContract{ Sender: sender.String(), WASMByteCode: wasm, InstantiatePermission: perm, diff --git a/x/wasm/client/testutil/query.go b/x/wasm/client/testutil/query.go index 32190e289b..0a9b6f26fc 100644 --- a/x/wasm/client/testutil/query.go +++ b/x/wasm/client/testutil/query.go @@ -11,8 +11,8 @@ import ( "github.com/line/lbm-sdk/types/query" "github.com/line/wasmd/x/wasm/client/cli" - "github.com/line/wasmd/x/wasm/lbmtypes" "github.com/line/wasmd/x/wasm/types" + types2 "github.com/line/wasmd/x/wasmplus/types" ) func (s *IntegrationTestSuite) TestGetCmdListCode() { @@ -475,11 +475,11 @@ func (s *IntegrationTestSuite) TestGetCmdListInactiveContracts() { out, err := clitestutil.ExecTestCLICmd(val.ClientCtx, cmd, s.queryCommonArgs()) s.Require().NoError(err) - expected := &lbmtypes.QueryInactiveContractsResponse{ + expected := &types2.QueryInactiveContractsResponse{ Addresses: []string{s.inactiveContractAddress}, Pagination: &query.PageResponse{}, } - var resInfo lbmtypes.QueryInactiveContractsResponse + var resInfo types2.QueryInactiveContractsResponse s.Require().NoError(val.ClientCtx.Codec.UnmarshalJSON(out.Bytes(), &resInfo), out.String()) s.Require().Equal(expected, &resInfo) } @@ -497,7 +497,7 @@ func (s *IntegrationTestSuite) TestGetCmdIsInactiveContract() { s.inactiveContractAddress, }, true, - &lbmtypes.QueryInactiveContractResponse{ + &types2.QueryInactiveContractResponse{ Inactivated: true, }, }, @@ -529,7 +529,7 @@ func (s *IntegrationTestSuite) TestGetCmdIsInactiveContract() { } s.Require().NoError(err) - var resInfo lbmtypes.QueryInactiveContractResponse + var resInfo types2.QueryInactiveContractResponse s.Require().NoError(val.ClientCtx.Codec.UnmarshalJSON(out.Bytes(), &resInfo), out.String()) s.Require().Equal(tc.expected, &resInfo) }) diff --git a/x/wasm/common_test.go b/x/wasm/common_test.go index 35815dbb96..7edb84c7b5 100644 --- a/x/wasm/common_test.go +++ b/x/wasm/common_test.go @@ -33,17 +33,3 @@ func parseInitResponse(t *testing.T, data []byte) string { require.NoError(t, err) return addr } - -// ensures this returns a valid codeID and bech32 address and returns it -func parseStoreAndInitResponse(t *testing.T, data []byte) (uint64, string) { - var res MsgStoreCodeAndInstantiateContractResponse - require.NoError(t, res.Unmarshal(data)) - require.NotEmpty(t, res.CodeID) - require.NotEmpty(t, res.Address) - addr := res.Address - codeID := res.CodeID - // ensure this is a valid sdk address - _, err := sdk.AccAddressFromBech32(addr) - require.NoError(t, err) - return codeID, addr -} diff --git a/x/wasm/handler.go b/x/wasm/handler.go index 9c3dd19067..6b256b3a88 100644 --- a/x/wasm/handler.go +++ b/x/wasm/handler.go @@ -10,7 +10,6 @@ import ( abci "github.com/line/ostracon/abci/types" "github.com/line/wasmd/x/wasm/keeper" - "github.com/line/wasmd/x/wasm/lbmtypes" "github.com/line/wasmd/x/wasm/types" ) @@ -32,13 +31,6 @@ func NewHandler(k types.ContractOpsKeeper) sdk.Handler { res, err = msgServer.InstantiateContract(sdk.WrapSDKContext(ctx), msg) case *MsgInstantiateContract2: res, err = msgServer.InstantiateContract2(sdk.WrapSDKContext(ctx), msg) - case *MsgStoreCodeAndInstantiateContract: - lbmMsgServer, ok := msgServer.(lbmtypes.MsgServer) - if !ok { - errMsg := fmt.Sprintf("unrecognized wasm message type: %T", msg) - return nil, sdkerrors.Wrap(sdkerrors.ErrUnknownRequest, errMsg) - } - res, err = lbmMsgServer.StoreCodeAndInstantiateContract(sdk.WrapSDKContext(ctx), msg) case *MsgExecuteContract: res, err = msgServer.ExecuteContract(sdk.WrapSDKContext(ctx), msg) case *MsgMigrateContract: diff --git a/x/wasm/keeper/ante_test.go b/x/wasm/keeper/ante_test.go index 8287f8c40b..bf4f6736b4 100644 --- a/x/wasm/keeper/ante_test.go +++ b/x/wasm/keeper/ante_test.go @@ -110,6 +110,7 @@ func TestCountTxDecorator(t *testing.T) { }) } } + func TestLimitSimulationGasDecorator(t *testing.T) { var ( hundred sdk.Gas = 100 @@ -163,7 +164,8 @@ func TestLimitSimulationGasDecorator(t *testing.T) { ctx := sdk.Context{}. WithGasMeter(sdk.NewInfiniteGasMeter()). WithConsensusParams(&abci.ConsensusParams{ - Block: &abci.BlockParams{MaxGas: spec.maxBlockGas}}) + Block: &abci.BlockParams{MaxGas: spec.maxBlockGas}, + }) // when if spec.expErr != nil { require.PanicsWithValue(t, spec.expErr, func() { diff --git a/x/wasm/keeper/bench_test.go b/x/wasm/keeper/bench_test.go index 631968aaff..19528c314a 100644 --- a/x/wasm/keeper/bench_test.go +++ b/x/wasm/keeper/bench_test.go @@ -68,7 +68,7 @@ func BenchmarkInstantiationOverhead(b *testing.B) { for name, spec := range specs { b.Run(name, func(b *testing.B) { wasmConfig := types.WasmConfig{MemoryCacheSize: 0} - ctx, keepers := createTestInput(b, false, AvailableCapabilities, nil, nil, wasmConfig, spec.db()) + ctx, keepers := createTestInput(b, false, AvailableCapabilities, wasmConfig, spec.db()) example := InstantiateHackatomExampleContract(b, ctx, keepers) if spec.pinned { require.NoError(b, keepers.ContractKeeper.PinCode(ctx, example.CodeID)) @@ -104,7 +104,7 @@ func BenchmarkCompilation(b *testing.B) { b.Run(name, func(b *testing.B) { wasmConfig := types.WasmConfig{MemoryCacheSize: 0} db := dbm.NewMemDB() - ctx, keepers := createTestInput(b, false, AvailableCapabilities, nil, nil, wasmConfig, db) + ctx, keepers := createTestInput(b, false, AvailableCapabilities, wasmConfig, db) // print out code size for comparisons code, err := os.ReadFile(spec.wasmFile) diff --git a/x/wasm/keeper/contract_keeper.go b/x/wasm/keeper/contract_keeper.go index 08f4c3e726..aec25c33a0 100644 --- a/x/wasm/keeper/contract_keeper.go +++ b/x/wasm/keeper/contract_keeper.go @@ -32,9 +32,6 @@ type decoratedKeeper interface { setContractInfoExtension(ctx sdk.Context, contract sdk.AccAddress, extra types.ContractInfoExtension) error setAccessConfig(ctx sdk.Context, codeID uint64, caller sdk.AccAddress, newConfig types.AccessConfig, autz AuthorizationPolicy) error ClassicAddressGenerator() AddressGenerator - - //activateContract(ctx sdk.Context, contractAddress sdk.AccAddress) error - //deactivateContract(ctx sdk.Context, contractAddress sdk.AccAddress) error } type PermissionedKeeper struct { @@ -131,11 +128,3 @@ func (p PermissionedKeeper) SetContractInfoExtension(ctx sdk.Context, contract s func (p PermissionedKeeper) SetAccessConfig(ctx sdk.Context, codeID uint64, caller sdk.AccAddress, newConfig types.AccessConfig) error { return p.nested.setAccessConfig(ctx, codeID, caller, newConfig, p.authZPolicy) } - -//func (p PermissionedKeeper) DeactivateContract(ctx sdk.Context, contractAddress sdk.AccAddress) error { -// return p.nested.deactivateContract(ctx, contractAddress) -//} -// -//func (p PermissionedKeeper) ActivateContract(ctx sdk.Context, contractAddress sdk.AccAddress) error { -// return p.nested.activateContract(ctx, contractAddress) -//} diff --git a/x/wasm/keeper/contract_keeper_test.go b/x/wasm/keeper/contract_keeper_test.go index 34227a122b..a92b030df9 100644 --- a/x/wasm/keeper/contract_keeper_test.go +++ b/x/wasm/keeper/contract_keeper_test.go @@ -17,7 +17,7 @@ import ( ) func TestInstantiate2(t *testing.T) { - parentCtx, keepers := CreateTestInput(t, false, AvailableCapabilities, nil, nil) + parentCtx, keepers := CreateTestInput(t, false, AvailableCapabilities) example := StoreHackatomExampleContract(t, parentCtx, keepers) otherExample := StoreReflectContract(t, parentCtx, keepers) mock := &wasmtesting.MockWasmer{} diff --git a/x/wasm/keeper/events_test.go b/x/wasm/keeper/events_test.go index fc33e7dbb4..59ad98c0b9 100644 --- a/x/wasm/keeper/events_test.go +++ b/x/wasm/keeper/events_test.go @@ -72,8 +72,10 @@ func TestNewCustomEvents(t *testing.T) { "multiple attributes": { src: wasmvmtypes.Events{{ Type: "foo", - Attributes: []wasmvmtypes.EventAttribute{{Key: "myKey", Value: "myVal"}, - {Key: "myOtherKey", Value: "myOtherVal"}}, + Attributes: []wasmvmtypes.EventAttribute{ + {Key: "myKey", Value: "myVal"}, + {Key: "myOtherKey", Value: "myOtherVal"}, + }, }}, exp: sdk.Events{sdk.NewEvent("wasm-foo", sdk.NewAttribute("_contract_address", myContract.String()), @@ -122,7 +124,8 @@ func TestNewCustomEvents(t *testing.T) { Type: "wasm", Attributes: []wasmvmtypes.EventAttribute{ {Key: "_reserved", Value: "is skipped"}, - {Key: "normal", Value: "is used"}}, + {Key: "normal", Value: "is used"}, + }, }}, isError: true, }, @@ -219,8 +222,10 @@ func TestNewWasmModuleEvent(t *testing.T) { sdk.NewAttribute("myKey", "myVal"))}, }, "multiple attributes": { - src: []wasmvmtypes.EventAttribute{{Key: "myKey", Value: "myVal"}, - {Key: "myOtherKey", Value: "myOtherVal"}}, + src: []wasmvmtypes.EventAttribute{ + {Key: "myKey", Value: "myVal"}, + {Key: "myOtherKey", Value: "myOtherVal"}, + }, exp: sdk.Events{sdk.NewEvent("wasm", sdk.NewAttribute("_contract_address", myContract.String()), sdk.NewAttribute("myKey", "myVal"), diff --git a/x/wasm/keeper/gas_register_test.go b/x/wasm/keeper/gas_register_test.go new file mode 100644 index 0000000000..69df592f13 --- /dev/null +++ b/x/wasm/keeper/gas_register_test.go @@ -0,0 +1,473 @@ +package keeper + +import ( + "math" + "strings" + "testing" + + "github.com/stretchr/testify/assert" + + storetypes "github.com/line/lbm-sdk/store/types" + sdk "github.com/line/lbm-sdk/types" + wasmvmtypes "github.com/line/wasmvm/types" + + "github.com/line/wasmd/x/wasm/types" +) + +func TestCompileCosts(t *testing.T) { + specs := map[string]struct { + srcLen int + srcConfig WasmGasRegisterConfig + exp sdk.Gas + expPanic bool + }{ + "one byte": { + srcLen: 1, + srcConfig: DefaultGasRegisterConfig(), + exp: sdk.Gas(3), // DefaultCompileCost + }, + "zero byte": { + srcLen: 0, + srcConfig: DefaultGasRegisterConfig(), + exp: sdk.Gas(0), + }, + "negative len": { + srcLen: -1, + srcConfig: DefaultGasRegisterConfig(), + expPanic: true, + }, + } + for name, spec := range specs { + t.Run(name, func(t *testing.T) { + if spec.expPanic { + assert.Panics(t, func() { + NewWasmGasRegister(spec.srcConfig).CompileCosts(spec.srcLen) + }) + return + } + gotGas := NewWasmGasRegister(spec.srcConfig).CompileCosts(spec.srcLen) + assert.Equal(t, spec.exp, gotGas) + }) + } +} + +func TestNewContractInstanceCosts(t *testing.T) { + specs := map[string]struct { + srcLen int + srcConfig WasmGasRegisterConfig + pinned bool + exp sdk.Gas + expPanic bool + }{ + "small msg - pinned": { + srcLen: 1, + srcConfig: DefaultGasRegisterConfig(), + pinned: true, + exp: DefaultContractMessageDataCost, + }, + "big msg - pinned": { + srcLen: math.MaxUint32, + srcConfig: DefaultGasRegisterConfig(), + pinned: true, + exp: DefaultContractMessageDataCost * sdk.Gas(math.MaxUint32), + }, + "empty msg - pinned": { + srcLen: 0, + pinned: true, + srcConfig: DefaultGasRegisterConfig(), + exp: sdk.Gas(0), + }, + "small msg - unpinned": { + srcLen: 1, + srcConfig: DefaultGasRegisterConfig(), + exp: DefaultContractMessageDataCost + DefaultInstanceCost, + }, + "big msg - unpinned": { + srcLen: math.MaxUint32, + srcConfig: DefaultGasRegisterConfig(), + exp: sdk.Gas(DefaultContractMessageDataCost*math.MaxUint32 + DefaultInstanceCost), + }, + "empty msg - unpinned": { + srcLen: 0, + srcConfig: DefaultGasRegisterConfig(), + exp: sdk.Gas(DefaultInstanceCost), + }, + + "negative len": { + srcLen: -1, + srcConfig: DefaultGasRegisterConfig(), + expPanic: true, + }, + } + for name, spec := range specs { + t.Run(name, func(t *testing.T) { + if spec.expPanic { + assert.Panics(t, func() { + NewWasmGasRegister(spec.srcConfig).NewContractInstanceCosts(spec.pinned, spec.srcLen) + }) + return + } + gotGas := NewWasmGasRegister(spec.srcConfig).NewContractInstanceCosts(spec.pinned, spec.srcLen) + assert.Equal(t, spec.exp, gotGas) + }) + } +} + +func TestContractInstanceCosts(t *testing.T) { + // same as TestNewContractInstanceCosts currently + specs := map[string]struct { + srcLen int + srcConfig WasmGasRegisterConfig + pinned bool + exp sdk.Gas + expPanic bool + }{ + "small msg - pinned": { + srcLen: 1, + srcConfig: DefaultGasRegisterConfig(), + pinned: true, + exp: DefaultContractMessageDataCost, + }, + "big msg - pinned": { + srcLen: math.MaxUint32, + srcConfig: DefaultGasRegisterConfig(), + pinned: true, + exp: sdk.Gas(DefaultContractMessageDataCost * math.MaxUint32), + }, + "empty msg - pinned": { + srcLen: 0, + pinned: true, + srcConfig: DefaultGasRegisterConfig(), + exp: sdk.Gas(0), + }, + "small msg - unpinned": { + srcLen: 1, + srcConfig: DefaultGasRegisterConfig(), + exp: DefaultContractMessageDataCost + DefaultInstanceCost, + }, + "big msg - unpinned": { + srcLen: math.MaxUint32, + srcConfig: DefaultGasRegisterConfig(), + exp: sdk.Gas(DefaultContractMessageDataCost*math.MaxUint32 + DefaultInstanceCost), + }, + "empty msg - unpinned": { + srcLen: 0, + srcConfig: DefaultGasRegisterConfig(), + exp: sdk.Gas(DefaultInstanceCost), + }, + + "negative len": { + srcLen: -1, + srcConfig: DefaultGasRegisterConfig(), + expPanic: true, + }, + } + for name, spec := range specs { + t.Run(name, func(t *testing.T) { + if spec.expPanic { + assert.Panics(t, func() { + NewWasmGasRegister(spec.srcConfig).InstantiateContractCosts(spec.pinned, spec.srcLen) + }) + return + } + gotGas := NewWasmGasRegister(spec.srcConfig).InstantiateContractCosts(spec.pinned, spec.srcLen) + assert.Equal(t, spec.exp, gotGas) + }) + } +} + +func TestReplyCost(t *testing.T) { + specs := map[string]struct { + src wasmvmtypes.Reply + srcConfig WasmGasRegisterConfig + pinned bool + exp sdk.Gas + expPanic bool + }{ + "subcall response with events and data - pinned": { + src: wasmvmtypes.Reply{ + Result: wasmvmtypes.SubMsgResult{ + Ok: &wasmvmtypes.SubMsgResponse{ + Events: []wasmvmtypes.Event{ + {Type: "foo", Attributes: []wasmvmtypes.EventAttribute{{Key: "myKey", Value: "myData"}}}, + }, + Data: []byte{0x1}, + }, + }, + }, + srcConfig: DefaultGasRegisterConfig(), + pinned: true, + exp: sdk.Gas(3*DefaultEventAttributeDataCost + DefaultPerAttributeCost + DefaultContractMessageDataCost), // 3 == len("foo") + }, + "subcall response with events - pinned": { + src: wasmvmtypes.Reply{ + Result: wasmvmtypes.SubMsgResult{ + Ok: &wasmvmtypes.SubMsgResponse{ + Events: []wasmvmtypes.Event{ + {Type: "foo", Attributes: []wasmvmtypes.EventAttribute{{Key: "myKey", Value: "myData"}}}, + }, + }, + }, + }, + srcConfig: DefaultGasRegisterConfig(), + pinned: true, + exp: sdk.Gas(3*DefaultEventAttributeDataCost + DefaultPerAttributeCost), // 3 == len("foo") + }, + "subcall response with events exceeds free tier- pinned": { + src: wasmvmtypes.Reply{ + Result: wasmvmtypes.SubMsgResult{ + Ok: &wasmvmtypes.SubMsgResponse{ + Events: []wasmvmtypes.Event{ + {Type: "foo", Attributes: []wasmvmtypes.EventAttribute{{Key: strings.Repeat("x", DefaultEventAttributeDataFreeTier), Value: "myData"}}}, + }, + }, + }, + }, + srcConfig: DefaultGasRegisterConfig(), + pinned: true, + exp: sdk.Gas((3+6)*DefaultEventAttributeDataCost + DefaultPerAttributeCost), // 3 == len("foo"), 6 == len("myData") + }, + "subcall response error - pinned": { + src: wasmvmtypes.Reply{ + Result: wasmvmtypes.SubMsgResult{ + Err: "foo", + }, + }, + srcConfig: DefaultGasRegisterConfig(), + pinned: true, + exp: 3 * DefaultContractMessageDataCost, + }, + "subcall response with events and data - unpinned": { + src: wasmvmtypes.Reply{ + Result: wasmvmtypes.SubMsgResult{ + Ok: &wasmvmtypes.SubMsgResponse{ + Events: []wasmvmtypes.Event{ + {Type: "foo", Attributes: []wasmvmtypes.EventAttribute{{Key: "myKey", Value: "myData"}}}, + }, + Data: []byte{0x1}, + }, + }, + }, + srcConfig: DefaultGasRegisterConfig(), + exp: sdk.Gas(DefaultInstanceCost + 3*DefaultEventAttributeDataCost + DefaultPerAttributeCost + DefaultContractMessageDataCost), + }, + "subcall response with events - unpinned": { + src: wasmvmtypes.Reply{ + Result: wasmvmtypes.SubMsgResult{ + Ok: &wasmvmtypes.SubMsgResponse{ + Events: []wasmvmtypes.Event{ + {Type: "foo", Attributes: []wasmvmtypes.EventAttribute{{Key: "myKey", Value: "myData"}}}, + }, + }, + }, + }, + srcConfig: DefaultGasRegisterConfig(), + exp: sdk.Gas(DefaultInstanceCost + 3*DefaultEventAttributeDataCost + DefaultPerAttributeCost), + }, + "subcall response with events exceeds free tier- unpinned": { + src: wasmvmtypes.Reply{ + Result: wasmvmtypes.SubMsgResult{ + Ok: &wasmvmtypes.SubMsgResponse{ + Events: []wasmvmtypes.Event{ + {Type: "foo", Attributes: []wasmvmtypes.EventAttribute{{Key: strings.Repeat("x", DefaultEventAttributeDataFreeTier), Value: "myData"}}}, + }, + }, + }, + }, + srcConfig: DefaultGasRegisterConfig(), + exp: sdk.Gas(DefaultInstanceCost + (3+6)*DefaultEventAttributeDataCost + DefaultPerAttributeCost), // 3 == len("foo"), 6 == len("myData") + }, + "subcall response error - unpinned": { + src: wasmvmtypes.Reply{ + Result: wasmvmtypes.SubMsgResult{ + Err: "foo", + }, + }, + srcConfig: DefaultGasRegisterConfig(), + exp: sdk.Gas(DefaultInstanceCost + 3*DefaultContractMessageDataCost), + }, + "subcall response with empty events": { + src: wasmvmtypes.Reply{ + Result: wasmvmtypes.SubMsgResult{ + Ok: &wasmvmtypes.SubMsgResponse{ + Events: make([]wasmvmtypes.Event, 10), + }, + }, + }, + srcConfig: DefaultGasRegisterConfig(), + exp: DefaultInstanceCost, + }, + "subcall response with events unset": { + src: wasmvmtypes.Reply{ + Result: wasmvmtypes.SubMsgResult{ + Ok: &wasmvmtypes.SubMsgResponse{}, + }, + }, + srcConfig: DefaultGasRegisterConfig(), + exp: DefaultInstanceCost, + }, + } + for name, spec := range specs { + t.Run(name, func(t *testing.T) { + if spec.expPanic { + assert.Panics(t, func() { + NewWasmGasRegister(spec.srcConfig).ReplyCosts(spec.pinned, spec.src) + }) + return + } + gotGas := NewWasmGasRegister(spec.srcConfig).ReplyCosts(spec.pinned, spec.src) + assert.Equal(t, spec.exp, gotGas) + }) + } +} + +func TestEventCosts(t *testing.T) { + // most cases are covered in TestReplyCost already. This ensures some edge cases + specs := map[string]struct { + srcAttrs []wasmvmtypes.EventAttribute + srcEvents wasmvmtypes.Events + expGas sdk.Gas + }{ + "empty events": { + srcEvents: make([]wasmvmtypes.Event, 1), + expGas: DefaultPerCustomEventCost, + }, + "empty attributes": { + srcAttrs: make([]wasmvmtypes.EventAttribute, 1), + expGas: DefaultPerAttributeCost, + }, + "both nil": { + expGas: 0, + }, + } + for name, spec := range specs { + t.Run(name, func(t *testing.T) { + gotGas := NewDefaultWasmGasRegister().EventCosts(spec.srcAttrs, spec.srcEvents) + assert.Equal(t, spec.expGas, gotGas) + }) + } +} + +func TestToWasmVMGasConversion(t *testing.T) { + specs := map[string]struct { + src storetypes.Gas + srcConfig WasmGasRegisterConfig + exp uint64 + expPanic bool + }{ + "0": { + src: 0, + exp: 0, + srcConfig: DefaultGasRegisterConfig(), + }, + "max": { + srcConfig: WasmGasRegisterConfig{ + GasMultiplier: 1, + }, + src: math.MaxUint64, + exp: math.MaxUint64, + }, + "overflow": { + srcConfig: WasmGasRegisterConfig{ + GasMultiplier: 2, + }, + src: math.MaxUint64, + expPanic: true, + }, + } + for name, spec := range specs { + t.Run(name, func(t *testing.T) { + if spec.expPanic { + assert.Panics(t, func() { + r := NewWasmGasRegister(spec.srcConfig) + _ = r.ToWasmVMGas(spec.src) + }) + return + } + r := NewWasmGasRegister(spec.srcConfig) + got := r.ToWasmVMGas(spec.src) + assert.Equal(t, spec.exp, got) + }) + } +} + +func TestFromWasmVMGasConversion(t *testing.T) { + specs := map[string]struct { + src uint64 + exp storetypes.Gas + srcConfig WasmGasRegisterConfig + expPanic bool + }{ + "0": { + src: 0, + exp: 0, + srcConfig: DefaultGasRegisterConfig(), + }, + "max": { + srcConfig: WasmGasRegisterConfig{ + GasMultiplier: 1, + }, + src: math.MaxUint64, + exp: math.MaxUint64, + }, + "missconfigured": { + srcConfig: WasmGasRegisterConfig{ + GasMultiplier: 0, + }, + src: 1, + expPanic: true, + }, + } + for name, spec := range specs { + t.Run(name, func(t *testing.T) { + if spec.expPanic { + assert.Panics(t, func() { + r := NewWasmGasRegister(spec.srcConfig) + _ = r.FromWasmVMGas(spec.src) + }) + return + } + r := NewWasmGasRegister(spec.srcConfig) + got := r.FromWasmVMGas(spec.src) + assert.Equal(t, spec.exp, got) + }) + } +} + +func TestUncompressCosts(t *testing.T) { + specs := map[string]struct { + lenIn int + exp sdk.Gas + expPanic bool + }{ + "0": { + exp: 0, + }, + "even": { + lenIn: 100, + exp: 15, + }, + "round down when uneven": { + lenIn: 19, + exp: 2, + }, + "max len": { + lenIn: types.MaxWasmSize, + exp: 122880, + }, + "invalid len": { + lenIn: -1, + expPanic: true, + }, + } + for name, spec := range specs { + t.Run(name, func(t *testing.T) { + if spec.expPanic { + assert.Panics(t, func() { NewDefaultWasmGasRegister().UncompressCosts(spec.lenIn) }) + return + } + got := NewDefaultWasmGasRegister().UncompressCosts(spec.lenIn) + assert.Equal(t, spec.exp, got) + }) + } +} diff --git a/x/wasm/keeper/genesis.go b/x/wasm/keeper/genesis.go index ebd83326c0..cb75c6d941 100644 --- a/x/wasm/keeper/genesis.go +++ b/x/wasm/keeper/genesis.go @@ -65,17 +65,6 @@ func InitGenesis(ctx sdk.Context, keeper *Keeper, data types.GenesisState, staki return nil, sdkerrors.Wrapf(types.ErrInvalid, "seq %s with value: %d must be greater than: %d ", string(types.KeyLastInstanceID), seqVal, maxContractID) } - //for i, contractAddr := range data.InactiveContractAddresses { - // inactiveContractAddr, err := sdk.AccAddressFromBech32(contractAddr) - // if err != nil { - // return nil, sdkerrors.Wrapf(err, "wrong contract address %s", contractAddr) - // } - // err = keeper.deactivateContract(ctx, inactiveContractAddr) - // if err != nil { - // return nil, sdkerrors.Wrapf(err, "contract number %d", i) - // } - //} - if len(data.GenMsgs) == 0 { return nil, nil } @@ -135,10 +124,5 @@ func ExportGenesis(ctx sdk.Context, keeper *Keeper) *types.GenesisState { }) } - //keeper.IterateInactiveContracts(ctx, func(contractAddr sdk.AccAddress) (stop bool) { - // genState.InactiveContractAddresses = append(genState.InactiveContractAddresses, contractAddr.String()) - // return false - //}) - return &genState } diff --git a/x/wasm/keeper/genesis_test.go b/x/wasm/keeper/genesis_test.go index 53a8406388..90d9d5b55d 100644 --- a/x/wasm/keeper/genesis_test.go +++ b/x/wasm/keeper/genesis_test.go @@ -32,7 +32,6 @@ import ( ocproto "github.com/line/ostracon/proto/ostracon/types" "github.com/line/wasmd/x/wasm/types" - wasmTypes "github.com/line/wasmd/x/wasm/types" ) const firstCodeID = 1 @@ -110,7 +109,7 @@ func TestGenesisExportImport(t *testing.T) { dstKeeper, dstCtx, dstStoreKeys := setupKeeper(t) // reset contract code index in source DB for comparison with dest DB - wasmKeeper.IterateContractInfo(srcCtx, func(address sdk.AccAddress, info wasmTypes.ContractInfo) bool { + wasmKeeper.IterateContractInfo(srcCtx, func(address sdk.AccAddress, info types.ContractInfo) bool { wasmKeeper.removeFromContractCodeSecondaryIndex(srcCtx, address, wasmKeeper.getLastContractHistoryEntry(srcCtx, address)) prefixStore := prefix.NewStore(srcCtx.KVStore(wasmKeeper.storeKey), types.GetContractCodeHistoryElementPrefix(address)) iter := prefixStore.Iterator(nil, nil) @@ -128,7 +127,7 @@ func TestGenesisExportImport(t *testing.T) { }) // re-import - var importState wasmTypes.GenesisState + var importState types.GenesisState err = dstKeeper.cdc.UnmarshalJSON(exportedGenesis, &importState) require.NoError(t, err) InitGenesis(dstCtx, dstKeeper, importState, &StakingKeeperMock{}, TestHandler(contractKeeper)) @@ -157,7 +156,7 @@ func TestGenesisInit(t *testing.T) { wasmCode, err := os.ReadFile("./testdata/hackatom.wasm") require.NoError(t, err) - myCodeInfo := wasmTypes.CodeInfoFixture(wasmTypes.WithSHA256CodeHash(wasmCode)) + myCodeInfo := types.CodeInfoFixture(types.WithSHA256CodeHash(wasmCode)) specs := map[string]struct { src types.GenesisState stakingMock StakingKeeperMock @@ -221,7 +220,7 @@ func TestGenesisInit(t *testing.T) { "prevent code hash mismatch": {src: types.GenesisState{ Codes: []types.Code{{ CodeID: firstCodeID, - CodeInfo: wasmTypes.CodeInfoFixture(func(i *wasmTypes.CodeInfo) { i.CodeHash = make([]byte, sha256.Size) }), + CodeInfo: types.CodeInfoFixture(func(i *types.CodeInfo) { i.CodeHash = make([]byte, sha256.Size) }), CodeBytes: wasmCode, }}, Params: types.DefaultParams(), @@ -270,7 +269,7 @@ func TestGenesisInit(t *testing.T) { Contracts: []types.Contract{ { ContractAddress: BuildContractAddressClassic(1, 1).String(), - ContractInfo: types.ContractInfoFixture(func(c *wasmTypes.ContractInfo) { c.CodeID = 1 }, types.OnlyGenesisFields), + ContractInfo: types.ContractInfoFixture(func(c *types.ContractInfo) { c.CodeID = 1 }, types.OnlyGenesisFields), }, }, Sequences: []types.Sequence{ @@ -291,10 +290,10 @@ func TestGenesisInit(t *testing.T) { Contracts: []types.Contract{ { ContractAddress: BuildContractAddressClassic(1, 1).String(), - ContractInfo: types.ContractInfoFixture(func(c *wasmTypes.ContractInfo) { c.CodeID = 1 }, types.OnlyGenesisFields), + ContractInfo: types.ContractInfoFixture(func(c *types.ContractInfo) { c.CodeID = 1 }, types.OnlyGenesisFields), }, { ContractAddress: BuildContractAddressClassic(1, 2).String(), - ContractInfo: types.ContractInfoFixture(func(c *wasmTypes.ContractInfo) { c.CodeID = 1 }, types.OnlyGenesisFields), + ContractInfo: types.ContractInfoFixture(func(c *types.ContractInfo) { c.CodeID = 1 }, types.OnlyGenesisFields), }, }, Sequences: []types.Sequence{ @@ -310,7 +309,7 @@ func TestGenesisInit(t *testing.T) { Contracts: []types.Contract{ { ContractAddress: BuildContractAddressClassic(1, 1).String(), - ContractInfo: types.ContractInfoFixture(func(c *wasmTypes.ContractInfo) { c.CodeID = 1 }, types.OnlyGenesisFields), + ContractInfo: types.ContractInfoFixture(func(c *types.ContractInfo) { c.CodeID = 1 }, types.OnlyGenesisFields), }, }, Params: types.DefaultParams(), @@ -326,10 +325,10 @@ func TestGenesisInit(t *testing.T) { Contracts: []types.Contract{ { ContractAddress: BuildContractAddressClassic(1, 1).String(), - ContractInfo: types.ContractInfoFixture(func(c *wasmTypes.ContractInfo) { c.CodeID = 1 }, types.OnlyGenesisFields), + ContractInfo: types.ContractInfoFixture(func(c *types.ContractInfo) { c.CodeID = 1 }, types.OnlyGenesisFields), }, { ContractAddress: BuildContractAddressClassic(1, 1).String(), - ContractInfo: types.ContractInfoFixture(func(c *wasmTypes.ContractInfo) { c.CodeID = 1 }, types.OnlyGenesisFields), + ContractInfo: types.ContractInfoFixture(func(c *types.ContractInfo) { c.CodeID = 1 }, types.OnlyGenesisFields), }, }, Params: types.DefaultParams(), @@ -345,7 +344,7 @@ func TestGenesisInit(t *testing.T) { Contracts: []types.Contract{ { ContractAddress: BuildContractAddressClassic(1, 1).String(), - ContractInfo: types.ContractInfoFixture(func(c *wasmTypes.ContractInfo) { c.CodeID = 1 }, types.OnlyGenesisFields), + ContractInfo: types.ContractInfoFixture(func(c *types.ContractInfo) { c.CodeID = 1 }, types.OnlyGenesisFields), ContractState: []types.Model{ { Key: []byte{0x1}, @@ -393,7 +392,7 @@ func TestGenesisInit(t *testing.T) { Contracts: []types.Contract{ { ContractAddress: BuildContractAddressClassic(1, 1).String(), - ContractInfo: types.ContractInfoFixture(func(c *wasmTypes.ContractInfo) { c.CodeID = 1 }, types.OnlyGenesisFields), + ContractInfo: types.ContractInfoFixture(func(c *types.ContractInfo) { c.CodeID = 1 }, types.OnlyGenesisFields), }, }, Sequences: []types.Sequence{ @@ -404,7 +403,7 @@ func TestGenesisInit(t *testing.T) { }, }, "validator set update called for any genesis messages": { - src: wasmTypes.GenesisState{ + src: types.GenesisState{ GenMsgs: []types.GenesisState_GenMsgs{ {Sum: &types.GenesisState_GenMsgs_StoreCode{ StoreCode: types.MsgStoreCodeFixture(), @@ -424,7 +423,7 @@ func TestGenesisInit(t *testing.T) { expSuccess: true, }, "validator set update not called on genesis msg handler errors": { - src: wasmTypes.GenesisState{ + src: types.GenesisState{ GenMsgs: []types.GenesisState_GenMsgs{ {Sum: &types.GenesisState_GenMsgs_StoreCode{ StoreCode: types.MsgStoreCodeFixture(), @@ -506,7 +505,7 @@ func TestImportContractWithCodeHistoryReset(t *testing.T) { enc64 := base64.StdEncoding.EncodeToString genesisStr := fmt.Sprintf(genesisTemplate, enc64(wasmCodeHash[:]), enc64(wasmCode)) - var importState wasmTypes.GenesisState + var importState types.GenesisState err = keeper.cdc.UnmarshalJSON([]byte(genesisStr), &importState) require.NoError(t, err) require.NoError(t, importState.ValidateBasic(), genesisStr) @@ -529,7 +528,7 @@ func TestImportContractWithCodeHistoryReset(t *testing.T) { expCodeInfo := types.CodeInfo{ CodeHash: wasmCodeHash[:], Creator: codeCreatorAddr, - InstantiateConfig: wasmTypes.AccessConfig{ + InstantiateConfig: types.AccessConfig{ Permission: types.AccessTypeOnlyAddress, Address: codeCreatorAddr, }, @@ -643,7 +642,7 @@ func setupKeeper(t *testing.T) (*Keeper, sdk.Context, []sdk.StoreKey) { var ( keyParams = sdk.NewKVStoreKey(paramtypes.StoreKey) tkeyParams = sdk.NewTransientStoreKey(paramtypes.TStoreKey) - keyWasm = sdk.NewKVStoreKey(wasmTypes.StoreKey) + keyWasm = sdk.NewKVStoreKey(types.StoreKey) ) db := dbm.NewMemDB() @@ -667,13 +666,13 @@ func setupKeeper(t *testing.T) (*Keeper, sdk.Context, []sdk.StoreKey) { // also registering gov interfaces for nested Any type govtypes.RegisterInterfaces(encodingConfig.InterfaceRegistry) - wasmConfig := wasmTypes.DefaultWasmConfig() + wasmConfig := types.DefaultWasmConfig() pk := paramskeeper.NewKeeper(encodingConfig.Marshaler, encodingConfig.Amino, keyParams, tkeyParams) srcKeeper := NewKeeper( encodingConfig.Marshaler, keyWasm, - pk.Subspace(wasmTypes.ModuleName), + pk.Subspace(types.ModuleName), authkeeper.AccountKeeper{}, &bankpluskeeper.BaseKeeper{}, stakingkeeper.Keeper{}, @@ -687,8 +686,6 @@ func setupKeeper(t *testing.T) (*Keeper, sdk.Context, []sdk.StoreKey) { tempDir, wasmConfig, AvailableCapabilities, - nil, - nil, ) return &srcKeeper, ctx, []sdk.StoreKey{keyWasm, keyParams} } diff --git a/x/wasm/keeper/handler_plugin_encoders_test.go b/x/wasm/keeper/handler_plugin_encoders_test.go index 690ab85e2d..43ba932145 100644 --- a/x/wasm/keeper/handler_plugin_encoders_test.go +++ b/x/wasm/keeper/handler_plugin_encoders_test.go @@ -374,7 +374,7 @@ func TestEncoding(t *testing.T) { sender: addr2, srcMsg: wasmvmtypes.CosmosMsg{ Stargate: &wasmvmtypes.StargateMsg{ - TypeURL: "/lbm.bank.invalidversion.MsgSend", + TypeURL: "/cosmos.bank.v2.MsgSend", Value: bankMsgBin, }, }, @@ -634,5 +634,4 @@ func TestConvertWasmCoinToSdkCoin(t *testing.T) { assert.Equal(t, spec.expVal, gotVal) }) } - } diff --git a/x/wasm/keeper/handler_plugin_test.go b/x/wasm/keeper/handler_plugin_test.go index 3a6c305301..15d4736fb0 100644 --- a/x/wasm/keeper/handler_plugin_test.go +++ b/x/wasm/keeper/handler_plugin_test.go @@ -28,13 +28,15 @@ func TestMessageHandlerChainDispatch(t *testing.T) { alwaysUnknownMsgHandler := &wasmtesting.MockMessageHandler{ DispatchMsgFn: func(ctx sdk.Context, contractAddr sdk.AccAddress, contractIBCPortID string, msg wasmvmtypes.CosmosMsg) (events []sdk.Event, data [][]byte, err error) { return nil, nil, types.ErrUnknownMsg - }} + }, + } assertNotCalledHandler := &wasmtesting.MockMessageHandler{ DispatchMsgFn: func(ctx sdk.Context, contractAddr sdk.AccAddress, contractIBCPortID string, msg wasmvmtypes.CosmosMsg) (events []sdk.Event, data [][]byte, err error) { t.Fatal("not expected to be called") return - }} + }, + } myMsg := wasmvmtypes.CosmosMsg{Custom: []byte(`{}`)} specs := map[string]struct { @@ -55,15 +57,18 @@ func TestMessageHandlerChainDispatch(t *testing.T) { handlers: []Messenger{&wasmtesting.MockMessageHandler{ DispatchMsgFn: func(ctx sdk.Context, contractAddr sdk.AccAddress, contractIBCPortID string, msg wasmvmtypes.CosmosMsg) (events []sdk.Event, data [][]byte, err error) { return nil, nil, types.ErrInvalidMsg - }}, assertNotCalledHandler}, + }, + }, assertNotCalledHandler}, expErr: types.ErrInvalidMsg, }, "return events when handle": { - handlers: []Messenger{&wasmtesting.MockMessageHandler{ - DispatchMsgFn: func(ctx sdk.Context, contractAddr sdk.AccAddress, contractIBCPortID string, msg wasmvmtypes.CosmosMsg) (events []sdk.Event, data [][]byte, err error) { - _, data, _ = capturingHandler.DispatchMsg(ctx, contractAddr, contractIBCPortID, msg) - return []sdk.Event{sdk.NewEvent("myEvent", sdk.NewAttribute("foo", "bar"))}, data, nil - }}, + handlers: []Messenger{ + &wasmtesting.MockMessageHandler{ + DispatchMsgFn: func(ctx sdk.Context, contractAddr sdk.AccAddress, contractIBCPortID string, msg wasmvmtypes.CosmosMsg) (events []sdk.Event, data [][]byte, err error) { + _, data, _ = capturingHandler.DispatchMsg(ctx, contractAddr, contractIBCPortID, msg) + return []sdk.Event{sdk.NewEvent("myEvent", sdk.NewAttribute("foo", "bar"))}, data, nil + }, + }, }, expEvents: []sdk.Event{sdk.NewEvent("myEvent", sdk.NewAttribute("foo", "bar"))}, }, @@ -232,7 +237,8 @@ func TestIBCRawPacketHandler(t *testing.T) { Counterparty: channeltypes.NewCounterparty( "other-port", "other-channel-1", - )}, true + ), + }, true }, SendPacketFn: func(ctx sdk.Context, channelCap *capabilitytypes.Capability, packet ibcexported.PacketI) error { capturedPacket = packet @@ -279,7 +285,8 @@ func TestIBCRawPacketHandler(t *testing.T) { chanKeeper: &wasmtesting.MockChannelKeeper{ GetNextSequenceSendFn: func(ctx sdk.Context, portID, channelID string) (uint64, bool) { return 0, false - }}, + }, + }, expErr: channeltypes.ErrSequenceSendNotFound, }, "capability not found returns error": { @@ -292,7 +299,8 @@ func TestIBCRawPacketHandler(t *testing.T) { capKeeper: wasmtesting.MockCapabilityKeeper{ GetCapabilityFn: func(ctx sdk.Context, name string) (*capabilitytypes.Capability, bool) { return nil, false - }}, + }, + }, expErr: channeltypes.ErrChannelCapabilityNotFound, }, } @@ -373,9 +381,10 @@ func TestBurnCoinMessageHandlerIntegration(t *testing.T) { t.Run(name, func(t *testing.T) { ctx, _ = parentCtx.CacheContext() k.wasmVM = &wasmtesting.MockWasmer{ExecuteFn: func(codeID wasmvm.Checksum, env wasmvmtypes.Env, info wasmvmtypes.MessageInfo, executeMsg []byte, store wasmvm.KVStore, goapi wasmvm.GoAPI, querier wasmvm.Querier, gasMeter wasmvm.GasMeter, gasLimit uint64, deserCost wasmvmtypes.UFraction) (*wasmvmtypes.Response, uint64, error) { - return &wasmvmtypes.Response{Messages: []wasmvmtypes.SubMsg{ - {Msg: wasmvmtypes.CosmosMsg{Bank: &wasmvmtypes.BankMsg{Burn: &spec.msg}}, ReplyOn: wasmvmtypes.ReplyNever}, - }, + return &wasmvmtypes.Response{ + Messages: []wasmvmtypes.SubMsg{ + {Msg: wasmvmtypes.CosmosMsg{Bank: &wasmvmtypes.BankMsg{Burn: &spec.msg}}, ReplyOn: wasmvmtypes.ReplyNever}, + }, }, 0, nil }} diff --git a/x/wasm/keeper/ibc_test.go b/x/wasm/keeper/ibc_test.go index 1f0e8208cd..28f01f7868 100644 --- a/x/wasm/keeper/ibc_test.go +++ b/x/wasm/keeper/ibc_test.go @@ -11,14 +11,14 @@ import ( ) func TestDontBindPortNonIBCContract(t *testing.T) { - ctx, keepers := CreateTestInput(t, false, AvailableCapabilities, nil, nil) + ctx, keepers := CreateTestInput(t, false, AvailableCapabilities) example := InstantiateHackatomExampleContract(t, ctx, keepers) // ensure we bound the port _, _, err := keepers.IBCKeeper.PortKeeper.LookupModuleByPort(ctx, keepers.WasmKeeper.GetContractInfo(ctx, example.Contract).IBCPortID) require.Error(t, err) } func TestBindingPortForIBCContractOnInstantiate(t *testing.T) { - ctx, keepers := CreateTestInput(t, false, AvailableCapabilities, nil, nil) + ctx, keepers := CreateTestInput(t, false, AvailableCapabilities) example := InstantiateIBCReflectContract(t, ctx, keepers) // ensure we bound the port owner, _, err := keepers.IBCKeeper.PortKeeper.LookupModuleByPort(ctx, keepers.WasmKeeper.GetContractInfo(ctx, example.Contract).IBCPortID) require.NoError(t, err) diff --git a/x/wasm/keeper/keeper.go b/x/wasm/keeper/keeper.go index 879361f9f4..d4c9866f49 100644 --- a/x/wasm/keeper/keeper.go +++ b/x/wasm/keeper/keeper.go @@ -19,7 +19,6 @@ import ( sdkerrors "github.com/line/lbm-sdk/types/errors" authtypes "github.com/line/lbm-sdk/x/auth/types" vestingexported "github.com/line/lbm-sdk/x/auth/vesting/exported" - bankpluskeeper "github.com/line/lbm-sdk/x/bankplus/keeper" paramtypes "github.com/line/lbm-sdk/x/params/types" "github.com/line/ostracon/libs/log" wasmvm "github.com/line/wasmvm" @@ -54,8 +53,6 @@ type WasmVMQueryHandler interface { type CoinTransferrer interface { // TransferCoins sends the coin amounts from the source to the destination with rules applied. TransferCoins(ctx sdk.Context, fromAddr sdk.AccAddress, toAddr sdk.AccAddress, amt sdk.Coins) error - //AddToInactiveAddr(ctx sdk.Context, address sdk.AccAddress) - //DeleteFromInactiveAddr(ctx sdk.Context, address sdk.AccAddress) } // AccountPruner handles the balances and data cleanup for accounts that are pruned on contract instantiate. @@ -113,7 +110,6 @@ func NewKeeper( cdc codec.Codec, storeKey sdk.StoreKey, paramSpace paramtypes.Subspace, - //accountKeeper authkeeper.AccountKeeper, accountKeeper types.AccountKeeper, bankKeeper types.BankKeeper, stakingKeeper types.StakingKeeper, @@ -127,8 +123,6 @@ func NewKeeper( homeDir string, wasmConfig types.WasmConfig, availableCapabilities string, - customEncoders *MessageEncoders, - customPlugins *QueryPlugins, opts ...Option, ) Keeper { wasmer, err := wasmvm.NewVM(filepath.Join(homeDir, "wasm"), availableCapabilities, contractMemoryLimit, wasmConfig.ContractDebugMode, wasmConfig.MemoryCacheSize) @@ -157,7 +151,7 @@ func NewKeeper( maxQueryStackSize: types.DefaultMaxQueryStackSize, acceptedAccountTypes: defaultAcceptedAccountTypes, } - keeper.wasmVMQueryHandler = DefaultQueryPlugins(bankKeeper, stakingKeeper, distKeeper, channelKeeper, queryRouter, keeper).Merge(customPlugins) + keeper.wasmVMQueryHandler = DefaultQueryPlugins(bankKeeper, stakingKeeper, distKeeper, channelKeeper, queryRouter, keeper) for _, o := range opts { o.apply(keeper) } @@ -469,9 +463,6 @@ func (k Keeper) execute(ctx sdk.Context, contractAddress sdk.AccAddress, caller if err != nil { return nil, err } - //if k.IsInactiveContract(ctx, contractAddress) { - // return nil, sdkerrors.Wrap(types.ErrInactiveContract, "can not execute") - //} executeCosts := k.gasRegister.InstantiateContractCosts(k.IsPinnedCode(ctx, contractInfo.CodeID), len(msg)) ctx.GasMeter().ConsumeGas(executeCosts, "Loading CosmWasm module: execute") @@ -517,9 +508,6 @@ func (k Keeper) migrate(ctx sdk.Context, contractAddress sdk.AccAddress, caller if contractInfo == nil { return nil, sdkerrors.Wrap(sdkerrors.ErrInvalidRequest, "unknown contract") } - //if k.IsInactiveContract(ctx, contractAddress) { - // return nil, sdkerrors.Wrap(types.ErrInactiveContract, "can not migrate") - //} if !authZ.CanModifyContract(contractInfo.AdminAddr(), caller) { return nil, sdkerrors.Wrap(sdkerrors.ErrUnauthorized, "can not migrate") } @@ -688,9 +676,6 @@ func (k Keeper) setContractAdmin(ctx sdk.Context, contractAddress, caller, newAd if contractInfo == nil { return sdkerrors.Wrap(sdkerrors.ErrInvalidRequest, "unknown contract") } - //if k.IsInactiveContract(ctx, contractAddress) { - // return sdkerrors.Wrap(types.ErrInactiveContract, "can not modify contract") - //} if !authZ.CanModifyContract(contractInfo.AdminAddr(), caller) { return sdkerrors.Wrap(sdkerrors.ErrUnauthorized, "can not modify contract") } @@ -1194,7 +1179,7 @@ func moduleLogger(ctx sdk.Context) log.Logger { } // Querier creates a new grpc querier instance -func Querier(k *Keeper) *GrpcQuerier { //nolint:revive +func Querier(k *Keeper) *grpcQuerier { //nolint:revive return NewGrpcQuerier(k.cdc, k.storeKey, k, k.queryGasLimit) } @@ -1204,16 +1189,14 @@ func (k Keeper) QueryGasLimit() sdk.Gas { } // BankCoinTransferrer replicates the cosmos-sdk behaviour as in -// lbm-sdk's x/bank/keeper/msg_server.go Send -// (https://github.com/line/lbm-sdk/blob/2a5a2d2c885b03e278bcd67546d4f21e74614ead/x/bank/keeper/msg_server.go#L26) +// https://github.com/cosmos/cosmos-sdk/blob/v0.41.4/x/bank/keeper/msg_server.go#L26 type BankCoinTransferrer struct { - keeper bankpluskeeper.Keeper + keeper types.BankKeeper } func NewBankCoinTransferrer(keeper types.BankKeeper) BankCoinTransferrer { - bankPlusKeeper := keeper.(bankpluskeeper.Keeper) return BankCoinTransferrer{ - keeper: bankPlusKeeper, + keeper: keeper, } } @@ -1242,14 +1225,6 @@ func (c BankCoinTransferrer) TransferCoins(parentCtx sdk.Context, fromAddr sdk.A return nil } -//func (c BankCoinTransferrer) AddToInactiveAddr(ctx sdk.Context, address sdk.AccAddress) { -// c.keeper.AddToInactiveAddr(ctx, address) -//} -// -//func (c BankCoinTransferrer) DeleteFromInactiveAddr(ctx sdk.Context, address sdk.AccAddress) { -// c.keeper.DeleteFromInactiveAddr(ctx, address) -//} - var _ AccountPruner = VestingCoinBurner{} // VestingCoinBurner default implementation for AccountPruner to burn the coins diff --git a/x/wasm/keeper/keeper_extension.go b/x/wasm/keeper/keeper_extension.go deleted file mode 100644 index 78e0e275b0..0000000000 --- a/x/wasm/keeper/keeper_extension.go +++ /dev/null @@ -1,67 +0,0 @@ -package keeper - -//import ( -// sdk "github.com/line/lbm-sdk/types" -// sdkerrors "github.com/line/lbm-sdk/types/errors" -// -// wasmtypes "github.com/line/wasmd/x/wasm/types" -//) -// -//func (k Keeper) IsInactiveContract(ctx sdk.Context, contractAddress sdk.AccAddress) bool { -// store := ctx.KVStore(k.storeKey) -// return store.Has(wasmtypes.GetInactiveContractKey(contractAddress)) -//} -// -//func (k Keeper) IterateInactiveContracts(ctx sdk.Context, fn func(contractAddress sdk.AccAddress) (stop bool)) { -// store := ctx.KVStore(k.storeKey) -// prefix := wasmtypes.InactiveContractPrefix -// iterator := sdk.KVStorePrefixIterator(store, prefix) -// defer iterator.Close() -// -// for ; iterator.Valid(); iterator.Next() { -// contractAddress := sdk.AccAddress(iterator.Value()) -// if stop := fn(contractAddress); stop { -// break -// } -// } -//} -// -//func (k Keeper) addInactiveContract(ctx sdk.Context, contractAddress sdk.AccAddress) { -// store := ctx.KVStore(k.storeKey) -// key := wasmtypes.GetInactiveContractKey(contractAddress) -// -// store.Set(key, contractAddress) -//} -// -//func (k Keeper) deleteInactiveContract(ctx sdk.Context, contractAddress sdk.AccAddress) { -// store := ctx.KVStore(k.storeKey) -// key := wasmtypes.GetInactiveContractKey(contractAddress) -// store.Delete(key) -//} -// -//// activateContract delete the contract address from inactivateContract list if the contract is deactivated. -//func (k Keeper) activateContract(ctx sdk.Context, contractAddress sdk.AccAddress) error { -// if !k.IsInactiveContract(ctx, contractAddress) { -// return sdkerrors.Wrapf(wasmtypes.ErrNotFound, "no inactivate contract %s", contractAddress.String()) -// } -// -// k.deleteInactiveContract(ctx, contractAddress) -// k.bank.DeleteFromInactiveAddr(ctx, contractAddress) -// -// return nil -//} -// -//// deactivateContract add the contract address to inactivateContract list. -//func (k Keeper) deactivateContract(ctx sdk.Context, contractAddress sdk.AccAddress) error { -// if k.IsInactiveContract(ctx, contractAddress) { -// return sdkerrors.Wrapf(wasmtypes.ErrAccountExists, "already inactivate contract %s", contractAddress.String()) -// } -// if !k.HasContractInfo(ctx, contractAddress) { -// return sdkerrors.Wrapf(wasmtypes.ErrInvalid, "no contract %s", contractAddress.String()) -// } -// -// k.addInactiveContract(ctx, contractAddress) -// k.bank.AddToInactiveAddr(ctx, contractAddress) -// -// return nil -//} diff --git a/x/wasm/keeper/keeper_test.go b/x/wasm/keeper/keeper_test.go index d4a924e0a8..644e0f476f 100644 --- a/x/wasm/keeper/keeper_test.go +++ b/x/wasm/keeper/keeper_test.go @@ -49,12 +49,12 @@ var hackatomWasm []byte const AvailableCapabilities = "iterator,staking,stargate,cosmwasm_1_1" func TestNewKeeper(t *testing.T) { - _, keepers := CreateTestInput(t, false, AvailableCapabilities, nil, nil) + _, keepers := CreateTestInput(t, false, AvailableCapabilities) require.NotNil(t, keepers.ContractKeeper) } func TestCreateSuccess(t *testing.T) { - ctx, keepers := CreateTestInput(t, false, AvailableCapabilities, nil, nil) + ctx, keepers := CreateTestInput(t, false, AvailableCapabilities) keeper := keepers.ContractKeeper deposit := sdk.NewCoins(sdk.NewInt64Coin("denom", 100000)) @@ -75,14 +75,14 @@ func TestCreateSuccess(t *testing.T) { } func TestCreateNilCreatorAddress(t *testing.T) { - ctx, keepers := CreateTestInput(t, false, AvailableCapabilities, nil, nil) + ctx, keepers := CreateTestInput(t, false, AvailableCapabilities) _, _, err := keepers.ContractKeeper.Create(ctx, nil, hackatomWasm, nil) require.Error(t, err, "nil creator is not allowed") } func TestCreateNilWasmCode(t *testing.T) { - ctx, keepers := CreateTestInput(t, false, AvailableCapabilities, nil, nil) + ctx, keepers := CreateTestInput(t, false, AvailableCapabilities) deposit := sdk.NewCoins(sdk.NewInt64Coin("denom", 100000)) creator := keepers.Faucet.NewFundedRandomAccount(ctx, deposit...) @@ -91,7 +91,7 @@ func TestCreateNilWasmCode(t *testing.T) { } func TestCreateInvalidWasmCode(t *testing.T) { - ctx, keepers := CreateTestInput(t, false, AvailableCapabilities, nil, nil) + ctx, keepers := CreateTestInput(t, false, AvailableCapabilities) deposit := sdk.NewCoins(sdk.NewInt64Coin("denom", 100000)) creator := keepers.Faucet.NewFundedRandomAccount(ctx, deposit...) @@ -128,7 +128,7 @@ func TestCreateStoresInstantiatePermission(t *testing.T) { } for msg, spec := range specs { t.Run(msg, func(t *testing.T) { - ctx, keepers := CreateTestInput(t, false, AvailableCapabilities, nil, nil) + ctx, keepers := CreateTestInput(t, false, AvailableCapabilities) accKeeper, keeper, bankKeeper := keepers.AccountKeeper, keepers.ContractKeeper, keepers.BankKeeper keepers.WasmKeeper.SetParams(ctx, types.Params{ CodeUploadAccess: types.AllowEverybody, @@ -147,7 +147,7 @@ func TestCreateStoresInstantiatePermission(t *testing.T) { } func TestCreateWithParamPermissions(t *testing.T) { - ctx, keepers := CreateTestInput(t, false, AvailableCapabilities, nil, nil) + ctx, keepers := CreateTestInput(t, false, AvailableCapabilities) keeper := keepers.ContractKeeper deposit := sdk.NewCoins(sdk.NewInt64Coin("denom", 100000)) @@ -193,7 +193,7 @@ func TestCreateWithParamPermissions(t *testing.T) { // ensure that the user cannot set the code instantiate permission to something more permissive // than the default func TestEnforceValidPermissionsOnCreate(t *testing.T) { - ctx, keepers := CreateTestInput(t, false, AvailableCapabilities, nil, nil) + ctx, keepers := CreateTestInput(t, false, AvailableCapabilities) keeper := keepers.WasmKeeper contractKeeper := keepers.ContractKeeper @@ -269,7 +269,7 @@ func TestEnforceValidPermissionsOnCreate(t *testing.T) { } func TestCreateDuplicate(t *testing.T) { - ctx, keepers := CreateTestInput(t, false, AvailableCapabilities, nil, nil) + ctx, keepers := CreateTestInput(t, false, AvailableCapabilities) keeper := keepers.ContractKeeper deposit := sdk.NewCoins(sdk.NewInt64Coin("denom", 100000)) @@ -295,7 +295,7 @@ func TestCreateDuplicate(t *testing.T) { } func TestCreateWithSimulation(t *testing.T) { - ctx, keepers := CreateTestInput(t, false, AvailableCapabilities, nil, nil) + ctx, keepers := CreateTestInput(t, false, AvailableCapabilities) ctx = ctx.WithBlockHeader(ocproto.Header{Height: 1}). WithGasMeter(stypes.NewInfiniteGasMeter()) @@ -309,7 +309,7 @@ func TestCreateWithSimulation(t *testing.T) { require.Equal(t, uint64(1), contractID) // then try to create it in non-simulation mode (should not fail) - ctx, keepers = CreateTestInput(t, false, AvailableCapabilities, nil, nil) + ctx, keepers = CreateTestInput(t, false, AvailableCapabilities) ctx = ctx.WithGasMeter(sdk.NewGasMeter(10_000_000)) creator = keepers.Faucet.NewFundedRandomAccount(ctx, deposit...) contractID, _, err = keepers.ContractKeeper.Create(ctx, creator, hackatomWasm, nil) @@ -349,7 +349,7 @@ func TestIsSimulationMode(t *testing.T) { } func TestCreateWithGzippedPayload(t *testing.T) { - ctx, keepers := CreateTestInput(t, false, AvailableCapabilities, nil, nil) + ctx, keepers := CreateTestInput(t, false, AvailableCapabilities) keeper := keepers.ContractKeeper deposit := sdk.NewCoins(sdk.NewInt64Coin("denom", 100000)) @@ -368,7 +368,7 @@ func TestCreateWithGzippedPayload(t *testing.T) { } func TestCreateWithBrokenGzippedPayload(t *testing.T) { - ctx, keepers := CreateTestInput(t, false, AvailableCapabilities, nil, nil) + ctx, keepers := CreateTestInput(t, false, AvailableCapabilities) keeper := keepers.ContractKeeper deposit := sdk.NewCoins(sdk.NewInt64Coin("denom", 100000)) @@ -386,7 +386,7 @@ func TestCreateWithBrokenGzippedPayload(t *testing.T) { } func TestInstantiate(t *testing.T) { - ctx, keepers := CreateTestInput(t, false, AvailableCapabilities, nil, nil) + ctx, keepers := CreateTestInput(t, false, AvailableCapabilities) deposit := sdk.NewCoins(sdk.NewInt64Coin("denom", 100000)) creator := sdk.AccAddress(bytes.Repeat([]byte{1}, address.Len)) @@ -468,7 +468,7 @@ func TestInstantiateWithDeposit(t *testing.T) { } for msg, spec := range specs { t.Run(msg, func(t *testing.T) { - ctx, keepers := CreateTestInput(t, false, AvailableCapabilities, nil, nil) + ctx, keepers := CreateTestInput(t, false, AvailableCapabilities) accKeeper, bankKeeper, keeper := keepers.AccountKeeper, keepers.BankKeeper, keepers.ContractKeeper if spec.fundAddr { @@ -536,7 +536,7 @@ func TestInstantiateWithPermissions(t *testing.T) { } for msg, spec := range specs { t.Run(msg, func(t *testing.T) { - ctx, keepers := CreateTestInput(t, false, AvailableCapabilities, nil, nil) + ctx, keepers := CreateTestInput(t, false, AvailableCapabilities) accKeeper, bankKeeper, keeper := keepers.AccountKeeper, keepers.BankKeeper, keepers.ContractKeeper fundAccounts(t, ctx, accKeeper, bankKeeper, spec.srcActor, deposit) @@ -550,7 +550,7 @@ func TestInstantiateWithPermissions(t *testing.T) { } func TestInstantiateWithAccounts(t *testing.T) { - parentCtx, keepers := CreateTestInput(t, false, AvailableCapabilities, nil, nil) + parentCtx, keepers := CreateTestInput(t, false, AvailableCapabilities) example := StoreHackatomExampleContract(t, parentCtx, keepers) require.Equal(t, uint64(1), example.CodeID) initMsg := mustMarshal(t, HackatomExampleInitMsg{Verifier: RandomAccountAddress(t), Beneficiary: RandomAccountAddress(t)}) @@ -686,7 +686,7 @@ func TestInstantiateWithAccounts(t *testing.T) { } func TestInstantiateWithNonExistingCodeID(t *testing.T) { - ctx, keepers := CreateTestInput(t, false, AvailableCapabilities, nil, nil) + ctx, keepers := CreateTestInput(t, false, AvailableCapabilities) deposit := sdk.NewCoins(sdk.NewInt64Coin("denom", 100000)) creator := keepers.Faucet.NewFundedRandomAccount(ctx, deposit...) @@ -702,7 +702,7 @@ func TestInstantiateWithNonExistingCodeID(t *testing.T) { } func TestInstantiateWithContractDataResponse(t *testing.T) { - ctx, keepers := CreateTestInput(t, false, AvailableCapabilities, nil, nil) + ctx, keepers := CreateTestInput(t, false, AvailableCapabilities) wasmerMock := &wasmtesting.MockWasmer{ InstantiateFn: func(codeID wasmvm.Checksum, env wasmvmtypes.Env, info wasmvmtypes.MessageInfo, initMsg []byte, store wasmvm.KVStore, goapi wasmvm.GoAPI, querier wasmvm.Querier, gasMeter wasmvm.GasMeter, gasLimit uint64, deserCost wasmvmtypes.UFraction) (*wasmvmtypes.Response, uint64, error) { @@ -726,7 +726,7 @@ func TestInstantiateWithContractFactoryChildQueriesParent(t *testing.T) { // then the factory contract's ContractInfo should be returned to the child contract // // see also: https://github.com/CosmWasm/wasmd/issues/896 - ctx, keepers := CreateTestInput(t, false, AvailableCapabilities, nil, nil) + ctx, keepers := CreateTestInput(t, false, AvailableCapabilities) keeper := keepers.WasmKeeper var instantiationCount int @@ -795,7 +795,7 @@ func TestInstantiateWithContractFactoryChildQueriesParent(t *testing.T) { } func TestExecute(t *testing.T) { - ctx, keepers := CreateTestInput(t, false, AvailableCapabilities, nil, nil) + ctx, keepers := CreateTestInput(t, false, AvailableCapabilities) accKeeper, keeper, bankKeeper := keepers.AccountKeeper, keepers.ContractKeeper, keepers.BankKeeper deposit := sdk.NewCoins(sdk.NewInt64Coin("denom", 100000)) @@ -933,7 +933,7 @@ func TestExecuteWithDeposit(t *testing.T) { } for msg, spec := range specs { t.Run(msg, func(t *testing.T) { - ctx, keepers := CreateTestInput(t, false, AvailableCapabilities, nil, nil) + ctx, keepers := CreateTestInput(t, false, AvailableCapabilities) accKeeper, bankKeeper, keeper := keepers.AccountKeeper, keepers.BankKeeper, keepers.ContractKeeper if spec.newBankParams != nil { bankKeeper.SetParams(ctx, *spec.newBankParams) @@ -967,7 +967,7 @@ func TestExecuteWithDeposit(t *testing.T) { } func TestExecuteWithNonExistingAddress(t *testing.T) { - ctx, keepers := CreateTestInput(t, false, AvailableCapabilities, nil, nil) + ctx, keepers := CreateTestInput(t, false, AvailableCapabilities) keeper := keepers.ContractKeeper deposit := sdk.NewCoins(sdk.NewInt64Coin("denom", 100000)) @@ -981,7 +981,7 @@ func TestExecuteWithNonExistingAddress(t *testing.T) { } func TestExecuteWithPanic(t *testing.T) { - ctx, keepers := CreateTestInput(t, false, AvailableCapabilities, nil, nil) + ctx, keepers := CreateTestInput(t, false, AvailableCapabilities) keeper := keepers.ContractKeeper deposit := sdk.NewCoins(sdk.NewInt64Coin("denom", 100000)) @@ -1013,7 +1013,7 @@ func TestExecuteWithPanic(t *testing.T) { } func TestExecuteWithCpuLoop(t *testing.T) { - ctx, keepers := CreateTestInput(t, false, AvailableCapabilities, nil, nil) + ctx, keepers := CreateTestInput(t, false, AvailableCapabilities) keeper := keepers.ContractKeeper deposit := sdk.NewCoins(sdk.NewInt64Coin("denom", 100000)) @@ -1055,7 +1055,7 @@ func TestExecuteWithCpuLoop(t *testing.T) { } func TestExecuteWithStorageLoop(t *testing.T) { - ctx, keepers := CreateTestInput(t, false, AvailableCapabilities, nil, nil) + ctx, keepers := CreateTestInput(t, false, AvailableCapabilities) keeper := keepers.ContractKeeper deposit := sdk.NewCoins(sdk.NewInt64Coin("denom", 100000)) @@ -1097,7 +1097,7 @@ func TestExecuteWithStorageLoop(t *testing.T) { } func TestMigrate(t *testing.T) { - parentCtx, keepers := CreateTestInput(t, false, AvailableCapabilities, nil, nil) + parentCtx, keepers := CreateTestInput(t, false, AvailableCapabilities) keeper := keepers.ContractKeeper deposit := sdk.NewCoins(sdk.NewInt64Coin("denom", 100000)) @@ -1296,7 +1296,7 @@ func TestMigrate(t *testing.T) { } func TestMigrateReplacesTheSecondIndex(t *testing.T) { - ctx, keepers := CreateTestInput(t, false, AvailableCapabilities, nil, nil) + ctx, keepers := CreateTestInput(t, false, AvailableCapabilities) example := InstantiateHackatomExampleContract(t, ctx, keepers) // then assert a second index exists @@ -1330,7 +1330,7 @@ func TestMigrateReplacesTheSecondIndex(t *testing.T) { } func TestMigrateWithDispatchedMessage(t *testing.T) { - ctx, keepers := CreateTestInput(t, false, AvailableCapabilities, nil, nil) + ctx, keepers := CreateTestInput(t, false, AvailableCapabilities) keeper := keepers.ContractKeeper deposit := sdk.NewCoins(sdk.NewInt64Coin("denom", 100000)) @@ -1416,7 +1416,7 @@ func TestMigrateWithDispatchedMessage(t *testing.T) { } func TestIterateContractsByCode(t *testing.T) { - ctx, keepers := CreateTestInput(t, false, AvailableCapabilities, nil, nil) + ctx, keepers := CreateTestInput(t, false, AvailableCapabilities) k, c := keepers.WasmKeeper, keepers.ContractKeeper example1 := InstantiateHackatomExampleContract(t, ctx, keepers) ctx = ctx.WithBlockHeight(ctx.BlockHeight() + 1) @@ -1462,7 +1462,7 @@ func TestIterateContractsByCodeWithMigration(t *testing.T) { return &wasmvmtypes.Response{}, 1, nil }} wasmtesting.MakeInstantiable(&mockWasmVM) - ctx, keepers := CreateTestInput(t, false, AvailableCapabilities, nil, nil, WithWasmEngine(&mockWasmVM)) + ctx, keepers := CreateTestInput(t, false, AvailableCapabilities, WithWasmEngine(&mockWasmVM)) k, c := keepers.WasmKeeper, keepers.ContractKeeper example1 := InstantiateHackatomExampleContract(t, ctx, keepers) ctx = ctx.WithBlockHeight(ctx.BlockHeight() + 1) @@ -1501,7 +1501,7 @@ type stealFundsMsg struct { } func TestSudo(t *testing.T) { - ctx, keepers := CreateTestInput(t, false, AvailableCapabilities, nil, nil) + ctx, keepers := CreateTestInput(t, false, AvailableCapabilities) accKeeper, keeper, bankKeeper := keepers.AccountKeeper, keepers.ContractKeeper, keepers.BankKeeper deposit := sdk.NewCoins(sdk.NewInt64Coin("denom", 100000)) @@ -1585,7 +1585,7 @@ func mustMarshal(t *testing.T, r interface{}) []byte { } func TestUpdateContractAdmin(t *testing.T) { - parentCtx, keepers := CreateTestInput(t, false, AvailableCapabilities, nil, nil) + parentCtx, keepers := CreateTestInput(t, false, AvailableCapabilities) keeper := keepers.ContractKeeper deposit := sdk.NewCoins(sdk.NewInt64Coin("denom", 100000)) @@ -1655,7 +1655,7 @@ func TestUpdateContractAdmin(t *testing.T) { } func TestClearContractAdmin(t *testing.T) { - parentCtx, keepers := CreateTestInput(t, false, AvailableCapabilities, nil, nil) + parentCtx, keepers := CreateTestInput(t, false, AvailableCapabilities) keeper := keepers.ContractKeeper deposit := sdk.NewCoins(sdk.NewInt64Coin("denom", 100000)) @@ -1720,7 +1720,7 @@ func TestClearContractAdmin(t *testing.T) { } func TestExecuteManualInactiveContractFailure(t *testing.T) { - ctx, keepers := CreateTestInput(t, false, AvailableCapabilities, nil, nil) + ctx, keepers := CreateTestInput(t, false, AvailableCapabilities) keeper := keepers.ContractKeeper deposit := sdk.NewCoins(sdk.NewInt64Coin("denom", 100000)) @@ -1748,7 +1748,7 @@ func TestExecuteManualInactiveContractFailure(t *testing.T) { } func TestPinCode(t *testing.T) { - ctx, keepers := CreateTestInput(t, false, AvailableCapabilities, nil, nil) + ctx, keepers := CreateTestInput(t, false, AvailableCapabilities) k := keepers.WasmKeeper var capturedChecksums []wasmvm.Checksum @@ -1775,7 +1775,7 @@ func TestPinCode(t *testing.T) { } func TestUnpinCode(t *testing.T) { - ctx, keepers := CreateTestInput(t, false, AvailableCapabilities, nil, nil) + ctx, keepers := CreateTestInput(t, false, AvailableCapabilities) k := keepers.WasmKeeper var capturedChecksums []wasmvm.Checksum @@ -1809,7 +1809,7 @@ func TestUnpinCode(t *testing.T) { } func TestInitializePinnedCodes(t *testing.T) { - ctx, keepers := CreateTestInput(t, false, AvailableCapabilities, nil, nil) + ctx, keepers := CreateTestInput(t, false, AvailableCapabilities) k := keepers.WasmKeeper var capturedChecksums []wasmvm.Checksum @@ -1849,7 +1849,7 @@ func TestPinnedContractLoops(t *testing.T) { // a pinned contract that calls itself via submessages should terminate with an // error at some point - ctx, keepers := CreateTestInput(t, false, AvailableCapabilities, nil, nil, WithWasmEngine(&mock)) + ctx, keepers := CreateTestInput(t, false, AvailableCapabilities, WithWasmEngine(&mock)) k := keepers.WasmKeeper example := SeedNewContractInstance(t, ctx, keepers, &mock) @@ -1965,7 +1965,7 @@ func TestNewDefaultWasmVMContractResponseHandler(t *testing.T) { } func TestReply(t *testing.T) { - ctx, keepers := CreateTestInput(t, false, AvailableCapabilities, nil, nil) + ctx, keepers := CreateTestInput(t, false, AvailableCapabilities) k := keepers.WasmKeeper var mock wasmtesting.MockWasmer wasmtesting.MakeInstantiable(&mock) @@ -2034,7 +2034,7 @@ func TestReply(t *testing.T) { } func TestQueryIsolation(t *testing.T) { - ctx, keepers := CreateTestInput(t, false, AvailableCapabilities, nil, nil) + ctx, keepers := CreateTestInput(t, false, AvailableCapabilities) k := keepers.WasmKeeper var mock wasmtesting.MockWasmer wasmtesting.MakeInstantiable(&mock) @@ -2065,7 +2065,7 @@ func TestQueryIsolation(t *testing.T) { } func TestSetAccessConfig(t *testing.T) { - parentCtx, keepers := CreateTestInput(t, false, AvailableCapabilities, nil, nil) + parentCtx, keepers := CreateTestInput(t, false, AvailableCapabilities) k := keepers.WasmKeeper creatorAddr := RandomAccountAddress(t) nonCreatorAddr := RandomAccountAddress(t) @@ -2148,7 +2148,7 @@ func TestSetAccessConfig(t *testing.T) { } func TestAppendToContractHistory(t *testing.T) { - ctx, keepers := CreateTestInput(t, false, AvailableCapabilities, nil, nil) + ctx, keepers := CreateTestInput(t, false, AvailableCapabilities) var contractAddr sdk.AccAddress = rand.Bytes(types.ContractAddrLen) var orderedEntries []types.ContractCodeHistoryEntry @@ -2165,7 +2165,7 @@ func TestAppendToContractHistory(t *testing.T) { } func TestCoinBurnerPruneBalances(t *testing.T) { - parentCtx, keepers := CreateTestInput(t, false, AvailableCapabilities, nil, nil) + parentCtx, keepers := CreateTestInput(t, false, AvailableCapabilities) amts := sdk.NewCoins(sdk.NewInt64Coin("denom", 100)) senderAddr := keepers.Faucet.NewFundedRandomAccount(parentCtx, amts...) @@ -2227,83 +2227,9 @@ func TestCoinBurnerPruneBalances(t *testing.T) { } } -//func TestActivateContract(t *testing.T) { -// ctx, keepers := CreateTestInput(t, false, AvailableCapabilities, nil, nil) -// -// k := keepers.WasmKeeper -// var mock wasmtesting.MockWasmer -// wasmtesting.MakeInstantiable(&mock) -// example := SeedNewContractInstance(t, ctx, keepers, &mock) -// em := sdk.NewEventManager() -// -// // request no contract address -> fail -// err := k.activateContract(ctx, example.CreatorAddr) -// require.Error(t, err, fmt.Sprintf("no contract %s", example.CreatorAddr)) -// -// // try to activate an activated contract -> fail -// err = k.activateContract(ctx.WithEventManager(em), example.Contract) -// require.Error(t, err, fmt.Sprintf("no inactivate contract %s", example.Contract)) -// -// // add to inactive contract -// err = k.deactivateContract(ctx, example.Contract) -// require.NoError(t, err) -// -// // try to activate an inactivated contract -> success -// err = k.activateContract(ctx, example.Contract) -// require.NoError(t, err) -//} - -//func TestDeactivateContract(t *testing.T) { -// ctx, keepers := CreateTestInput(t, false, AvailableCapabilities, nil, nil) -// -// k := keepers.WasmKeeper -// var mock wasmtesting.MockWasmer -// wasmtesting.MakeInstantiable(&mock) -// example := SeedNewContractInstance(t, ctx, keepers, &mock) -// em := sdk.NewEventManager() -// -// // request no contract address -> fail -// err := k.deactivateContract(ctx, example.CreatorAddr) -// require.Error(t, err, fmt.Sprintf("no contract %s", example.CreatorAddr)) -// -// // success case -// err = k.deactivateContract(ctx, example.Contract) -// require.NoError(t, err) -// -// // already inactivate contract -> fail -// err = k.deactivateContract(ctx.WithEventManager(em), example.Contract) -// require.Error(t, err, fmt.Sprintf("already inactivate contract %s", example.Contract)) -//} - -//func TestIterateInactiveContracts(t *testing.T) { -// ctx, keepers := CreateTestInput(t, false, AvailableCapabilities, nil, nil) -// k := keepers.WasmKeeper -// -// var mock wasmtesting.MockWasmer -// wasmtesting.MakeInstantiable(&mock) -// example1 := SeedNewContractInstance(t, ctx, keepers, &mock) -// ctx = ctx.WithBlockHeight(ctx.BlockHeight() + 1) -// example2 := SeedNewContractInstance(t, ctx, keepers, &mock) -// ctx = ctx.WithBlockHeight(ctx.BlockHeight() + 1) -// -// err := k.deactivateContract(ctx, example1.Contract) -// require.NoError(t, err) -// err = k.deactivateContract(ctx, example2.Contract) -// require.NoError(t, err) -// -// var inactiveContracts []sdk.AccAddress -// k.IterateInactiveContracts(ctx, func(contractAddress sdk.AccAddress) (stop bool) { -// inactiveContracts = append(inactiveContracts, contractAddress) -// return false -// }) -// assert.Equal(t, 2, len(inactiveContracts)) -// expectList := []sdk.AccAddress{example1.Contract, example2.Contract} -// assert.ElementsMatch(t, expectList, inactiveContracts) -//} - func TestKeeper_GetByteCode(t *testing.T) { - ctx, keepers := CreateTestInput(t, false, AvailableCapabilities, nil, nil) + ctx, keepers := CreateTestInput(t, false, AvailableCapabilities) keeper := keepers.ContractKeeper deposit := sdk.NewCoins(sdk.NewInt64Coin("denom", 100000)) diff --git a/x/wasm/keeper/legacy_querier.go b/x/wasm/keeper/legacy_querier.go index 0947a3221e..43a38d427a 100644 --- a/x/wasm/keeper/legacy_querier.go +++ b/x/wasm/keeper/legacy_querier.go @@ -19,8 +19,6 @@ const ( QueryGetCode = "code" QueryListCode = "list-code" QueryContractHistory = "contract-history" - QueryInactiveContracts = "inactive-contracts" - QueryIsInactiveContract = "inactive-contract" ) const ( @@ -73,16 +71,6 @@ func NewLegacyQuerier(keeper types.ViewKeeper, gasLimit sdk.Gas) sdk.Querier { } //nolint:staticcheck rsp, err = queryContractHistory(ctx, contractAddr, keeper) - //case QueryInactiveContracts: - // //nolint:staticcheck - // rsp = queryInactiveContracts(ctx, keeper) - //case QueryIsInactiveContract: - // contractAddr, addrErr := sdk.AccAddressFromBech32(path[1]) - // if addrErr != nil { - // return nil, sdkerrors.Wrap(sdkerrors.ErrInvalidAddress, addrErr.Error()) - // } - // //nolint:staticcheck - // rsp = keeper.IsInactiveContract(ctx, contractAddr) default: return nil, sdkerrors.Wrap(sdkerrors.ErrUnknownRequest, "unknown data query endpoint") } @@ -171,12 +159,3 @@ func queryContractListByCode(ctx sdk.Context, codeID uint64, keeper types.ViewKe }) return contracts } - -//func queryInactiveContracts(ctx sdk.Context, keeper types.ViewKeeper) []string { -// var contracts []string -// keeper.IterateInactiveContracts(ctx, func(contractAddress sdk.AccAddress) bool { -// contracts = append(contracts, contractAddress.String()) -// return false -// }) -// return contracts -//} diff --git a/x/wasm/keeper/legacy_querier_test.go b/x/wasm/keeper/legacy_querier_test.go index 36b59e3e2d..9af634a19f 100644 --- a/x/wasm/keeper/legacy_querier_test.go +++ b/x/wasm/keeper/legacy_querier_test.go @@ -18,7 +18,7 @@ import ( ) func TestLegacyQueryContractState(t *testing.T) { - ctx, keepers := CreateTestInput(t, false, AvailableCapabilities, nil, nil) + ctx, keepers := CreateTestInput(t, false, AvailableCapabilities) keeper := keepers.WasmKeeper deposit := sdk.NewCoins(sdk.NewInt64Coin("denom", 100000)) @@ -155,7 +155,7 @@ func TestLegacyQueryContractState(t *testing.T) { } func TestLegacyQueryContractListByCodeOrdering(t *testing.T) { - ctx, keepers := CreateTestInput(t, false, AvailableCapabilities, nil, nil) + ctx, keepers := CreateTestInput(t, false, AvailableCapabilities) keeper := keepers.WasmKeeper deposit := sdk.NewCoins(sdk.NewInt64Coin("denom", 1000000)) @@ -219,7 +219,7 @@ func TestLegacyQueryContractListByCodeOrdering(t *testing.T) { } func TestLegacyQueryContractHistory(t *testing.T) { - ctx, keepers := CreateTestInput(t, false, AvailableCapabilities, nil, nil) + ctx, keepers := CreateTestInput(t, false, AvailableCapabilities) keeper := keepers.WasmKeeper var otherAddr sdk.AccAddress = bytes.Repeat([]byte{0x2}, types.ContractAddrLen) @@ -330,7 +330,7 @@ func TestLegacyQueryCodeList(t *testing.T) { for msg, spec := range specs { t.Run(msg, func(t *testing.T) { - ctx, keepers := CreateTestInput(t, false, AvailableCapabilities, nil, nil) + ctx, keepers := CreateTestInput(t, false, AvailableCapabilities) keeper := keepers.WasmKeeper for _, codeID := range spec.codeIDs { diff --git a/x/wasm/keeper/msg_server.go b/x/wasm/keeper/msg_server.go index 4f84b47cf8..9706ca5f2c 100644 --- a/x/wasm/keeper/msg_server.go +++ b/x/wasm/keeper/msg_server.go @@ -6,7 +6,6 @@ import ( sdk "github.com/line/lbm-sdk/types" sdkerrors "github.com/line/lbm-sdk/types/errors" - "github.com/line/wasmd/x/wasm/lbmtypes" "github.com/line/wasmd/x/wasm/types" ) @@ -116,45 +115,6 @@ func (m msgServer) InstantiateContract2(goCtx context.Context, msg *types.MsgIns }, nil } -func (m msgServer) StoreCodeAndInstantiateContract(goCtx context.Context, - msg *lbmtypes.MsgStoreCodeAndInstantiateContract) (*lbmtypes.MsgStoreCodeAndInstantiateContractResponse, error) { - ctx := sdk.UnwrapSDKContext(goCtx) - senderAddr, err := sdk.AccAddressFromBech32(msg.Sender) - if err != nil { - return nil, sdkerrors.Wrap(err, "sender") - } - codeID, _, err := m.keeper.Create(ctx, senderAddr, msg.WASMByteCode, msg.InstantiatePermission) - if err != nil { - return nil, err - } - - ctx.EventManager().EmitEvent(sdk.NewEvent( - sdk.EventTypeMessage, - sdk.NewAttribute(sdk.AttributeKeyModule, types.ModuleName), - sdk.NewAttribute(sdk.AttributeKeySender, msg.Sender), - )) - - var adminAddr sdk.AccAddress - if msg.Admin != "" { - adminAddr, err = sdk.AccAddressFromBech32(msg.Admin) - if err != nil { - return nil, sdkerrors.Wrap(err, "admin") - } - } - - contractAddr, data, err := m.keeper.Instantiate(ctx, codeID, senderAddr, adminAddr, msg.Msg, - msg.Label, msg.Funds) - if err != nil { - return nil, err - } - - return &lbmtypes.MsgStoreCodeAndInstantiateContractResponse{ - CodeID: codeID, - Address: contractAddr.String(), - Data: data, - }, nil -} - func (m msgServer) ExecuteContract(goCtx context.Context, msg *types.MsgExecuteContract) (*types.MsgExecuteContractResponse, error) { if err := msg.ValidateBasic(); err != nil { return nil, err diff --git a/x/wasm/keeper/options_test.go b/x/wasm/keeper/options_test.go index 727e3c5ca1..ebdfe3c513 100644 --- a/x/wasm/keeper/options_test.go +++ b/x/wasm/keeper/options_test.go @@ -91,7 +91,7 @@ func TestConstructorOptions(t *testing.T) { } for name, spec := range specs { t.Run(name, func(t *testing.T) { - k := NewKeeper(nil, nil, paramtypes.NewSubspace(nil, nil, nil, nil, ""), authkeeper.AccountKeeper{}, bankpluskeeper.BaseKeeper{}, stakingkeeper.Keeper{}, distributionkeeper.Keeper{}, nil, nil, nil, nil, nil, nil, "tempDir", types.DefaultWasmConfig(), AvailableCapabilities, nil, nil, spec.srcOpt) + k := NewKeeper(nil, nil, paramtypes.NewSubspace(nil, nil, nil, nil, ""), authkeeper.AccountKeeper{}, bankpluskeeper.BaseKeeper{}, stakingkeeper.Keeper{}, distributionkeeper.Keeper{}, nil, nil, nil, nil, nil, nil, "tempDir", types.DefaultWasmConfig(), AvailableCapabilities, spec.srcOpt) spec.verify(t, k) }) } diff --git a/x/wasm/keeper/proposal_handler.go b/x/wasm/keeper/proposal_handler.go index 3a4a7827a6..55f1cd1c0c 100644 --- a/x/wasm/keeper/proposal_handler.go +++ b/x/wasm/keeper/proposal_handler.go @@ -49,10 +49,6 @@ func NewWasmProposalHandlerX(k types.ContractOpsKeeper, enabledProposalTypes []t return handleUnpinCodesProposal(ctx, k, *c) case *types.UpdateInstantiateConfigProposal: return handleUpdateInstantiateConfigProposal(ctx, k, *c) - //case *lbmtypes.DeactivateContractProposal: - // return handleDeactivateContractProposal(ctx, k, *c) - //case *lbmtypes.ActivateContractProposal: - // return handleActivateContractProposal(ctx, k, *c) default: return sdkerrors.Wrapf(sdkerrors.ErrUnknownRequest, "unrecognized wasm proposal content type: %T", c) } @@ -244,49 +240,3 @@ func handleUpdateInstantiateConfigProposal(ctx sdk.Context, k types.ContractOpsK } return nil } - -//func handleDeactivateContractProposal(ctx sdk.Context, k types.ContractOpsKeeper, p lbmtypes.DeactivateContractProposal) error { -// if err := p.ValidateBasic(); err != nil { -// return err -// } -// -// // The error is already checked in ValidateBasic. -// //nolint:errcheck -// contractAddr, _ := sdk.AccAddressFromBech32(p.Contract) -// -// err := k.DeactivateContract(ctx, contractAddr) -// if err != nil { -// return err -// } -// -// event := lbmtypes.EventDeactivateContractProposal{ -// Contract: contractAddr.String(), -// } -// if err := ctx.EventManager().EmitTypedEvent(&event); err != nil { -// return err -// } -// -// return nil -//} -// -//func handleActivateContractProposal(ctx sdk.Context, k types.ContractOpsKeeper, p lbmtypes.ActivateContractProposal) error { -// if err := p.ValidateBasic(); err != nil { -// return err -// } -// -// // The error is already checked in ValidateBasic. -// //nolint:errcheck -// contractAddr, _ := sdk.AccAddressFromBech32(p.Contract) -// -// err := k.ActivateContract(ctx, contractAddr) -// if err != nil { -// return err -// } -// -// event := lbmtypes.EventActivateContractProposal{Contract: contractAddr.String()} -// if err := ctx.EventManager().EmitTypedEvent(&event); err != nil { -// return nil -// } -// -// return nil -//} diff --git a/x/wasm/keeper/proposal_integration_test.go b/x/wasm/keeper/proposal_integration_test.go index 2ce9625e12..42cfde6cad 100644 --- a/x/wasm/keeper/proposal_integration_test.go +++ b/x/wasm/keeper/proposal_integration_test.go @@ -22,7 +22,7 @@ import ( ) func TestStoreCodeProposal(t *testing.T) { - parentCtx, keepers := CreateTestInput(t, false, "staking", nil, nil) + parentCtx, keepers := CreateTestInput(t, false, "staking") govKeeper, wasmKeeper := keepers.GovKeeper, keepers.WasmKeeper wasmKeeper.SetParams(parentCtx, types.Params{ CodeUploadAccess: types.AllowNobody, @@ -77,7 +77,7 @@ func TestStoreCodeProposal(t *testing.T) { } func TestInstantiateProposal(t *testing.T) { - ctx, keepers := CreateTestInput(t, false, "staking", nil, nil) + ctx, keepers := CreateTestInput(t, false, "staking") govKeeper, wasmKeeper := keepers.GovKeeper, keepers.WasmKeeper wasmKeeper.SetParams(ctx, types.Params{ CodeUploadAccess: types.AllowNobody, @@ -142,7 +142,7 @@ func TestInstantiateProposal(t *testing.T) { } func TestInstantiateProposal_NoAdmin(t *testing.T) { - ctx, keepers := CreateTestInput(t, false, "staking", nil, nil) + ctx, keepers := CreateTestInput(t, false, "staking") govKeeper, wasmKeeper := keepers.GovKeeper, keepers.WasmKeeper wasmKeeper.SetParams(ctx, types.Params{ CodeUploadAccess: types.AllowNobody, @@ -214,7 +214,7 @@ func TestInstantiateProposal_NoAdmin(t *testing.T) { } func TestMigrateProposal(t *testing.T) { - ctx, keepers := CreateTestInput(t, false, "staking", nil, nil) + ctx, keepers := CreateTestInput(t, false, "staking") govKeeper, wasmKeeper := keepers.GovKeeper, keepers.WasmKeeper wasmKeeper.SetParams(ctx, types.Params{ CodeUploadAccess: types.AllowNobody, @@ -295,7 +295,7 @@ func TestMigrateProposal(t *testing.T) { } func TestExecuteProposal(t *testing.T) { - ctx, keepers := CreateTestInput(t, false, "staking", nil, nil) + ctx, keepers := CreateTestInput(t, false, "staking") govKeeper, bankKeeper := keepers.GovKeeper, keepers.BankKeeper exampleContract := InstantiateHackatomExampleContract(t, ctx, keepers) @@ -355,7 +355,7 @@ func TestExecuteProposal(t *testing.T) { } func TestSudoProposal(t *testing.T) { - ctx, keepers := CreateTestInput(t, false, "staking", nil, nil) + ctx, keepers := CreateTestInput(t, false, "staking") govKeeper, bankKeeper := keepers.GovKeeper, keepers.BankKeeper exampleContract := InstantiateHackatomExampleContract(t, ctx, keepers) @@ -465,7 +465,7 @@ func TestAdminProposals(t *testing.T) { } for msg, spec := range specs { t.Run(msg, func(t *testing.T) { - ctx, keepers := CreateTestInput(t, false, "staking", nil, nil) + ctx, keepers := CreateTestInput(t, false, "staking") govKeeper, wasmKeeper := keepers.GovKeeper, keepers.WasmKeeper wasmKeeper.SetParams(ctx, types.Params{ CodeUploadAccess: types.AllowNobody, @@ -494,7 +494,7 @@ func TestAdminProposals(t *testing.T) { } func TestUpdateParamsProposal(t *testing.T) { - ctx, keepers := CreateTestInput(t, false, "staking", nil, nil) + ctx, keepers := CreateTestInput(t, false, "staking") govKeeper, wasmKeeper := keepers.GovKeeper, keepers.WasmKeeper var ( @@ -591,7 +591,7 @@ func TestUpdateParamsProposal(t *testing.T) { } func TestPinCodesProposal(t *testing.T) { - ctx, keepers := CreateTestInput(t, false, "staking", nil, nil) + ctx, keepers := CreateTestInput(t, false, "staking") govKeeper, wasmKeeper := keepers.GovKeeper, keepers.WasmKeeper mock := wasmtesting.MockWasmer{ @@ -679,7 +679,7 @@ func TestPinCodesProposal(t *testing.T) { } func TestUnpinCodesProposal(t *testing.T) { - ctx, keepers := CreateTestInput(t, false, "staking", nil, nil) + ctx, keepers := CreateTestInput(t, false, "staking") govKeeper, wasmKeeper := keepers.GovKeeper, keepers.WasmKeeper mock := wasmtesting.MockWasmer{ @@ -767,7 +767,7 @@ func TestUnpinCodesProposal(t *testing.T) { } func TestUpdateInstantiateConfigProposal(t *testing.T) { - ctx, keepers := CreateTestInput(t, false, "staking", nil, nil) + ctx, keepers := CreateTestInput(t, false, "staking") govKeeper, wasmKeeper := keepers.GovKeeper, keepers.WasmKeeper mock := wasmtesting.MockWasmer{ @@ -859,66 +859,3 @@ func TestUpdateInstantiateConfigProposal(t *testing.T) { }) } } - -//func TestValidateDeactivateContractProposal(t *testing.T) { -// ctx, keepers := CreateTestInput(t, false, "staking", nil, nil) -// govKeeper, wasmKeeper := keepers.GovKeeper, keepers.WasmKeeper -// -// var mock wasmtesting.MockWasmer -// wasmtesting.MakeInstantiable(&mock) -// example := SeedNewContractInstance(t, ctx, keepers, &mock) -// -// src := lbmtypes.DeactivateContractProposal{ -// Title: "Foo", -// Description: "Bar", -// Contract: example.Contract.String(), -// } -// -// em := sdk.NewEventManager() -// -// // when stored -// storedProposal, err := govKeeper.SubmitProposal(ctx, &src) -// require.NoError(t, err) -// -// // proposal execute -// handler := govKeeper.Router().GetRoute(storedProposal.ProposalRoute()) -// err = handler(ctx.WithEventManager(em), storedProposal.GetContent()) -// require.NoError(t, err) -// -// // then -// isInactive := wasmKeeper.IsInactiveContract(ctx, example.Contract) -// require.True(t, isInactive) -//} -// -//func TestActivateContractProposal(t *testing.T) { -// ctx, keepers := CreateTestInput(t, false, "staking", nil, nil) -// govKeeper, wasmKeeper := keepers.GovKeeper, keepers.WasmKeeper -// -// var mock wasmtesting.MockWasmer -// wasmtesting.MakeInstantiable(&mock) -// example := SeedNewContractInstance(t, ctx, keepers, &mock) -// // set deactivate -// err := wasmKeeper.deactivateContract(ctx, example.Contract) -// require.NoError(t, err) -// -// src := lbmtypes.ActivateContractProposal{ -// Title: "Foo", -// Description: "Bar", -// Contract: example.Contract.String(), -// } -// -// em := sdk.NewEventManager() -// -// // when stored -// storedProposal, err := govKeeper.SubmitProposal(ctx, &src) -// require.NoError(t, err) -// -// // proposal execute -// handler := govKeeper.Router().GetRoute(storedProposal.ProposalRoute()) -// err = handler(ctx.WithEventManager(em), storedProposal.GetContent()) -// require.NoError(t, err) -// -// // then -// isInactive := wasmKeeper.IsInactiveContract(ctx, example.Contract) -// require.False(t, isInactive) -//} diff --git a/x/wasm/keeper/querier.go b/x/wasm/keeper/querier.go index 7fc064b632..c5c316ca1a 100644 --- a/x/wasm/keeper/querier.go +++ b/x/wasm/keeper/querier.go @@ -17,9 +17,9 @@ import ( "github.com/line/wasmd/x/wasm/types" ) -var _ types.QueryServer = &GrpcQuerier{} +var _ types.QueryServer = &grpcQuerier{} -type GrpcQuerier struct { +type grpcQuerier struct { cdc codec.Codec storeKey sdk.StoreKey keeper types.ViewKeeper @@ -27,11 +27,11 @@ type GrpcQuerier struct { } // NewGrpcQuerier constructor -func NewGrpcQuerier(cdc codec.Codec, storeKey sdk.StoreKey, keeper types.ViewKeeper, queryGasLimit sdk.Gas) *GrpcQuerier { //nolint:revive - return &GrpcQuerier{cdc: cdc, storeKey: storeKey, keeper: keeper, queryGasLimit: queryGasLimit} +func NewGrpcQuerier(cdc codec.Codec, storeKey sdk.StoreKey, keeper types.ViewKeeper, queryGasLimit sdk.Gas) *grpcQuerier { //nolint:revive + return &grpcQuerier{cdc: cdc, storeKey: storeKey, keeper: keeper, queryGasLimit: queryGasLimit} } -func (q GrpcQuerier) ContractInfo(c context.Context, req *types.QueryContractInfoRequest) (*types.QueryContractInfoResponse, error) { +func (q grpcQuerier) ContractInfo(c context.Context, req *types.QueryContractInfoRequest) (*types.QueryContractInfoResponse, error) { if req == nil { return nil, status.Error(codes.InvalidArgument, "empty request") } @@ -49,7 +49,7 @@ func (q GrpcQuerier) ContractInfo(c context.Context, req *types.QueryContractInf return rsp, nil } -func (q GrpcQuerier) ContractHistory(c context.Context, req *types.QueryContractHistoryRequest) (*types.QueryContractHistoryResponse, error) { +func (q grpcQuerier) ContractHistory(c context.Context, req *types.QueryContractHistoryRequest) (*types.QueryContractHistoryResponse, error) { if req == nil { return nil, status.Error(codes.InvalidArgument, "empty request") } @@ -83,7 +83,7 @@ func (q GrpcQuerier) ContractHistory(c context.Context, req *types.QueryContract } // ContractsByCode lists all smart contracts for a code id -func (q GrpcQuerier) ContractsByCode(c context.Context, req *types.QueryContractsByCodeRequest) (*types.QueryContractsByCodeResponse, error) { +func (q grpcQuerier) ContractsByCode(c context.Context, req *types.QueryContractsByCodeRequest) (*types.QueryContractsByCodeResponse, error) { if req == nil { return nil, status.Error(codes.InvalidArgument, "empty request") } @@ -110,7 +110,7 @@ func (q GrpcQuerier) ContractsByCode(c context.Context, req *types.QueryContract }, nil } -func (q GrpcQuerier) AllContractState(c context.Context, req *types.QueryAllContractStateRequest) (*types.QueryAllContractStateResponse, error) { +func (q grpcQuerier) AllContractState(c context.Context, req *types.QueryAllContractStateRequest) (*types.QueryAllContractStateResponse, error) { if req == nil { return nil, status.Error(codes.InvalidArgument, "empty request") } @@ -143,7 +143,7 @@ func (q GrpcQuerier) AllContractState(c context.Context, req *types.QueryAllCont }, nil } -func (q GrpcQuerier) RawContractState(c context.Context, req *types.QueryRawContractStateRequest) (*types.QueryRawContractStateResponse, error) { +func (q grpcQuerier) RawContractState(c context.Context, req *types.QueryRawContractStateRequest) (*types.QueryRawContractStateResponse, error) { if req == nil { return nil, status.Error(codes.InvalidArgument, "empty request") } @@ -161,7 +161,7 @@ func (q GrpcQuerier) RawContractState(c context.Context, req *types.QueryRawCont return &types.QueryRawContractStateResponse{Data: rsp}, nil } -func (q GrpcQuerier) SmartContractState(c context.Context, req *types.QuerySmartContractStateRequest) (rsp *types.QuerySmartContractStateResponse, err error) { +func (q grpcQuerier) SmartContractState(c context.Context, req *types.QuerySmartContractStateRequest) (rsp *types.QuerySmartContractStateResponse, err error) { if req == nil { return nil, status.Error(codes.InvalidArgument, "empty request") } @@ -204,7 +204,7 @@ func (q GrpcQuerier) SmartContractState(c context.Context, req *types.QuerySmart return &types.QuerySmartContractStateResponse{Data: bz}, nil } -func (q GrpcQuerier) Code(c context.Context, req *types.QueryCodeRequest) (*types.QueryCodeResponse, error) { +func (q grpcQuerier) Code(c context.Context, req *types.QueryCodeRequest) (*types.QueryCodeResponse, error) { if req == nil { return nil, status.Error(codes.InvalidArgument, "empty request") } @@ -224,7 +224,7 @@ func (q GrpcQuerier) Code(c context.Context, req *types.QueryCodeRequest) (*type }, nil } -func (q GrpcQuerier) Codes(c context.Context, req *types.QueryCodesRequest) (*types.QueryCodesResponse, error) { +func (q grpcQuerier) Codes(c context.Context, req *types.QueryCodesRequest) (*types.QueryCodesResponse, error) { if req == nil { return nil, status.Error(codes.InvalidArgument, "empty request") } @@ -289,7 +289,7 @@ func queryCode(ctx sdk.Context, codeID uint64, keeper types.ViewKeeper) (*types. return &types.QueryCodeResponse{CodeInfoResponse: &info, Data: code}, nil } -func (q GrpcQuerier) PinnedCodes(c context.Context, req *types.QueryPinnedCodesRequest) (*types.QueryPinnedCodesResponse, error) { +func (q grpcQuerier) PinnedCodes(c context.Context, req *types.QueryPinnedCodesRequest) (*types.QueryPinnedCodesResponse, error) { if req == nil { return nil, status.Error(codes.InvalidArgument, "empty request") } @@ -313,53 +313,8 @@ func (q GrpcQuerier) PinnedCodes(c context.Context, req *types.QueryPinnedCodesR } // Params returns params of the module. -func (q GrpcQuerier) Params(c context.Context, req *types.QueryParamsRequest) (*types.QueryParamsResponse, error) { +func (q grpcQuerier) Params(c context.Context, req *types.QueryParamsRequest) (*types.QueryParamsResponse, error) { ctx := sdk.UnwrapSDKContext(c) params := q.keeper.GetParams(ctx) return &types.QueryParamsResponse{Params: params}, nil } - -//func (q GrpcQuerier) InactiveContracts(c context.Context, req *lbmtypes.QueryInactiveContractsRequest) (*lbmtypes.QueryInactiveContractsResponse, error) { -// if req == nil { -// return nil, status.Error(codes.InvalidArgument, "empty request") -// } -// ctx := sdk.UnwrapSDKContext(c) -// -// addresses := make([]string, 0) -// prefixStore := prefix.NewStore(ctx.KVStore(q.storeKey), types.InactiveContractPrefix) -// pageRes, err := query.FilteredPaginate(prefixStore, req.Pagination, func(key []byte, value []byte, accumulate bool) (bool, error) { -// if accumulate { -// contractAddress := sdk.AccAddress(value) -// addresses = append(addresses, contractAddress.String()) -// } -// return true, nil -// }) -// if err != nil { -// return nil, err -// } -// return &lbmtypes.QueryInactiveContractsResponse{ -// Addresses: addresses, -// Pagination: pageRes, -// }, nil -//} -// -//func (q GrpcQuerier) InactiveContract(c context.Context, req *lbmtypes.QueryInactiveContractRequest) (*lbmtypes.QueryInactiveContractResponse, error) { -// if req == nil { -// return nil, status.Error(codes.InvalidArgument, "empty request") -// } -// ctx := sdk.UnwrapSDKContext(c) -// -// contractAddr, err := sdk.AccAddressFromBech32(req.Address) -// if err != nil { -// return nil, err -// } -// -// if !q.keeper.HasContractInfo(ctx, contractAddr) { -// return nil, types.ErrNotFound -// } -// -// inactivated := q.keeper.IsInactiveContract(ctx, contractAddr) -// return &lbmtypes.QueryInactiveContractResponse{ -// Inactivated: inactivated, -// }, nil -//} diff --git a/x/wasm/keeper/querier_test.go b/x/wasm/keeper/querier_test.go index fc25640a27..b1b5c4b802 100644 --- a/x/wasm/keeper/querier_test.go +++ b/x/wasm/keeper/querier_test.go @@ -27,7 +27,7 @@ import ( ) func TestQueryAllContractState(t *testing.T) { - ctx, keepers := CreateTestInput(t, false, AvailableCapabilities, nil, nil) + ctx, keepers := CreateTestInput(t, false, AvailableCapabilities) keeper := keepers.WasmKeeper exampleContract := InstantiateHackatomExampleContract(t, ctx, keepers) @@ -114,7 +114,7 @@ func TestQueryAllContractState(t *testing.T) { } func TestQuerySmartContractState(t *testing.T) { - ctx, keepers := CreateTestInput(t, false, AvailableCapabilities, nil, nil) + ctx, keepers := CreateTestInput(t, false, AvailableCapabilities) keeper := keepers.WasmKeeper exampleContract := InstantiateHackatomExampleContract(t, ctx, keepers) @@ -157,7 +157,7 @@ func TestQuerySmartContractState(t *testing.T) { } func TestQuerySmartContractPanics(t *testing.T) { - ctx, keepers := CreateTestInput(t, false, AvailableCapabilities, nil, nil) + ctx, keepers := CreateTestInput(t, false, AvailableCapabilities) contractAddr := BuildContractAddressClassic(1, 1) keepers.WasmKeeper.storeCodeInfo(ctx, 1, types.CodeInfo{}) keepers.WasmKeeper.storeContractInfo(ctx, contractAddr, &types.ContractInfo{ @@ -202,7 +202,7 @@ func TestQuerySmartContractPanics(t *testing.T) { } func TestQueryRawContractState(t *testing.T) { - ctx, keepers := CreateTestInput(t, false, AvailableCapabilities, nil, nil) + ctx, keepers := CreateTestInput(t, false, AvailableCapabilities) keeper := keepers.WasmKeeper exampleContract := InstantiateHackatomExampleContract(t, ctx, keepers) @@ -257,7 +257,7 @@ func TestQueryRawContractState(t *testing.T) { } func TestQueryContractListByCodeOrdering(t *testing.T) { - ctx, keepers := CreateTestInput(t, false, AvailableCapabilities, nil, nil) + ctx, keepers := CreateTestInput(t, false, AvailableCapabilities) keeper := keepers.WasmKeeper deposit := sdk.NewCoins(sdk.NewInt64Coin("denom", 1000000)) @@ -313,7 +313,7 @@ func TestQueryContractListByCodeOrdering(t *testing.T) { } func TestQueryContractHistory(t *testing.T) { - ctx, keepers := CreateTestInput(t, false, AvailableCapabilities, nil, nil) + ctx, keepers := CreateTestInput(t, false, AvailableCapabilities) keeper := keepers.WasmKeeper var ( @@ -457,7 +457,7 @@ func TestQueryCode(t *testing.T) { wasmCode, err := os.ReadFile("./testdata/hackatom.wasm") require.NoError(t, err) - ctx, keepers := CreateTestInput(t, false, AvailableCapabilities, nil, nil) + ctx, keepers := CreateTestInput(t, false, AvailableCapabilities) keeper := keepers.WasmKeeper codeID := uint64(1) @@ -510,7 +510,7 @@ func TestQueryCodeList(t *testing.T) { wasmCode, err := os.ReadFile("./testdata/hackatom.wasm") require.NoError(t, err) - ctx, keepers := CreateTestInput(t, false, AvailableCapabilities, nil, nil) + ctx, keepers := CreateTestInput(t, false, AvailableCapabilities) keeper := keepers.WasmKeeper specs := map[string]struct { @@ -586,7 +586,7 @@ func TestQueryContractInfo(t *testing.T) { contractAddr = RandomAccountAddress(t) anyDate = time.Now().UTC() ) - ctx, keepers := CreateTestInput(t, false, AvailableCapabilities, nil, nil) + ctx, keepers := CreateTestInput(t, false, AvailableCapabilities) // register an example extension. must be protobuf keepers.EncodingConfig.InterfaceRegistry.RegisterImplementations( (*types.ContractInfoExtension)(nil), @@ -652,7 +652,7 @@ func TestQueryContractInfo(t *testing.T) { } func TestQueryPinnedCodes(t *testing.T) { - ctx, keepers := CreateTestInput(t, false, AvailableCapabilities, nil, nil) + ctx, keepers := CreateTestInput(t, false, AvailableCapabilities) keeper := keepers.WasmKeeper exampleContract1 := InstantiateHackatomExampleContract(t, ctx, keepers) @@ -724,7 +724,7 @@ func TestQueryPinnedCodes(t *testing.T) { } func TestQueryParams(t *testing.T) { - ctx, keepers := CreateTestInput(t, false, AvailableCapabilities, nil, nil) + ctx, keepers := CreateTestInput(t, false, AvailableCapabilities) keeper := keepers.WasmKeeper q := Querier(keeper) @@ -755,7 +755,7 @@ func TestQueryCodeInfo(t *testing.T) { wasmCode, err := os.ReadFile("./testdata/hackatom.wasm") require.NoError(t, err) - ctx, keepers := CreateTestInput(t, false, AvailableCapabilities, nil, nil) + ctx, keepers := CreateTestInput(t, false, AvailableCapabilities) keeper := keepers.WasmKeeper anyAddress, err := sdk.AccAddressFromBech32("link1qyqszqgpqyqszqgpqyqszqgpqyqszqgp8apuk5") @@ -810,7 +810,7 @@ func TestQueryCodeInfoList(t *testing.T) { wasmCode, err := os.ReadFile("./testdata/hackatom.wasm") require.NoError(t, err) - ctx, keepers := CreateTestInput(t, false, AvailableCapabilities, nil, nil) + ctx, keepers := CreateTestInput(t, false, AvailableCapabilities) keeper := keepers.WasmKeeper anyAddress, err := sdk.AccAddressFromBech32("link1qyqszqgpqyqszqgpqyqszqgpqyqszqgp8apuk5") @@ -877,54 +877,3 @@ func fromBase64(s string) []byte { } return r } - -//func TestQueryInactiveContracts(t *testing.T) { -// ctx, keepers := CreateTestInput(t, false, AvailableCapabilities, nil, nil) -// keeper := keepers.WasmKeeper -// -// var mock wasmtesting.MockWasmer -// wasmtesting.MakeInstantiable(&mock) -// example1 := SeedNewContractInstance(t, ctx, keepers, &mock) -// ctx = ctx.WithBlockHeight(ctx.BlockHeight() + 1) -// example2 := SeedNewContractInstance(t, ctx, keepers, &mock) -// ctx = ctx.WithBlockHeight(ctx.BlockHeight() + 1) -// -// // set inactive -// err := keeper.deactivateContract(ctx, example1.Contract) -// require.NoError(t, err) -// err = keeper.deactivateContract(ctx, example2.Contract) -// require.NoError(t, err) -// -// q := Querier(keeper) -// rq := lbmtypes.QueryInactiveContractsRequest{} -// res, err := q.InactiveContracts(sdk.WrapSDKContext(ctx), &rq) -// require.NoError(t, err) -// expect := []string{example1.Contract.String(), example2.Contract.String()} -// for _, exp := range expect { -// assert.Contains(t, res.Addresses, exp) -// } -//} -// -//func TestQueryIsInactiveContract(t *testing.T) { -// ctx, keepers := CreateTestInput(t, false, AvailableCapabilities, nil, nil) -// keeper := keepers.WasmKeeper -// -// var mock wasmtesting.MockWasmer -// wasmtesting.MakeInstantiable(&mock) -// example := SeedNewContractInstance(t, ctx, keepers, &mock) -// -// q := Querier(keeper) -// rq := lbmtypes.QueryInactiveContractRequest{Address: example.Contract.String()} -// res, err := q.InactiveContract(sdk.WrapSDKContext(ctx), &rq) -// require.NoError(t, err) -// require.False(t, res.Inactivated) -// -// // set inactive -// err = keeper.deactivateContract(ctx, example.Contract) -// require.NoError(t, err) -// -// rq = lbmtypes.QueryInactiveContractRequest{Address: example.Contract.String()} -// res, err = q.InactiveContract(sdk.WrapSDKContext(ctx), &rq) -// require.NoError(t, err) -// require.True(t, res.Inactivated) -//} diff --git a/x/wasm/keeper/query_plugins.go b/x/wasm/keeper/query_plugins.go index c9cfb599aa..66ce876ece 100644 --- a/x/wasm/keeper/query_plugins.go +++ b/x/wasm/keeper/query_plugins.go @@ -20,7 +20,7 @@ type QueryHandler struct { Ctx sdk.Context Plugins WasmVMQueryHandler Caller sdk.AccAddress - GasRegister GasRegister + gasRegister GasRegister } func NewQueryHandler(ctx sdk.Context, vmQueryHandler WasmVMQueryHandler, caller sdk.AccAddress, gasRegister GasRegister) QueryHandler { @@ -28,7 +28,7 @@ func NewQueryHandler(ctx sdk.Context, vmQueryHandler WasmVMQueryHandler, caller Ctx: ctx, Plugins: vmQueryHandler, Caller: caller, - GasRegister: gasRegister, + gasRegister: gasRegister, } } @@ -42,7 +42,7 @@ var _ wasmvmtypes.Querier = QueryHandler{} func (q QueryHandler) Query(request wasmvmtypes.QueryRequest, gasLimit uint64) ([]byte, error) { // set a limit for a subCtx - sdkGas := q.GasRegister.FromWasmVMGas(gasLimit) + sdkGas := q.gasRegister.FromWasmVMGas(gasLimit) // discard all changes/ events in subCtx by not committing the cached context subCtx, _ := q.Ctx.WithGasMeter(sdk.NewGasMeter(sdkGas)).CacheContext() diff --git a/x/wasm/keeper/recurse_test.go b/x/wasm/keeper/recurse_test.go index c37905d38c..561df21ad8 100644 --- a/x/wasm/keeper/recurse_test.go +++ b/x/wasm/keeper/recurse_test.go @@ -45,7 +45,7 @@ func initRecurseContract(t *testing.T) (contract sdk.AccAddress, creator sdk.Acc return realWasmQuerier.HandleQuery(ctx, caller, request) }) } - ctx, keepers := CreateTestInput(t, false, AvailableCapabilities, nil, nil, WithQueryHandlerDecorator(countingQuerierDec)) + ctx, keepers := CreateTestInput(t, false, AvailableCapabilities, WithQueryHandlerDecorator(countingQuerierDec)) keeper = keepers.WasmKeeper exampleContract := InstantiateHackatomExampleContract(t, ctx, keepers) return exampleContract.Contract, exampleContract.CreatorAddr, ctx, keeper diff --git a/x/wasm/keeper/reflect_test.go b/x/wasm/keeper/reflect_test.go index e2de25da56..fc7c8d295c 100644 --- a/x/wasm/keeper/reflect_test.go +++ b/x/wasm/keeper/reflect_test.go @@ -41,7 +41,7 @@ const ReflectFeatures = "staking,mask,stargate,cosmwasm_1_1" func TestReflectContractSend(t *testing.T) { cdc := MakeEncodingConfig(t).Marshaler - ctx, keepers := CreateTestInput(t, false, ReflectFeatures, nil, nil, WithMessageEncoders(reflectEncoders(cdc))) + ctx, keepers := CreateTestInput(t, false, ReflectFeatures, WithMessageEncoders(reflectEncoders(cdc))) accKeeper, keeper, bankKeeper := keepers.AccountKeeper, keepers.ContractKeeper, keepers.BankKeeper deposit := sdk.NewCoins(sdk.NewInt64Coin("denom", 100000)) @@ -120,7 +120,7 @@ func TestReflectContractSend(t *testing.T) { func TestReflectCustomMsg(t *testing.T) { cdc := MakeEncodingConfig(t).Marshaler - ctx, keepers := CreateTestInput(t, false, ReflectFeatures, nil, nil, WithMessageEncoders(reflectEncoders(cdc)), WithQueryPlugins(reflectPlugins())) + ctx, keepers := CreateTestInput(t, false, ReflectFeatures, WithMessageEncoders(reflectEncoders(cdc)), WithQueryPlugins(reflectPlugins())) accKeeper, keeper, bankKeeper := keepers.AccountKeeper, keepers.ContractKeeper, keepers.BankKeeper deposit := sdk.NewCoins(sdk.NewInt64Coin("denom", 100000)) @@ -211,7 +211,7 @@ func TestReflectCustomMsg(t *testing.T) { func TestMaskReflectCustomQuery(t *testing.T) { cdc := MakeEncodingConfig(t).Marshaler - ctx, keepers := CreateTestInput(t, false, ReflectFeatures, nil, nil, WithMessageEncoders(reflectEncoders(cdc)), WithQueryPlugins(reflectPlugins())) + ctx, keepers := CreateTestInput(t, false, ReflectFeatures, WithMessageEncoders(reflectEncoders(cdc)), WithQueryPlugins(reflectPlugins())) keeper := keepers.WasmKeeper deposit := sdk.NewCoins(sdk.NewInt64Coin("denom", 100000)) @@ -259,7 +259,7 @@ func TestMaskReflectCustomQuery(t *testing.T) { func TestReflectStargateQuery(t *testing.T) { cdc := MakeEncodingConfig(t).Marshaler - ctx, keepers := CreateTestInput(t, false, ReflectFeatures, nil, nil, WithMessageEncoders(reflectEncoders(cdc)), WithQueryPlugins(reflectPlugins())) + ctx, keepers := CreateTestInput(t, false, ReflectFeatures, WithMessageEncoders(reflectEncoders(cdc)), WithQueryPlugins(reflectPlugins())) keeper := keepers.WasmKeeper funds := sdk.NewCoins(sdk.NewInt64Coin("denom", 320000)) @@ -302,7 +302,7 @@ func TestReflectStargateQuery(t *testing.T) { func TestReflectTotalSupplyQuery(t *testing.T) { cdc := MakeEncodingConfig(t).Marshaler - ctx, keepers := CreateTestInput(t, false, ReflectFeatures, nil, nil, WithMessageEncoders(reflectEncoders(cdc)), WithQueryPlugins(reflectPlugins())) + ctx, keepers := CreateTestInput(t, false, ReflectFeatures, WithMessageEncoders(reflectEncoders(cdc)), WithQueryPlugins(reflectPlugins())) keeper := keepers.WasmKeeper // upload code codeID := StoreReflectContract(t, ctx, keepers).CodeID @@ -353,7 +353,7 @@ func TestReflectTotalSupplyQuery(t *testing.T) { func TestReflectInvalidStargateQuery(t *testing.T) { cdc := MakeEncodingConfig(t).Marshaler - ctx, keepers := CreateTestInput(t, false, ReflectFeatures, nil, nil, WithMessageEncoders(reflectEncoders(cdc)), WithQueryPlugins(reflectPlugins())) + ctx, keepers := CreateTestInput(t, false, ReflectFeatures, WithMessageEncoders(reflectEncoders(cdc)), WithQueryPlugins(reflectPlugins())) keeper := keepers.WasmKeeper funds := sdk.NewCoins(sdk.NewInt64Coin("denom", 320000)) @@ -432,7 +432,7 @@ type reflectState struct { func TestMaskReflectWasmQueries(t *testing.T) { cdc := MakeEncodingConfig(t).Marshaler - ctx, keepers := CreateTestInput(t, false, ReflectFeatures, nil, nil, WithMessageEncoders(reflectEncoders(cdc)), WithQueryPlugins(reflectPlugins())) + ctx, keepers := CreateTestInput(t, false, ReflectFeatures, WithMessageEncoders(reflectEncoders(cdc)), WithQueryPlugins(reflectPlugins())) keeper := keepers.WasmKeeper deposit := sdk.NewCoins(sdk.NewInt64Coin("denom", 100000)) @@ -502,7 +502,7 @@ func TestMaskReflectWasmQueries(t *testing.T) { func TestWasmRawQueryWithNil(t *testing.T) { cdc := MakeEncodingConfig(t).Marshaler - ctx, keepers := CreateTestInput(t, false, ReflectFeatures, nil, nil, WithMessageEncoders(reflectEncoders(cdc)), WithQueryPlugins(reflectPlugins())) + ctx, keepers := CreateTestInput(t, false, ReflectFeatures, WithMessageEncoders(reflectEncoders(cdc)), WithQueryPlugins(reflectPlugins())) keeper := keepers.WasmKeeper deposit := sdk.NewCoins(sdk.NewInt64Coin("denom", 100000)) diff --git a/x/wasm/keeper/relay_test.go b/x/wasm/keeper/relay_test.go index 18b4daab60..65b632c040 100644 --- a/x/wasm/keeper/relay_test.go +++ b/x/wasm/keeper/relay_test.go @@ -21,7 +21,7 @@ func TestOnOpenChannel(t *testing.T) { var m wasmtesting.MockWasmer wasmtesting.MakeIBCInstantiable(&m) messenger := &wasmtesting.MockMessageHandler{} - parentCtx, keepers := CreateTestInput(t, false, AvailableCapabilities, nil, nil, WithMessageHandler(messenger)) + parentCtx, keepers := CreateTestInput(t, false, AvailableCapabilities, WithMessageHandler(messenger)) example := SeedNewContractInstance(t, parentCtx, keepers, &m) const myContractGas = 40 @@ -91,7 +91,7 @@ func TestOnConnectChannel(t *testing.T) { var m wasmtesting.MockWasmer wasmtesting.MakeIBCInstantiable(&m) messenger := &wasmtesting.MockMessageHandler{} - parentCtx, keepers := CreateTestInput(t, false, AvailableCapabilities, nil, nil, WithMessageHandler(messenger)) + parentCtx, keepers := CreateTestInput(t, false, AvailableCapabilities, WithMessageHandler(messenger)) example := SeedNewContractInstance(t, parentCtx, keepers, &m) const myContractGas = 40 @@ -202,7 +202,7 @@ func TestOnCloseChannel(t *testing.T) { var m wasmtesting.MockWasmer wasmtesting.MakeIBCInstantiable(&m) messenger := &wasmtesting.MockMessageHandler{} - parentCtx, keepers := CreateTestInput(t, false, AvailableCapabilities, nil, nil, WithMessageHandler(messenger)) + parentCtx, keepers := CreateTestInput(t, false, AvailableCapabilities, WithMessageHandler(messenger)) example := SeedNewContractInstance(t, parentCtx, keepers, &m) const myContractGas = 40 @@ -312,7 +312,7 @@ func TestOnRecvPacket(t *testing.T) { var m wasmtesting.MockWasmer wasmtesting.MakeIBCInstantiable(&m) messenger := &wasmtesting.MockMessageHandler{} - parentCtx, keepers := CreateTestInput(t, false, AvailableCapabilities, nil, nil, WithMessageHandler(messenger)) + parentCtx, keepers := CreateTestInput(t, false, AvailableCapabilities, WithMessageHandler(messenger)) example := SeedNewContractInstance(t, parentCtx, keepers, &m) const myContractGas = 40 const storageCosts = sdk.Gas(2879) @@ -474,7 +474,7 @@ func TestOnAckPacket(t *testing.T) { var m wasmtesting.MockWasmer wasmtesting.MakeIBCInstantiable(&m) messenger := &wasmtesting.MockMessageHandler{} - parentCtx, keepers := CreateTestInput(t, false, AvailableCapabilities, nil, nil, WithMessageHandler(messenger)) + parentCtx, keepers := CreateTestInput(t, false, AvailableCapabilities, WithMessageHandler(messenger)) example := SeedNewContractInstance(t, parentCtx, keepers, &m) const myContractGas = 40 @@ -579,7 +579,7 @@ func TestOnTimeoutPacket(t *testing.T) { var m wasmtesting.MockWasmer wasmtesting.MakeIBCInstantiable(&m) messenger := &wasmtesting.MockMessageHandler{} - parentCtx, keepers := CreateTestInput(t, false, AvailableCapabilities, nil, nil, WithMessageHandler(messenger)) + parentCtx, keepers := CreateTestInput(t, false, AvailableCapabilities, WithMessageHandler(messenger)) example := SeedNewContractInstance(t, parentCtx, keepers, &m) const myContractGas = 40 diff --git a/x/wasm/keeper/staking_test.go b/x/wasm/keeper/staking_test.go index 256126cd17..417e767625 100644 --- a/x/wasm/keeper/staking_test.go +++ b/x/wasm/keeper/staking_test.go @@ -94,7 +94,7 @@ type InvestmentResponse struct { } func TestInitializeStaking(t *testing.T) { - ctx, k := CreateTestInput(t, false, AvailableCapabilities, nil, nil) + ctx, k := CreateTestInput(t, false, AvailableCapabilities) accKeeper, stakingKeeper, keeper, bankKeeper := k.AccountKeeper, k.StakingKeeper, k.ContractKeeper, k.BankKeeper valAddr := addValidator(t, ctx, stakingKeeper, k.Faucet, sdk.NewInt64Coin("stake", 1234567)) @@ -169,7 +169,7 @@ type initInfo struct { } func initializeStaking(t *testing.T) initInfo { - ctx, k := CreateTestInput(t, false, AvailableCapabilities, nil, nil) + ctx, k := CreateTestInput(t, false, AvailableCapabilities) accKeeper, stakingKeeper, keeper, bankKeeper := k.AccountKeeper, k.StakingKeeper, k.WasmKeeper, k.BankKeeper valAddr := addValidator(t, ctx, stakingKeeper, k.Faucet, sdk.NewInt64Coin("stake", 1000000)) diff --git a/x/wasm/keeper/submsg_test.go b/x/wasm/keeper/submsg_test.go index 2810e3cd9d..c0a93b16a8 100644 --- a/x/wasm/keeper/submsg_test.go +++ b/x/wasm/keeper/submsg_test.go @@ -21,7 +21,7 @@ import ( // Try a simple send, no gas limit to for a sanity check before trying table tests func TestDispatchSubMsgSuccessCase(t *testing.T) { - ctx, keepers := CreateTestInput(t, false, ReflectFeatures, nil, nil) + ctx, keepers := CreateTestInput(t, false, ReflectFeatures) accKeeper, keeper, bankKeeper := keepers.AccountKeeper, keepers.WasmKeeper, keepers.BankKeeper deposit := sdk.NewCoins(sdk.NewInt64Coin("denom", 100000)) @@ -106,7 +106,7 @@ func TestDispatchSubMsgErrorHandling(t *testing.T) { subGasLimit := uint64(300_000) // prep - create one chain and upload the code - ctx, keepers := CreateTestInput(t, false, ReflectFeatures, nil, nil) + ctx, keepers := CreateTestInput(t, false, ReflectFeatures) ctx = ctx.WithGasMeter(sdk.NewInfiniteGasMeter()) ctx = ctx.WithBlockGasMeter(sdk.NewInfiniteGasMeter()) keeper := keepers.WasmKeeper @@ -361,7 +361,7 @@ func TestDispatchSubMsgEncodeToNoSdkMsg(t *testing.T) { Bank: nilEncoder, } - ctx, keepers := CreateTestInput(t, false, ReflectFeatures, nil, nil, WithMessageHandler(NewSDKMessageHandler(nil, customEncoders))) + ctx, keepers := CreateTestInput(t, false, ReflectFeatures, WithMessageHandler(NewSDKMessageHandler(nil, customEncoders))) keeper := keepers.WasmKeeper deposit := sdk.NewCoins(sdk.NewInt64Coin("denom", 100000)) @@ -427,7 +427,7 @@ func TestDispatchSubMsgEncodeToNoSdkMsg(t *testing.T) { // Try a simple send, no gas limit to for a sanity check before trying table tests func TestDispatchSubMsgConditionalReplyOn(t *testing.T) { - ctx, keepers := CreateTestInput(t, false, ReflectFeatures, nil, nil) + ctx, keepers := CreateTestInput(t, false, ReflectFeatures) keeper := keepers.WasmKeeper deposit := sdk.NewCoins(sdk.NewInt64Coin("denom", 100000)) diff --git a/x/wasm/keeper/test_common.go b/x/wasm/keeper/test_common.go index 3cd3a4d063..9f568cae10 100644 --- a/x/wasm/keeper/test_common.go +++ b/x/wasm/keeper/test_common.go @@ -74,7 +74,6 @@ import ( wasmappparams "github.com/line/wasmd/app/params" "github.com/line/wasmd/x/wasm/keeper/wasmtesting" - "github.com/line/wasmd/x/wasm/lbmtypes" "github.com/line/wasmd/x/wasm/types" ) @@ -113,8 +112,8 @@ func MakeEncodingConfig(_ testing.TB) wasmappparams.EncodingConfig { moduleBasics.RegisterLegacyAminoCodec(amino) moduleBasics.RegisterInterfaces(interfaceRegistry) // add wasmd types - lbmtypes.RegisterInterfaces(interfaceRegistry) - lbmtypes.RegisterLegacyAminoCodec(amino) + types.RegisterInterfaces(interfaceRegistry) + types.RegisterLegacyAminoCodec(amino) return encodingConfig } @@ -190,13 +189,13 @@ type TestKeepers struct { // CreateDefaultTestInput common settings for CreateTestInput func CreateDefaultTestInput(t testing.TB) (sdk.Context, TestKeepers) { - return CreateTestInput(t, false, "staking", nil, nil) + return CreateTestInput(t, false, "staking") } // CreateTestInput encoders can be nil to accept the defaults, or set it to override some of the message handlers (like default) -func CreateTestInput(t testing.TB, isCheckTx bool, availableCapabilities string, encoders *MessageEncoders, queriers *QueryPlugins, opts ...Option) (sdk.Context, TestKeepers) { +func CreateTestInput(t testing.TB, isCheckTx bool, availableCapabilities string, opts ...Option) (sdk.Context, TestKeepers) { // Load default wasm config - return createTestInput(t, isCheckTx, availableCapabilities, encoders, queriers, types.DefaultWasmConfig(), dbm.NewMemDB(), opts...) + return createTestInput(t, isCheckTx, availableCapabilities, types.DefaultWasmConfig(), dbm.NewMemDB(), opts...) } // encoders can be nil to accept the defaults, or set it to override some of the message handlers (like default) @@ -204,8 +203,6 @@ func createTestInput( t testing.TB, isCheckTx bool, availableCapabilities string, - encoders *MessageEncoders, - queriers *QueryPlugins, wasmConfig types.WasmConfig, db dbm.DB, opts ...Option, @@ -394,8 +391,6 @@ func createTestInput( tempDir, wasmConfig, availableCapabilities, - encoders, - queriers, opts..., ) keeper.SetParams(ctx, types.DefaultParams()) @@ -416,7 +411,7 @@ func createTestInput( AddRoute(govtypes.RouterKey, govtypes.ProposalHandler). AddRoute(paramproposal.RouterKey, params.NewParamChangeProposalHandler(paramsKeeper)). AddRoute(distributiontypes.RouterKey, distribution.NewCommunityPoolSpendProposalHandler(distKeeper)). - AddRoute(types.RouterKey, NewWasmProposalHandler(&keeper, lbmtypes.EnableAllProposals)) + AddRoute(types.RouterKey, NewWasmProposalHandler(&keeper, types.EnableAllProposals)) govKeeper := govkeeper.NewKeeper( appCodec, diff --git a/x/wasm/lbmtypes/genesis.go b/x/wasm/lbmtypes/genesis.go deleted file mode 100644 index 22d928c9df..0000000000 --- a/x/wasm/lbmtypes/genesis.go +++ /dev/null @@ -1,38 +0,0 @@ -package lbmtypes - -import ( - sdk "github.com/line/lbm-sdk/types" - sdkerrors "github.com/line/lbm-sdk/types/errors" -) - -func (s GenesisState) ValidateBasic() error { - if err := s.Params.ValidateBasic(); err != nil { - return sdkerrors.Wrap(err, "params") - } - for i := range s.Codes { - if err := s.Codes[i].ValidateBasic(); err != nil { - return sdkerrors.Wrapf(err, "code: %d", i) - } - } - for i := range s.Contracts { - if err := s.Contracts[i].ValidateBasic(); err != nil { - return sdkerrors.Wrapf(err, "contract: %d", i) - } - } - for i := range s.Sequences { - if err := s.Sequences[i].ValidateBasic(); err != nil { - return sdkerrors.Wrapf(err, "sequence: %d", i) - } - } - for i := range s.GenMsgs { - if err := s.GenMsgs[i].ValidateBasic(); err != nil { - return sdkerrors.Wrapf(err, "gen message: %d", i) - } - } - for i, addr := range s.InactiveContractAddresses { - if _, err := sdk.AccAddressFromBech32(addr); err != nil { - return sdkerrors.Wrapf(err, "inactive contract address: %d", i) - } - } - return nil -} diff --git a/x/wasm/module.go b/x/wasm/module.go index 7d1e96c4cb..8a4773d3e9 100644 --- a/x/wasm/module.go +++ b/x/wasm/module.go @@ -25,7 +25,6 @@ import ( "github.com/line/wasmd/x/wasm/client/cli" "github.com/line/wasmd/x/wasm/keeper" - "github.com/line/wasmd/x/wasm/lbmtypes" "github.com/line/wasmd/x/wasm/simulation" "github.com/line/wasmd/x/wasm/types" ) @@ -91,7 +90,7 @@ func (b AppModuleBasic) GetQueryCmd() *cobra.Command { // RegisterInterfaces implements InterfaceModule func (b AppModuleBasic) RegisterInterfaces(registry cdctypes.InterfaceRegistry) { - lbmtypes.RegisterInterfaces(registry) + types.RegisterInterfaces(registry) } // ____________________________________________________________________________ @@ -133,12 +132,6 @@ func NewAppModule( func (am AppModule) RegisterServices(cfg module.Configurator) { types.RegisterMsgServer(cfg.MsgServer(), keeper.NewMsgServerImpl(keeper.NewDefaultPermissionKeeper(am.keeper))) types.RegisterQueryServer(cfg.QueryServer(), NewQuerier(am.keeper)) - //lbmtypes.RegisterQueryServer(cfg.QueryServer(), NewQuerier(am.keeper)) - - // m := keeper.NewMigrator(*am.keeper) - // if err := cfg.RegisterMigration(types.ModuleName, 1, m.Migrate1to2); err != nil { - // panic(fmt.Sprintf("failed to migrate x/distribution from version 1 to 2: %v", err)) - // } } func (am AppModule) LegacyQuerierHandler(amino *codec.LegacyAmino) sdk.Querier { //nolint:staticcheck diff --git a/x/wasm/module_test.go b/x/wasm/module_test.go index 63521a13f2..16968bbc0f 100644 --- a/x/wasm/module_test.go +++ b/x/wasm/module_test.go @@ -37,7 +37,7 @@ type testData struct { } func setupTest(t *testing.T) testData { - ctx, keepers := CreateTestInput(t, false, "iterator,staking,stargate,cosmwasm_1_1", nil, nil) + ctx, keepers := CreateTestInput(t, false, "iterator,staking,stargate,cosmwasm_1_1") cdc := keeper.MakeTestCodec(t) data := testData{ module: NewAppModule(cdc, keepers.WasmKeeper, keepers.StakingKeeper, keepers.AccountKeeper, keepers.BankKeeper), @@ -139,8 +139,6 @@ type initMsg struct { Beneficiary sdk.AccAddress `json:"beneficiary"` } -type emptyMsg struct{} - type state struct { Verifier string `json:"verifier"` Beneficiary string `json:"beneficiary"` @@ -205,179 +203,6 @@ func TestHandleInstantiate(t *testing.T) { }) } -func TestHandleStoreAndInstantiate(t *testing.T) { - data := setupTest(t) - creator := data.faucet.NewFundedRandomAccount(data.ctx, sdk.NewInt64Coin("denom", 100000)) - - h := data.module.Route().Handler() - q := data.module.LegacyQuerierHandler(nil) - - _, _, bob := keyPubAddr() - _, _, fred := keyPubAddr() - - initMsg := initMsg{ - Verifier: fred, - Beneficiary: bob, - } - msgBz, err := json.Marshal(initMsg) - require.NoError(t, err) - - // create with no balance is legal - msg := &MsgStoreCodeAndInstantiateContract{ - Sender: creator.String(), - WASMByteCode: testContract, - Msg: msgBz, - Label: "contract for test", - Funds: nil, - } - res, err := h(data.ctx, msg) - require.NoError(t, err) - codeID, contractBech32Addr := parseStoreAndInitResponse(t, res.Data) - - require.Equal(t, uint64(1), codeID) - require.Equal(t, "link14hj2tavq8fpesdwxxcu44rty3hh90vhujrvcmstl4zr3txmfvw9sgf2vn8", contractBech32Addr) - // this should be standard x/wasm init event, nothing from contract - require.Equal(t, 4, len(res.Events), prettyEvents(res.Events)) - assert.Equal(t, "store_code", res.Events[0].Type) - assertAttribute(t, "code_id", "1", res.Events[0].Attributes[1]) - assert.Equal(t, "message", res.Events[1].Type) - assertAttribute(t, "module", "wasm", res.Events[1].Attributes[0]) - assert.Equal(t, "instantiate", res.Events[2].Type) - assertAttribute(t, "_contract_address", contractBech32Addr, res.Events[2].Attributes[0]) - assertAttribute(t, "code_id", "1", res.Events[2].Attributes[1]) - assert.Equal(t, "wasm", res.Events[3].Type) - assertAttribute(t, "_contract_address", contractBech32Addr, res.Events[3].Attributes[0]) - - assertCodeList(t, q, data.ctx, 1) - assertCodeBytes(t, q, data.ctx, 1, testContract) - - assertContractList(t, q, data.ctx, 1, []string{contractBech32Addr}) - assertContractInfo(t, q, data.ctx, contractBech32Addr, 1, creator) - assertContractState(t, q, data.ctx, contractBech32Addr, state{ - Verifier: fred.String(), - Beneficiary: bob.String(), - Funder: creator.String(), - }) -} - -func TestErrorsCreateAndInstantiate(t *testing.T) { - // init messages - _, _, bob := keyPubAddr() - _, _, fred := keyPubAddr() - initMsg := initMsg{ - Verifier: fred, - Beneficiary: bob, - } - validInitMsgBz, err := json.Marshal(initMsg) - require.NoError(t, err) - - invalidInitMsgBz, err := json.Marshal(emptyMsg{}) - - expectedContractBech32Addr := "link14hj2tavq8fpesdwxxcu44rty3hh90vhujrvcmstl4zr3txmfvw9sgf2vn8" - - // test cases - cases := map[string]struct { - msg sdk.Msg - isValid bool - expectedCodes int - expectedBytes []byte - }{ - "empty": { - msg: &MsgStoreCodeAndInstantiateContract{}, - isValid: false, - expectedCodes: 0, - expectedBytes: nil, - }, - "valid one": { - msg: &MsgStoreCodeAndInstantiateContract{ - Sender: addr1, - WASMByteCode: testContract, - Msg: validInitMsgBz, - Label: "foo", - Funds: nil, - }, - isValid: true, - expectedCodes: 1, - expectedBytes: testContract, - }, - "invalid wasm": { - msg: &MsgStoreCodeAndInstantiateContract{ - Sender: addr1, - WASMByteCode: []byte("foobar"), - Msg: validInitMsgBz, - Label: "foo", - Funds: nil, - }, - isValid: false, - expectedCodes: 0, - expectedBytes: nil, - }, - "old wasm (0.7)": { - msg: &MsgStoreCodeAndInstantiateContract{ - Sender: addr1, - WASMByteCode: oldContract, - Msg: validInitMsgBz, - Label: "foo", - Funds: nil, - }, - isValid: false, - expectedCodes: 0, - expectedBytes: nil, - }, - "invalid init message": { - msg: &MsgStoreCodeAndInstantiateContract{ - Sender: addr1, - WASMByteCode: testContract, - Msg: invalidInitMsgBz, - Label: "foo", - Funds: nil, - }, - isValid: false, - expectedCodes: 1, - expectedBytes: testContract, - }, - } - - for name, tc := range cases { - tc := tc - t.Run(name, func(t *testing.T) { - data := setupTest(t) - - h := data.module.Route().Handler() - q := data.module.LegacyQuerierHandler(nil) - - // asserting response - res, err := h(data.ctx, tc.msg) - if tc.isValid { - require.NoError(t, err) - codeID, contractBech32Addr := parseStoreAndInitResponse(t, res.Data) - require.Equal(t, uint64(1), codeID) - require.Equal(t, expectedContractBech32Addr, contractBech32Addr) - - } else { - require.Error(t, err, "%#v", res) - } - - // asserting code state - assertCodeList(t, q, data.ctx, tc.expectedCodes) - assertCodeBytes(t, q, data.ctx, 1, tc.expectedBytes) - - // asserting contract state - if tc.isValid { - assertContractList(t, q, data.ctx, 1, []string{expectedContractBech32Addr}) - assertContractInfo(t, q, data.ctx, expectedContractBech32Addr, 1, addrAcc1) - assertContractState(t, q, data.ctx, expectedContractBech32Addr, state{ - Verifier: fred.String(), - Beneficiary: bob.String(), - Funder: addrAcc1.String(), - }) - } else { - assertContractList(t, q, data.ctx, 0, []string{}) - } - }) - } -} - func TestHandleExecute(t *testing.T) { data := setupTest(t) diff --git a/x/wasm/simulation/operations_test.go b/x/wasm/simulation/operations_test.go index cbf0e93418..acc8cdd3ec 100644 --- a/x/wasm/simulation/operations_test.go +++ b/x/wasm/simulation/operations_test.go @@ -74,6 +74,6 @@ const SupportedFeatures = "iterator,staking,stargate" // Copy from keeper_test.go func makeKeeper(t *testing.T) keeper.TestKeepers { - _, keepers := keeper.CreateTestInput(t, false, SupportedFeatures, nil, nil) + _, keepers := keeper.CreateTestInput(t, false, SupportedFeatures) return keepers } diff --git a/x/wasm/types/errors.go b/x/wasm/types/errors.go index b087d9ae21..5717f464eb 100644 --- a/x/wasm/types/errors.go +++ b/x/wasm/types/errors.go @@ -87,9 +87,6 @@ var ( // ErrExceedMaxQueryStackSize error if max query stack size is exceeded ErrExceedMaxQueryStackSize = sdkErrors.Register(DefaultCodespace, 27, "max query stack size exceeded") - - // ErrInactiveContract error if the contract set inactive - ErrInactiveContract = sdkErrors.Register(DefaultCodespace, 101, "inactive contract") ) type ErrNoSuchContract struct { diff --git a/x/wasm/types/events.go b/x/wasm/types/events.go index 8aafb145a3..579024ed0c 100644 --- a/x/wasm/types/events.go +++ b/x/wasm/types/events.go @@ -10,8 +10,6 @@ const ( EventTypeInstantiate = "instantiate" EventTypeExecute = "execute" EventTypeMigrate = "migrate" - EventTypeUpdateAdmin = "update_admin" - EventTypeClearAdmin = "clear_admin" EventTypePinCode = "pin_code" EventTypeUnpinCode = "unpin_code" EventTypeSudo = "sudo" @@ -25,9 +23,7 @@ const ( AttributeKeyContractAddr = "_contract_address" AttributeKeyCodeID = "code_id" - AttributeKeyCodeIDs = "code_ids" AttributeKeyChecksum = "code_checksum" AttributeKeyResultDataHex = "result" - AttributeKeyFeature = "feature" AttributeKeyRequiredCapability = "required_capability" ) diff --git a/x/wasm/types/exported_keepers.go b/x/wasm/types/exported_keepers.go index 537df882db..e1da1874d4 100644 --- a/x/wasm/types/exported_keepers.go +++ b/x/wasm/types/exported_keepers.go @@ -21,8 +21,6 @@ type ViewKeeper interface { GetByteCode(ctx sdk.Context, codeID uint64) ([]byte, error) IsPinnedCode(ctx sdk.Context, codeID uint64) bool GetParams(ctx sdk.Context) Params - //IterateInactiveContracts(ctx sdk.Context, fn func(contractAddress sdk.AccAddress) bool) - //IsInactiveContract(ctx sdk.Context, contractAddress sdk.AccAddress) bool } // ContractOpsKeeper contains mutable operations on a contract. @@ -78,12 +76,6 @@ type ContractOpsKeeper interface { // SetAccessConfig updates the access config of a code id. SetAccessConfig(ctx sdk.Context, codeID uint64, caller sdk.AccAddress, newConfig AccessConfig) error - - //// DeactivateContract add the contract address to inactive contract list. - //DeactivateContract(ctx sdk.Context, contractAddress sdk.AccAddress) error - // - //// ActivateContract remove the contract address from inactive contract list. - //ActivateContract(ctx sdk.Context, contractAddress sdk.AccAddress) error } // IBCContractKeeper IBC lifecycle event handler diff --git a/x/wasm/types/genesis.go b/x/wasm/types/genesis.go index df137c2aae..810dfe51dc 100644 --- a/x/wasm/types/genesis.go +++ b/x/wasm/types/genesis.go @@ -37,11 +37,6 @@ func (s GenesisState) ValidateBasic() error { return sdkerrors.Wrapf(err, "gen message: %d", i) } } - //for i, addr := range s.InactiveContractAddresses { - // if _, err := sdk.AccAddressFromBech32(addr); err != nil { - // return sdkerrors.Wrapf(err, "inactive contract address: %d", i) - // } - //} return nil } diff --git a/x/wasm/types/keys.go b/x/wasm/types/keys.go index bbf35094a9..4cf6991999 100644 --- a/x/wasm/types/keys.go +++ b/x/wasm/types/keys.go @@ -32,8 +32,6 @@ var ( PinnedCodeIndexPrefix = []byte{0x07} TXCounterPrefix = []byte{0x08} - InactiveContractPrefix = []byte{0x90} - KeyLastCodeID = append(SequenceKeyPrefix, []byte("lastCodeId")...) KeyLastInstanceID = append(SequenceKeyPrefix, []byte("lastContractId")...) ) @@ -107,10 +105,3 @@ func GetPinnedCodeIndexPrefix(codeID uint64) []byte { func ParsePinnedCodeIndex(s []byte) uint64 { return sdk.BigEndianToUint64(s) } - -func GetInactiveContractKey(contractAddress sdk.AccAddress) []byte { - key := make([]byte, len(InactiveContractPrefix)+len(contractAddress)) - copy(key, InactiveContractPrefix) - copy(key[len(InactiveContractPrefix):], contractAddress) - return key -} diff --git a/x/wasm/types/keys_test.go b/x/wasm/types/keys_test.go index 84c6e5e2f4..340f8041cf 100644 --- a/x/wasm/types/keys_test.go +++ b/x/wasm/types/keys_test.go @@ -70,13 +70,3 @@ func TestGetContractByCreatedSecondaryIndexKey(t *testing.T) { } assert.Equal(t, exp, got) } - -func TestGetInactiveContractKey(t *testing.T) { - addr := bytes.Repeat([]byte{4}, 20) - got := GetInactiveContractKey(addr) - exp := []byte{0x90, // prefix - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, // address 20 bytes - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - } - assert.Equal(t, exp, got) -} diff --git a/x/wasm/types/params.go b/x/wasm/types/params.go index 5f573a6cfd..f93f64dce0 100644 --- a/x/wasm/types/params.go +++ b/x/wasm/types/params.go @@ -13,8 +13,10 @@ import ( paramtypes "github.com/line/lbm-sdk/x/params/types" ) -var ParamStoreKeyUploadAccess = []byte("uploadAccess") -var ParamStoreKeyInstantiateAccess = []byte("instantiateAccess") +var ( + ParamStoreKeyUploadAccess = []byte("uploadAccess") + ParamStoreKeyInstantiateAccess = []byte("instantiateAccess") +) var AllAccessTypes = []AccessType{ AccessTypeNobody, diff --git a/x/wasm/types/proposal_test.go b/x/wasm/types/proposal_test.go index 50070590f2..77a8bdc043 100644 --- a/x/wasm/types/proposal_test.go +++ b/x/wasm/types/proposal_test.go @@ -163,9 +163,7 @@ func TestValidateStoreCodeProposal(t *testing.T) { } func TestValidateInstantiateContractProposal(t *testing.T) { - var ( - invalidAddress = "invalid address" - ) + invalidAddress := "invalid address" specs := map[string]struct { src *InstantiateContractProposal @@ -258,9 +256,7 @@ func TestValidateInstantiateContractProposal(t *testing.T) { } func TestValidateMigrateContractProposal(t *testing.T) { - var ( - invalidAddress = "invalid address2" - ) + invalidAddress := "invalid address2" specs := map[string]struct { src *MigrateContractProposal @@ -319,9 +315,7 @@ func TestValidateMigrateContractProposal(t *testing.T) { } func TestValidateSudoContractProposal(t *testing.T) { - var ( - invalidAddress = "invalid address" - ) + invalidAddress := "invalid address" specs := map[string]struct { src *SudoContractProposal @@ -374,9 +368,7 @@ func TestValidateSudoContractProposal(t *testing.T) { } func TestValidateExecuteContractProposal(t *testing.T) { - var ( - invalidAddress = "invalid address" - ) + invalidAddress := "invalid address" specs := map[string]struct { src *ExecuteContractProposal @@ -435,9 +427,7 @@ func TestValidateExecuteContractProposal(t *testing.T) { } func TestValidateUpdateAdminProposal(t *testing.T) { - var ( - invalidAddress = "invalid address" - ) + invalidAddress := "invalid address" specs := map[string]struct { src *UpdateAdminProposal @@ -490,9 +480,7 @@ func TestValidateUpdateAdminProposal(t *testing.T) { } func TestValidateClearAdminProposal(t *testing.T) { - var ( - invalidAddress = "invalid address" - ) + invalidAddress := "invalid address" specs := map[string]struct { src *ClearAdminProposal diff --git a/x/wasm/types/wasmer_engine.go b/x/wasm/types/wasmer_engine.go index f32789b5a6..c4d0adabfe 100644 --- a/x/wasm/types/wasmer_engine.go +++ b/x/wasm/types/wasmer_engine.go @@ -10,7 +10,6 @@ const DefaultMaxQueryStackSize uint32 = 10 // WasmerEngine defines the WASM contract runtime engine. type WasmerEngine interface { - // Create will compile the wasm code, and store the resulting pre-compile // as well as the original code. Both can be referenced later via CodeID // This must be done one time for given code, after which it can be diff --git a/x/wasmplus/README.md b/x/wasmplus/README.md new file mode 100644 index 0000000000..e56386ca51 --- /dev/null +++ b/x/wasmplus/README.md @@ -0,0 +1,11 @@ +# wasmplus + +Extended module of [line/wasmd/x/wasm](https://github.com/line/wasmd/tree/cae21ecd251cea44f56209e0a4586ca2979c6c87/x/wasm) module. + +## Concepts + +Implements the difference part with cosmwasm/wasmd. + +### Inactivate + +### standard gas params \ No newline at end of file diff --git a/x/wasmplus/handler.go b/x/wasmplus/handler.go new file mode 100644 index 0000000000..0a363b6a40 --- /dev/null +++ b/x/wasmplus/handler.go @@ -0,0 +1,35 @@ +package wasmplus + +import ( + "strings" + + "github.com/gogo/protobuf/proto" + + sdk "github.com/line/lbm-sdk/types" + + "github.com/line/wasmd/x/wasm" + wasmtypes "github.com/line/wasmd/x/wasm/types" + "github.com/line/wasmd/x/wasmplus/keeper" + "github.com/line/wasmd/x/wasmplus/types" +) + +func NewHandler(k wasmtypes.ContractOpsKeeper) sdk.Handler { + msgServer := keeper.NewMsgServerImpl(k) + wasmHandler := wasm.NewHandler(k) + + return func(ctx sdk.Context, msg sdk.Msg) (*sdk.Result, error) { + var ( + res proto.Message + err error + ) + res, err = wasmHandler(ctx, msg) + if err != nil && strings.Contains(err.Error(), "MsgStoreCodeAndInstantiateContract") { + // handle wasmplus service + msg2, ok := msg.(*types.MsgStoreCodeAndInstantiateContract) + if ok { + res, err = msgServer.StoreCodeAndInstantiateContract(sdk.WrapSDKContext(ctx), msg2) + } + } + return sdk.WrapServiceResult(ctx, res, err) + } +} diff --git a/x/wasmplus/keeper/contract_keeper.go b/x/wasmplus/keeper/contract_keeper.go new file mode 100644 index 0000000000..37f5312afe --- /dev/null +++ b/x/wasmplus/keeper/contract_keeper.go @@ -0,0 +1,62 @@ +package keeper + +import ( + sdk "github.com/line/lbm-sdk/types" + sdkerrors "github.com/line/lbm-sdk/types/errors" + + wasmkeeper "github.com/line/wasmd/x/wasm/keeper" + "github.com/line/wasmd/x/wasmplus/types" +) + +var _ types.ContractOpsKeeper = PermissionedKeeper{} + +type decoratedKeeper interface { + types.ViewKeeper + activateContract(ctx sdk.Context, contractAddress sdk.AccAddress) error + deactivateContract(ctx sdk.Context, contractAddress sdk.AccAddress) error +} + +type PermissionedKeeper struct { + wasmkeeper.PermissionedKeeper + extended decoratedKeeper +} + +func NewPermissionedKeeper(k wasmkeeper.PermissionedKeeper, extended decoratedKeeper) *PermissionedKeeper { + return &PermissionedKeeper{k, extended} +} + +func (p PermissionedKeeper) Execute(ctx sdk.Context, contractAddress sdk.AccAddress, caller sdk.AccAddress, msg []byte, coins sdk.Coins) ([]byte, error) { + if p.extended.IsInactiveContract(ctx, contractAddress) { + return nil, sdkerrors.Wrap(types.ErrInactiveContract, "can not execute") + } + return p.PermissionedKeeper.Execute(ctx, contractAddress, caller, msg, coins) +} + +func (p PermissionedKeeper) Migrate(ctx sdk.Context, contractAddress sdk.AccAddress, caller sdk.AccAddress, newCodeID uint64, msg []byte) ([]byte, error) { + if p.extended.IsInactiveContract(ctx, contractAddress) { + return nil, sdkerrors.Wrap(types.ErrInactiveContract, "can not execute") + } + return p.PermissionedKeeper.Migrate(ctx, contractAddress, caller, newCodeID, msg) +} + +func (p PermissionedKeeper) UpdateContractAdmin(ctx sdk.Context, contractAddress sdk.AccAddress, caller sdk.AccAddress, newAdmin sdk.AccAddress) error { + if p.extended.IsInactiveContract(ctx, contractAddress) { + return sdkerrors.Wrap(types.ErrInactiveContract, "can not execute") + } + return p.PermissionedKeeper.UpdateContractAdmin(ctx, contractAddress, caller, newAdmin) +} + +func (p PermissionedKeeper) ClearContractAdmin(ctx sdk.Context, contractAddress sdk.AccAddress, caller sdk.AccAddress) error { + if p.extended.IsInactiveContract(ctx, contractAddress) { + return sdkerrors.Wrap(types.ErrInactiveContract, "can not execute") + } + return p.PermissionedKeeper.ClearContractAdmin(ctx, contractAddress, caller) +} + +func (p PermissionedKeeper) DeactivateContract(ctx sdk.Context, contractAddress sdk.AccAddress) error { + return p.extended.deactivateContract(ctx, contractAddress) +} + +func (p PermissionedKeeper) ActivateContract(ctx sdk.Context, contractAddress sdk.AccAddress) error { + return p.extended.activateContract(ctx, contractAddress) +} diff --git a/x/wasmplus/keeper/contract_keeper_test.go b/x/wasmplus/keeper/contract_keeper_test.go new file mode 100644 index 0000000000..69191f76d6 --- /dev/null +++ b/x/wasmplus/keeper/contract_keeper_test.go @@ -0,0 +1,83 @@ +package keeper + +import ( + "encoding/json" + "fmt" + "testing" + + "github.com/stretchr/testify/require" + + wasmkeeper "github.com/line/wasmd/x/wasm/keeper" +) + +func mustMarshal(t *testing.T, r interface{}) []byte { + t.Helper() + bz, err := json.Marshal(r) + require.NoError(t, err) + return bz +} + +func TestInactivateContract(t *testing.T) { + parentCtx, keepers := CreateTestInput(t, false, AvailableCapabilities, nil, nil) + example := InstantiateHackatomExampleContract(t, parentCtx, keepers) + otherContract := StoreHackatomExampleContract(t, parentCtx, keepers) + newVerifier := RandomAccountAddress(t) + newAdmin := RandomAccountAddress(t) + migrateMsg := []byte(fmt.Sprintf("{\"verifier\":\"%s\"}", newVerifier.String())) + + contractKeeper := NewPermissionedKeeper(*wasmkeeper.NewDefaultPermissionKeeper(keepers.WasmKeeper), keepers.WasmKeeper) + + var err error + // deactivate state + { + // check execute + _, err := contractKeeper.Execute(parentCtx, example.Contract, example.VerifierAddr, []byte(`{"release":{}}`), nil) + require.NoError(t, err) + + // check Migrate + _, err = contractKeeper.Migrate(parentCtx, example.Contract, example.CreatorAddr, otherContract.CodeID, migrateMsg) + require.NoError(t, err) + + // check update contract admin + err = contractKeeper.UpdateContractAdmin(parentCtx, example.Contract, example.CreatorAddr, newAdmin) + require.NoError(t, err) + + // check clear contract admin + err = contractKeeper.ClearContractAdmin(parentCtx, example.Contract, newAdmin) + require.NoError(t, err) + } + + // set deactivate + err = contractKeeper.DeactivateContract(parentCtx, example.Contract) + require.NoError(t, err) + + // deactivate state + { + // check execute + _, err = contractKeeper.Execute(parentCtx, example.Contract, newVerifier, []byte(`{"release":{}}`), nil) + require.Error(t, err) + + // check migrate + _, err = contractKeeper.Migrate(parentCtx, example.Contract, example.CreatorAddr, otherContract.CodeID, migrateMsg) + require.Error(t, err) + + // check update contract admin + err = contractKeeper.UpdateContractAdmin(parentCtx, example.Contract, example.CreatorAddr, newAdmin) + require.Error(t, err) + + // check clear contract admin + err = contractKeeper.ClearContractAdmin(parentCtx, example.Contract, newAdmin) + require.Error(t, err) + } + + // set activate + err = contractKeeper.ActivateContract(parentCtx, example.Contract) + require.NoError(t, err) + + // activate state + { + // check execute + _, err = contractKeeper.Execute(parentCtx, example.Contract, newVerifier, []byte(`{"release":{}}`), nil) + require.NoError(t, err) + } +} diff --git a/x/wasmplus/keeper/genesis.go b/x/wasmplus/keeper/genesis.go new file mode 100644 index 0000000000..e6a28973c1 --- /dev/null +++ b/x/wasmplus/keeper/genesis.go @@ -0,0 +1,57 @@ +package keeper + +import ( + sdk "github.com/line/lbm-sdk/types" + sdkerrors "github.com/line/lbm-sdk/types/errors" + abci "github.com/line/ostracon/abci/types" + + wasmkeeper "github.com/line/wasmd/x/wasm/keeper" + "github.com/line/wasmd/x/wasmplus/types" +) + +func InitGenesis( + ctx sdk.Context, + keeper *Keeper, + data types.GenesisState, + stakingKeeper wasmkeeper.ValidatorSetSource, + msgHandler sdk.Handler, +) ([]abci.ValidatorUpdate, error) { + result, err := wasmkeeper.InitGenesis(ctx, &keeper.Keeper, data.RawWasmState(), stakingKeeper, msgHandler) + if err != nil { + return nil, sdkerrors.Wrap(err, "wasm") + } + + keeper.setParams(ctx, data.Params) + + // set InactiveContractAddresses + for i, contractAddr := range data.InactiveContractAddresses { + inactiveContractAddr := sdk.MustAccAddressFromBech32(contractAddr) + err = keeper.deactivateContract(ctx, inactiveContractAddr) + if err != nil { + return nil, sdkerrors.Wrapf(err, "contract number %d", i) + } + } + + return result, nil +} + +// ExportGenesis returns a GenesisState for a given context and keeper. +func ExportGenesis(ctx sdk.Context, keeper *Keeper) *types.GenesisState { + wasmState := wasmkeeper.ExportGenesis(ctx, &keeper.Keeper) + params := keeper.getParams(ctx) + + genState := types.GenesisState{ + Params: params, + Codes: wasmState.Codes, + Contracts: wasmState.Contracts, + Sequences: wasmState.Sequences, + GenMsgs: wasmState.GenMsgs, + } + + keeper.IterateInactiveContracts(ctx, func(contractAddr sdk.AccAddress) (stop bool) { + genState.InactiveContractAddresses = append(genState.InactiveContractAddresses, contractAddr.String()) + return false + }) + + return &genState +} diff --git a/x/wasmplus/keeper/genesis_test.go b/x/wasmplus/keeper/genesis_test.go new file mode 100644 index 0000000000..fc9cc67cff --- /dev/null +++ b/x/wasmplus/keeper/genesis_test.go @@ -0,0 +1,632 @@ +package keeper + +import ( + "crypto/sha256" + "errors" + "os" + "testing" + "time" + + fuzz "github.com/google/gofuzz" + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" + dbm "github.com/tendermint/tm-db" + + "github.com/line/lbm-sdk/store" + sdk "github.com/line/lbm-sdk/types" + authkeeper "github.com/line/lbm-sdk/x/auth/keeper" + authtypes "github.com/line/lbm-sdk/x/auth/types" + banktypes "github.com/line/lbm-sdk/x/bank/types" + bankpluskeeper "github.com/line/lbm-sdk/x/bankplus/keeper" + distributionkeeper "github.com/line/lbm-sdk/x/distribution/keeper" + govtypes "github.com/line/lbm-sdk/x/gov/types" + paramskeeper "github.com/line/lbm-sdk/x/params/keeper" + paramstypes "github.com/line/lbm-sdk/x/params/types" + stakingkeeper "github.com/line/lbm-sdk/x/staking/keeper" + abci "github.com/line/ostracon/abci/types" + "github.com/line/ostracon/libs/log" + "github.com/line/ostracon/proto/ostracon/crypto" + ocproto "github.com/line/ostracon/proto/ostracon/types" + + "github.com/line/wasmd/x/wasm/keeper" + wasmkeeper "github.com/line/wasmd/x/wasm/keeper" + wasmTypes "github.com/line/wasmd/x/wasm/types" + "github.com/line/wasmd/x/wasmplus/types" +) + +const ( + firstCodeID = 1 + humanAddress = "link1hcttwju93d5m39467gjcq63p5kc4fdcn30dgd8" + + AvailableCapabilities = "iterator,staking,stargate,cosmwasm_1_1" +) + +func TestGenesisExportImport(t *testing.T) { + wasmKeeper, srcCtx, _ := setupKeeper(t) + contractKeeper := NewPermissionedKeeper(*wasmkeeper.NewGovPermissionKeeper(wasmKeeper), wasmKeeper) + + wasmCode, err := os.ReadFile("../../wasm/keeper/testdata/hackatom.wasm") + require.NoError(t, err) + + // store some test data + f := fuzz.New().Funcs(wasmkeeper.ModelFuzzers...) + + wasmKeeper.setParams(srcCtx, types.DefaultParams()) + + for i := 0; i < 5; i++ { + var ( + codeInfo wasmTypes.CodeInfo + contract wasmTypes.ContractInfo + stateModels []wasmTypes.Model + history []wasmTypes.ContractCodeHistoryEntry + pinned bool + contractExtension bool + verifier sdk.AccAddress + beneficiary sdk.AccAddress + ) + f.Fuzz(&codeInfo) + f.Fuzz(&contract) + f.Fuzz(&stateModels) + f.NilChance(0).Fuzz(&history) + f.Fuzz(&pinned) + f.Fuzz(&contractExtension) + f.Fuzz(&verifier) + f.Fuzz(&beneficiary) + + creatorAddr, err := sdk.AccAddressFromBech32(codeInfo.Creator) + require.NoError(t, err) + codeID, _, err := contractKeeper.Create(srcCtx, creatorAddr, wasmCode, &codeInfo.InstantiateConfig) + require.NoError(t, err) + if pinned { + err = contractKeeper.PinCode(srcCtx, codeID) + require.NoError(t, err) + } + if contractExtension { + anyTime := time.Now().UTC() + var nestedType govtypes.TextProposal + f.NilChance(0).Fuzz(&nestedType) + myExtension, err := govtypes.NewProposal(&nestedType, 1, anyTime, anyTime) + require.NoError(t, err) + err = contract.SetExtension(&myExtension) + require.NoError(t, err) + } + + initMsgBz := HackatomExampleInitMsg{ + Verifier: verifier, + Beneficiary: beneficiary, + }.GetBytes(t) + + _, _, err = contractKeeper.Instantiate(srcCtx, codeID, creatorAddr, creatorAddr, initMsgBz, "test", nil) + require.NoError(t, err) + } + var wasmParams types.Params + f.NilChance(0).Fuzz(&wasmParams) + wasmKeeper.setParams(srcCtx, wasmParams) + + // add inactiveContractAddr + var inactiveContractAddr []sdk.AccAddress + wasmKeeper.IterateContractInfo(srcCtx, func(address sdk.AccAddress, info wasmTypes.ContractInfo) bool { + err = contractKeeper.DeactivateContract(srcCtx, address) + require.NoError(t, err) + inactiveContractAddr = append(inactiveContractAddr, address) + return false + }) + + // export + exportedState := ExportGenesis(srcCtx, wasmKeeper) + exportedGenesis, err := wasmKeeper.cdc.MarshalJSON(exportedState) + require.NoError(t, err) + + // setup new instances + dstKeeper, dstCtx, _ := setupKeeper(t) + + // re-import + var importState types.GenesisState + err = dstKeeper.cdc.UnmarshalJSON(exportedGenesis, &importState) + require.NoError(t, err) + _, err = InitGenesis(dstCtx, dstKeeper, importState, &StakingKeeperMock{}, TestHandler(contractKeeper)) + require.NoError(t, err) + + // compare + dstParams := dstKeeper.getParams(dstCtx) + require.Equal(t, wasmParams, dstParams) + + var destInactiveContractAddr []sdk.AccAddress + dstKeeper.IterateInactiveContracts(dstCtx, func(contractAddress sdk.AccAddress) (stop bool) { + destInactiveContractAddr = append(destInactiveContractAddr, contractAddress) + return false + }) + require.Equal(t, inactiveContractAddr, destInactiveContractAddr) +} + +func TestGenesisInit(t *testing.T) { + wasmCode, err := os.ReadFile("../../wasm/keeper/testdata/hackatom.wasm") + require.NoError(t, err) + + myCodeInfo := wasmTypes.CodeInfoFixture(wasmTypes.WithSHA256CodeHash(wasmCode)) + specs := map[string]struct { + src types.GenesisState + stakingMock StakingKeeperMock + msgHandlerMock MockMsgHandler + expSuccess bool + }{ + "happy path: code info correct": { + src: types.GenesisState{ + Codes: []wasmTypes.Code{{ + CodeID: firstCodeID, + CodeInfo: myCodeInfo, + CodeBytes: wasmCode, + }}, + Sequences: []wasmTypes.Sequence{ + {IDKey: wasmTypes.KeyLastCodeID, Value: 2}, + {IDKey: wasmTypes.KeyLastInstanceID, Value: 1}, + }, + Params: types.DefaultParams(), + }, + expSuccess: true, + }, + "happy path: code ids can contain gaps": { + src: types.GenesisState{ + Codes: []wasmTypes.Code{{ + CodeID: firstCodeID, + CodeInfo: myCodeInfo, + CodeBytes: wasmCode, + }, { + CodeID: 3, + CodeInfo: myCodeInfo, + CodeBytes: wasmCode, + }}, + Sequences: []wasmTypes.Sequence{ + {IDKey: wasmTypes.KeyLastCodeID, Value: 10}, + {IDKey: wasmTypes.KeyLastInstanceID, Value: 1}, + }, + Params: types.DefaultParams(), + }, + expSuccess: true, + }, + "happy path: code order does not matter": { + src: types.GenesisState{ + Codes: []wasmTypes.Code{{ + CodeID: 2, + CodeInfo: myCodeInfo, + CodeBytes: wasmCode, + }, { + CodeID: firstCodeID, + CodeInfo: myCodeInfo, + CodeBytes: wasmCode, + }}, + Contracts: nil, + Sequences: []wasmTypes.Sequence{ + {IDKey: wasmTypes.KeyLastCodeID, Value: 3}, + {IDKey: wasmTypes.KeyLastInstanceID, Value: 1}, + }, + Params: types.DefaultParams(), + }, + expSuccess: true, + }, + "prevent code hash mismatch": {src: types.GenesisState{ + Codes: []wasmTypes.Code{{ + CodeID: firstCodeID, + CodeInfo: wasmTypes.CodeInfoFixture(func(i *wasmTypes.CodeInfo) { i.CodeHash = make([]byte, sha256.Size) }), + CodeBytes: wasmCode, + }}, + Params: types.DefaultParams(), + }}, + "prevent duplicate codeIDs": {src: types.GenesisState{ + Codes: []wasmTypes.Code{ + { + CodeID: firstCodeID, + CodeInfo: myCodeInfo, + CodeBytes: wasmCode, + }, + { + CodeID: firstCodeID, + CodeInfo: myCodeInfo, + CodeBytes: wasmCode, + }, + }, + Params: types.DefaultParams(), + }}, + "codes with same checksum can be pinned": { + src: types.GenesisState{ + Codes: []wasmTypes.Code{ + { + CodeID: firstCodeID, + CodeInfo: myCodeInfo, + CodeBytes: wasmCode, + Pinned: true, + }, + { + CodeID: 2, + CodeInfo: myCodeInfo, + CodeBytes: wasmCode, + Pinned: true, + }, + }, + Params: types.DefaultParams(), + }, + }, + "happy path: code id in info and contract do match": { + src: types.GenesisState{ + Codes: []wasmTypes.Code{{ + CodeID: firstCodeID, + CodeInfo: myCodeInfo, + CodeBytes: wasmCode, + }}, + Contracts: []wasmTypes.Contract{ + { + ContractAddress: keeper.BuildContractAddressClassic(1, 1).String(), + ContractInfo: wasmTypes.ContractInfoFixture(func(c *wasmTypes.ContractInfo) { c.CodeID = 1 }, wasmTypes.OnlyGenesisFields), + }, + }, + Sequences: []wasmTypes.Sequence{ + {IDKey: wasmTypes.KeyLastCodeID, Value: 2}, + {IDKey: wasmTypes.KeyLastInstanceID, Value: 2}, + }, + Params: types.DefaultParams(), + }, + expSuccess: true, + }, + "happy path: code info with two contracts": { + src: types.GenesisState{ + Codes: []wasmTypes.Code{{ + CodeID: firstCodeID, + CodeInfo: myCodeInfo, + CodeBytes: wasmCode, + }}, + Contracts: []wasmTypes.Contract{ + { + ContractAddress: keeper.BuildContractAddressClassic(1, 1).String(), + ContractInfo: wasmTypes.ContractInfoFixture(func(c *wasmTypes.ContractInfo) { c.CodeID = 1 }, wasmTypes.OnlyGenesisFields), + }, { + ContractAddress: keeper.BuildContractAddressClassic(1, 2).String(), + ContractInfo: wasmTypes.ContractInfoFixture(func(c *wasmTypes.ContractInfo) { c.CodeID = 1 }, wasmTypes.OnlyGenesisFields), + }, + }, + Sequences: []wasmTypes.Sequence{ + {IDKey: wasmTypes.KeyLastCodeID, Value: 2}, + {IDKey: wasmTypes.KeyLastInstanceID, Value: 3}, + }, + Params: types.DefaultParams(), + }, + expSuccess: true, + }, + "prevent contracts that points to non existing codeID": { + src: types.GenesisState{ + Contracts: []wasmTypes.Contract{ + { + ContractAddress: keeper.BuildContractAddressClassic(1, 1).String(), + ContractInfo: wasmTypes.ContractInfoFixture(func(c *wasmTypes.ContractInfo) { c.CodeID = 1 }, wasmTypes.OnlyGenesisFields), + }, + }, + Params: types.DefaultParams(), + }, + }, + "prevent duplicate contract address": { + src: types.GenesisState{ + Codes: []wasmTypes.Code{{ + CodeID: firstCodeID, + CodeInfo: myCodeInfo, + CodeBytes: wasmCode, + }}, + Contracts: []wasmTypes.Contract{ + { + ContractAddress: keeper.BuildContractAddressClassic(1, 1).String(), + ContractInfo: wasmTypes.ContractInfoFixture(func(c *wasmTypes.ContractInfo) { c.CodeID = 1 }, wasmTypes.OnlyGenesisFields), + }, { + ContractAddress: keeper.BuildContractAddressClassic(1, 1).String(), + ContractInfo: wasmTypes.ContractInfoFixture(func(c *wasmTypes.ContractInfo) { c.CodeID = 1 }, wasmTypes.OnlyGenesisFields), + }, + }, + Params: types.DefaultParams(), + }, + }, + "prevent duplicate contract model keys": { + src: types.GenesisState{ + Codes: []wasmTypes.Code{{ + CodeID: firstCodeID, + CodeInfo: myCodeInfo, + CodeBytes: wasmCode, + }}, + Contracts: []wasmTypes.Contract{ + { + ContractAddress: keeper.BuildContractAddressClassic(1, 1).String(), + ContractInfo: wasmTypes.ContractInfoFixture(func(c *wasmTypes.ContractInfo) { c.CodeID = 1 }, wasmTypes.OnlyGenesisFields), + ContractState: []wasmTypes.Model{ + { + Key: []byte{0x1}, + Value: []byte("foo"), + }, + { + Key: []byte{0x1}, + Value: []byte("bar"), + }, + }, + }, + }, + Params: types.DefaultParams(), + }, + }, + "prevent duplicate sequences": { + src: types.GenesisState{ + Sequences: []wasmTypes.Sequence{ + {IDKey: []byte("foo"), Value: 1}, + {IDKey: []byte("foo"), Value: 9999}, + }, + Params: types.DefaultParams(), + }, + }, + "prevent code id seq init value == max codeID used": { + src: types.GenesisState{ + Codes: []wasmTypes.Code{{ + CodeID: 2, + CodeInfo: myCodeInfo, + CodeBytes: wasmCode, + }}, + Sequences: []wasmTypes.Sequence{ + {IDKey: wasmTypes.KeyLastCodeID, Value: 1}, + }, + Params: types.DefaultParams(), + }, + }, + "prevent contract id seq init value == count contracts": { + src: types.GenesisState{ + Codes: []wasmTypes.Code{{ + CodeID: firstCodeID, + CodeInfo: myCodeInfo, + CodeBytes: wasmCode, + }}, + Contracts: []wasmTypes.Contract{ + { + ContractAddress: keeper.BuildContractAddressClassic(1, 1).String(), + ContractInfo: wasmTypes.ContractInfoFixture(func(c *wasmTypes.ContractInfo) { c.CodeID = 1 }, wasmTypes.OnlyGenesisFields), + }, + }, + Sequences: []wasmTypes.Sequence{ + {IDKey: wasmTypes.KeyLastCodeID, Value: 2}, + {IDKey: wasmTypes.KeyLastInstanceID, Value: 1}, + }, + Params: types.DefaultParams(), + }, + }, + "validator set update called for any genesis messages": { + src: types.GenesisState{ + GenMsgs: []wasmTypes.GenesisState_GenMsgs{ + {Sum: &wasmTypes.GenesisState_GenMsgs_StoreCode{ + StoreCode: wasmTypes.MsgStoreCodeFixture(), + }}, + }, + Params: types.DefaultParams(), + }, + stakingMock: StakingKeeperMock{expCalls: 1, validatorUpdate: []abci.ValidatorUpdate{ + { + PubKey: crypto.PublicKey{Sum: &crypto.PublicKey_Ed25519{ + Ed25519: []byte("a valid key"), + }}, + Power: 100, + }, + }}, + msgHandlerMock: MockMsgHandler{expCalls: 1, expMsg: wasmTypes.MsgStoreCodeFixture()}, + expSuccess: true, + }, + "validator set update not called on genesis msg handler errors": { + src: types.GenesisState{ + GenMsgs: []wasmTypes.GenesisState_GenMsgs{ + {Sum: &wasmTypes.GenesisState_GenMsgs_StoreCode{ + StoreCode: wasmTypes.MsgStoreCodeFixture(), + }}, + }, + Params: types.DefaultParams(), + }, + msgHandlerMock: MockMsgHandler{expCalls: 1, err: errors.New("test error response")}, + stakingMock: StakingKeeperMock{expCalls: 0}, + expSuccess: false, + }, + "happy path: inactiveContract": { + src: types.GenesisState{ + Codes: []wasmTypes.Code{{ + CodeID: firstCodeID, + CodeInfo: myCodeInfo, + CodeBytes: wasmCode, + }}, + Contracts: []wasmTypes.Contract{ + { + ContractAddress: keeper.BuildContractAddressClassic(1, 1).String(), + ContractInfo: wasmTypes.ContractInfoFixture(func(c *wasmTypes.ContractInfo) { c.CodeID = 1 }, wasmTypes.OnlyGenesisFields), + }, + }, + Sequences: []wasmTypes.Sequence{ + {IDKey: wasmTypes.KeyLastCodeID, Value: 2}, + {IDKey: wasmTypes.KeyLastInstanceID, Value: 3}, + }, + Params: types.DefaultParams(), + InactiveContractAddresses: []string{keeper.BuildContractAddressClassic(1, 1).String()}, + }, + expSuccess: true, + }, + "invalid path: inactiveContract - human address": { + src: types.GenesisState{ + Codes: []wasmTypes.Code{{ + CodeID: firstCodeID, + CodeInfo: myCodeInfo, + CodeBytes: wasmCode, + }}, + Sequences: []wasmTypes.Sequence{ + {IDKey: wasmTypes.KeyLastCodeID, Value: 2}, + {IDKey: wasmTypes.KeyLastInstanceID, Value: 1}, + }, + Params: types.DefaultParams(), + InactiveContractAddresses: []string{humanAddress}, + }, + }, + "invalid path: inactiveContract - do not imported": { + src: types.GenesisState{ + Codes: []wasmTypes.Code{{ + CodeID: firstCodeID, + CodeInfo: myCodeInfo, + CodeBytes: wasmCode, + }}, + Sequences: []wasmTypes.Sequence{ + {IDKey: wasmTypes.KeyLastCodeID, Value: 2}, + {IDKey: wasmTypes.KeyLastInstanceID, Value: 1}, + }, + Params: types.DefaultParams(), + InactiveContractAddresses: []string{keeper.BuildContractAddressClassic(1, 1).String()}, + }, + }, + } + for msg, spec := range specs { + t.Run(msg, func(t *testing.T) { + keeper, ctx, _ := setupKeeper(t) + + require.NoError(t, types.ValidateGenesis(spec.src)) + gotValidatorSet, gotErr := InitGenesis(ctx, keeper, spec.src, &spec.stakingMock, spec.msgHandlerMock.Handle) + if !spec.expSuccess { + require.Error(t, gotErr) + return + } + require.NoError(t, gotErr) + spec.msgHandlerMock.verifyCalls(t) + spec.stakingMock.verifyCalls(t) + assert.Equal(t, spec.stakingMock.validatorUpdate, gotValidatorSet) + for _, c := range spec.src.Codes { + assert.Equal(t, c.Pinned, keeper.IsPinnedCode(ctx, c.CodeID)) + } + }) + } +} + +func setupKeeper(t *testing.T) (*Keeper, sdk.Context, []sdk.StoreKey) { + t.Helper() + tempDir, err := os.MkdirTemp("", "wasm") + require.NoError(t, err) + t.Cleanup(func() { os.RemoveAll(tempDir) }) + + db := dbm.NewMemDB() + ms := store.NewCommitMultiStore(db) + + ctx := sdk.NewContext(ms, ocproto.Header{ + Height: 1234567, + Time: time.Date(2020, time.April, 22, 12, 0, 0, 0, time.UTC), + }, false, log.NewNopLogger()) + + encodingConfig := MakeEncodingConfig(t) + // register an example extension. must be protobuf + encodingConfig.InterfaceRegistry.RegisterImplementations( + (*wasmTypes.ContractInfoExtension)(nil), + &govtypes.Proposal{}, + ) + // also registering gov interfaces for nested Any type + govtypes.RegisterInterfaces(encodingConfig.InterfaceRegistry) + + wasmConfig := wasmTypes.DefaultWasmConfig() + + keys := sdk.NewKVStoreKeys( + authtypes.StoreKey, banktypes.StoreKey, paramstypes.StoreKey, types.StoreKey, + ) + for _, v := range keys { + ms.MountStoreWithDB(v, sdk.StoreTypeIAVL, db) + } + tkeys := sdk.NewTransientStoreKeys(paramstypes.TStoreKey) + for _, v := range tkeys { + ms.MountStoreWithDB(v, sdk.StoreTypeTransient, db) + } + require.NoError(t, ms.LoadLatestVersion()) + appCodec, legacyAmino := encodingConfig.Marshaler, encodingConfig.Amino + + paramsKeeper := paramskeeper.NewKeeper( + appCodec, + legacyAmino, + keys[paramstypes.StoreKey], + tkeys[paramstypes.TStoreKey], + ) + for _, m := range []string{ + authtypes.ModuleName, + banktypes.ModuleName, + types.ModuleName, + } { + paramsKeeper.Subspace(m) + } + subspace := func(m string) paramstypes.Subspace { + r, ok := paramsKeeper.GetSubspace(m) + require.True(t, ok) + return r + } + maccPerms := map[string][]string{ // module account permissions + types.ModuleName: {authtypes.Burner}, + } + + accountKeeper := authkeeper.NewAccountKeeper( + appCodec, + keys[authtypes.StoreKey], // target store + subspace(authtypes.ModuleName), + authtypes.ProtoBaseAccount, // prototype + maccPerms, + ) + + bankKeeper := bankpluskeeper.NewBaseKeeper( + appCodec, + keys[banktypes.StoreKey], + accountKeeper, + subspace(banktypes.ModuleName), + map[string]bool{}, + ) + + srcKeeper := NewKeeper( + appCodec, + keys[types.StoreKey], + subspace(types.ModuleName), + accountKeeper, + bankKeeper, + stakingkeeper.Keeper{}, + distributionkeeper.Keeper{}, + nil, + nil, + nil, + nil, + nil, + nil, + tempDir, + wasmConfig, + AvailableCapabilities, + nil, + nil, + ) + return &srcKeeper, ctx, []sdk.StoreKey{keys[types.StoreKey], keys[paramstypes.StoreKey]} +} + +type StakingKeeperMock struct { + err error + validatorUpdate []abci.ValidatorUpdate + expCalls int + gotCalls int +} + +func (s *StakingKeeperMock) ApplyAndReturnValidatorSetUpdates(_ sdk.Context) ([]abci.ValidatorUpdate, error) { + s.gotCalls++ + return s.validatorUpdate, s.err +} + +func (s *StakingKeeperMock) verifyCalls(t *testing.T) { + assert.Equal(t, s.expCalls, s.gotCalls, "number calls") +} + +type MockMsgHandler struct { + result *sdk.Result + err error + expCalls int + gotCalls int + expMsg sdk.Msg + gotMsg sdk.Msg +} + +func (m *MockMsgHandler) Handle(ctx sdk.Context, msg sdk.Msg) (*sdk.Result, error) { + m.gotCalls++ + m.gotMsg = msg + return m.result, m.err +} + +func (m *MockMsgHandler) verifyCalls(t *testing.T) { + assert.Equal(t, m.expMsg, m.gotMsg, "message param") + assert.Equal(t, m.expCalls, m.gotCalls, "number calls") +} diff --git a/x/wasmplus/keeper/keeper.go b/x/wasmplus/keeper/keeper.go new file mode 100644 index 0000000000..6a956c3e9b --- /dev/null +++ b/x/wasmplus/keeper/keeper.go @@ -0,0 +1,111 @@ +package keeper + +import ( + "fmt" + + "github.com/line/lbm-sdk/codec" + sdk "github.com/line/lbm-sdk/types" + bankpluskeeper "github.com/line/lbm-sdk/x/bankplus/keeper" + paramtypes "github.com/line/lbm-sdk/x/params/types" + "github.com/line/ostracon/libs/log" + + wasmkeeper "github.com/line/wasmd/x/wasm/keeper" + wasmtypes "github.com/line/wasmd/x/wasm/types" + "github.com/line/wasmd/x/wasmplus/types" +) + +type Keeper struct { + wasmkeeper.Keeper + cdc codec.Codec + storeKey sdk.StoreKey + metrics *Metrics + bank bankpluskeeper.Keeper + paramSpace paramtypes.Subspace +} + +func NewKeeper( + cdc codec.Codec, + storeKey sdk.StoreKey, + paramSpace paramtypes.Subspace, + accountKeeper wasmtypes.AccountKeeper, + bankKeeper wasmtypes.BankKeeper, + stakingKeeper wasmtypes.StakingKeeper, + distKeeper wasmtypes.DistributionKeeper, + channelKeeper wasmtypes.ChannelKeeper, + portKeeper wasmtypes.PortKeeper, + capabilityKeeper wasmtypes.CapabilityKeeper, + portSource wasmtypes.ICS20TransferPortSource, + router wasmkeeper.MessageRouter, + queryRouter wasmkeeper.GRPCQueryRouter, + homeDir string, + wasmConfig wasmtypes.WasmConfig, + availableCapabilities string, + customEncoders *wasmkeeper.MessageEncoders, + customPlugins *wasmkeeper.QueryPlugins, + opts ...wasmkeeper.Option, +) Keeper { + bankPlusKeeper, ok := bankKeeper.(bankpluskeeper.Keeper) + if !ok { + panic("bankKeeper should be bankPlusKeeper") + } + // set KeyTable if it has not already been set + if !paramSpace.HasKeyTable() { + paramSpace = paramSpace.WithKeyTable(types.ParamKeyTable()) + } + result := Keeper{ + cdc: cdc, + storeKey: storeKey, + metrics: NopMetrics(), + bank: bankPlusKeeper, + paramSpace: paramSpace, + } + result.Keeper = wasmkeeper.NewKeeper( + cdc, + storeKey, + paramSpace, + accountKeeper, + bankKeeper, + stakingKeeper, + distKeeper, + channelKeeper, + portKeeper, + capabilityKeeper, + portSource, + router, + queryRouter, + homeDir, + wasmConfig, + availableCapabilities, + //customEncoders, + //customPlugins, + opts..., + ) + return result +} + +func WasmQuerier(k *Keeper) wasmtypes.QueryServer { + return wasmkeeper.NewGrpcQuerier(k.cdc, k.storeKey, k, k.QueryGasLimit()) +} + +func Querier(k *Keeper) types.QueryServer { + return NewQuerier(k.storeKey, k) +} + +func (Keeper) Logger(ctx sdk.Context) log.Logger { + return ModuleLogger(ctx) +} + +func ModuleLogger(ctx sdk.Context) log.Logger { + return ctx.Logger().With("module", fmt.Sprintf("x/%s", types.ModuleName)) +} + +// GetCustomParams returns the total set of wasm parameters. +func (k Keeper) getParams(ctx sdk.Context) types.Params { + var params types.Params + k.paramSpace.GetParamSet(ctx, ¶ms) + return params +} + +func (k Keeper) setParams(ctx sdk.Context, ps types.Params) { + k.paramSpace.SetParamSet(ctx, &ps) +} diff --git a/x/wasmplus/keeper/keeper_extension.go b/x/wasmplus/keeper/keeper_extension.go new file mode 100644 index 0000000000..6ddcff4882 --- /dev/null +++ b/x/wasmplus/keeper/keeper_extension.go @@ -0,0 +1,68 @@ +package keeper + +import ( + sdk "github.com/line/lbm-sdk/types" + sdkerrors "github.com/line/lbm-sdk/types/errors" + + wasmtypes "github.com/line/wasmd/x/wasm/types" + "github.com/line/wasmd/x/wasmplus/types" +) + +func (k Keeper) IsInactiveContract(ctx sdk.Context, contractAddress sdk.AccAddress) bool { + store := ctx.KVStore(k.storeKey) + return store.Has(types.GetInactiveContractKey(contractAddress)) +} + +func (k Keeper) IterateInactiveContracts(ctx sdk.Context, fn func(contractAddress sdk.AccAddress) (stop bool)) { + store := ctx.KVStore(k.storeKey) + prefix := types.InactiveContractPrefix + iterator := sdk.KVStorePrefixIterator(store, prefix) + defer iterator.Close() + + for ; iterator.Valid(); iterator.Next() { + contractAddress := sdk.AccAddress(iterator.Value()) + if stop := fn(contractAddress); stop { + break + } + } +} + +func (k Keeper) addInactiveContract(ctx sdk.Context, contractAddress sdk.AccAddress) { + store := ctx.KVStore(k.storeKey) + key := types.GetInactiveContractKey(contractAddress) + + store.Set(key, contractAddress) +} + +func (k Keeper) deleteInactiveContract(ctx sdk.Context, contractAddress sdk.AccAddress) { + store := ctx.KVStore(k.storeKey) + key := types.GetInactiveContractKey(contractAddress) + store.Delete(key) +} + +// activateContract delete the contract address from inactivateContract list if the contract is deactivated. +func (k Keeper) activateContract(ctx sdk.Context, contractAddress sdk.AccAddress) error { + if !k.IsInactiveContract(ctx, contractAddress) { + return sdkerrors.Wrapf(wasmtypes.ErrNotFound, "no inactivate contract %s", contractAddress.String()) + } + + k.deleteInactiveContract(ctx, contractAddress) + k.bank.DeleteFromInactiveAddr(ctx, contractAddress) + + return nil +} + +// deactivateContract add the contract address to inactivateContract list. +func (k Keeper) deactivateContract(ctx sdk.Context, contractAddress sdk.AccAddress) error { + if k.IsInactiveContract(ctx, contractAddress) { + return sdkerrors.Wrapf(wasmtypes.ErrAccountExists, "already inactivate contract %s", contractAddress.String()) + } + if !k.HasContractInfo(ctx, contractAddress) { + return sdkerrors.Wrapf(wasmtypes.ErrInvalid, "no contract %s", contractAddress.String()) + } + + k.addInactiveContract(ctx, contractAddress) + k.bank.AddToInactiveAddr(ctx, contractAddress) + + return nil +} diff --git a/x/wasmplus/keeper/keeper_test.go b/x/wasmplus/keeper/keeper_test.go new file mode 100644 index 0000000000..79398d162c --- /dev/null +++ b/x/wasmplus/keeper/keeper_test.go @@ -0,0 +1,79 @@ +package keeper + +import ( + "fmt" + "testing" + + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" + + sdk "github.com/line/lbm-sdk/types" +) + +func TestActivateContract(t *testing.T) { + ctx, keepers := CreateTestInput(t, false, AvailableCapabilities, nil, nil) + + k := keepers.WasmKeeper + example := InstantiateHackatomExampleContract(t, ctx, keepers) + em := sdk.NewEventManager() + + // request no contract address -> fail + err := k.activateContract(ctx, example.CreatorAddr) + require.Error(t, err, fmt.Sprintf("no contract %s", example.CreatorAddr)) + + // try to activate an activated contract -> fail + err = k.activateContract(ctx.WithEventManager(em), example.Contract) + require.Error(t, err, fmt.Sprintf("no inactivate contract %s", example.Contract)) + + // add to inactive contract + err = k.deactivateContract(ctx, example.Contract) + require.NoError(t, err) + + // try to activate an inactivated contract -> success + err = k.activateContract(ctx, example.Contract) + require.NoError(t, err) +} + +func TestDeactivateContract(t *testing.T) { + ctx, keepers := CreateTestInput(t, false, AvailableCapabilities, nil, nil) + + k := keepers.WasmKeeper + example := InstantiateHackatomExampleContract(t, ctx, keepers) + em := sdk.NewEventManager() + + // request no contract address -> fail + err := k.deactivateContract(ctx, example.CreatorAddr) + require.Error(t, err, fmt.Sprintf("no contract %s", example.CreatorAddr)) + + // success case + err = k.deactivateContract(ctx, example.Contract) + require.NoError(t, err) + + // already inactivate contract -> fail + err = k.deactivateContract(ctx.WithEventManager(em), example.Contract) + require.Error(t, err, fmt.Sprintf("already inactivate contract %s", example.Contract)) +} + +func TestIterateInactiveContracts(t *testing.T) { + ctx, keepers := CreateTestInput(t, false, AvailableCapabilities, nil, nil) + k := keepers.WasmKeeper + + example1 := InstantiateHackatomExampleContract(t, ctx, keepers) + ctx = ctx.WithBlockHeight(ctx.BlockHeight() + 1) + example2 := InstantiateHackatomExampleContract(t, ctx, keepers) + ctx = ctx.WithBlockHeight(ctx.BlockHeight() + 1) + + err := k.deactivateContract(ctx, example1.Contract) + require.NoError(t, err) + err = k.deactivateContract(ctx, example2.Contract) + require.NoError(t, err) + + var inactiveContracts []sdk.AccAddress + k.IterateInactiveContracts(ctx, func(contractAddress sdk.AccAddress) (stop bool) { + inactiveContracts = append(inactiveContracts, contractAddress) + return false + }) + assert.Equal(t, 2, len(inactiveContracts)) + expectList := []sdk.AccAddress{example1.Contract, example2.Contract} + assert.ElementsMatch(t, expectList, inactiveContracts) +} diff --git a/x/wasmplus/keeper/metrics.go b/x/wasmplus/keeper/metrics.go new file mode 100644 index 0000000000..cfe8016785 --- /dev/null +++ b/x/wasmplus/keeper/metrics.go @@ -0,0 +1,145 @@ +package keeper + +import ( + "github.com/go-kit/kit/metrics" + "github.com/go-kit/kit/metrics/discard" + go_prometheus "github.com/go-kit/kit/metrics/prometheus" + "github.com/prometheus/client_golang/prometheus" + + wasmvmtypes "github.com/line/wasmvm/types" +) + +const ( + labelPinned = "pinned" + labelMemory = "memory" + labelFs = "fs" + MetricsSubsystem = "wasm" +) + +type Metrics struct { + InstantiateElapsedTimes metrics.Histogram + ExecuteElapsedTimes metrics.Histogram + MigrateElapsedTimes metrics.Histogram + SudoElapsedTimes metrics.Histogram + QuerySmartElapsedTimes metrics.Histogram + QueryRawElapsedTimes metrics.Histogram +} + +func PrometheusMetrics(namespace string, labelsAndValues ...string) *Metrics { + return &Metrics{ + InstantiateElapsedTimes: go_prometheus.NewSummaryFrom(prometheus.SummaryOpts{ + Namespace: namespace, + Subsystem: MetricsSubsystem, + Name: "instantiate", + Help: "elapsed time of Instantiate the wasm contract", + }, nil), + ExecuteElapsedTimes: go_prometheus.NewSummaryFrom(prometheus.SummaryOpts{ + Namespace: namespace, + Subsystem: MetricsSubsystem, + Name: "execute", + Help: "elapsed time of Execute the wasm contract", + }, nil), + MigrateElapsedTimes: go_prometheus.NewSummaryFrom(prometheus.SummaryOpts{ + Namespace: namespace, + Subsystem: MetricsSubsystem, + Name: "migrate", + Help: "elapsed time of Migrate the wasm contract", + }, nil), + SudoElapsedTimes: go_prometheus.NewSummaryFrom(prometheus.SummaryOpts{ + Namespace: namespace, + Subsystem: MetricsSubsystem, + Name: "sudo", + Help: "elapsed time of Sudo the wasm contract", + }, nil), + QuerySmartElapsedTimes: go_prometheus.NewSummaryFrom(prometheus.SummaryOpts{ + Namespace: namespace, + Subsystem: MetricsSubsystem, + Name: "query_smart", + Help: "elapsed time of QuerySmart the wasm contract", + }, nil), + QueryRawElapsedTimes: go_prometheus.NewSummaryFrom(prometheus.SummaryOpts{ + Namespace: namespace, + Subsystem: MetricsSubsystem, + Name: "query_raw", + Help: "elapsed time of QueryRaw the wasm contract", + }, nil), + } +} + +// NopMetrics returns no-op Metrics. +func NopMetrics() *Metrics { + return &Metrics{ + InstantiateElapsedTimes: discard.NewHistogram(), + ExecuteElapsedTimes: discard.NewHistogram(), + MigrateElapsedTimes: discard.NewHistogram(), + SudoElapsedTimes: discard.NewHistogram(), + QuerySmartElapsedTimes: discard.NewHistogram(), + QueryRawElapsedTimes: discard.NewHistogram(), + } +} + +type MetricsProvider func() *Metrics + +// PrometheusMetricsProvider returns PrometheusMetrics for each store +func PrometheusMetricsProvider(namespace string, labelsAndValues ...string) func() *Metrics { + return func() *Metrics { + return PrometheusMetrics(namespace, labelsAndValues...) + } +} + +// NopMetricsProvider returns NopMetrics for each store +func NopMetricsProvider() func() *Metrics { + //nolint:gocritic + return func() *Metrics { + return NopMetrics() + } +} + +// metricSource source of wasmvm metrics +type metricSource interface { + GetMetrics() (*wasmvmtypes.Metrics, error) +} + +var _ prometheus.Collector = (*WasmVMCacheMetricsCollector)(nil) + +// WasmVMCacheMetricsCollector custom metrics collector to be used with Prometheus +type WasmVMCacheMetricsCollector struct { + source metricSource + CacheHitsDescr *prometheus.Desc + CacheMissesDescr *prometheus.Desc + CacheElementsDescr *prometheus.Desc + CacheSizeDescr *prometheus.Desc +} + +// Register registers all metrics +func (p *WasmVMCacheMetricsCollector) Register(r prometheus.Registerer) { + r.MustRegister(p) +} + +// Describe sends the super-set of all possible descriptors of metrics +func (p *WasmVMCacheMetricsCollector) Describe(descs chan<- *prometheus.Desc) { + descs <- p.CacheHitsDescr + descs <- p.CacheMissesDescr + descs <- p.CacheElementsDescr + descs <- p.CacheSizeDescr +} + +// Collect is called by the Prometheus registry when collecting metrics. +func (p *WasmVMCacheMetricsCollector) Collect(c chan<- prometheus.Metric) { + m, err := p.source.GetMetrics() + if err != nil { + return + } + c <- prometheus.MustNewConstMetric(p.CacheHitsDescr, prometheus.CounterValue, float64(m.HitsPinnedMemoryCache), labelPinned) + c <- prometheus.MustNewConstMetric(p.CacheHitsDescr, prometheus.CounterValue, float64(m.HitsMemoryCache), labelMemory) + c <- prometheus.MustNewConstMetric(p.CacheHitsDescr, prometheus.CounterValue, float64(m.HitsFsCache), labelFs) + c <- prometheus.MustNewConstMetric(p.CacheMissesDescr, prometheus.CounterValue, float64(m.Misses)) + c <- prometheus.MustNewConstMetric(p.CacheElementsDescr, prometheus.GaugeValue, float64(m.ElementsPinnedMemoryCache), labelPinned) + c <- prometheus.MustNewConstMetric(p.CacheElementsDescr, prometheus.GaugeValue, float64(m.ElementsMemoryCache), labelMemory) + c <- prometheus.MustNewConstMetric(p.CacheSizeDescr, prometheus.GaugeValue, float64(m.SizeMemoryCache), labelMemory) + c <- prometheus.MustNewConstMetric(p.CacheSizeDescr, prometheus.GaugeValue, float64(m.SizePinnedMemoryCache), labelPinned) + // Node about fs metrics: + // The number of elements and the size of elements in the file system cache cannot easily be obtained. + // We had to either scan the whole directory of potentially thousands of files or track the values when files are added or removed. + // Such a tracking would need to be on disk such that the values are not cleared when the node is restarted. +} diff --git a/x/wasmplus/keeper/msg_server.go b/x/wasmplus/keeper/msg_server.go new file mode 100644 index 0000000000..ab6f17553d --- /dev/null +++ b/x/wasmplus/keeper/msg_server.go @@ -0,0 +1,60 @@ +package keeper + +import ( + "context" + + sdk "github.com/line/lbm-sdk/types" + sdkerrors "github.com/line/lbm-sdk/types/errors" + + wasmtypes "github.com/line/wasmd/x/wasm/types" + "github.com/line/wasmd/x/wasmplus/types" +) + +var _ types.MsgServer = msgServer{} + +type msgServer struct { + keeper wasmtypes.ContractOpsKeeper +} + +func NewMsgServerImpl(k wasmtypes.ContractOpsKeeper) types.MsgServer { + return &msgServer{keeper: k} +} + +func (m msgServer) StoreCodeAndInstantiateContract(goCtx context.Context, + msg *types.MsgStoreCodeAndInstantiateContract) (*types.MsgStoreCodeAndInstantiateContractResponse, error) { + ctx := sdk.UnwrapSDKContext(goCtx) + senderAddr, err := sdk.AccAddressFromBech32(msg.Sender) + if err != nil { + return nil, sdkerrors.Wrap(err, "sender") + } + codeID, _, err := m.keeper.Create(ctx, senderAddr, msg.WASMByteCode, msg.InstantiatePermission) + if err != nil { + return nil, err + } + + ctx.EventManager().EmitEvent(sdk.NewEvent( + sdk.EventTypeMessage, + sdk.NewAttribute(sdk.AttributeKeyModule, types.ModuleName), + sdk.NewAttribute(sdk.AttributeKeySender, msg.Sender), + )) + + var adminAddr sdk.AccAddress + if msg.Admin != "" { + adminAddr, err = sdk.AccAddressFromBech32(msg.Admin) + if err != nil { + return nil, sdkerrors.Wrap(err, "admin") + } + } + + contractAddr, data, err := m.keeper.Instantiate(ctx, codeID, senderAddr, adminAddr, msg.Msg, + msg.Label, msg.Funds) + if err != nil { + return nil, err + } + + return &types.MsgStoreCodeAndInstantiateContractResponse{ + CodeID: codeID, + Address: contractAddr.String(), + Data: data, + }, nil +} diff --git a/x/wasmplus/keeper/proposal_handler.go b/x/wasmplus/keeper/proposal_handler.go new file mode 100644 index 0000000000..2727abb0ad --- /dev/null +++ b/x/wasmplus/keeper/proposal_handler.go @@ -0,0 +1,89 @@ +package keeper + +import ( + sdk "github.com/line/lbm-sdk/types" + sdkerrors "github.com/line/lbm-sdk/types/errors" + govtypes "github.com/line/lbm-sdk/x/gov/types" + + wasmkeeper "github.com/line/wasmd/x/wasm/keeper" + wasmtypes "github.com/line/wasmd/x/wasm/types" + "github.com/line/wasmd/x/wasmplus/types" +) + +// NewWasmProposalHandler creates a new governance Handler for wasm proposals +func NewWasmProposalHandler(k *Keeper, enabledProposalType []wasmtypes.ProposalType) govtypes.Handler { + govPerm := wasmkeeper.NewGovPermissionKeeper(k) + return NewWasmProposalHandlerX(NewPermissionedKeeper(*govPerm, k), enabledProposalType) +} + +// NewWasmProposalHandlerX creates a new governance Handler for wasm proposals +func NewWasmProposalHandlerX(k types.ContractOpsKeeper, enabledProposalTypes []wasmtypes.ProposalType) govtypes.Handler { + handler := wasmkeeper.NewWasmProposalHandlerX(k, enabledProposalTypes) + enabledTypes := make(map[string]struct{}, len(enabledProposalTypes)) + for i := range enabledProposalTypes { + enabledTypes[string(enabledProposalTypes[i])] = struct{}{} + } + return func(ctx sdk.Context, content govtypes.Content) error { + err := handler(ctx, content) + if err != nil { + if _, ok := enabledTypes[content.ProposalType()]; !ok { + return sdkerrors.Wrapf(sdkerrors.ErrUnknownRequest, "unsupported wasm proposal content type: %q", content.ProposalType()) + } + switch c := content.(type) { + case *types.DeactivateContractProposal: + return handleDeactivateContractProposal(ctx, k, *c) + case *types.ActivateContractProposal: + return handleActivateContractProposal(ctx, k, *c) + default: + return sdkerrors.Wrapf(sdkerrors.ErrUnknownRequest, "unrecognized wasm proposal content type: %T", c) + } + } + return nil + } +} + +func handleDeactivateContractProposal(ctx sdk.Context, k types.ContractOpsKeeper, p types.DeactivateContractProposal) error { + if err := p.ValidateBasic(); err != nil { + return err + } + + // The error is already checked in ValidateBasic. + //nolint:errcheck + contractAddr, _ := sdk.AccAddressFromBech32(p.Contract) + + err := k.DeactivateContract(ctx, contractAddr) + if err != nil { + return err + } + + event := types.EventDeactivateContractProposal{ + Contract: contractAddr.String(), + } + if err := ctx.EventManager().EmitTypedEvent(&event); err != nil { + return err + } + + return nil +} + +func handleActivateContractProposal(ctx sdk.Context, k types.ContractOpsKeeper, p types.ActivateContractProposal) error { + if err := p.ValidateBasic(); err != nil { + return err + } + + // The error is already checked in ValidateBasic. + //nolint:errcheck + contractAddr, _ := sdk.AccAddressFromBech32(p.Contract) + + err := k.ActivateContract(ctx, contractAddr) + if err != nil { + return err + } + + event := types.EventActivateContractProposal{Contract: contractAddr.String()} + if err := ctx.EventManager().EmitTypedEvent(&event); err != nil { + return nil + } + + return nil +} diff --git a/x/wasmplus/keeper/proposal_integration_test.go b/x/wasmplus/keeper/proposal_integration_test.go new file mode 100644 index 0000000000..cce660a520 --- /dev/null +++ b/x/wasmplus/keeper/proposal_integration_test.go @@ -0,0 +1,71 @@ +package keeper + +import ( + "testing" + + "github.com/stretchr/testify/require" + + sdk "github.com/line/lbm-sdk/types" + + "github.com/line/wasmd/x/wasmplus/types" +) + +func TestValidateDeactivateContractProposal(t *testing.T) { + ctx, keepers := CreateTestInput(t, false, "staking", nil, nil) + govKeeper, wasmKeeper := keepers.GovKeeper, keepers.WasmKeeper + + example := InstantiateHackatomExampleContract(t, ctx, keepers) + + src := types.DeactivateContractProposal{ + Title: "Foo", + Description: "Bar", + Contract: example.Contract.String(), + } + + em := sdk.NewEventManager() + + // when stored + storedProposal, err := govKeeper.SubmitProposal(ctx, &src) + require.NoError(t, err) + + // proposal execute + handler := govKeeper.Router().GetRoute(storedProposal.ProposalRoute()) + err = handler(ctx.WithEventManager(em), storedProposal.GetContent()) + require.NoError(t, err) + + // then + isInactive := wasmKeeper.IsInactiveContract(ctx, example.Contract) + require.True(t, isInactive) +} + +func TestActivateContractProposal(t *testing.T) { + ctx, keepers := CreateTestInput(t, false, "staking", nil, nil) + govKeeper, wasmKeeper := keepers.GovKeeper, keepers.WasmKeeper + + example := InstantiateHackatomExampleContract(t, ctx, keepers) + + // set deactivate + err := wasmKeeper.deactivateContract(ctx, example.Contract) + require.NoError(t, err) + + src := types.ActivateContractProposal{ + Title: "Foo", + Description: "Bar", + Contract: example.Contract.String(), + } + + em := sdk.NewEventManager() + + // when stored + storedProposal, err := govKeeper.SubmitProposal(ctx, &src) + require.NoError(t, err) + + // proposal execute + handler := govKeeper.Router().GetRoute(storedProposal.ProposalRoute()) + err = handler(ctx.WithEventManager(em), storedProposal.GetContent()) + require.NoError(t, err) + + // then + isInactive := wasmKeeper.IsInactiveContract(ctx, example.Contract) + require.False(t, isInactive) +} diff --git a/x/wasmplus/keeper/querier.go b/x/wasmplus/keeper/querier.go new file mode 100644 index 0000000000..f0cfcee70f --- /dev/null +++ b/x/wasmplus/keeper/querier.go @@ -0,0 +1,75 @@ +package keeper + +import ( + "context" + + "google.golang.org/grpc/codes" + "google.golang.org/grpc/status" + + "github.com/line/lbm-sdk/store/prefix" + sdk "github.com/line/lbm-sdk/types" + "github.com/line/lbm-sdk/types/query" + + wasmtypes "github.com/line/wasmd/x/wasm/types" + "github.com/line/wasmd/x/wasmplus/types" +) + +type queryKeeper interface { + IterateInactiveContracts(ctx sdk.Context, fn func(contractAddress sdk.AccAddress) bool) + IsInactiveContract(ctx sdk.Context, contractAddress sdk.AccAddress) bool + HasContractInfo(ctx sdk.Context, contractAddress sdk.AccAddress) bool +} + +type grpcQuerier struct { + keeper queryKeeper + storeKey sdk.StoreKey +} + +func NewQuerier(storeKey sdk.StoreKey, keeper queryKeeper) *grpcQuerier { + return &grpcQuerier{storeKey: storeKey, keeper: keeper} +} + +func (q grpcQuerier) InactiveContracts(c context.Context, req *types.QueryInactiveContractsRequest) (*types.QueryInactiveContractsResponse, error) { + if req == nil { + return nil, status.Error(codes.InvalidArgument, "empty request") + } + ctx := sdk.UnwrapSDKContext(c) + + addresses := make([]string, 0) + prefixStore := prefix.NewStore(ctx.KVStore(q.storeKey), types.InactiveContractPrefix) + pageRes, err := query.FilteredPaginate(prefixStore, req.Pagination, func(key []byte, value []byte, accumulate bool) (bool, error) { + if accumulate { + contractAddress := sdk.AccAddress(value) + addresses = append(addresses, contractAddress.String()) + } + return true, nil + }) + if err != nil { + return nil, err + } + return &types.QueryInactiveContractsResponse{ + Addresses: addresses, + Pagination: pageRes, + }, nil +} + +func (q grpcQuerier) InactiveContract(c context.Context, req *types.QueryInactiveContractRequest) (*types.QueryInactiveContractResponse, error) { + if req == nil { + return nil, status.Error(codes.InvalidArgument, "empty request") + } + ctx := sdk.UnwrapSDKContext(c) + + contractAddr, err := sdk.AccAddressFromBech32(req.Address) + if err != nil { + return nil, err + } + + if !q.keeper.HasContractInfo(ctx, contractAddr) { + return nil, wasmtypes.ErrNotFound + } + + inactivated := q.keeper.IsInactiveContract(ctx, contractAddr) + return &types.QueryInactiveContractResponse{ + Inactivated: inactivated, + }, nil +} diff --git a/x/wasmplus/keeper/querier_test.go b/x/wasmplus/keeper/querier_test.go new file mode 100644 index 0000000000..2638e34521 --- /dev/null +++ b/x/wasmplus/keeper/querier_test.go @@ -0,0 +1,59 @@ +package keeper + +import ( + "testing" + + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" + + sdk "github.com/line/lbm-sdk/types" + + "github.com/line/wasmd/x/wasmplus/types" +) + +func TestQueryInactiveContracts(t *testing.T) { + ctx, keepers := CreateTestInput(t, false, AvailableCapabilities, nil, nil) + keeper := keepers.WasmKeeper + + example1 := InstantiateHackatomExampleContract(t, ctx, keepers) + ctx = ctx.WithBlockHeight(ctx.BlockHeight() + 1) + example2 := InstantiateHackatomExampleContract(t, ctx, keepers) + ctx = ctx.WithBlockHeight(ctx.BlockHeight() + 1) + + // set inactive + err := keeper.deactivateContract(ctx, example1.Contract) + require.NoError(t, err) + err = keeper.deactivateContract(ctx, example2.Contract) + require.NoError(t, err) + + q := Querier(keeper) + rq := types.QueryInactiveContractsRequest{} + res, err := q.InactiveContracts(sdk.WrapSDKContext(ctx), &rq) + require.NoError(t, err) + expect := []string{example1.Contract.String(), example2.Contract.String()} + for _, exp := range expect { + assert.Contains(t, res.Addresses, exp) + } +} + +func TestQueryIsInactiveContract(t *testing.T) { + ctx, keepers := CreateTestInput(t, false, AvailableCapabilities, nil, nil) + keeper := keepers.WasmKeeper + + example := InstantiateHackatomExampleContract(t, ctx, keepers) + + q := Querier(keeper) + rq := types.QueryInactiveContractRequest{Address: example.Contract.String()} + res, err := q.InactiveContract(sdk.WrapSDKContext(ctx), &rq) + require.NoError(t, err) + require.False(t, res.Inactivated) + + // set inactive + err = keeper.deactivateContract(ctx, example.Contract) + require.NoError(t, err) + + rq = types.QueryInactiveContractRequest{Address: example.Contract.String()} + res, err = q.InactiveContract(sdk.WrapSDKContext(ctx), &rq) + require.NoError(t, err) + require.True(t, res.Inactivated) +} diff --git a/x/wasmplus/keeper/test_common.go b/x/wasmplus/keeper/test_common.go new file mode 100644 index 0000000000..3876d6f7b4 --- /dev/null +++ b/x/wasmplus/keeper/test_common.go @@ -0,0 +1,778 @@ +package keeper + +import ( + "bytes" + "encoding/binary" + "encoding/json" + "fmt" + "os" + "testing" + "time" + + "github.com/stretchr/testify/require" + dbm "github.com/tendermint/tm-db" + + "github.com/line/lbm-sdk/baseapp" + "github.com/line/lbm-sdk/codec" + "github.com/line/lbm-sdk/std" + "github.com/line/lbm-sdk/store" + sdk "github.com/line/lbm-sdk/types" + "github.com/line/lbm-sdk/types/address" + sdkerrors "github.com/line/lbm-sdk/types/errors" + "github.com/line/lbm-sdk/types/module" + "github.com/line/lbm-sdk/x/auth" + authkeeper "github.com/line/lbm-sdk/x/auth/keeper" + authtypes "github.com/line/lbm-sdk/x/auth/types" + "github.com/line/lbm-sdk/x/auth/vesting" + authzkeeper "github.com/line/lbm-sdk/x/authz/keeper" + "github.com/line/lbm-sdk/x/bank" + bankkeeper "github.com/line/lbm-sdk/x/bank/keeper" + banktypes "github.com/line/lbm-sdk/x/bank/types" + "github.com/line/lbm-sdk/x/bankplus" + bankpluskeeper "github.com/line/lbm-sdk/x/bankplus/keeper" + "github.com/line/lbm-sdk/x/capability" + capabilitykeeper "github.com/line/lbm-sdk/x/capability/keeper" + capabilitytypes "github.com/line/lbm-sdk/x/capability/types" + "github.com/line/lbm-sdk/x/crisis" + crisistypes "github.com/line/lbm-sdk/x/crisis/types" + "github.com/line/lbm-sdk/x/distribution" + distrclient "github.com/line/lbm-sdk/x/distribution/client" + distributionkeeper "github.com/line/lbm-sdk/x/distribution/keeper" + distributiontypes "github.com/line/lbm-sdk/x/distribution/types" + "github.com/line/lbm-sdk/x/evidence" + evidencetypes "github.com/line/lbm-sdk/x/evidence/types" + "github.com/line/lbm-sdk/x/feegrant" + "github.com/line/lbm-sdk/x/gov" + govkeeper "github.com/line/lbm-sdk/x/gov/keeper" + govtypes "github.com/line/lbm-sdk/x/gov/types" + "github.com/line/lbm-sdk/x/ibc/applications/transfer" + ibctransfertypes "github.com/line/lbm-sdk/x/ibc/applications/transfer/types" + ibc "github.com/line/lbm-sdk/x/ibc/core" + ibchost "github.com/line/lbm-sdk/x/ibc/core/24-host" + ibckeeper "github.com/line/lbm-sdk/x/ibc/core/keeper" + "github.com/line/lbm-sdk/x/mint" + minttypes "github.com/line/lbm-sdk/x/mint/types" + "github.com/line/lbm-sdk/x/params" + paramsclient "github.com/line/lbm-sdk/x/params/client" + paramskeeper "github.com/line/lbm-sdk/x/params/keeper" + paramstypes "github.com/line/lbm-sdk/x/params/types" + paramproposal "github.com/line/lbm-sdk/x/params/types/proposal" + "github.com/line/lbm-sdk/x/slashing" + slashingtypes "github.com/line/lbm-sdk/x/slashing/types" + "github.com/line/lbm-sdk/x/staking" + stakingkeeper "github.com/line/lbm-sdk/x/staking/keeper" + stakingtypes "github.com/line/lbm-sdk/x/staking/types" + "github.com/line/lbm-sdk/x/upgrade" + upgradeclient "github.com/line/lbm-sdk/x/upgrade/client" + upgradekeeper "github.com/line/lbm-sdk/x/upgrade/keeper" + upgradetypes "github.com/line/lbm-sdk/x/upgrade/types" + "github.com/line/ostracon/crypto" + "github.com/line/ostracon/crypto/ed25519" + "github.com/line/ostracon/libs/log" + ocproto "github.com/line/ostracon/proto/ostracon/types" + + wasmappparams "github.com/line/wasmd/app/params" + wasmkeeper "github.com/line/wasmd/x/wasm/keeper" + "github.com/line/wasmd/x/wasm/keeper/wasmtesting" + wasmtypes "github.com/line/wasmd/x/wasm/types" + "github.com/line/wasmd/x/wasmplus/types" +) + +var moduleBasics = module.NewBasicManager( + auth.AppModuleBasic{}, + bank.AppModuleBasic{}, + capability.AppModuleBasic{}, + staking.AppModuleBasic{}, + mint.AppModuleBasic{}, + distribution.AppModuleBasic{}, + gov.NewAppModuleBasic( + paramsclient.ProposalHandler, distrclient.ProposalHandler, upgradeclient.ProposalHandler, + ), + params.AppModuleBasic{}, + crisis.AppModuleBasic{}, + slashing.AppModuleBasic{}, + ibc.AppModuleBasic{}, + upgrade.AppModuleBasic{}, + evidence.AppModuleBasic{}, + transfer.AppModuleBasic{}, + vesting.AppModuleBasic{}, +) + +func MakeTestCodec(t testing.TB) codec.Codec { + return MakeEncodingConfig(t).Marshaler +} + +func MakeEncodingConfig(_ testing.TB) wasmappparams.EncodingConfig { + encodingConfig := wasmappparams.MakeEncodingConfig() + amino := encodingConfig.Amino + interfaceRegistry := encodingConfig.InterfaceRegistry + + std.RegisterInterfaces(interfaceRegistry) + std.RegisterLegacyAminoCodec(amino) + + moduleBasics.RegisterLegacyAminoCodec(amino) + moduleBasics.RegisterInterfaces(interfaceRegistry) + // add wasmd types + types.RegisterInterfaces(interfaceRegistry) + types.RegisterLegacyAminoCodec(amino) + + return encodingConfig +} + +var TestingStakeParams = stakingtypes.Params{ + UnbondingTime: 100, + MaxValidators: 10, + MaxEntries: 10, + HistoricalEntries: 10, + BondDenom: "stake", +} + +//type TestFaucet struct { +// t testing.TB +// bankKeeper bankkeeper.Keeper +// sender sdk.AccAddress +// balance sdk.Coins +// minterModuleName string +//} + +//func NewTestFaucet(t testing.TB, ctx sdk.Context, bankKeeper bankkeeper.Keeper, minterModuleName string, initialAmount ...sdk.Coin) *TestFaucet { +// require.NotEmpty(t, initialAmount) +// r := &TestFaucet{t: t, bankKeeper: bankKeeper, minterModuleName: minterModuleName} +// _, _, addr := keyPubAddr() +// r.sender = addr +// r.Mint(ctx, addr, initialAmount...) +// r.balance = initialAmount +// return r +//} + +//func (f *TestFaucet) Mint(parentCtx sdk.Context, addr sdk.AccAddress, amounts ...sdk.Coin) { +// require.NotEmpty(f.t, amounts) +// ctx := parentCtx.WithEventManager(sdk.NewEventManager()) // discard all faucet related events +// err := f.bankKeeper.MintCoins(ctx, f.minterModuleName, amounts) +// require.NoError(f.t, err) +// err = f.bankKeeper.SendCoinsFromModuleToAccount(ctx, f.minterModuleName, addr, amounts) +// require.NoError(f.t, err) +// f.balance = f.balance.Add(amounts...) +//} +// +//func (f *TestFaucet) Fund(parentCtx sdk.Context, receiver sdk.AccAddress, amounts ...sdk.Coin) { +// require.NotEmpty(f.t, amounts) +// // ensure faucet is always filled +// if !f.balance.IsAllGTE(amounts) { +// f.Mint(parentCtx, f.sender, amounts...) +// } +// ctx := parentCtx.WithEventManager(sdk.NewEventManager()) // discard all faucet related events +// err := f.bankKeeper.SendCoins(ctx, f.sender, receiver, amounts) +// require.NoError(f.t, err) +// f.balance = f.balance.Sub(amounts) +//} +// +//func (f *TestFaucet) NewFundedRandomAccount(ctx sdk.Context, amounts ...sdk.Coin) sdk.AccAddress { +// _, _, addr := keyPubAddr() +// f.Fund(ctx, addr, amounts...) +// return addr +//} + +type TestKeepers struct { + AccountKeeper authkeeper.AccountKeeper + StakingKeeper stakingkeeper.Keeper + DistKeeper distributionkeeper.Keeper + BankKeeper bankkeeper.Keeper + GovKeeper govkeeper.Keeper + ContractKeeper types.ContractOpsKeeper + WasmKeeper *Keeper + IBCKeeper *ibckeeper.Keeper + Router *baseapp.Router + EncodingConfig wasmappparams.EncodingConfig + Faucet *wasmkeeper.TestFaucet + MultiStore sdk.CommitMultiStore +} + +// CreateDefaultTestInput common settings for CreateTestInput +func CreateDefaultTestInput(t testing.TB) (sdk.Context, TestKeepers) { + return CreateTestInput(t, false, "staking", nil, nil) +} + +// CreateTestInput encoders can be nil to accept the defaults, or set it to override some of the message handlers (like default) +func CreateTestInput( + t testing.TB, + isCheckTx bool, + availableCapabilities string, + encoders *wasmkeeper.MessageEncoders, + queriers *wasmkeeper.QueryPlugins, + opts ...wasmkeeper.Option, +) (sdk.Context, TestKeepers) { + // Load default wasm config + return createTestInput(t, isCheckTx, availableCapabilities, encoders, queriers, wasmtypes.DefaultWasmConfig(), dbm.NewMemDB(), opts...) +} + +// encoders can be nil to accept the defaults, or set it to override some of the message handlers (like default) +func createTestInput( + t testing.TB, + isCheckTx bool, + availableCapabilities string, + encoders *wasmkeeper.MessageEncoders, + queriers *wasmkeeper.QueryPlugins, + wasmConfig wasmtypes.WasmConfig, + db dbm.DB, + opts ...wasmkeeper.Option, +) (sdk.Context, TestKeepers) { + tempDir := t.TempDir() + + keys := sdk.NewKVStoreKeys( + authtypes.StoreKey, banktypes.StoreKey, stakingtypes.StoreKey, + minttypes.StoreKey, distributiontypes.StoreKey, slashingtypes.StoreKey, + govtypes.StoreKey, paramstypes.StoreKey, ibchost.StoreKey, upgradetypes.StoreKey, + evidencetypes.StoreKey, ibctransfertypes.StoreKey, + capabilitytypes.StoreKey, feegrant.StoreKey, authzkeeper.StoreKey, + types.StoreKey, + ) + ms := store.NewCommitMultiStore(db) + for _, v := range keys { + ms.MountStoreWithDB(v, sdk.StoreTypeIAVL, db) + } + tkeys := sdk.NewTransientStoreKeys(paramstypes.TStoreKey) + for _, v := range tkeys { + ms.MountStoreWithDB(v, sdk.StoreTypeTransient, db) + } + + memKeys := sdk.NewMemoryStoreKeys(capabilitytypes.MemStoreKey) + for _, v := range memKeys { + ms.MountStoreWithDB(v, sdk.StoreTypeMemory, db) + } + + require.NoError(t, ms.LoadLatestVersion()) + + ctx := sdk.NewContext(ms, ocproto.Header{ + Height: 1234567, + Time: time.Date(2020, time.April, 22, 12, 0, 0, 0, time.UTC), + }, isCheckTx, log.NewNopLogger()) + ctx = wasmtypes.WithTXCounter(ctx, 0) + + encodingConfig := MakeEncodingConfig(t) + appCodec, legacyAmino := encodingConfig.Marshaler, encodingConfig.Amino + + paramsKeeper := paramskeeper.NewKeeper( + appCodec, + legacyAmino, + keys[paramstypes.StoreKey], + tkeys[paramstypes.TStoreKey], + ) + for _, m := range []string{ + authtypes.ModuleName, + banktypes.ModuleName, + stakingtypes.ModuleName, + minttypes.ModuleName, + distributiontypes.ModuleName, + slashingtypes.ModuleName, + crisistypes.ModuleName, + ibctransfertypes.ModuleName, + capabilitytypes.ModuleName, + ibchost.ModuleName, + govtypes.ModuleName, + types.ModuleName, + } { + paramsKeeper.Subspace(m) + } + subspace := func(m string) paramstypes.Subspace { + r, ok := paramsKeeper.GetSubspace(m) + require.True(t, ok) + return r + } + maccPerms := map[string][]string{ // module account permissions + authtypes.FeeCollectorName: nil, + distributiontypes.ModuleName: nil, + minttypes.ModuleName: {authtypes.Minter}, + stakingtypes.BondedPoolName: {authtypes.Burner, authtypes.Staking}, + stakingtypes.NotBondedPoolName: {authtypes.Burner, authtypes.Staking}, + govtypes.ModuleName: {authtypes.Burner}, + ibctransfertypes.ModuleName: {authtypes.Minter, authtypes.Burner}, + types.ModuleName: {authtypes.Burner}, + } + accountKeeper := authkeeper.NewAccountKeeper( + appCodec, + keys[authtypes.StoreKey], // target store + subspace(authtypes.ModuleName), + authtypes.ProtoBaseAccount, // prototype + maccPerms, + ) + blockedAddrs := make(map[string]bool) + for acc := range maccPerms { + blockedAddrs[authtypes.NewModuleAddress(acc).String()] = true + } + + bankKeeper := bankpluskeeper.NewBaseKeeper( + appCodec, + keys[banktypes.StoreKey], + accountKeeper, + subspace(banktypes.ModuleName), + blockedAddrs, + ) + bankKeeper.SetParams(ctx, banktypes.DefaultParams()) + + stakingKeeper := stakingkeeper.NewKeeper( + appCodec, + keys[stakingtypes.StoreKey], + accountKeeper, + bankKeeper, + subspace(stakingtypes.ModuleName), + ) + stakingKeeper.SetParams(ctx, TestingStakeParams) + + distKeeper := distributionkeeper.NewKeeper( + appCodec, + keys[distributiontypes.StoreKey], + subspace(distributiontypes.ModuleName), + accountKeeper, + bankKeeper, + stakingKeeper, + authtypes.FeeCollectorName, + nil, + ) + distKeeper.SetParams(ctx, distributiontypes.DefaultParams()) + stakingKeeper.SetHooks(distKeeper.Hooks()) + + // set genesis items required for distribution + distKeeper.SetFeePool(ctx, distributiontypes.InitialFeePool()) + + upgradeKeeper := upgradekeeper.NewKeeper( + map[int64]bool{}, + keys[upgradetypes.StoreKey], + appCodec, + tempDir, + nil, + ) + + faucet := wasmkeeper.NewTestFaucet(t, ctx, bankKeeper, minttypes.ModuleName, sdk.NewCoin("stake", sdk.NewInt(100_000_000_000))) + + // set some funds ot pay out validatores, based on code from: + // https://github.com/line/lbm-sdk/blob/95b22d3a685f7eb531198e0023ef06873835e632/x/distribution/keeper/keeper_test.go#L49-L56 + distrAcc := distKeeper.GetDistributionAccount(ctx) + faucet.Fund(ctx, distrAcc.GetAddress(), sdk.NewCoin("stake", sdk.NewInt(2000000))) + accountKeeper.SetModuleAccount(ctx, distrAcc) + + capabilityKeeper := capabilitykeeper.NewKeeper( + appCodec, + keys[capabilitytypes.StoreKey], + memKeys[capabilitytypes.MemStoreKey], + ) + scopedIBCKeeper := capabilityKeeper.ScopeToModule(ibchost.ModuleName) + scopedWasmKeeper := capabilityKeeper.ScopeToModule(types.ModuleName) + + ibcKeeper := ibckeeper.NewKeeper( + appCodec, + keys[ibchost.StoreKey], + subspace(ibchost.ModuleName), + stakingKeeper, + upgradeKeeper, + scopedIBCKeeper, + ) + + router := baseapp.NewRouter() + bh := bank.NewHandler(bankKeeper) + router.AddRoute(sdk.NewRoute(banktypes.RouterKey, bh)) + sh := staking.NewHandler(stakingKeeper) + router.AddRoute(sdk.NewRoute(stakingtypes.RouterKey, sh)) + dh := distribution.NewHandler(distKeeper) + router.AddRoute(sdk.NewRoute(distributiontypes.RouterKey, dh)) + + querier := baseapp.NewGRPCQueryRouter() + querier.SetInterfaceRegistry(encodingConfig.InterfaceRegistry) + msgRouter := baseapp.NewMsgServiceRouter() + msgRouter.SetInterfaceRegistry(encodingConfig.InterfaceRegistry) + + cfg := sdk.GetConfig() + cfg.SetAddressVerifier(wasmtypes.VerifyAddressLen()) + + keeper := NewKeeper( + appCodec, + keys[types.StoreKey], + subspace(types.ModuleName), + accountKeeper, + bankKeeper, + stakingKeeper, + distKeeper, + ibcKeeper.ChannelKeeper, + &ibcKeeper.PortKeeper, + scopedWasmKeeper, + wasmtesting.MockIBCTransferKeeper{}, + msgRouter, + querier, + tempDir, + wasmConfig, + availableCapabilities, + encoders, + queriers, + opts..., + ) + keeper.setParams(ctx, types.DefaultParams()) + // add wasm handler so we can loop-back (contracts calling contracts) + contractKeeper := NewPermissionedKeeper(*wasmkeeper.NewDefaultPermissionKeeper(&keeper), keeper) + router.AddRoute(sdk.NewRoute(types.RouterKey, TestHandler(contractKeeper))) + + am := module.NewManager( // minimal module set that we use for message/ query tests + bankplus.NewAppModule(appCodec, bankKeeper, accountKeeper), + staking.NewAppModule(appCodec, stakingKeeper, accountKeeper, bankKeeper), + distribution.NewAppModule(appCodec, distKeeper, accountKeeper, bankKeeper, stakingKeeper), + ) + am.RegisterServices(module.NewConfigurator(appCodec, msgRouter, querier)) + // wasmplus service + types.RegisterMsgServer(msgRouter, NewMsgServerImpl(wasmkeeper.NewDefaultPermissionKeeper(keeper))) + types.RegisterQueryServer(querier, Querier(&keeper)) + // wasm service + wasmtypes.RegisterMsgServer(msgRouter, wasmkeeper.NewMsgServerImpl(wasmkeeper.NewDefaultPermissionKeeper(keeper))) + wasmtypes.RegisterQueryServer(querier, WasmQuerier(&keeper)) + + govRouter := govtypes.NewRouter(). + AddRoute(govtypes.RouterKey, govtypes.ProposalHandler). + AddRoute(paramproposal.RouterKey, params.NewParamChangeProposalHandler(paramsKeeper)). + AddRoute(distributiontypes.RouterKey, distribution.NewCommunityPoolSpendProposalHandler(distKeeper)). + AddRoute(types.RouterKey, NewWasmProposalHandler(&keeper, types.EnableAllProposals)) + + govKeeper := govkeeper.NewKeeper( + appCodec, + keys[govtypes.StoreKey], + subspace(govtypes.ModuleName).WithKeyTable(govtypes.ParamKeyTable()), + accountKeeper, + bankKeeper, + stakingKeeper, + govRouter, + ) + + govKeeper.SetProposalID(ctx, govtypes.DefaultStartingProposalID) + govKeeper.SetDepositParams(ctx, govtypes.DefaultDepositParams()) + govKeeper.SetVotingParams(ctx, govtypes.DefaultVotingParams()) + govKeeper.SetTallyParams(ctx, govtypes.DefaultTallyParams()) + + keepers := TestKeepers{ + AccountKeeper: accountKeeper, + StakingKeeper: stakingKeeper, + DistKeeper: distKeeper, + ContractKeeper: contractKeeper, + WasmKeeper: &keeper, + BankKeeper: bankKeeper, + GovKeeper: govKeeper, + IBCKeeper: ibcKeeper, + Router: router, + EncodingConfig: encodingConfig, + Faucet: faucet, + MultiStore: ms, + } + return ctx, keepers +} + +// TestHandler returns a wasm handler for tests (to avoid circular imports) +func TestHandler(k types.ContractOpsKeeper) sdk.Handler { + return func(ctx sdk.Context, msg sdk.Msg) (*sdk.Result, error) { + ctx = ctx.WithEventManager(sdk.NewEventManager()) + switch msg := msg.(type) { + case *wasmtypes.MsgStoreCode: + return handleStoreCode(ctx, k, msg) + case *wasmtypes.MsgInstantiateContract: + return handleInstantiate(ctx, k, msg) + case *wasmtypes.MsgExecuteContract: + return handleExecute(ctx, k, msg) + default: + errMsg := fmt.Sprintf("unrecognized wasm message type: %T", msg) + return nil, sdkerrors.Wrap(sdkerrors.ErrUnknownRequest, errMsg) + } + } +} + +func handleStoreCode(ctx sdk.Context, k types.ContractOpsKeeper, msg *wasmtypes.MsgStoreCode) (*sdk.Result, error) { + senderAddr, err := sdk.AccAddressFromBech32(msg.Sender) + if err != nil { + return nil, sdkerrors.Wrap(err, "sender") + } + codeID, _, err := k.Create(ctx, senderAddr, msg.WASMByteCode, msg.InstantiatePermission) + if err != nil { + return nil, err + } + + return &sdk.Result{ + Data: []byte(fmt.Sprintf("%d", codeID)), + Events: ctx.EventManager().ABCIEvents(), + }, nil +} + +func handleInstantiate(ctx sdk.Context, k types.ContractOpsKeeper, msg *wasmtypes.MsgInstantiateContract) (*sdk.Result, error) { + senderAddr, err := sdk.AccAddressFromBech32(msg.Sender) + if err != nil { + return nil, sdkerrors.Wrap(err, "sender") + } + var adminAddr sdk.AccAddress + if msg.Admin != "" { + if adminAddr, err = sdk.AccAddressFromBech32(msg.Admin); err != nil { + return nil, sdkerrors.Wrap(err, "admin") + } + } + + contractAddr, _, err := k.Instantiate(ctx, msg.CodeID, senderAddr, adminAddr, msg.Msg, msg.Label, msg.Funds) + if err != nil { + return nil, err + } + + return &sdk.Result{ + Data: contractAddr, + Events: ctx.EventManager().Events().ToABCIEvents(), + }, nil +} + +func handleExecute(ctx sdk.Context, k types.ContractOpsKeeper, msg *wasmtypes.MsgExecuteContract) (*sdk.Result, error) { + senderAddr, err := sdk.AccAddressFromBech32(msg.Sender) + if err != nil { + return nil, sdkerrors.Wrap(err, "sender") + } + contractAddr, err := sdk.AccAddressFromBech32(msg.Contract) + if err != nil { + return nil, sdkerrors.Wrap(err, "admin") + } + data, err := k.Execute(ctx, contractAddr, senderAddr, msg.Msg, msg.Funds) + if err != nil { + return nil, err + } + + return &sdk.Result{ + Data: data, + Events: ctx.EventManager().Events().ToABCIEvents(), + }, nil +} + +func RandomAccountAddress(_ testing.TB) sdk.AccAddress { + _, _, addr := keyPubAddr() + return addr +} + +// DeterministicAccountAddress creates a test address with v repeated to valid address size +func DeterministicAccountAddress(_ testing.TB, v byte) sdk.AccAddress { + return bytes.Repeat([]byte{v}, address.Len) +} + +func RandomBech32AccountAddress(t testing.TB) string { + return RandomAccountAddress(t).String() +} + +type ExampleContract struct { + InitialAmount sdk.Coins + Creator crypto.PrivKey + CreatorAddr sdk.AccAddress + CodeID uint64 + Checksum []byte +} + +func StoreHackatomExampleContract(t testing.TB, ctx sdk.Context, keepers TestKeepers) ExampleContract { + return StoreExampleContract(t, ctx, keepers, "../../wasm/keeper/testdata/hackatom.wasm") +} + +func StoreBurnerExampleContract(t testing.TB, ctx sdk.Context, keepers TestKeepers) ExampleContract { + return StoreExampleContract(t, ctx, keepers, "../../wasm/keeper/testdata/burner.wasm") +} + +func StoreIBCReflectContract(t testing.TB, ctx sdk.Context, keepers TestKeepers) ExampleContract { + return StoreExampleContract(t, ctx, keepers, "../../wasm/keeper/testdata/ibc_reflect.wasm") +} + +func StoreReflectContract(t testing.TB, ctx sdk.Context, keepers TestKeepers) ExampleContract { + return StoreExampleContract(t, ctx, keepers, "../../wasm/keeper/testdata/reflect.wasm") +} + +func StoreExampleContract(t testing.TB, ctx sdk.Context, keepers TestKeepers, wasmFile string) ExampleContract { + anyAmount := sdk.NewCoins(sdk.NewInt64Coin("denom", 1000)) + creator, _, creatorAddr := keyPubAddr() + fundAccounts(t, ctx, keepers.AccountKeeper, keepers.BankKeeper, creatorAddr, anyAmount) + + wasmCode, err := os.ReadFile(wasmFile) + require.NoError(t, err) + + codeID, _, err := keepers.ContractKeeper.Create(ctx, creatorAddr, wasmCode, nil) + require.NoError(t, err) + hash := keepers.WasmKeeper.GetCodeInfo(ctx, codeID).CodeHash + return ExampleContract{anyAmount, creator, creatorAddr, codeID, hash} +} + +//var wasmIdent = []byte("\x00\x61\x73\x6D") + +type ExampleContractInstance struct { + ExampleContract + Contract sdk.AccAddress +} + +//// SeedNewContractInstance sets the mock wasmerEngine in keeper and calls store + instantiate to init the contract's metadata +//func SeedNewContractInstance(t testing.TB, ctx sdk.Context, keepers TestKeepers, mock wasmtypes.WasmerEngine) ExampleContractInstance { +// t.Helper() +// exampleContract := StoreRandomContract(t, ctx, keepers, mock) +// contractAddr, _, err := keepers.ContractKeeper.Instantiate(ctx, exampleContract.CodeID, exampleContract.CreatorAddr, exampleContract.CreatorAddr, []byte(`{}`), "", nil) +// require.NoError(t, err) +// return ExampleContractInstance{ +// ExampleContract: exampleContract, +// Contract: contractAddr, +// } +//} +// +//// StoreRandomContract sets the mock wasmerEngine in keeper and calls store +//func StoreRandomContract(t testing.TB, ctx sdk.Context, keepers TestKeepers, mock wasmtypes.WasmerEngine) ExampleContract { +// return StoreRandomContractWithAccessConfig(t, ctx, keepers, mock, nil) +//} +// +//func StoreRandomContractWithAccessConfig( +// t testing.TB, ctx sdk.Context, +// keepers TestKeepers, +// mock wasmtypes.WasmerEngine, +// cfg *wasmtypes.AccessConfig, +//) ExampleContract { +// t.Helper() +// anyAmount := sdk.NewCoins(sdk.NewInt64Coin("denom", 1000)) +// creator, _, creatorAddr := keyPubAddr() +// fundAccounts(t, ctx, keepers.AccountKeeper, keepers.BankKeeper, creatorAddr, anyAmount) +// //keepers.WasmKeeper.wasmVM = mock +// wasmCode := append(wasmIdent, rand.Bytes(10)...) //nolint:gocritic +// codeID, checksum, err := keepers.ContractKeeper.Create(ctx, creatorAddr, wasmCode, cfg) +// require.NoError(t, err) +// exampleContract := ExampleContract{InitialAmount: anyAmount, Creator: creator, CreatorAddr: creatorAddr, CodeID: codeID, Checksum: checksum} +// return exampleContract +//} + +type HackatomExampleInstance struct { + ExampleContract + Contract sdk.AccAddress + Verifier crypto.PrivKey + VerifierAddr sdk.AccAddress + Beneficiary crypto.PrivKey + BeneficiaryAddr sdk.AccAddress + Label string + Deposit sdk.Coins +} + +// InstantiateHackatomExampleContract load and instantiate the "./testdata/hackatom.wasm" contract +func InstantiateHackatomExampleContract(t testing.TB, ctx sdk.Context, keepers TestKeepers) HackatomExampleInstance { + contract := StoreHackatomExampleContract(t, ctx, keepers) + + verifier, _, verifierAddr := keyPubAddr() + fundAccounts(t, ctx, keepers.AccountKeeper, keepers.BankKeeper, verifierAddr, contract.InitialAmount) + + beneficiary, _, beneficiaryAddr := keyPubAddr() + initMsgBz := HackatomExampleInitMsg{ + Verifier: verifierAddr, + Beneficiary: beneficiaryAddr, + }.GetBytes(t) + initialAmount := sdk.NewCoins(sdk.NewInt64Coin("denom", 100)) + + adminAddr := contract.CreatorAddr + label := "demo contract to query" + contractAddr, _, err := keepers.ContractKeeper.Instantiate(ctx, contract.CodeID, contract.CreatorAddr, adminAddr, initMsgBz, label, initialAmount) + require.NoError(t, err) + return HackatomExampleInstance{ + ExampleContract: contract, + Contract: contractAddr, + Verifier: verifier, + VerifierAddr: verifierAddr, + Beneficiary: beneficiary, + BeneficiaryAddr: beneficiaryAddr, + Label: label, + Deposit: initialAmount, + } +} + +type ExampleInstance struct { + ExampleContract + Contract sdk.AccAddress + Label string + Deposit sdk.Coins +} + +// InstantiateReflectExampleContract load and instantiate the "./testdata/reflect.wasm" contract +func InstantiateReflectExampleContract(t testing.TB, ctx sdk.Context, keepers TestKeepers) ExampleInstance { + example := StoreReflectContract(t, ctx, keepers) + initialAmount := sdk.NewCoins(sdk.NewInt64Coin("denom", 100)) + label := "demo contract to query" + contractAddr, _, err := keepers.ContractKeeper.Instantiate(ctx, example.CodeID, example.CreatorAddr, nil, []byte("{}"), label, initialAmount) + + require.NoError(t, err) + return ExampleInstance{ + ExampleContract: example, + Contract: contractAddr, + Label: label, + Deposit: initialAmount, + } +} + +type HackatomExampleInitMsg struct { + Verifier sdk.AccAddress `json:"verifier"` + Beneficiary sdk.AccAddress `json:"beneficiary"` +} + +func (m HackatomExampleInitMsg) GetBytes(t testing.TB) []byte { + initMsgBz, err := json.Marshal(m) + require.NoError(t, err) + return initMsgBz +} + +type IBCReflectExampleInstance struct { + Contract sdk.AccAddress + Admin sdk.AccAddress + CodeID uint64 + ReflectCodeID uint64 +} + +// InstantiateIBCReflectContract load and instantiate the "./testdata/ibc_reflect.wasm" contract +func InstantiateIBCReflectContract(t testing.TB, ctx sdk.Context, keepers TestKeepers) IBCReflectExampleInstance { + reflectID := StoreReflectContract(t, ctx, keepers).CodeID + ibcReflectID := StoreIBCReflectContract(t, ctx, keepers).CodeID + + initMsgBz := IBCReflectInitMsg{ + ReflectCodeID: reflectID, + }.GetBytes(t) + adminAddr := RandomAccountAddress(t) + + contractAddr, _, err := keepers.ContractKeeper.Instantiate(ctx, ibcReflectID, adminAddr, adminAddr, initMsgBz, "ibc-reflect-factory", nil) + require.NoError(t, err) + return IBCReflectExampleInstance{ + Admin: adminAddr, + Contract: contractAddr, + CodeID: ibcReflectID, + ReflectCodeID: reflectID, + } +} + +type IBCReflectInitMsg struct { + ReflectCodeID uint64 `json:"reflect_code_id"` +} + +func (m IBCReflectInitMsg) GetBytes(t testing.TB) []byte { + initMsgBz, err := json.Marshal(m) + require.NoError(t, err) + return initMsgBz +} + +type BurnerExampleInitMsg struct { + Payout sdk.AccAddress `json:"payout"` +} + +func (m BurnerExampleInitMsg) GetBytes(t testing.TB) []byte { + initMsgBz, err := json.Marshal(m) + require.NoError(t, err) + return initMsgBz +} + +func fundAccounts(t testing.TB, ctx sdk.Context, am authkeeper.AccountKeeper, bank bankkeeper.Keeper, addr sdk.AccAddress, coins sdk.Coins) { + acc := am.NewAccountWithAddress(ctx, addr) + am.SetAccount(ctx, acc) + wasmkeeper.NewTestFaucet(t, ctx, bank, minttypes.ModuleName, coins...).Fund(ctx, addr, coins...) +} + +var keyCounter uint64 + +// we need to make this deterministic (same every test run), as encoded address size and thus gas cost, +// depends on the actual bytes (due to ugly CanonicalAddress encoding) +// +//nolint:unparam +func keyPubAddr() (crypto.PrivKey, crypto.PubKey, sdk.AccAddress) { + keyCounter++ + seed := make([]byte, 8) + binary.BigEndian.PutUint64(seed, keyCounter) + + key := ed25519.GenPrivKeyFromSecret(seed) + pub := key.PubKey() + addr := sdk.AccAddress(pub.Address()) + return key, pub, addr +} diff --git a/x/wasmplus/module.go b/x/wasmplus/module.go new file mode 100644 index 0000000000..8f3d44be19 --- /dev/null +++ b/x/wasmplus/module.go @@ -0,0 +1,191 @@ +package wasmplus + +import ( + "context" + "encoding/json" + "math/rand" + + "github.com/grpc-ecosystem/grpc-gateway/runtime" + "github.com/spf13/cobra" + + "github.com/line/lbm-sdk/client" + "github.com/line/lbm-sdk/codec" + cdctypes "github.com/line/lbm-sdk/codec/types" + sdk "github.com/line/lbm-sdk/types" + sdkerrors "github.com/line/lbm-sdk/types/errors" + "github.com/line/lbm-sdk/types/module" + simtypes "github.com/line/lbm-sdk/types/simulation" + abci "github.com/line/ostracon/abci/types" + + wasmkeeper "github.com/line/wasmd/x/wasm/keeper" + "github.com/line/wasmd/x/wasm/simulation" + wasmtypes "github.com/line/wasmd/x/wasm/types" + "github.com/line/wasmd/x/wasmplus/keeper" + "github.com/line/wasmd/x/wasmplus/types" +) + +var ( + _ module.AppModule = AppModule{} + _ module.AppModuleBasic = AppModuleBasic{} +) + +// AppModuleBasic defines the basic application module used by the wasm module. +type AppModuleBasic struct{} + +// Name returns the wasm module's name. +func (a AppModuleBasic) Name() string { + return types.ModuleName +} + +func (a AppModuleBasic) RegisterLegacyAminoCodec(amino *codec.LegacyAmino) { + types.RegisterLegacyAminoCodec(amino) +} + +// RegisterInterfaces implements InterfaceModule +func (a AppModuleBasic) RegisterInterfaces(registry cdctypes.InterfaceRegistry) { + types.RegisterInterfaces(registry) +} + +// DefaultGenesis returns default genesis state as raw bytes for the wasm module. +func (a AppModuleBasic) DefaultGenesis(cdc codec.JSONCodec) json.RawMessage { + return cdc.MustMarshalJSON(&types.GenesisState{ + Params: types.DefaultParams(), + }) +} + +// ValidateGenesis performs genesis state validation for the wasm module. +func (a AppModuleBasic) ValidateGenesis(cdc codec.JSONCodec, config client.TxEncodingConfig, message json.RawMessage) error { + var data types.GenesisState + if err := cdc.UnmarshalJSON(message, &data); err != nil { + return sdkerrors.Wrap(err, "validate genesis") + } + return data.ValidateBasic() +} + +func (a AppModuleBasic) RegisterGRPCGatewayRoutes(clientCtx client.Context, serveMux *runtime.ServeMux) { + if err := types.RegisterQueryHandlerClient(context.Background(), serveMux, types.NewQueryClient(clientCtx)); err != nil { + panic(err) + } + if err := wasmtypes.RegisterQueryHandlerClient(context.Background(), serveMux, wasmtypes.NewQueryClient(clientCtx)); err != nil { + panic(err) + } +} + +// GetTxCmd returns the root tx command for the wasm module. +func (a AppModuleBasic) GetTxCmd() *cobra.Command { + //return wasmcli.GetTxCmd() + //TODO implement me + panic("implement me") +} + +// GetQueryCmd returns no root query command for the wasm module. +func (a AppModuleBasic) GetQueryCmd() *cobra.Command { + //return cli.GetQueryCmd() + //TODO implement me + panic("implement me") +} + +type AppModule struct { + AppModuleBasic + cdc codec.Codec + keeper *keeper.Keeper + validatorSetSource wasmkeeper.ValidatorSetSource + accountKeeper wasmtypes.AccountKeeper // for simulation + bankKeeper simulation.BankKeeper +} + +func NewAppModule( + cdc codec.Codec, + keeper *keeper.Keeper, + vs wasmkeeper.ValidatorSetSource, + ak wasmtypes.AccountKeeper, + bk simulation.BankKeeper, +) AppModule { + return AppModule{ + AppModuleBasic: AppModuleBasic{}, + cdc: cdc, + keeper: keeper, + validatorSetSource: vs, + accountKeeper: ak, + bankKeeper: bk, + } +} + +func (am AppModule) InitGenesis(ctx sdk.Context, cdc codec.JSONCodec, data json.RawMessage) []abci.ValidatorUpdate { + var genesisState types.GenesisState + cdc.MustUnmarshalJSON(data, &genesisState) + validators, err := keeper.InitGenesis(ctx, am.keeper, genesisState, am.validatorSetSource, am.Route().Handler()) + if err != nil { + panic(err) + } + return validators +} + +// ExportGenesis returns the exported genesis state as raw bytes for the wasm module. +func (am AppModule) ExportGenesis(ctx sdk.Context, cdc codec.JSONCodec) json.RawMessage { + gs := keeper.ExportGenesis(ctx, am.keeper) + return cdc.MustMarshalJSON(gs) +} + +// RegisterInvariants registers the wasm module invariants. +func (am AppModule) RegisterInvariants(registry sdk.InvariantRegistry) {} + +// Route returns the message routing key for the wasm module. +func (am AppModule) Route() sdk.Route { + return sdk.NewRoute(types.RouterKey, + NewHandler(keeper.NewPermissionedKeeper(*wasmkeeper.NewDefaultPermissionKeeper(am.keeper), am.keeper))) +} + +// QuerierRoute returns the wasm module's querier route name. +func (am AppModule) QuerierRoute() string { + return wasmtypes.QuerierRoute +} + +func (am AppModule) LegacyQuerierHandler(amino *codec.LegacyAmino) sdk.Querier { + return wasmkeeper.NewLegacyQuerier(am.keeper, am.keeper.QueryGasLimit()) +} + +func (am AppModule) RegisterServices(cfg module.Configurator) { + // wasmplus service + types.RegisterMsgServer(cfg.MsgServer(), keeper.NewMsgServerImpl(wasmkeeper.NewDefaultPermissionKeeper(am.keeper))) + types.RegisterQueryServer(cfg.QueryServer(), keeper.Querier(am.keeper)) + //wasm service + wasmtypes.RegisterMsgServer(cfg.MsgServer(), wasmkeeper.NewMsgServerImpl(wasmkeeper.NewDefaultPermissionKeeper(am.keeper))) + wasmtypes.RegisterQueryServer(cfg.QueryServer(), keeper.WasmQuerier(am.keeper)) +} + +// ConsensusVersion is a sequence number for state-breaking change of the +// module. It should be incremented on each consensus-breaking change +// introduced by the module. To avoid wrong/empty versions, the initial version +// should be set to 1. +func (am AppModule) ConsensusVersion() uint64 { + return 1 +} + +// ____________________________________________________________________________ + +// AppModuleSimulation functions + +// GenerateGenesisState creates a randomized GenState of the bank module. +func (am AppModule) GenerateGenesisState(simState *module.SimulationState) { + simulation.RandomizedGenState(simState) +} + +// ProposalContents doesn't return any content functions for governance proposals. +func (am AppModule) ProposalContents(simState module.SimulationState) []simtypes.WeightedProposalContent { + return nil +} + +// RandomizedParams creates randomized bank param changes for the simulator. +func (am AppModule) RandomizedParams(r *rand.Rand) []simtypes.ParamChange { + return simulation.ParamChanges(r, am.cdc) +} + +// RegisterStoreDecoder registers a decoder for supply module's types +func (am AppModule) RegisterStoreDecoder(registry sdk.StoreDecoderRegistry) { +} + +// WeightedOperations returns the all the gov module operations with their respective weights. +func (am AppModule) WeightedOperations(simState module.SimulationState) []simtypes.WeightedOperation { + return simulation.WeightedOperations(&simState, am.accountKeeper, am.bankKeeper, am.keeper) +} diff --git a/x/wasmplus/module_test.go b/x/wasmplus/module_test.go new file mode 100644 index 0000000000..8af045c295 --- /dev/null +++ b/x/wasmplus/module_test.go @@ -0,0 +1,399 @@ +package wasmplus + +import ( + "encoding/json" + "fmt" + "os" + "testing" + + "github.com/dvsekhvalnov/jose2go/base64url" + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" + + sdk "github.com/line/lbm-sdk/types" + "github.com/line/lbm-sdk/types/module" + authkeeper "github.com/line/lbm-sdk/x/auth/keeper" + bankkeeper "github.com/line/lbm-sdk/x/bank/keeper" + stakingkeeper "github.com/line/lbm-sdk/x/staking/keeper" + abci "github.com/line/ostracon/abci/types" + "github.com/line/ostracon/crypto" + "github.com/line/ostracon/crypto/ed25519" + + wasmkeeper "github.com/line/wasmd/x/wasm/keeper" + wasmtypes "github.com/line/wasmd/x/wasm/types" + "github.com/line/wasmd/x/wasmplus/keeper" + "github.com/line/wasmd/x/wasmplus/types" +) + +type testData struct { + module module.AppModule + ctx sdk.Context + acctKeeper authkeeper.AccountKeeper + keeper keeper.Keeper + bankKeeper bankkeeper.Keeper + stakingKeeper stakingkeeper.Keeper + faucet *wasmkeeper.TestFaucet +} + +func setupTest(t *testing.T) testData { + ctx, keepers := keeper.CreateTestInput(t, false, "iterator,staking,stargate,cosmwasm_1_1", nil, nil) + cdc := wasmkeeper.MakeTestCodec(t) + data := testData{ + module: NewAppModule(cdc, keepers.WasmKeeper, keepers.StakingKeeper, keepers.AccountKeeper, keepers.BankKeeper), + ctx: ctx, + acctKeeper: keepers.AccountKeeper, + keeper: *keepers.WasmKeeper, + bankKeeper: keepers.BankKeeper, + stakingKeeper: keepers.StakingKeeper, + faucet: keepers.Faucet, + } + return data +} + +func keyPubAddr() (crypto.PrivKey, crypto.PubKey, sdk.AccAddress) { + key := ed25519.GenPrivKey() + pub := key.PubKey() + addr := sdk.AccAddress(pub.Address()) + return key, pub, addr +} + +func mustLoad(path string) []byte { + bz, err := os.ReadFile(path) + if err != nil { + panic(err) + } + return bz +} + +var ( + _, _, addrAcc1 = keyPubAddr() + addr1 = addrAcc1.String() + testContract = mustLoad("../wasm/keeper/testdata/hackatom.wasm") + oldContract = mustLoad("../wasm/testdata/escrow_0.7.wasm") +) + +type initMsg struct { + Verifier sdk.AccAddress `json:"verifier"` + Beneficiary sdk.AccAddress `json:"beneficiary"` +} + +type emptyMsg struct{} + +type state struct { + Verifier string `json:"verifier"` + Beneficiary string `json:"beneficiary"` + Funder string `json:"funder"` +} + +// ensures this returns a valid codeID and bech32 address and returns it +func parseStoreAndInitResponse(t *testing.T, data []byte) (uint64, string) { + var res types.MsgStoreCodeAndInstantiateContractResponse + require.NoError(t, res.Unmarshal(data)) + require.NotEmpty(t, res.CodeID) + require.NotEmpty(t, res.Address) + addr := res.Address + codeID := res.CodeID + // ensure this is a valid sdk address + _, err := sdk.AccAddressFromBech32(addr) + require.NoError(t, err) + return codeID, addr +} + +type prettyEvent struct { + Type string + Attr []sdk.Attribute +} + +func prettyEvents(evts []abci.Event) string { + res := make([]prettyEvent, len(evts)) + for i, e := range evts { + res[i] = prettyEvent{ + Type: e.Type, + Attr: prettyAttrs(e.Attributes), + } + } + bz, err := json.MarshalIndent(res, "", " ") + if err != nil { + panic(err) + } + return string(bz) +} + +func prettyAttrs(attrs []abci.EventAttribute) []sdk.Attribute { + pretty := make([]sdk.Attribute, len(attrs)) + for i, a := range attrs { + pretty[i] = prettyAttr(a) + } + return pretty +} + +func prettyAttr(attr abci.EventAttribute) sdk.Attribute { + return sdk.NewAttribute(string(attr.Key), string(attr.Value)) +} + +func assertAttribute(t *testing.T, key string, value string, attr abci.EventAttribute) { + t.Helper() + assert.Equal(t, key, string(attr.Key), prettyAttr(attr)) + assert.Equal(t, value, string(attr.Value), prettyAttr(attr)) +} + +func assertCodeList(t *testing.T, q sdk.Querier, ctx sdk.Context, expectedNum int) { + bz, sdkerr := q(ctx, []string{wasmkeeper.QueryListCode}, abci.RequestQuery{}) + require.NoError(t, sdkerr) + + if len(bz) == 0 { + require.Equal(t, expectedNum, 0) + return + } + + var res []wasmtypes.CodeInfo + err := json.Unmarshal(bz, &res) + require.NoError(t, err) + + assert.Equal(t, expectedNum, len(res)) +} + +func assertCodeBytes(t *testing.T, q sdk.Querier, ctx sdk.Context, codeID uint64, expectedBytes []byte) { + path := []string{wasmkeeper.QueryGetCode, fmt.Sprintf("%d", codeID)} + bz, sdkerr := q(ctx, path, abci.RequestQuery{}) + require.NoError(t, sdkerr) + + if len(expectedBytes) == 0 { + require.Equal(t, len(bz), 0, "%q", string(bz)) + return + } + var res map[string]interface{} + err := json.Unmarshal(bz, &res) + require.NoError(t, err) + + require.Contains(t, res, "data") + b, err := base64url.Decode(res["data"].(string)) + require.NoError(t, err) + assert.Equal(t, expectedBytes, b) + assert.EqualValues(t, codeID, res["id"]) +} + +func assertContractList(t *testing.T, q sdk.Querier, ctx sdk.Context, codeID uint64, expContractAddrs []string) { + bz, sdkerr := q(ctx, []string{wasmkeeper.QueryListContractByCode, fmt.Sprintf("%d", codeID)}, abci.RequestQuery{}) + require.NoError(t, sdkerr) + + if len(bz) == 0 { + require.Equal(t, len(expContractAddrs), 0) + return + } + + var res []string + err := json.Unmarshal(bz, &res) + require.NoError(t, err) + + hasAddrs := make([]string, len(res)) + for i, r := range res { + hasAddrs[i] = r + } + + assert.Equal(t, expContractAddrs, hasAddrs) +} + +func assertContractInfo(t *testing.T, q sdk.Querier, ctx sdk.Context, contractBech32Addr string, codeID uint64, creator sdk.AccAddress) { + t.Helper() + path := []string{wasmkeeper.QueryGetContract, contractBech32Addr} + bz, sdkerr := q(ctx, path, abci.RequestQuery{}) + require.NoError(t, sdkerr) + + var res wasmtypes.ContractInfo + err := json.Unmarshal(bz, &res) + require.NoError(t, err) + + assert.Equal(t, codeID, res.CodeID) + assert.Equal(t, creator.String(), res.Creator) +} + +func assertContractState(t *testing.T, q sdk.Querier, ctx sdk.Context, contractBech32Addr string, expected state) { + t.Helper() + path := []string{wasmkeeper.QueryGetContractState, contractBech32Addr, wasmkeeper.QueryMethodContractStateAll} + bz, sdkerr := q(ctx, path, abci.RequestQuery{}) + require.NoError(t, sdkerr) + + var res []wasmtypes.Model + err := json.Unmarshal(bz, &res) + require.NoError(t, err) + require.Equal(t, 1, len(res), "#v", res) + require.Equal(t, []byte("config"), []byte(res[0].Key)) + + expectedBz, err := json.Marshal(expected) + require.NoError(t, err) + assert.Equal(t, expectedBz, res[0].Value) +} + +func TestHandleStoreAndInstantiate(t *testing.T) { + data := setupTest(t) + creator := data.faucet.NewFundedRandomAccount(data.ctx, sdk.NewInt64Coin("denom", 100000)) + + h := data.module.Route().Handler() + q := data.module.LegacyQuerierHandler(nil) + + _, _, bob := keyPubAddr() + _, _, fred := keyPubAddr() + + initMsg := initMsg{ + Verifier: fred, + Beneficiary: bob, + } + msgBz, err := json.Marshal(initMsg) + require.NoError(t, err) + + // create with no balance is legal + msg := &types.MsgStoreCodeAndInstantiateContract{ + Sender: creator.String(), + WASMByteCode: testContract, + Msg: msgBz, + Label: "contract for test", + Funds: nil, + } + res, err := h(data.ctx, msg) + require.NoError(t, err) + codeID, contractBech32Addr := parseStoreAndInitResponse(t, res.Data) + + require.Equal(t, uint64(1), codeID) + require.Equal(t, "link14hj2tavq8fpesdwxxcu44rty3hh90vhujrvcmstl4zr3txmfvw9sgf2vn8", contractBech32Addr) + // this should be standard x/wasm init event, nothing from contract + require.Equal(t, 4, len(res.Events), prettyEvents(res.Events)) + assert.Equal(t, "store_code", res.Events[0].Type) + assertAttribute(t, "code_id", "1", res.Events[0].Attributes[1]) + assert.Equal(t, "message", res.Events[1].Type) + assertAttribute(t, "module", "wasm", res.Events[1].Attributes[0]) + assert.Equal(t, "instantiate", res.Events[2].Type) + assertAttribute(t, "_contract_address", contractBech32Addr, res.Events[2].Attributes[0]) + assertAttribute(t, "code_id", "1", res.Events[2].Attributes[1]) + assert.Equal(t, "wasm", res.Events[3].Type) + assertAttribute(t, "_contract_address", contractBech32Addr, res.Events[3].Attributes[0]) + + assertCodeList(t, q, data.ctx, 1) + assertCodeBytes(t, q, data.ctx, 1, testContract) + + assertContractList(t, q, data.ctx, 1, []string{contractBech32Addr}) + assertContractInfo(t, q, data.ctx, contractBech32Addr, 1, creator) + assertContractState(t, q, data.ctx, contractBech32Addr, state{ + Verifier: fred.String(), + Beneficiary: bob.String(), + Funder: creator.String(), + }) +} + +func TestErrorsCreateAndInstantiate(t *testing.T) { + // init messages + _, _, bob := keyPubAddr() + _, _, fred := keyPubAddr() + initMsg := initMsg{ + Verifier: fred, + Beneficiary: bob, + } + validInitMsgBz, err := json.Marshal(initMsg) + require.NoError(t, err) + + invalidInitMsgBz, err := json.Marshal(emptyMsg{}) + + expectedContractBech32Addr := "link14hj2tavq8fpesdwxxcu44rty3hh90vhujrvcmstl4zr3txmfvw9sgf2vn8" + + // test cases + cases := map[string]struct { + msg sdk.Msg + isValid bool + expectedCodes int + expectedBytes []byte + }{ + "empty": { + msg: &types.MsgStoreCodeAndInstantiateContract{}, + isValid: false, + expectedCodes: 0, + expectedBytes: nil, + }, + "valid one": { + msg: &types.MsgStoreCodeAndInstantiateContract{ + Sender: addr1, + WASMByteCode: testContract, + Msg: validInitMsgBz, + Label: "foo", + Funds: nil, + }, + isValid: true, + expectedCodes: 1, + expectedBytes: testContract, + }, + "invalid wasm": { + msg: &types.MsgStoreCodeAndInstantiateContract{ + Sender: addr1, + WASMByteCode: []byte("foobar"), + Msg: validInitMsgBz, + Label: "foo", + Funds: nil, + }, + isValid: false, + expectedCodes: 0, + expectedBytes: nil, + }, + "old wasm (0.7)": { + msg: &types.MsgStoreCodeAndInstantiateContract{ + Sender: addr1, + WASMByteCode: oldContract, + Msg: validInitMsgBz, + Label: "foo", + Funds: nil, + }, + isValid: false, + expectedCodes: 0, + expectedBytes: nil, + }, + "invalid init message": { + msg: &types.MsgStoreCodeAndInstantiateContract{ + Sender: addr1, + WASMByteCode: testContract, + Msg: invalidInitMsgBz, + Label: "foo", + Funds: nil, + }, + isValid: false, + expectedCodes: 1, + expectedBytes: testContract, + }, + } + + for name, tc := range cases { + tc := tc + t.Run(name, func(t *testing.T) { + data := setupTest(t) + + h := data.module.Route().Handler() + q := data.module.LegacyQuerierHandler(nil) + + // asserting response + res, err := h(data.ctx, tc.msg) + if tc.isValid { + require.NoError(t, err) + codeID, contractBech32Addr := parseStoreAndInitResponse(t, res.Data) + require.Equal(t, uint64(1), codeID) + require.Equal(t, expectedContractBech32Addr, contractBech32Addr) + + } else { + require.Error(t, err, "%#v", res) + } + + // asserting code state + assertCodeList(t, q, data.ctx, tc.expectedCodes) + assertCodeBytes(t, q, data.ctx, 1, tc.expectedBytes) + + // asserting contract state + if tc.isValid { + assertContractList(t, q, data.ctx, 1, []string{expectedContractBech32Addr}) + assertContractInfo(t, q, data.ctx, expectedContractBech32Addr, 1, addrAcc1) + assertContractState(t, q, data.ctx, expectedContractBech32Addr, state{ + Verifier: fred.String(), + Beneficiary: bob.String(), + Funder: addrAcc1.String(), + }) + } else { + assertContractList(t, q, data.ctx, 0, []string{}) + } + }) + } +} diff --git a/x/wasm/lbmtypes/codec.go b/x/wasmplus/types/codec.go similarity index 99% rename from x/wasm/lbmtypes/codec.go rename to x/wasmplus/types/codec.go index c25188bdd4..71237b391b 100644 --- a/x/wasm/lbmtypes/codec.go +++ b/x/wasmplus/types/codec.go @@ -1,4 +1,4 @@ -package lbmtypes +package types import ( "github.com/line/lbm-sdk/codec" diff --git a/x/wasmplus/types/errors.go b/x/wasmplus/types/errors.go new file mode 100644 index 0000000000..0df644fbe4 --- /dev/null +++ b/x/wasmplus/types/errors.go @@ -0,0 +1,13 @@ +package types + +import ( + sdkErrors "github.com/line/lbm-sdk/types/errors" + + wasmtypes "github.com/line/wasmd/x/wasm/types" +) + +// Codes for wasm contract errors +var ( + // ErrInactiveContract error if the contract set inactive + ErrInactiveContract = sdkErrors.Register(wasmtypes.DefaultCodespace, 101, "inactive contract") +) diff --git a/x/wasm/lbmtypes/event.pb.go b/x/wasmplus/types/event.pb.go similarity index 96% rename from x/wasm/lbmtypes/event.pb.go rename to x/wasmplus/types/event.pb.go index ead9217eec..dc8c32b259 100644 --- a/x/wasm/lbmtypes/event.pb.go +++ b/x/wasmplus/types/event.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-gogo. DO NOT EDIT. // source: lbm/wasm/v1/event.proto -package lbmtypes +package types import ( fmt "fmt" @@ -122,19 +122,19 @@ func init() { func init() { proto.RegisterFile("lbm/wasm/v1/event.proto", fileDescriptor_4be408da9fc96f03) } var fileDescriptor_4be408da9fc96f03 = []byte{ - // 183 bytes of a gzipped FileDescriptorProto + // 184 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x12, 0xcf, 0x49, 0xca, 0xd5, 0x2f, 0x4f, 0x2c, 0xce, 0xd5, 0x2f, 0x33, 0xd4, 0x4f, 0x2d, 0x4b, 0xcd, 0x2b, 0xd1, 0x2b, 0x28, 0xca, 0x2f, 0xc9, 0x17, 0xe2, 0xce, 0x49, 0xca, 0xd5, 0x03, 0x49, 0xe8, 0x95, 0x19, 0x2a, 0xd9, 0x72, 0xc9, 0xbb, 0x82, 0xe4, 0x5c, 0x52, 0x13, 0x93, 0x4b, 0x32, 0xcb, 0x12, 0x4b, 0x52, 0x9d, 0xf3, 0xf3, 0x4a, 0x8a, 0x12, 0x93, 0x4b, 0x02, 0x8a, 0xf2, 0x0b, 0xf2, 0x8b, 0x13, 0x73, 0x84, 0xa4, 0xb8, 0x38, 0x92, 0xa1, 0x62, 0x12, 0x8c, 0x0a, 0x8c, 0x1a, 0x9c, 0x41, 0x70, 0xbe, 0x92, - 0x35, 0x97, 0x2c, 0x58, 0xbb, 0x23, 0x19, 0x9a, 0x9d, 0xec, 0x4f, 0x3c, 0x92, 0x63, 0xbc, 0xf0, + 0x35, 0x97, 0x2c, 0x58, 0xbb, 0x23, 0x19, 0x9a, 0x9d, 0x1c, 0x4e, 0x3c, 0x92, 0x63, 0xbc, 0xf0, 0x48, 0x8e, 0xf1, 0xc1, 0x23, 0x39, 0xc6, 0x09, 0x8f, 0xe5, 0x18, 0x2e, 0x3c, 0x96, 0x63, 0xb8, - 0xf1, 0x58, 0x8e, 0x21, 0x4a, 0x35, 0x3d, 0xb3, 0x24, 0xa3, 0x34, 0x49, 0x2f, 0x39, 0x3f, 0x57, - 0x3f, 0x27, 0x33, 0x2f, 0x15, 0xec, 0x8f, 0x14, 0xfd, 0x0a, 0x88, 0x7f, 0x72, 0x92, 0x72, 0x4b, - 0x2a, 0x0b, 0x52, 0x8b, 0x93, 0xd8, 0xc0, 0x1e, 0x32, 0x06, 0x04, 0x00, 0x00, 0xff, 0xff, 0x7e, - 0x8a, 0x63, 0x0f, 0xeb, 0x00, 0x00, 0x00, + 0xf1, 0x58, 0x8e, 0x21, 0x4a, 0x2d, 0x3d, 0xb3, 0x24, 0xa3, 0x34, 0x49, 0x2f, 0x39, 0x3f, 0x57, + 0x3f, 0x27, 0x33, 0x2f, 0x15, 0xec, 0x8f, 0x14, 0xfd, 0x0a, 0x30, 0x5d, 0x90, 0x53, 0x5a, 0xac, + 0x5f, 0x52, 0x59, 0x90, 0x5a, 0x9c, 0xc4, 0x06, 0xf6, 0x91, 0x31, 0x20, 0x00, 0x00, 0xff, 0xff, + 0x73, 0x99, 0x3a, 0x14, 0xec, 0x00, 0x00, 0x00, } func (m *EventDeactivateContractProposal) Marshal() (dAtA []byte, err error) { diff --git a/x/wasmplus/types/exported_keepers.go b/x/wasmplus/types/exported_keepers.go new file mode 100644 index 0000000000..feb9d6b1b3 --- /dev/null +++ b/x/wasmplus/types/exported_keepers.go @@ -0,0 +1,23 @@ +package types + +import ( + sdk "github.com/line/lbm-sdk/types" + + wasmtypes "github.com/line/wasmd/x/wasm/types" +) + +type ViewKeeper interface { + //wasmtypes.ViewKeeper + IterateInactiveContracts(ctx sdk.Context, fn func(contractAddress sdk.AccAddress) bool) + IsInactiveContract(ctx sdk.Context, contractAddress sdk.AccAddress) bool +} + +type ContractOpsKeeper interface { + wasmtypes.ContractOpsKeeper + + // DeactivateContract add the contract address to inactive contract list. + DeactivateContract(ctx sdk.Context, contractAddress sdk.AccAddress) error + + // ActivateContract remove the contract address from inactive contract list. + ActivateContract(ctx sdk.Context, contractAddress sdk.AccAddress) error +} diff --git a/x/wasmplus/types/genesis.go b/x/wasmplus/types/genesis.go new file mode 100644 index 0000000000..c3031e37c1 --- /dev/null +++ b/x/wasmplus/types/genesis.go @@ -0,0 +1,60 @@ +package types + +import ( + sdk "github.com/line/lbm-sdk/types" + sdkerrors "github.com/line/lbm-sdk/types/errors" + + wasmtypes "github.com/line/wasmd/x/wasm/types" +) + +func (gs GenesisState) ValidateBasic() error { + if err := gs.Params.ValidateBasic(); err != nil { + return sdkerrors.Wrap(err, "params") + } + for i := range gs.Codes { + if err := gs.Codes[i].ValidateBasic(); err != nil { + return sdkerrors.Wrapf(err, "code: %d", i) + } + } + for i := range gs.Contracts { + if err := gs.Contracts[i].ValidateBasic(); err != nil { + return sdkerrors.Wrapf(err, "contract: %d", i) + } + } + for i := range gs.Sequences { + if err := gs.Sequences[i].ValidateBasic(); err != nil { + return sdkerrors.Wrapf(err, "sequence: %d", i) + } + } + for i := range gs.GenMsgs { + if err := gs.GenMsgs[i].ValidateBasic(); err != nil { + return sdkerrors.Wrapf(err, "gen message: %d", i) + } + } + for i, addr := range gs.InactiveContractAddresses { + if _, err := sdk.AccAddressFromBech32(addr); err != nil { + return sdkerrors.Wrapf(err, "inactive contract address: %d", i) + } + } + return nil +} + +// RawWasmState convert to wasm genesis state for vanilla import. +// Custom data models for privileged contracts are not included +func (gs GenesisState) RawWasmState() wasmtypes.GenesisState { + params := wasmtypes.Params{ + CodeUploadAccess: gs.Params.CodeUploadAccess, + InstantiateDefaultPermission: gs.Params.InstantiateDefaultPermission, + } + return wasmtypes.GenesisState{ + Params: params, + Codes: gs.Codes, + Contracts: gs.Contracts, + Sequences: gs.Sequences, + GenMsgs: gs.GenMsgs, + } +} + +func ValidateGenesis(data GenesisState) error { + return data.ValidateBasic() +} diff --git a/x/wasm/lbmtypes/genesis.pb.go b/x/wasmplus/types/genesis.pb.go similarity index 86% rename from x/wasm/lbmtypes/genesis.pb.go rename to x/wasmplus/types/genesis.pb.go index 149ebc2185..c5fbcf3cf5 100644 --- a/x/wasm/lbmtypes/genesis.pb.go +++ b/x/wasmplus/types/genesis.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-gogo. DO NOT EDIT. // source: lbm/wasm/v1/genesis.proto -package lbmtypes +package types import ( fmt "fmt" @@ -117,32 +117,32 @@ func init() { func init() { proto.RegisterFile("lbm/wasm/v1/genesis.proto", fileDescriptor_3308f670fed712dc) } var fileDescriptor_3308f670fed712dc = []byte{ - // 397 bytes of a gzipped FileDescriptorProto + // 396 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x74, 0x92, 0xcd, 0x8a, 0xda, 0x50, - 0x14, 0xc7, 0x93, 0x46, 0x6d, 0x8d, 0x85, 0x42, 0x2c, 0x35, 0x46, 0x88, 0xa1, 0xb4, 0x25, 0x0b, - 0x49, 0xd0, 0x3e, 0x40, 0x69, 0x4a, 0xe9, 0xaa, 0x30, 0x28, 0xb3, 0x19, 0x18, 0x24, 0x1f, 0x97, - 0x6b, 0x20, 0x37, 0x37, 0x93, 0x73, 0x75, 0xc6, 0xb7, 0x98, 0xc7, 0x72, 0xe9, 0x72, 0x56, 0x32, - 0xe8, 0xce, 0x97, 0x98, 0x21, 0x37, 0x1f, 0x06, 0x46, 0x77, 0xc9, 0x39, 0xff, 0xdf, 0xef, 0x70, - 0x0f, 0x47, 0xee, 0x47, 0x1e, 0xb1, 0xef, 0x5d, 0x20, 0xf6, 0x6a, 0x6c, 0x63, 0x14, 0x23, 0x08, - 0xc1, 0x4a, 0x52, 0xca, 0xa8, 0xd2, 0x89, 0x3c, 0x62, 0x65, 0x2d, 0x6b, 0x35, 0xd6, 0x3e, 0x63, - 0x8a, 0x29, 0xaf, 0xdb, 0xd9, 0x57, 0x1e, 0xd1, 0x7a, 0x75, 0x9a, 0xad, 0x13, 0x54, 0xb0, 0x9a, - 0xee, 0x53, 0x20, 0xbc, 0x71, 0xd6, 0xfd, 0xf5, 0x45, 0x92, 0x3f, 0xfe, 0xcb, 0x2b, 0x33, 0xe6, - 0x32, 0xa4, 0x8c, 0xe5, 0x56, 0xe2, 0xa6, 0x2e, 0x01, 0x55, 0x34, 0x44, 0xb3, 0x33, 0xe9, 0x5a, - 0xb5, 0xe9, 0xd6, 0x15, 0x6f, 0x39, 0x8d, 0xcd, 0x6e, 0x28, 0x4c, 0x8b, 0xa0, 0xf2, 0x57, 0x6e, - 0xfa, 0x34, 0x40, 0xa0, 0xbe, 0x33, 0x24, 0xb3, 0x33, 0xf9, 0x62, 0x95, 0x33, 0x2b, 0xec, 0x0f, - 0x0d, 0x90, 0xd3, 0xcb, 0xa0, 0xe3, 0x6e, 0xf8, 0x89, 0x87, 0x47, 0x94, 0x84, 0x0c, 0x91, 0x84, - 0xad, 0xa7, 0x39, 0xad, 0x5c, 0xcb, 0x6d, 0x9f, 0xc6, 0x2c, 0x75, 0x7d, 0x06, 0xaa, 0xc4, 0x55, - 0xda, 0x39, 0x55, 0x1e, 0x71, 0x06, 0x85, 0xae, 0x5b, 0x41, 0x35, 0xe5, 0xc9, 0x94, 0x69, 0x01, - 0xdd, 0x2d, 0x51, 0xec, 0x23, 0x50, 0x1b, 0x97, 0xb4, 0xb3, 0x22, 0x72, 0xd2, 0x56, 0x50, 0x5d, - 0x5b, 0x15, 0x95, 0x5b, 0xf9, 0x03, 0x46, 0xf1, 0x9c, 0x00, 0x06, 0xb5, 0xc9, 0xad, 0x3f, 0xde, - 0x5a, 0xeb, 0x9b, 0xcd, 0x7e, 0xfe, 0x03, 0x06, 0x47, 0x2b, 0x26, 0x28, 0x25, 0x5f, 0x1b, 0xf0, - 0x1e, 0xe7, 0x21, 0x65, 0x21, 0x0f, 0xc2, 0xd8, 0xf5, 0x59, 0xb8, 0x42, 0xf3, 0xf2, 0x2d, 0x73, - 0x37, 0x08, 0x52, 0x04, 0x80, 0x40, 0x6d, 0x19, 0x92, 0xd9, 0x76, 0xcc, 0xe3, 0x6e, 0xf8, 0xed, - 0x62, 0x6c, 0x64, 0x9c, 0xbc, 0xfd, 0x32, 0x55, 0xae, 0xef, 0x77, 0xa9, 0x72, 0x7e, 0x6d, 0xf6, - 0xba, 0xb8, 0xdd, 0xeb, 0xe2, 0xf3, 0x5e, 0x17, 0x1f, 0x0f, 0xba, 0xb0, 0x3d, 0xe8, 0xc2, 0xd3, - 0x41, 0x17, 0x6e, 0xbe, 0xe3, 0x90, 0x2d, 0x96, 0x9e, 0xe5, 0x53, 0x62, 0x47, 0x61, 0x8c, 0xf8, - 0x09, 0x05, 0xf6, 0x43, 0x7e, 0x4a, 0x91, 0x47, 0xf8, 0xa1, 0x79, 0x2d, 0x7e, 0x49, 0x3f, 0x5f, - 0x03, 0x00, 0x00, 0xff, 0xff, 0xe2, 0xad, 0x7e, 0xaa, 0xc2, 0x02, 0x00, 0x00, + 0x14, 0xc7, 0x93, 0x46, 0x6d, 0x8d, 0x85, 0x42, 0x2c, 0x35, 0x46, 0x88, 0xa1, 0x14, 0xc9, 0x42, + 0x12, 0xb4, 0x2f, 0xd0, 0xa6, 0x94, 0xae, 0x0a, 0x45, 0xe9, 0x66, 0x60, 0x90, 0x7c, 0x5c, 0xae, + 0x81, 0xdc, 0xdc, 0x4c, 0xce, 0xd5, 0x19, 0xdf, 0x62, 0x1e, 0xcb, 0xa5, 0xcb, 0x59, 0xc9, 0xa0, + 0x3b, 0x5f, 0x62, 0x86, 0xdc, 0x7c, 0x18, 0x18, 0x5d, 0x25, 0x39, 0xe7, 0xff, 0xfb, 0x1d, 0x72, + 0x38, 0x72, 0x3f, 0xf2, 0x88, 0x7d, 0xef, 0x02, 0xb1, 0xd7, 0x13, 0x1b, 0xa3, 0x18, 0x41, 0x08, + 0x56, 0x92, 0x52, 0x46, 0x95, 0x4e, 0xe4, 0x11, 0x2b, 0x6b, 0x59, 0xeb, 0x89, 0xf6, 0x19, 0x53, + 0x4c, 0x79, 0xdd, 0xce, 0xde, 0xf2, 0x88, 0xd6, 0xab, 0xd3, 0x6c, 0x93, 0xa0, 0x82, 0xd5, 0x74, + 0x9f, 0x02, 0xe1, 0x8d, 0x8b, 0xee, 0xaf, 0x2f, 0x92, 0xfc, 0xf1, 0x4f, 0x5e, 0x99, 0x33, 0x97, + 0x21, 0x65, 0x22, 0xb7, 0x12, 0x37, 0x75, 0x09, 0xa8, 0xa2, 0x21, 0x9a, 0x9d, 0x69, 0xd7, 0xaa, + 0x4d, 0xb7, 0xfe, 0xf1, 0x96, 0xd3, 0xd8, 0xee, 0x87, 0xc2, 0xac, 0x08, 0x2a, 0xbf, 0xe5, 0xa6, + 0x4f, 0x03, 0x04, 0xea, 0x3b, 0x43, 0x32, 0x3b, 0xd3, 0x2f, 0x56, 0x39, 0xb3, 0xc2, 0x7e, 0xd1, + 0x00, 0x39, 0xbd, 0x0c, 0x3a, 0xed, 0x87, 0x9f, 0x78, 0x78, 0x4c, 0x49, 0xc8, 0x10, 0x49, 0xd8, + 0x66, 0x96, 0xd3, 0xca, 0x7f, 0xb9, 0xed, 0xd3, 0x98, 0xa5, 0xae, 0xcf, 0x40, 0x95, 0xb8, 0x4a, + 0xbb, 0xa4, 0xca, 0x23, 0xce, 0xa0, 0xd0, 0x75, 0x2b, 0xa8, 0xa6, 0x3c, 0x9b, 0x32, 0x2d, 0xa0, + 0xbb, 0x15, 0x8a, 0x7d, 0x04, 0x6a, 0xe3, 0x9a, 0x76, 0x5e, 0x44, 0xce, 0xda, 0x0a, 0xaa, 0x6b, + 0xab, 0xa2, 0x72, 0x2b, 0x7f, 0xc0, 0x28, 0x5e, 0x10, 0xc0, 0xa0, 0x36, 0xb9, 0x75, 0xf4, 0xd6, + 0x5a, 0xdf, 0x6c, 0xf6, 0xf1, 0x17, 0x30, 0x38, 0x5a, 0x31, 0x41, 0x29, 0xf9, 0xda, 0x80, 0xf7, + 0x38, 0x0f, 0x29, 0x4b, 0x79, 0x10, 0xc6, 0xae, 0xcf, 0xc2, 0x35, 0x5a, 0x94, 0xff, 0xb2, 0x70, + 0x83, 0x20, 0x45, 0x00, 0x08, 0xd4, 0x96, 0x21, 0x99, 0x6d, 0xc7, 0x3c, 0xed, 0x87, 0xdf, 0xae, + 0xc6, 0xc6, 0xc6, 0xd9, 0xdb, 0x2f, 0x53, 0xe5, 0xfa, 0x7e, 0x96, 0x2a, 0xe7, 0xc7, 0xf6, 0xa0, + 0x8b, 0xbb, 0x83, 0x2e, 0x3e, 0x1f, 0x74, 0xf1, 0xf1, 0xa8, 0x0b, 0xbb, 0xa3, 0x2e, 0x3c, 0x1d, + 0x75, 0xe1, 0x66, 0x84, 0x43, 0xb6, 0x5c, 0x79, 0x96, 0x4f, 0x89, 0x1d, 0x85, 0x31, 0xe2, 0x27, + 0x14, 0xd8, 0x0f, 0xfc, 0x99, 0x44, 0x2b, 0xc8, 0x2f, 0xcd, 0x6b, 0xf1, 0x53, 0xfa, 0xfe, 0x1a, + 0x00, 0x00, 0xff, 0xff, 0x3b, 0x5b, 0x26, 0xed, 0xc3, 0x02, 0x00, 0x00, } func (m *GenesisState) Marshal() (dAtA []byte, err error) { diff --git a/x/wasmplus/types/genesis_test.go b/x/wasmplus/types/genesis_test.go new file mode 100644 index 0000000000..25e719734a --- /dev/null +++ b/x/wasmplus/types/genesis_test.go @@ -0,0 +1,86 @@ +package types + +import ( + "testing" + + "github.com/stretchr/testify/require" +) + +const humanAddress = "link1hcttwju93d5m39467gjcq63p5kc4fdcn30dgd8" + +func TestValidateGenesisState(t *testing.T) { + specs := map[string]struct { + srcMutator func(state *GenesisState) + expError bool + }{ + "all good": { + srcMutator: func(s *GenesisState) {}, + }, + "params invalid": { + srcMutator: func(s *GenesisState) { + s.Params = Params{} + }, + expError: true, + }, + "codeinfo invalid": { + srcMutator: func(s *GenesisState) { + s.Codes[0].CodeInfo.CodeHash = nil + }, + expError: true, + }, + "contract invalid": { + srcMutator: func(s *GenesisState) { + s.Contracts[0].ContractAddress = "invalid" + }, + expError: true, + }, + "sequence invalid": { + srcMutator: func(s *GenesisState) { + s.Sequences[0].IDKey = nil + }, + expError: true, + }, + "genesis store code message invalid": { + srcMutator: func(s *GenesisState) { + s.GenMsgs[0].GetStoreCode().WASMByteCode = nil + }, + expError: true, + }, + "genesis instantiate contract message invalid": { + srcMutator: func(s *GenesisState) { + s.GenMsgs[1].GetInstantiateContract().CodeID = 0 + }, + expError: true, + }, + "genesis execute contract message invalid": { + srcMutator: func(s *GenesisState) { + s.GenMsgs[2].GetExecuteContract().Sender = "invalid" + }, + expError: true, + }, + "genesis invalid message type": { + srcMutator: func(s *GenesisState) { + s.GenMsgs[0].Sum = nil + }, + expError: true, + }, + "inactivate contract address invalid": { + srcMutator: func(s *GenesisState) { + s.InactiveContractAddresses[0] = "invalid_address" + }, + expError: true, + }, + } + + for msg, spec := range specs { + t.Run(msg, func(t *testing.T) { + state := GenesisFixture(spec.srcMutator) + got := state.ValidateBasic() + if spec.expError { + require.Error(t, got) + return + } + require.NoError(t, got) + }) + } +} diff --git a/x/wasmplus/types/keys.go b/x/wasmplus/types/keys.go new file mode 100644 index 0000000000..80a38c507e --- /dev/null +++ b/x/wasmplus/types/keys.go @@ -0,0 +1,29 @@ +package types + +import ( + sdk "github.com/line/lbm-sdk/types" + + wasmtypes "github.com/line/wasmd/x/wasm/types" +) + +const ( + // ModuleName is the name of this module. + ModuleName = wasmtypes.ModuleName + + // RouterKey is used to route governance proposals + RouterKey = wasmtypes.RouterKey + + // StoreKey is the prefix under which we store this module's data + StoreKey = wasmtypes.StoreKey +) + +var ( + InactiveContractPrefix = []byte{0x90} +) + +func GetInactiveContractKey(contractAddress sdk.AccAddress) []byte { + key := make([]byte, len(InactiveContractPrefix)+len(contractAddress)) + copy(key, InactiveContractPrefix) + copy(key[len(InactiveContractPrefix):], contractAddress) + return key +} diff --git a/x/wasmplus/types/keys_test.go b/x/wasmplus/types/keys_test.go new file mode 100644 index 0000000000..3ff589fe9b --- /dev/null +++ b/x/wasmplus/types/keys_test.go @@ -0,0 +1,18 @@ +package types + +import ( + "bytes" + "testing" + + "github.com/stretchr/testify/assert" +) + +func TestGetInactiveContractKey(t *testing.T) { + addr := bytes.Repeat([]byte{4}, 20) + got := GetInactiveContractKey(addr) + exp := []byte{0x90, // prefix + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, // address 20 bytes + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + } + assert.Equal(t, exp, got) +} diff --git a/x/wasm/lbmtypes/params.go b/x/wasmplus/types/params.go similarity index 76% rename from x/wasm/lbmtypes/params.go rename to x/wasmplus/types/params.go index c2ce53bd44..57b2dc4ac7 100644 --- a/x/wasm/lbmtypes/params.go +++ b/x/wasmplus/types/params.go @@ -1,28 +1,36 @@ -package lbmtypes +package types import ( "fmt" + "github.com/pkg/errors" "gopkg.in/yaml.v2" sdkerrors "github.com/line/lbm-sdk/types/errors" paramtypes "github.com/line/lbm-sdk/x/params/types" + wasmkeeper "github.com/line/wasmd/x/wasm/keeper" wasmtypes "github.com/line/wasmd/x/wasm/types" ) -var ParamStoreKeyGasMultiplier = []byte("gasMultiplier") -var ParamStoreKeyInstanceCost = []byte("instanceCost") -var ParamStoreKeyCompileCost = []byte("compileCost") +var ( + ParamStoreKeyGasMultiplier = []byte("gasMultiplier") + ParamStoreKeyInstanceCost = []byte("instanceCost") + ParamStoreKeyCompileCost = []byte("compileCost") +) + +// ParamKeyTable returns the parameter key table. +func ParamKeyTable() paramtypes.KeyTable { + return paramtypes.NewKeyTable().RegisterParamSet(&Params{}) +} func DefaultParams() Params { return Params{ CodeUploadAccess: wasmtypes.AllowEverybody, InstantiateDefaultPermission: wasmtypes.AccessTypeEverybody, - // todo should set wasmkepper's default after solving import cycle problem. - GasMultiplier: 0, // keeper.DefaultGasMultiplier, - InstanceCost: 0, // keeper.DefaultInstanceCost, - CompileCost: 0, // keeper.DefaultCompileCost, + GasMultiplier: wasmkeeper.DefaultGasMultiplier, + InstanceCost: wasmkeeper.DefaultInstanceCost, + CompileCost: wasmkeeper.DefaultCompileCost, } } @@ -53,6 +61,15 @@ func (p Params) ValidateBasic() error { if err := validateAccessConfig(p.CodeUploadAccess); err != nil { return errors.Wrap(err, "upload access") } + if err := validateGasMultiplier(p.GasMultiplier); err != nil { + return errors.Wrap(err, "gas multiplier") + } + if err := validateInstanceCost(p.InstanceCost); err != nil { + return errors.Wrap(err, "instance cost") + } + if err := validateCompileCost(p.CompileCost); err != nil { + return errors.Wrap(err, "compile cost") + } return nil } diff --git a/x/wasmplus/types/params_test.go b/x/wasmplus/types/params_test.go new file mode 100644 index 0000000000..4dc89e5779 --- /dev/null +++ b/x/wasmplus/types/params_test.go @@ -0,0 +1,243 @@ +package types + +import ( + "bytes" + "testing" + + "github.com/stretchr/testify/require" + + sdk "github.com/line/lbm-sdk/types" + + wasmkeeper "github.com/line/wasmd/x/wasm/keeper" + wasmtypes "github.com/line/wasmd/x/wasm/types" +) + +func TestValidateParams(t *testing.T) { + var ( + anyAddress sdk.AccAddress = make([]byte, wasmtypes.ContractAddrLen) + otherAddress sdk.AccAddress = bytes.Repeat([]byte{1}, wasmtypes.ContractAddrLen) + invalidAddress = "invalid address" + ) + + specs := map[string]struct { + src Params + expErr bool + }{ + "all good with defaults": { + src: DefaultParams(), + }, + "all good with nobody": { + src: Params{ + CodeUploadAccess: wasmtypes.AllowNobody, + InstantiateDefaultPermission: wasmtypes.AccessTypeNobody, + GasMultiplier: wasmkeeper.DefaultGasMultiplier, + InstanceCost: wasmkeeper.DefaultInstanceCost, + CompileCost: wasmkeeper.DefaultCompileCost, + }, + }, + "all good with everybody": { + src: Params{ + CodeUploadAccess: wasmtypes.AllowEverybody, + InstantiateDefaultPermission: wasmtypes.AccessTypeEverybody, + GasMultiplier: wasmkeeper.DefaultGasMultiplier, + InstanceCost: wasmkeeper.DefaultInstanceCost, + CompileCost: wasmkeeper.DefaultCompileCost, + }, + }, + "all good with only address": { + src: Params{ + CodeUploadAccess: wasmtypes.AccessTypeOnlyAddress.With(anyAddress), + InstantiateDefaultPermission: wasmtypes.AccessTypeOnlyAddress, + GasMultiplier: wasmkeeper.DefaultGasMultiplier, + InstanceCost: wasmkeeper.DefaultInstanceCost, + CompileCost: wasmkeeper.DefaultCompileCost, + }, + }, + "all good with anyOf address": { + src: Params{ + CodeUploadAccess: wasmtypes.AccessTypeAnyOfAddresses.With(anyAddress), + InstantiateDefaultPermission: wasmtypes.AccessTypeAnyOfAddresses, + GasMultiplier: wasmkeeper.DefaultGasMultiplier, + InstanceCost: wasmkeeper.DefaultInstanceCost, + CompileCost: wasmkeeper.DefaultCompileCost, + }, + }, + "all good with anyOf addresses": { + src: Params{ + CodeUploadAccess: wasmtypes.AccessTypeAnyOfAddresses.With(anyAddress, otherAddress), + InstantiateDefaultPermission: wasmtypes.AccessTypeAnyOfAddresses, + GasMultiplier: wasmkeeper.DefaultGasMultiplier, + InstanceCost: wasmkeeper.DefaultInstanceCost, + CompileCost: wasmkeeper.DefaultCompileCost, + }, + }, + "reject empty type in instantiate permission": { + src: Params{ + CodeUploadAccess: wasmtypes.AllowNobody, + GasMultiplier: wasmkeeper.DefaultGasMultiplier, + InstanceCost: wasmkeeper.DefaultInstanceCost, + CompileCost: wasmkeeper.DefaultCompileCost, + }, + expErr: true, + }, + "reject unknown type in instantiate": { + src: Params{ + CodeUploadAccess: wasmtypes.AllowNobody, + InstantiateDefaultPermission: 1111, + GasMultiplier: wasmkeeper.DefaultGasMultiplier, + InstanceCost: wasmkeeper.DefaultInstanceCost, + CompileCost: wasmkeeper.DefaultCompileCost, + }, + expErr: true, + }, + "reject CodeUploadAccess invalid address in only address": { + src: Params{ + CodeUploadAccess: wasmtypes.AccessConfig{Permission: wasmtypes.AccessTypeOnlyAddress, Address: invalidAddress}, + InstantiateDefaultPermission: wasmtypes.AccessTypeOnlyAddress, + GasMultiplier: wasmkeeper.DefaultGasMultiplier, + InstanceCost: wasmkeeper.DefaultInstanceCost, + CompileCost: wasmkeeper.DefaultCompileCost, + }, + expErr: true, + }, + "reject wrong field addresses in only address": { + src: Params{ + CodeUploadAccess: wasmtypes.AccessConfig{Permission: wasmtypes.AccessTypeOnlyAddress, Address: anyAddress.String(), Addresses: []string{anyAddress.String()}}, + InstantiateDefaultPermission: wasmtypes.AccessTypeOnlyAddress, + GasMultiplier: wasmkeeper.DefaultGasMultiplier, + InstanceCost: wasmkeeper.DefaultInstanceCost, + CompileCost: wasmkeeper.DefaultCompileCost, + }, + expErr: true, + }, + "reject CodeUploadAccess Everybody with obsolete address": { + src: Params{ + CodeUploadAccess: wasmtypes.AccessConfig{Permission: wasmtypes.AccessTypeEverybody, Address: anyAddress.String()}, + InstantiateDefaultPermission: wasmtypes.AccessTypeOnlyAddress, + GasMultiplier: wasmkeeper.DefaultGasMultiplier, + InstanceCost: wasmkeeper.DefaultInstanceCost, + CompileCost: wasmkeeper.DefaultCompileCost, + }, + expErr: true, + }, + "reject CodeUploadAccess Nobody with obsolete address": { + src: Params{ + CodeUploadAccess: wasmtypes.AccessConfig{Permission: wasmtypes.AccessTypeNobody, Address: anyAddress.String()}, + InstantiateDefaultPermission: wasmtypes.AccessTypeOnlyAddress, + GasMultiplier: wasmkeeper.DefaultGasMultiplier, + InstanceCost: wasmkeeper.DefaultInstanceCost, + CompileCost: wasmkeeper.DefaultCompileCost, + }, + expErr: true, + }, + "reject empty CodeUploadAccess": { + src: Params{ + InstantiateDefaultPermission: wasmtypes.AccessTypeOnlyAddress, + GasMultiplier: wasmkeeper.DefaultGasMultiplier, + InstanceCost: wasmkeeper.DefaultInstanceCost, + CompileCost: wasmkeeper.DefaultCompileCost, + }, + expErr: true, + }, + "reject undefined permission in CodeUploadAccess": { + src: Params{ + CodeUploadAccess: wasmtypes.AccessConfig{Permission: wasmtypes.AccessTypeUnspecified}, + InstantiateDefaultPermission: wasmtypes.AccessTypeOnlyAddress, + GasMultiplier: wasmkeeper.DefaultGasMultiplier, + InstanceCost: wasmkeeper.DefaultInstanceCost, + CompileCost: wasmkeeper.DefaultCompileCost, + }, + expErr: true, + }, + "reject empty addresses in any of addresses": { + src: Params{ + CodeUploadAccess: wasmtypes.AccessConfig{Permission: wasmtypes.AccessTypeAnyOfAddresses, Addresses: []string{}}, + InstantiateDefaultPermission: wasmtypes.AccessTypeAnyOfAddresses, + GasMultiplier: wasmkeeper.DefaultGasMultiplier, + InstanceCost: wasmkeeper.DefaultInstanceCost, + CompileCost: wasmkeeper.DefaultCompileCost, + }, + expErr: true, + }, + "reject addresses not set in any of addresses": { + src: Params{ + CodeUploadAccess: wasmtypes.AccessConfig{Permission: wasmtypes.AccessTypeAnyOfAddresses}, + InstantiateDefaultPermission: wasmtypes.AccessTypeAnyOfAddresses, + GasMultiplier: wasmkeeper.DefaultGasMultiplier, + InstanceCost: wasmkeeper.DefaultInstanceCost, + CompileCost: wasmkeeper.DefaultCompileCost, + }, + expErr: true, + }, + "reject invalid address in any of addresses": { + src: Params{ + CodeUploadAccess: wasmtypes.AccessConfig{Permission: wasmtypes.AccessTypeAnyOfAddresses, Addresses: []string{invalidAddress}}, + InstantiateDefaultPermission: wasmtypes.AccessTypeAnyOfAddresses, + GasMultiplier: wasmkeeper.DefaultGasMultiplier, + InstanceCost: wasmkeeper.DefaultInstanceCost, + CompileCost: wasmkeeper.DefaultCompileCost, + }, + expErr: true, + }, + "reject duplicate address in any of addresses": { + src: Params{ + CodeUploadAccess: wasmtypes.AccessConfig{Permission: wasmtypes.AccessTypeAnyOfAddresses, Addresses: []string{anyAddress.String(), anyAddress.String()}}, + InstantiateDefaultPermission: wasmtypes.AccessTypeAnyOfAddresses, + GasMultiplier: wasmkeeper.DefaultGasMultiplier, + InstanceCost: wasmkeeper.DefaultInstanceCost, + CompileCost: wasmkeeper.DefaultCompileCost, + }, + expErr: true, + }, + "reject wrong field address in any of addresses": { + src: Params{ + CodeUploadAccess: wasmtypes.AccessConfig{Permission: wasmtypes.AccessTypeAnyOfAddresses, Address: anyAddress.String(), Addresses: []string{anyAddress.String()}}, + InstantiateDefaultPermission: wasmtypes.AccessTypeAnyOfAddresses, + GasMultiplier: wasmkeeper.DefaultGasMultiplier, + InstanceCost: wasmkeeper.DefaultInstanceCost, + CompileCost: wasmkeeper.DefaultCompileCost, + }, + expErr: true, + }, + "reject zero GasMultiplier": { + src: Params{ + CodeUploadAccess: wasmtypes.AllowEverybody, + InstantiateDefaultPermission: wasmtypes.AccessTypeEverybody, + GasMultiplier: 0, + InstanceCost: wasmkeeper.DefaultInstanceCost, + CompileCost: wasmkeeper.DefaultCompileCost, + }, + expErr: true, + }, + "reject zero InstanceCost": { + src: Params{ + CodeUploadAccess: wasmtypes.AllowEverybody, + InstantiateDefaultPermission: wasmtypes.AccessTypeEverybody, + GasMultiplier: wasmkeeper.DefaultGasMultiplier, + InstanceCost: 0, + CompileCost: wasmkeeper.DefaultCompileCost, + }, + expErr: true, + }, + "reject zero CompileCost": { + src: Params{ + CodeUploadAccess: wasmtypes.AllowEverybody, + InstantiateDefaultPermission: wasmtypes.AccessTypeEverybody, + GasMultiplier: wasmkeeper.DefaultGasMultiplier, + InstanceCost: wasmkeeper.DefaultInstanceCost, + CompileCost: 0, + }, + expErr: true, + }, + } + for msg, spec := range specs { + t.Run(msg, func(t *testing.T) { + err := spec.src.ValidateBasic() + if spec.expErr { + require.Error(t, err) + } else { + require.NoError(t, err) + } + }) + } +} diff --git a/x/wasm/lbmtypes/proposal.go b/x/wasmplus/types/proposal.go similarity index 94% rename from x/wasm/lbmtypes/proposal.go rename to x/wasmplus/types/proposal.go index 32e18f78cb..743a7db824 100644 --- a/x/wasm/lbmtypes/proposal.go +++ b/x/wasmplus/types/proposal.go @@ -1,4 +1,4 @@ -package lbmtypes +package types import ( "fmt" @@ -57,7 +57,9 @@ func (p ActivateContractProposal) GetDescription() string { return p.Description func (p ActivateContractProposal) ProposalRoute() string { return wasmtypes.RouterKey } -func (p ActivateContractProposal) ProposalType() string { return string(ProposalTypeActivateContract) } +func (p ActivateContractProposal) ProposalType() string { + return string(ProposalTypeActivateContract) +} func (p ActivateContractProposal) ValidateBasic() error { if _, err := sdk.AccAddressFromBech32(p.Contract); err != nil { diff --git a/x/wasm/lbmtypes/proposal.pb.go b/x/wasmplus/types/proposal.pb.go similarity index 97% rename from x/wasm/lbmtypes/proposal.pb.go rename to x/wasmplus/types/proposal.pb.go index bbeb16d93b..73d045a5b6 100644 --- a/x/wasm/lbmtypes/proposal.pb.go +++ b/x/wasmplus/types/proposal.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-gogo. DO NOT EDIT. // source: lbm/wasm/v1/proposal.proto -package lbmtypes +package types import ( fmt "fmt" @@ -115,7 +115,7 @@ func init() { func init() { proto.RegisterFile("lbm/wasm/v1/proposal.proto", fileDescriptor_38b6af62537450c9) } var fileDescriptor_38b6af62537450c9 = []byte{ - // 279 bytes of a gzipped FileDescriptorProto + // 280 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x92, 0xca, 0x49, 0xca, 0xd5, 0x2f, 0x4f, 0x2c, 0xce, 0xd5, 0x2f, 0x33, 0xd4, 0x2f, 0x28, 0xca, 0x2f, 0xc8, 0x2f, 0x4e, 0xcc, 0xd1, 0x2b, 0x28, 0xca, 0x2f, 0xc9, 0x17, 0xe2, 0xce, 0x49, 0xca, 0xd5, 0x03, 0xc9, 0xe9, 0x95, @@ -127,13 +127,13 @@ var fileDescriptor_38b6af62537450c9 = []byte{ 0x93, 0x8b, 0x32, 0x0b, 0x4a, 0x32, 0xf3, 0xf3, 0x24, 0x98, 0xc0, 0xaa, 0xc5, 0x3e, 0xdd, 0x93, 0x17, 0x82, 0xa8, 0x46, 0x92, 0x54, 0x0a, 0x42, 0x56, 0x2a, 0xa4, 0xcf, 0xc5, 0x91, 0x0c, 0xb5, 0x55, 0x82, 0x19, 0xac, 0x4d, 0xf8, 0xd3, 0x3d, 0x79, 0x7e, 0x88, 0x36, 0x98, 0x8c, 0x52, 0x10, - 0x5c, 0x91, 0xd2, 0x5a, 0x46, 0x2e, 0x09, 0xc7, 0xa1, 0xe3, 0x5e, 0x27, 0xef, 0x13, 0x0f, 0xe5, + 0x5c, 0x91, 0xd2, 0x5a, 0x46, 0x2e, 0x09, 0xc7, 0xa1, 0xe3, 0x5e, 0x27, 0x9f, 0x13, 0x0f, 0xe5, 0x18, 0x6e, 0x3c, 0x94, 0x63, 0x58, 0xf1, 0x48, 0x8e, 0xf1, 0xc4, 0x23, 0x39, 0xc6, 0x0b, 0x8f, 0xe4, 0x18, 0x1f, 0x3c, 0x92, 0x63, 0x9c, 0xf0, 0x58, 0x8e, 0xe1, 0xc2, 0x63, 0x39, 0x86, 0x1b, - 0x8f, 0xe5, 0x18, 0xa2, 0x54, 0xd3, 0x33, 0x4b, 0x32, 0x4a, 0x93, 0xf4, 0x92, 0xf3, 0x73, 0xf5, - 0x73, 0x32, 0xf3, 0x52, 0xc1, 0x51, 0x9a, 0xa2, 0x5f, 0x01, 0x89, 0xda, 0x9c, 0xa4, 0xdc, 0x92, - 0xca, 0x82, 0xd4, 0xe2, 0x24, 0x36, 0x70, 0xac, 0x19, 0x03, 0x02, 0x00, 0x00, 0xff, 0xff, 0x1f, - 0xd4, 0x06, 0xb2, 0xf6, 0x01, 0x00, 0x00, + 0x8f, 0xe5, 0x18, 0xa2, 0xd4, 0xd2, 0x33, 0x4b, 0x32, 0x4a, 0x93, 0xf4, 0x92, 0xf3, 0x73, 0xf5, + 0x73, 0x32, 0xf3, 0x52, 0xc1, 0x51, 0x9a, 0xa2, 0x5f, 0x01, 0xa6, 0x0b, 0x72, 0x4a, 0x8b, 0xf5, + 0x4b, 0x2a, 0x0b, 0x52, 0x8b, 0x93, 0xd8, 0xc0, 0xd1, 0x66, 0x0c, 0x08, 0x00, 0x00, 0xff, 0xff, + 0xe7, 0x14, 0x20, 0xca, 0xf7, 0x01, 0x00, 0x00, } func (this *DeactivateContractProposal) Equal(that interface{}) bool { diff --git a/x/wasmplus/types/proposal_test.go b/x/wasmplus/types/proposal_test.go new file mode 100644 index 0000000000..e682c96d27 --- /dev/null +++ b/x/wasmplus/types/proposal_test.go @@ -0,0 +1,82 @@ +package types + +import ( + "bytes" + "testing" + + "github.com/stretchr/testify/require" + + sdk "github.com/line/lbm-sdk/types" + + wasmtypes "github.com/line/wasmd/x/wasm/types" +) + +func TestValidateDeactivateContractProposal(t *testing.T) { + var anyAddress sdk.AccAddress = bytes.Repeat([]byte{0x0}, wasmtypes.ContractAddrLen) + + specs := map[string]struct { + src DeactivateContractProposal + expErr bool + }{ + "all good": { + src: DeactivateContractProposal{ + Title: "Foo", + Description: "Bar", + Contract: anyAddress.String(), + }, + }, + "invalid address": { + src: DeactivateContractProposal{ + Title: "Foo", + Description: "Bar", + Contract: "invalid_address", + }, + expErr: true, + }, + } + for msg, spec := range specs { + t.Run(msg, func(t *testing.T) { + err := spec.src.ValidateBasic() + if spec.expErr { + require.Error(t, err) + } else { + require.NoError(t, err) + } + }) + } +} + +func TestValidateActivateContractProposal(t *testing.T) { + var anyAddress sdk.AccAddress = bytes.Repeat([]byte{0x0}, wasmtypes.ContractAddrLen) + + specs := map[string]struct { + src ActivateContractProposal + expErr bool + }{ + "all good": { + src: ActivateContractProposal{ + Title: "Foo", + Description: "Bar", + Contract: anyAddress.String(), + }, + }, + "invalid address": { + src: ActivateContractProposal{ + Title: "Foo", + Description: "Bar", + Contract: "invalid_address", + }, + expErr: true, + }, + } + for msg, spec := range specs { + t.Run(msg, func(t *testing.T) { + err := spec.src.ValidateBasic() + if spec.expErr { + require.Error(t, err) + } else { + require.NoError(t, err) + } + }) + } +} diff --git a/x/wasm/lbmtypes/query.pb.go b/x/wasmplus/types/query.pb.go similarity index 90% rename from x/wasm/lbmtypes/query.pb.go rename to x/wasmplus/types/query.pb.go index c4311ddf58..7c347d947b 100644 --- a/x/wasm/lbmtypes/query.pb.go +++ b/x/wasmplus/types/query.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-gogo. DO NOT EDIT. // source: lbm/wasm/v1/query.proto -package lbmtypes +package types import ( context "context" @@ -198,35 +198,35 @@ func init() { func init() { proto.RegisterFile("lbm/wasm/v1/query.proto", fileDescriptor_f1bdb66850244231) } var fileDescriptor_f1bdb66850244231 = []byte{ - // 439 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x93, 0x3f, 0x8f, 0xd3, 0x30, - 0x18, 0xc6, 0xe3, 0x22, 0xfe, 0xd4, 0x5d, 0xc0, 0x42, 0xa2, 0xaa, 0x8a, 0x29, 0x91, 0xe0, 0xee, - 0x7a, 0x92, 0xad, 0x1c, 0x0b, 0x2b, 0x20, 0x71, 0x62, 0x83, 0x8c, 0x2c, 0xc8, 0x49, 0x2c, 0x13, - 0x29, 0xb1, 0x73, 0xb1, 0x1b, 0x38, 0x21, 0x16, 0x16, 0x56, 0x24, 0xc4, 0xc6, 0x07, 0xe0, 0x53, - 0x30, 0xdf, 0x78, 0x12, 0x0b, 0x23, 0xa4, 0x7c, 0x10, 0x14, 0x3b, 0x6d, 0x53, 0xa0, 0xb4, 0x5b, - 0xe2, 0xf7, 0x79, 0x9f, 0xe7, 0xf7, 0xfa, 0x4d, 0xe0, 0x8d, 0x2c, 0xca, 0xe9, 0x2b, 0xa6, 0x73, - 0x5a, 0x05, 0xf4, 0x64, 0xc6, 0xcb, 0x53, 0x52, 0x94, 0xca, 0x28, 0x34, 0xc8, 0xa2, 0x9c, 0x34, - 0x05, 0x52, 0x05, 0xa3, 0xeb, 0x42, 0x09, 0x65, 0xcf, 0x69, 0xf3, 0xe4, 0x24, 0xa3, 0xb1, 0x50, - 0x4a, 0x64, 0x9c, 0xb2, 0x22, 0xa5, 0x4c, 0x4a, 0x65, 0x98, 0x49, 0x95, 0xd4, 0x6d, 0x75, 0x1a, - 0x2b, 0x9d, 0x2b, 0x4d, 0x23, 0xa6, 0xb9, 0x73, 0xa6, 0x55, 0x10, 0x71, 0xc3, 0x02, 0x5a, 0x30, - 0x91, 0x4a, 0x2b, 0x76, 0x5a, 0x5f, 0xc0, 0x9b, 0xcf, 0x1a, 0xc5, 0x13, 0xc9, 0x62, 0x93, 0x56, - 0xfc, 0x91, 0x92, 0xa6, 0x64, 0xb1, 0xd1, 0x21, 0x3f, 0x99, 0x71, 0x6d, 0xd0, 0x63, 0x08, 0x57, - 0x4d, 0x43, 0x30, 0x01, 0xfb, 0x83, 0xa3, 0xbb, 0xc4, 0x25, 0x90, 0x26, 0x81, 0x38, 0xf6, 0x36, - 0x81, 0x3c, 0x65, 0x82, 0xb7, 0xbd, 0x61, 0xa7, 0xd3, 0x7f, 0x0f, 0x20, 0xde, 0x94, 0xa4, 0x0b, - 0x25, 0x35, 0x47, 0x63, 0xd8, 0x67, 0x49, 0x52, 0x72, 0xad, 0xb9, 0x1e, 0x82, 0xc9, 0x85, 0xfd, - 0x7e, 0xb8, 0x3a, 0x40, 0xc7, 0x6b, 0x20, 0x3d, 0x0b, 0xb2, 0xb7, 0x15, 0xc4, 0x59, 0xaf, 0x91, - 0xdc, 0x87, 0xe3, 0x7f, 0x82, 0x2c, 0x26, 0x1e, 0xc2, 0xcb, 0x6d, 0xaa, 0x1d, 0xb7, 0x1f, 0x2e, - 0x5e, 0xfd, 0x07, 0x1b, 0x2e, 0x6b, 0x39, 0xc1, 0x04, 0x0e, 0x52, 0x57, 0x63, 0x86, 0x27, 0xb6, - 0xfd, 0x4a, 0xd8, 0x3d, 0x3a, 0xfa, 0xda, 0x83, 0x17, 0xad, 0x07, 0xfa, 0x04, 0xe0, 0xb5, 0xbf, - 0xee, 0x02, 0x4d, 0x49, 0x67, 0xfb, 0xe4, 0xbf, 0xab, 0x19, 0x1d, 0xee, 0xa4, 0x75, 0x68, 0xfe, - 0xde, 0xbb, 0x6f, 0xbf, 0x3e, 0xf6, 0x6e, 0xa3, 0x5b, 0xb4, 0xfb, 0xdd, 0xb5, 0x68, 0xfc, 0x45, - 0xbc, 0x24, 0xf8, 0x0c, 0xe0, 0xd5, 0x3f, 0x6d, 0xd0, 0xc1, 0xf6, 0xa8, 0x05, 0xd5, 0x74, 0x17, - 0x69, 0x0b, 0x15, 0x58, 0xa8, 0x43, 0x74, 0xb0, 0x05, 0x8a, 0xbe, 0x69, 0x57, 0xf0, 0xf6, 0xe1, - 0xf1, 0xd9, 0x4f, 0xec, 0x7d, 0xa9, 0xb1, 0x77, 0x56, 0x63, 0x70, 0x5e, 0x63, 0xf0, 0xa3, 0xc6, - 0xe0, 0xc3, 0x1c, 0x7b, 0xe7, 0x73, 0xec, 0x7d, 0x9f, 0x63, 0xef, 0xf9, 0x1d, 0x91, 0x9a, 0x97, - 0xb3, 0x88, 0xc4, 0x2a, 0xa7, 0x59, 0x2a, 0xb9, 0xf5, 0x4d, 0xe8, 0x6b, 0xe7, 0x9f, 0x45, 0xb9, - 0x39, 0x2d, 0xb8, 0x8e, 0x2e, 0xd9, 0x1f, 0xe0, 0xde, 0xef, 0x00, 0x00, 0x00, 0xff, 0xff, 0x60, - 0xc8, 0xe6, 0x11, 0x88, 0x03, 0x00, 0x00, + // 440 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x93, 0xbd, 0x8e, 0xd4, 0x30, + 0x10, 0xc7, 0xe3, 0x45, 0x7c, 0xac, 0xb7, 0x01, 0x0b, 0x89, 0xd5, 0x6a, 0x31, 0x4b, 0x8a, 0xfb, + 0xd8, 0x93, 0x6c, 0xe5, 0x68, 0x68, 0x01, 0x89, 0x8f, 0x0e, 0x52, 0xd2, 0x20, 0x27, 0xb1, 0x4c, + 0xa4, 0xc4, 0xce, 0xc5, 0x4e, 0xe0, 0x84, 0x68, 0x68, 0x68, 0x91, 0x10, 0x1d, 0x0f, 0xc0, 0x53, + 0x50, 0x5f, 0x79, 0x12, 0x0d, 0x25, 0x64, 0x79, 0x10, 0x14, 0x3b, 0x7b, 0x97, 0x05, 0x96, 0xdd, + 0x2a, 0xc9, 0xcc, 0x7f, 0xe6, 0xff, 0x1b, 0x4f, 0x0c, 0x6f, 0x64, 0x51, 0x4e, 0x5f, 0x31, 0x9d, + 0xd3, 0x3a, 0xa0, 0x47, 0x15, 0x2f, 0x8f, 0x49, 0x51, 0x2a, 0xa3, 0xd0, 0x28, 0x8b, 0x72, 0xd2, + 0x26, 0x48, 0x1d, 0x4c, 0xae, 0x0b, 0x25, 0x94, 0x8d, 0xd3, 0xf6, 0xcd, 0x49, 0x26, 0x53, 0xa1, + 0x94, 0xc8, 0x38, 0x65, 0x45, 0x4a, 0x99, 0x94, 0xca, 0x30, 0x93, 0x2a, 0xa9, 0xbb, 0xec, 0x3c, + 0x56, 0x3a, 0x57, 0x9a, 0x46, 0x4c, 0x73, 0xd7, 0x99, 0xd6, 0x41, 0xc4, 0x0d, 0x0b, 0x68, 0xc1, + 0x44, 0x2a, 0xad, 0xd8, 0x69, 0x7d, 0x01, 0x6f, 0x3e, 0x6b, 0x15, 0x4f, 0x24, 0x8b, 0x4d, 0x5a, + 0xf3, 0x07, 0x4a, 0x9a, 0x92, 0xc5, 0x46, 0x87, 0xfc, 0xa8, 0xe2, 0xda, 0xa0, 0x87, 0x10, 0x9e, + 0x17, 0x8d, 0xc1, 0x0c, 0xec, 0x8d, 0x0e, 0x77, 0x88, 0x73, 0x20, 0xad, 0x03, 0x71, 0xec, 0x9d, + 0x03, 0x79, 0xca, 0x04, 0xef, 0x6a, 0xc3, 0x5e, 0xa5, 0xff, 0x1e, 0x40, 0xbc, 0xce, 0x49, 0x17, + 0x4a, 0x6a, 0x8e, 0xa6, 0x70, 0xc8, 0x92, 0xa4, 0xe4, 0x5a, 0x73, 0x3d, 0x06, 0xb3, 0x0b, 0x7b, + 0xc3, 0xf0, 0x3c, 0x80, 0x1e, 0xad, 0x80, 0x0c, 0x2c, 0xc8, 0xee, 0x46, 0x10, 0xd7, 0x7a, 0x85, + 0xe4, 0x2e, 0x9c, 0xfe, 0x13, 0x64, 0x39, 0xf1, 0x18, 0x5e, 0xee, 0x5c, 0xed, 0xb8, 0xc3, 0x70, + 0xf9, 0xe9, 0xdf, 0x5b, 0x73, 0x58, 0x67, 0x13, 0xcc, 0xe0, 0x28, 0x75, 0x39, 0x66, 0x78, 0x62, + 0xcb, 0xaf, 0x84, 0xfd, 0xd0, 0xe1, 0xd7, 0x01, 0xbc, 0x68, 0x7b, 0xa0, 0x4f, 0x00, 0x5e, 0xfb, + 0xeb, 0x2c, 0xd0, 0x9c, 0xf4, 0xb6, 0x4f, 0xfe, 0xbb, 0x9a, 0xc9, 0xc1, 0x56, 0x5a, 0x87, 0xe6, + 0xef, 0xbe, 0xfb, 0xf6, 0xeb, 0xe3, 0xe0, 0x36, 0xba, 0x45, 0xfb, 0xff, 0x5d, 0x87, 0xc6, 0x5f, + 0xc4, 0x67, 0x04, 0x9f, 0x01, 0xbc, 0xfa, 0x67, 0x1b, 0xb4, 0xbf, 0xd9, 0x6a, 0x49, 0x35, 0xdf, + 0x46, 0xda, 0x41, 0x05, 0x16, 0xea, 0x00, 0xed, 0x6f, 0x80, 0xa2, 0x6f, 0xba, 0x15, 0xbc, 0xbd, + 0xff, 0xf8, 0xe4, 0x27, 0xf6, 0xbe, 0x34, 0xd8, 0x3b, 0x69, 0x30, 0x38, 0x6d, 0x30, 0xf8, 0xd1, + 0x60, 0xf0, 0x61, 0x81, 0xbd, 0xd3, 0x05, 0xf6, 0xbe, 0x2f, 0xb0, 0xf7, 0x7c, 0x47, 0xa4, 0xe6, + 0x65, 0x15, 0x91, 0x58, 0xe5, 0x34, 0x4b, 0x25, 0xb7, 0x7d, 0x13, 0xfa, 0xda, 0x3e, 0x8b, 0xac, + 0xd2, 0xd4, 0x1c, 0x17, 0x5c, 0x47, 0x97, 0xec, 0x0d, 0xb8, 0xf3, 0x3b, 0x00, 0x00, 0xff, 0xff, + 0xd3, 0xd6, 0x64, 0x3a, 0x89, 0x03, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. diff --git a/x/wasm/lbmtypes/query.pb.gw.go b/x/wasmplus/types/query.pb.gw.go similarity index 99% rename from x/wasm/lbmtypes/query.pb.gw.go rename to x/wasmplus/types/query.pb.gw.go index e3c64cb7f2..220edddb05 100644 --- a/x/wasm/lbmtypes/query.pb.gw.go +++ b/x/wasmplus/types/query.pb.gw.go @@ -2,11 +2,11 @@ // source: lbm/wasm/v1/query.proto /* -Package lbmtypes is a reverse proxy. +Package types is a reverse proxy. It translates gRPC into RESTful JSON APIs. */ -package lbmtypes +package types import ( "context" diff --git a/x/wasmplus/types/test_fixtures.go b/x/wasmplus/types/test_fixtures.go new file mode 100644 index 0000000000..ebeb29c899 --- /dev/null +++ b/x/wasmplus/types/test_fixtures.go @@ -0,0 +1,53 @@ +package types + +import ( + "math/rand" + + wasmtypes "github.com/line/wasmd/x/wasm/types" +) + +func GenesisFixture(mutators ...func(*GenesisState)) GenesisState { + const ( + numCodes = 2 + numContracts = 2 + numSequences = 2 + numMsg = 3 + ) + + fixture := GenesisState{ + Params: DefaultParams(), + Codes: make([]wasmtypes.Code, numCodes), + Contracts: make([]wasmtypes.Contract, numContracts), + Sequences: make([]wasmtypes.Sequence, numSequences), + InactiveContractAddresses: make([]string, numContracts), + } + for i := 0; i < numCodes; i++ { + fixture.Codes[i] = wasmtypes.CodeFixture() + } + for i := 0; i < numContracts; i++ { + contract := wasmtypes.ContractFixture() + fixture.Contracts[i] = contract + fixture.InactiveContractAddresses[i] = contract.ContractAddress + } + for i := 0; i < numSequences; i++ { + fixture.Sequences[i] = wasmtypes.Sequence{ + IDKey: randBytes(5), + Value: uint64(i), + } + } + fixture.GenMsgs = []wasmtypes.GenesisState_GenMsgs{ + {Sum: &wasmtypes.GenesisState_GenMsgs_StoreCode{StoreCode: wasmtypes.MsgStoreCodeFixture()}}, + {Sum: &wasmtypes.GenesisState_GenMsgs_InstantiateContract{InstantiateContract: wasmtypes.MsgInstantiateContractFixture()}}, + {Sum: &wasmtypes.GenesisState_GenMsgs_ExecuteContract{ExecuteContract: wasmtypes.MsgExecuteContractFixture()}}, + } + for _, m := range mutators { + m(&fixture) + } + return fixture +} + +func randBytes(n int) []byte { + r := make([]byte, n) + rand.Read(r) + return r +} diff --git a/x/wasm/lbmtypes/tx.go b/x/wasmplus/types/tx.go similarity index 98% rename from x/wasm/lbmtypes/tx.go rename to x/wasmplus/types/tx.go index fa9089de80..7589343343 100644 --- a/x/wasm/lbmtypes/tx.go +++ b/x/wasmplus/types/tx.go @@ -1,4 +1,4 @@ -package lbmtypes +package types import ( sdk "github.com/line/lbm-sdk/types" diff --git a/x/wasm/lbmtypes/tx.pb.go b/x/wasmplus/types/tx.pb.go similarity index 88% rename from x/wasm/lbmtypes/tx.pb.go rename to x/wasmplus/types/tx.pb.go index f4e4a54ab0..1741b63126 100644 --- a/x/wasm/lbmtypes/tx.pb.go +++ b/x/wasmplus/types/tx.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-gogo. DO NOT EDIT. // source: lbm/wasm/v1/tx.proto -package lbmtypes +package types import ( context "context" @@ -137,41 +137,41 @@ func init() { func init() { proto.RegisterFile("lbm/wasm/v1/tx.proto", fileDescriptor_751e1d2b9f9bf9e8) } var fileDescriptor_751e1d2b9f9bf9e8 = []byte{ - // 540 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x94, 0x53, 0x4f, 0x8b, 0xd3, 0x4e, - 0x18, 0x6e, 0x7e, 0x49, 0xff, 0x4d, 0xcb, 0x8f, 0x32, 0xd4, 0x25, 0x16, 0x49, 0x4a, 0x17, 0xa1, - 0x28, 0x4e, 0x68, 0x45, 0xc5, 0x63, 0x5b, 0x2f, 0x5d, 0x29, 0x48, 0x16, 0x11, 0x44, 0x28, 0x93, - 0xcc, 0x6c, 0x0c, 0x26, 0x33, 0x25, 0x33, 0xdb, 0xdd, 0x9e, 0xfc, 0x00, 0x5e, 0x04, 0xbf, 0x85, - 0x07, 0x3f, 0x47, 0x8f, 0x7b, 0xf4, 0x54, 0xb5, 0xfd, 0x16, 0x9e, 0x64, 0x26, 0xcd, 0xba, 0x78, - 0xb0, 0x78, 0x9b, 0xe7, 0xfd, 0xf3, 0xbc, 0xef, 0x3c, 0xcf, 0x0c, 0x68, 0x27, 0x41, 0xea, 0x5d, - 0x60, 0x91, 0x7a, 0xcb, 0x81, 0x27, 0x2f, 0xd1, 0x22, 0xe3, 0x92, 0xc3, 0x46, 0x12, 0xa4, 0x48, - 0x45, 0xd1, 0x72, 0xd0, 0x69, 0x47, 0x3c, 0xe2, 0x3a, 0xee, 0xa9, 0x53, 0x5e, 0xd2, 0x71, 0x42, - 0x2e, 0x52, 0x2e, 0xbc, 0x00, 0x0b, 0xea, 0x2d, 0x07, 0x01, 0x95, 0x78, 0xe0, 0x85, 0x3c, 0x66, - 0xfb, 0xfc, 0x1d, 0x95, 0xd7, 0xc4, 0xd7, 0xec, 0xab, 0x05, 0x15, 0x79, 0xb6, 0xf7, 0xc5, 0x04, - 0xbd, 0x99, 0x88, 0x4e, 0x25, 0xcf, 0xe8, 0x84, 0x13, 0x3a, 0x62, 0x64, 0xca, 0x84, 0xc4, 0x4c, - 0xc6, 0x58, 0xd2, 0x09, 0x67, 0x32, 0xc3, 0xa1, 0x84, 0x47, 0xa0, 0x22, 0x28, 0x23, 0x34, 0xb3, - 0x8d, 0xae, 0xd1, 0xaf, 0xfb, 0x7b, 0x04, 0x1f, 0x83, 0xff, 0x15, 0xeb, 0x3c, 0x58, 0x49, 0x3a, - 0x0f, 0x39, 0xa1, 0xf6, 0x7f, 0x5d, 0xa3, 0xdf, 0x1c, 0xb7, 0xb6, 0x1b, 0xb7, 0xf9, 0x6a, 0x74, - 0x3a, 0x1b, 0xaf, 0xa4, 0xe6, 0xf5, 0x9b, 0xaa, 0xae, 0x40, 0xf0, 0x25, 0x38, 0x8a, 0x7f, 0x8f, - 0x99, 0x2f, 0x68, 0x96, 0xc6, 0x42, 0xc4, 0x9c, 0xd9, 0xe5, 0xae, 0xd1, 0x6f, 0x0c, 0x1d, 0x54, - 0x6c, 0x5d, 0xdc, 0x1e, 0x8d, 0xc2, 0x90, 0x0a, 0x31, 0xe1, 0xec, 0x2c, 0x8e, 0xfc, 0x5b, 0x37, - 0xba, 0x5f, 0x5c, 0x37, 0xc3, 0x36, 0x28, 0x63, 0x92, 0xc6, 0xcc, 0xae, 0xe8, 0x2d, 0x73, 0xa0, - 0xa2, 0x09, 0x0e, 0x68, 0x62, 0x57, 0xf3, 0xa8, 0x06, 0xf0, 0x39, 0x30, 0x53, 0x11, 0xd9, 0x35, - 0xbd, 0xef, 0xd3, 0x9f, 0x1b, 0xf7, 0x51, 0x14, 0xcb, 0xb7, 0xe7, 0x01, 0x0a, 0x79, 0xea, 0x25, - 0x31, 0xa3, 0x5a, 0x2f, 0xe2, 0x5d, 0xe6, 0xba, 0xe5, 0xa2, 0xf9, 0xf8, 0xa2, 0xd0, 0x64, 0x46, - 0x85, 0xc0, 0x11, 0xf5, 0x15, 0x0b, 0x7c, 0x03, 0xca, 0x67, 0xe7, 0x8c, 0x08, 0xbb, 0xde, 0x35, - 0xfb, 0x8d, 0xe1, 0x6d, 0x94, 0x9b, 0x82, 0x94, 0x29, 0x68, 0x6f, 0x0a, 0x9a, 0xf0, 0x98, 0x8d, - 0xef, 0xaf, 0x37, 0x6e, 0xe9, 0xf3, 0x37, 0xf7, 0xf8, 0xcf, 0x69, 0x49, 0x90, 0x3e, 0x10, 0xe4, - 0xdd, 0x7e, 0x90, 0xaa, 0x15, 0x7e, 0x4e, 0x7a, 0x62, 0xd5, 0xcc, 0x96, 0x75, 0x62, 0xd5, 0xac, - 0x56, 0xb9, 0xf7, 0x1e, 0xdc, 0x3b, 0xec, 0x97, 0x4f, 0xc5, 0x82, 0x33, 0x41, 0xe1, 0x31, 0xa8, - 0x2a, 0x57, 0xe6, 0x31, 0xd1, 0xc6, 0x59, 0x63, 0xb0, 0xdd, 0xb8, 0x15, 0xd5, 0x38, 0x7d, 0xe6, - 0x57, 0x54, 0x6a, 0x4a, 0xa0, 0x0d, 0xaa, 0x98, 0x90, 0x8c, 0x0a, 0xa1, 0xdd, 0xab, 0xfb, 0x05, - 0x84, 0x10, 0x58, 0x04, 0x4b, 0x6c, 0x9b, 0x4a, 0x24, 0x5f, 0x9f, 0x87, 0x9f, 0x0c, 0x60, 0xce, - 0x44, 0x04, 0x3f, 0x18, 0xc0, 0x3d, 0xf4, 0x6c, 0x3c, 0x74, 0xe3, 0xfd, 0xa2, 0xc3, 0x7b, 0x77, - 0x9e, 0xfc, 0x63, 0x43, 0x71, 0xd1, 0xf1, 0x64, 0xfd, 0xc3, 0x29, 0xad, 0xb7, 0x8e, 0x71, 0xb5, - 0x75, 0x8c, 0xef, 0x5b, 0xc7, 0xf8, 0xb8, 0x73, 0x4a, 0x57, 0x3b, 0xa7, 0xf4, 0x75, 0xe7, 0x94, - 0x5e, 0xdf, 0xfd, 0xab, 0xb5, 0x49, 0x90, 0x6a, 0xd1, 0x83, 0x8a, 0xfe, 0x13, 0x0f, 0x7f, 0x05, - 0x00, 0x00, 0xff, 0xff, 0xca, 0xf8, 0xad, 0x18, 0x8c, 0x03, 0x00, 0x00, + // 541 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x94, 0x53, 0x4d, 0x8b, 0xd3, 0x40, + 0x18, 0x6e, 0x4c, 0xda, 0xdd, 0x9d, 0x5d, 0x64, 0x19, 0xea, 0x12, 0x8b, 0x24, 0xa5, 0x0b, 0x52, + 0x14, 0x27, 0xb4, 0xa2, 0xe2, 0xb1, 0xed, 0x5e, 0xba, 0x52, 0x90, 0x2c, 0x22, 0x88, 0x50, 0x26, + 0x99, 0xd9, 0x18, 0x4c, 0x66, 0x4a, 0xde, 0x69, 0x77, 0x7b, 0xf2, 0x07, 0x78, 0x11, 0xfc, 0x17, + 0x1e, 0xfc, 0x1d, 0x3d, 0xee, 0xd1, 0x53, 0xd5, 0xf6, 0x5f, 0x78, 0x92, 0x49, 0x9a, 0x75, 0xf1, + 0x60, 0xf1, 0x36, 0xcf, 0xfb, 0xf1, 0xbc, 0xef, 0x3c, 0xcf, 0x0c, 0xaa, 0x27, 0x41, 0xea, 0x5d, + 0x50, 0x48, 0xbd, 0x59, 0xc7, 0x53, 0x97, 0x64, 0x92, 0x49, 0x25, 0xf1, 0x7e, 0x12, 0xa4, 0x44, + 0x47, 0xc9, 0xac, 0xd3, 0xa8, 0x47, 0x32, 0x92, 0x79, 0xdc, 0xd3, 0xa7, 0xa2, 0xa4, 0xe1, 0x84, + 0x12, 0x52, 0x09, 0x5e, 0x40, 0x81, 0x7b, 0xb3, 0x4e, 0xc0, 0x15, 0xed, 0x78, 0xa1, 0x8c, 0xc5, + 0x26, 0x7f, 0x4f, 0xe7, 0x73, 0xe2, 0x6b, 0xf6, 0xf9, 0x84, 0x43, 0x91, 0x6d, 0x7d, 0x35, 0x51, + 0x6b, 0x04, 0xd1, 0x99, 0x92, 0x19, 0x1f, 0x48, 0xc6, 0x7b, 0x82, 0x0d, 0x05, 0x28, 0x2a, 0x54, + 0x4c, 0x15, 0x1f, 0x48, 0xa1, 0x32, 0x1a, 0x2a, 0x7c, 0x84, 0x6a, 0xc0, 0x05, 0xe3, 0x99, 0x6d, + 0x34, 0x8d, 0xf6, 0x9e, 0xbf, 0x41, 0xf8, 0x29, 0xba, 0xad, 0x59, 0xc7, 0xc1, 0x5c, 0xf1, 0x71, + 0x28, 0x19, 0xb7, 0x6f, 0x35, 0x8d, 0xf6, 0x41, 0xff, 0x70, 0xb5, 0x74, 0x0f, 0x5e, 0xf7, 0xce, + 0x46, 0xfd, 0xb9, 0xca, 0x79, 0xfd, 0x03, 0x5d, 0x57, 0x22, 0xfc, 0x0a, 0x1d, 0xc5, 0x7f, 0xc6, + 0x8c, 0x27, 0x3c, 0x4b, 0x63, 0x80, 0x58, 0x0a, 0xbb, 0xda, 0x34, 0xda, 0xfb, 0x5d, 0x87, 0x94, + 0x5b, 0x97, 0xb7, 0x27, 0xbd, 0x30, 0xe4, 0x00, 0x03, 0x29, 0xce, 0xe3, 0xc8, 0xbf, 0x73, 0xa3, + 0xfb, 0xe5, 0x75, 0x33, 0xae, 0xa3, 0x2a, 0x65, 0x69, 0x2c, 0xec, 0x5a, 0xbe, 0x65, 0x01, 0x74, + 0x34, 0xa1, 0x01, 0x4f, 0xec, 0x9d, 0x22, 0x9a, 0x03, 0xfc, 0x02, 0x99, 0x29, 0x44, 0xf6, 0x6e, + 0xbe, 0xef, 0xf3, 0x5f, 0x4b, 0xf7, 0x49, 0x14, 0xab, 0x77, 0xd3, 0x80, 0x84, 0x32, 0xf5, 0x92, + 0x58, 0xf0, 0x5c, 0x2f, 0xe6, 0x5d, 0x16, 0xba, 0x15, 0xa2, 0xf9, 0xf4, 0xa2, 0xd4, 0x64, 0xc4, + 0x01, 0x68, 0xc4, 0x7d, 0xcd, 0x82, 0xdf, 0xa2, 0xea, 0xf9, 0x54, 0x30, 0xb0, 0xf7, 0x9a, 0x66, + 0x7b, 0xbf, 0x7b, 0x97, 0x14, 0xa6, 0x10, 0x6d, 0x0a, 0xd9, 0x98, 0x42, 0x06, 0x32, 0x16, 0xfd, + 0x87, 0x8b, 0xa5, 0x5b, 0xf9, 0xf2, 0xdd, 0x3d, 0xfe, 0x7b, 0x5a, 0x12, 0xa4, 0x8f, 0x80, 0xbd, + 0xdf, 0x0c, 0xd2, 0xb5, 0xe0, 0x17, 0xa4, 0xa7, 0xd6, 0xae, 0x79, 0x68, 0x9d, 0x5a, 0xbb, 0xd6, + 0x61, 0xb5, 0xf5, 0x01, 0x3d, 0xd8, 0xee, 0x97, 0xcf, 0x61, 0x22, 0x05, 0x70, 0x7c, 0x8c, 0x76, + 0xb4, 0x2b, 0xe3, 0x98, 0xe5, 0xc6, 0x59, 0x7d, 0xb4, 0x5a, 0xba, 0x35, 0xdd, 0x38, 0x3c, 0xf1, + 0x6b, 0x3a, 0x35, 0x64, 0xd8, 0x46, 0x3b, 0x94, 0xb1, 0x8c, 0x03, 0xe4, 0xee, 0xed, 0xf9, 0x25, + 0xc4, 0x18, 0x59, 0x8c, 0x2a, 0x6a, 0x9b, 0x5a, 0x24, 0x3f, 0x3f, 0x77, 0x3f, 0x1b, 0xc8, 0x1c, + 0x41, 0x84, 0x3f, 0x1a, 0xc8, 0xdd, 0xf6, 0x6c, 0x3c, 0x72, 0xe3, 0xfd, 0x92, 0xed, 0x7b, 0x37, + 0x9e, 0xfd, 0x67, 0x43, 0x79, 0xd1, 0xfe, 0xc9, 0xe2, 0xa7, 0x53, 0x59, 0xac, 0x1c, 0xe3, 0x6a, + 0xe5, 0x18, 0x3f, 0x56, 0x8e, 0xf1, 0x69, 0xed, 0x54, 0xae, 0xd6, 0x4e, 0xe5, 0xdb, 0xda, 0xa9, + 0xbc, 0xb9, 0xff, 0x2f, 0x6b, 0x27, 0xc9, 0x14, 0x0a, 0xd5, 0x83, 0x5a, 0xfe, 0x29, 0x1e, 0xff, + 0x0e, 0x00, 0x00, 0xff, 0xff, 0x92, 0x19, 0xa9, 0x26, 0x8d, 0x03, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. diff --git a/x/wasm/lbmtypes/tx_test.go b/x/wasmplus/types/tx_test.go similarity index 99% rename from x/wasm/lbmtypes/tx_test.go rename to x/wasmplus/types/tx_test.go index 2f91297b3e..6b00495595 100644 --- a/x/wasm/lbmtypes/tx_test.go +++ b/x/wasmplus/types/tx_test.go @@ -1,4 +1,4 @@ -package lbmtypes +package types import ( "encoding/hex" diff --git a/x/wasm/lbmtypes/types.pb.go b/x/wasmplus/types/types.pb.go similarity index 80% rename from x/wasm/lbmtypes/types.pb.go rename to x/wasmplus/types/types.pb.go index f261559501..835578956d 100644 --- a/x/wasm/lbmtypes/types.pb.go +++ b/x/wasmplus/types/types.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-gogo. DO NOT EDIT. // source: lbm/wasm/v1/types.proto -package lbmtypes +package types import ( fmt "fmt" @@ -72,34 +72,34 @@ func init() { func init() { proto.RegisterFile("lbm/wasm/v1/types.proto", fileDescriptor_5a7988258faf20f7) } var fileDescriptor_5a7988258faf20f7 = []byte{ - // 417 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x92, 0x4f, 0x8b, 0xd3, 0x40, - 0x18, 0xc6, 0x33, 0x6e, 0xdd, 0x43, 0xba, 0xbb, 0x48, 0x5c, 0xd9, 0xec, 0x52, 0x26, 0x35, 0xb0, - 0x50, 0x2f, 0x09, 0xbb, 0xde, 0x0a, 0x82, 0xa6, 0x82, 0x27, 0xa1, 0x04, 0xbd, 0x78, 0x09, 0x93, - 0xc9, 0x34, 0x0e, 0xcc, 0x64, 0x42, 0x66, 0x52, 0xed, 0x87, 0x10, 0x3c, 0x7a, 0xf4, 0xe8, 0x47, - 0xe9, 0xc1, 0x43, 0x8f, 0x9e, 0x82, 0xa6, 0xdf, 0x20, 0x9f, 0x40, 0x32, 0x69, 0x6a, 0xc5, 0x3f, - 0xb7, 0xbc, 0xef, 0xef, 0x7d, 0x9e, 0x27, 0x0c, 0x8f, 0x79, 0xc1, 0x62, 0xee, 0xbf, 0x43, 0x92, - 0xfb, 0xcb, 0x1b, 0x5f, 0xad, 0x72, 0x22, 0xbd, 0xbc, 0x10, 0x4a, 0x58, 0x43, 0x16, 0x73, 0xaf, - 0x05, 0xde, 0xf2, 0xe6, 0xea, 0x3c, 0x15, 0xa9, 0xd0, 0x7b, 0xbf, 0xfd, 0xea, 0x4e, 0xae, 0x46, - 0x58, 0x48, 0xae, 0xb5, 0x7f, 0x31, 0x70, 0xbf, 0x1e, 0x99, 0xc7, 0x73, 0x54, 0x20, 0x2e, 0x2d, - 0x61, 0x5a, 0x58, 0x24, 0x24, 0x2a, 0x73, 0x26, 0x50, 0x12, 0x21, 0x8c, 0x89, 0x94, 0x36, 0x18, - 0x83, 0xc9, 0xf0, 0x16, 0x7a, 0xbd, 0x4b, 0x9f, 0xe6, 0x3d, 0xd3, 0x7c, 0x26, 0xb2, 0x05, 0x4d, - 0x83, 0x87, 0xeb, 0xca, 0x31, 0x9a, 0xca, 0xb9, 0x5c, 0x21, 0xce, 0xa6, 0xee, 0x9f, 0x3e, 0x6e, - 0x78, 0xaf, 0x5d, 0xbe, 0xd6, 0xbb, 0x4e, 0x6a, 0x7d, 0x00, 0x26, 0xa4, 0x99, 0x54, 0x28, 0x53, - 0x14, 0x29, 0x12, 0x25, 0x64, 0x81, 0x4a, 0xa6, 0xa2, 0x9c, 0x14, 0x9c, 0x4a, 0x49, 0x45, 0x66, - 0xdf, 0x19, 0x83, 0xc9, 0xd9, 0xed, 0xe8, 0x5f, 0xe9, 0xaf, 0x56, 0x39, 0x09, 0x1e, 0x35, 0x95, - 0x73, 0xdd, 0xe5, 0xfe, 0xdf, 0xcd, 0x0d, 0x47, 0x07, 0x07, 0xcf, 0x3b, 0x3e, 0xdf, 0x63, 0xeb, - 0xa9, 0x79, 0x96, 0x22, 0x19, 0xf1, 0x92, 0x29, 0x9a, 0x33, 0x4a, 0x0a, 0xfb, 0x68, 0x0c, 0x26, - 0x83, 0xe0, 0xb2, 0xa9, 0x9c, 0x07, 0x5d, 0xc0, 0xef, 0xdc, 0x0d, 0x4f, 0x53, 0x24, 0x5f, 0xee, - 0x67, 0xeb, 0x89, 0x79, 0xda, 0x25, 0x60, 0x12, 0x61, 0x21, 0x95, 0x3d, 0xd0, 0x06, 0x76, 0x53, - 0x39, 0xe7, 0x87, 0x7f, 0xb8, 0xc3, 0x6e, 0x78, 0xd2, 0xcf, 0x33, 0x21, 0x95, 0x35, 0x35, 0x4f, - 0xb0, 0xe0, 0x39, 0x65, 0x3b, 0xf5, 0x5d, 0xad, 0xbe, 0x68, 0x2a, 0xe7, 0x7e, 0xff, 0xae, 0xbf, - 0xa8, 0x1b, 0x0e, 0x77, 0x63, 0xab, 0x9d, 0x0e, 0x3e, 0x7d, 0x76, 0x8c, 0xe0, 0xc5, 0xfa, 0x07, - 0x34, 0xbe, 0xd4, 0x10, 0xac, 0x6b, 0x08, 0x36, 0x35, 0x04, 0xdf, 0x6b, 0x08, 0x3e, 0x6e, 0xa1, - 0xb1, 0xd9, 0x42, 0xe3, 0xdb, 0x16, 0x1a, 0x6f, 0xae, 0x53, 0xaa, 0xde, 0x96, 0xb1, 0x87, 0x05, - 0xf7, 0x19, 0xcd, 0x88, 0x6e, 0x45, 0xe2, 0xbf, 0xef, 0xda, 0xc1, 0x62, 0xae, 0xdb, 0x11, 0x1f, - 0xeb, 0x7a, 0x3c, 0xfe, 0x19, 0x00, 0x00, 0xff, 0xff, 0xaa, 0x8d, 0x1b, 0x82, 0x7a, 0x02, 0x00, - 0x00, + // 419 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x92, 0x3f, 0x6f, 0xd4, 0x30, + 0x18, 0xc6, 0x63, 0x7a, 0x74, 0xc8, 0xb5, 0x15, 0x0a, 0x45, 0x4d, 0xab, 0x93, 0x73, 0x44, 0x02, + 0x1d, 0x4b, 0xa2, 0x96, 0xed, 0x24, 0x24, 0x48, 0x19, 0x58, 0x90, 0xaa, 0x08, 0x16, 0x96, 0xc8, + 0x71, 0xdc, 0x60, 0xc9, 0x8e, 0xad, 0xd8, 0x29, 0xdc, 0x87, 0x40, 0x62, 0x64, 0x64, 0xe4, 0xa3, + 0xdc, 0xc0, 0x70, 0x23, 0x53, 0x04, 0xb9, 0x6f, 0x90, 0x4f, 0x80, 0xe2, 0x5c, 0x8e, 0x43, 0xfc, + 0x99, 0xec, 0xf7, 0xfd, 0xbd, 0xcf, 0xf3, 0x58, 0xd6, 0x6b, 0x9f, 0xb0, 0x94, 0x87, 0xef, 0x90, + 0xe2, 0xe1, 0xcd, 0x79, 0xa8, 0x17, 0x92, 0xa8, 0x40, 0x96, 0x42, 0x0b, 0x67, 0xcc, 0x52, 0x1e, + 0x74, 0x20, 0xb8, 0x39, 0x3f, 0x3b, 0xce, 0x45, 0x2e, 0x4c, 0x3f, 0xec, 0x6e, 0xfd, 0xc8, 0xd9, + 0x04, 0x0b, 0xc5, 0x8d, 0xf6, 0x2f, 0x06, 0xfe, 0xd7, 0x3d, 0x7b, 0xff, 0x0a, 0x95, 0x88, 0x2b, + 0x47, 0xd8, 0x0e, 0x16, 0x19, 0x49, 0x2a, 0xc9, 0x04, 0xca, 0x12, 0x84, 0x31, 0x51, 0xca, 0x05, + 0x53, 0x30, 0x1b, 0x5f, 0xc0, 0x60, 0x70, 0x19, 0xd2, 0x82, 0x67, 0x86, 0x5f, 0x8a, 0xe2, 0x9a, + 0xe6, 0xd1, 0xfd, 0x65, 0xed, 0x59, 0x6d, 0xed, 0x9d, 0x2e, 0x10, 0x67, 0x73, 0xff, 0x4f, 0x1f, + 0x3f, 0xbe, 0xd3, 0x35, 0x5f, 0x9b, 0x5e, 0x2f, 0x75, 0x3e, 0x00, 0x1b, 0xd2, 0x42, 0x69, 0x54, + 0x68, 0x8a, 0x34, 0x49, 0x32, 0x72, 0x8d, 0x2a, 0xa6, 0x13, 0x49, 0x4a, 0x4e, 0x95, 0xa2, 0xa2, + 0x70, 0x6f, 0x4d, 0xc1, 0xec, 0xe8, 0x62, 0xf2, 0xaf, 0xf4, 0x57, 0x0b, 0x49, 0xa2, 0x47, 0x6d, + 0xed, 0x3d, 0xe8, 0x73, 0xff, 0xef, 0xe6, 0xc7, 0x93, 0x9d, 0x81, 0xe7, 0x3d, 0xbf, 0xda, 0x62, + 0xe7, 0xa9, 0x7d, 0x94, 0x23, 0x95, 0xf0, 0x8a, 0x69, 0x2a, 0x19, 0x25, 0xa5, 0xbb, 0x37, 0x05, + 0xb3, 0x51, 0x74, 0xda, 0xd6, 0xde, 0xbd, 0x3e, 0xe0, 0x77, 0xee, 0xc7, 0x87, 0x39, 0x52, 0x2f, + 0xb7, 0xb5, 0xf3, 0xc4, 0x3e, 0xec, 0x13, 0x30, 0x49, 0xb0, 0x50, 0xda, 0x1d, 0x19, 0x03, 0xb7, + 0xad, 0xbd, 0xe3, 0xdd, 0x17, 0x6e, 0xb0, 0x1f, 0x1f, 0x0c, 0xf5, 0xa5, 0x50, 0xda, 0x99, 0xdb, + 0x07, 0x58, 0x70, 0x49, 0xd9, 0x46, 0x7d, 0xdb, 0xa8, 0x4f, 0xda, 0xda, 0xbb, 0x3b, 0xfc, 0xeb, + 0x2f, 0xea, 0xc7, 0xe3, 0x4d, 0xd9, 0x69, 0xe7, 0xa3, 0x4f, 0x9f, 0x3d, 0x2b, 0x7a, 0xb1, 0xfc, + 0x01, 0xad, 0x2f, 0x0d, 0x04, 0xcb, 0x06, 0x82, 0x55, 0x03, 0xc1, 0xf7, 0x06, 0x82, 0x8f, 0x6b, + 0x68, 0xad, 0xd6, 0xd0, 0xfa, 0xb6, 0x86, 0xd6, 0x9b, 0x87, 0x39, 0xd5, 0x6f, 0xab, 0x34, 0xc0, + 0x82, 0x87, 0x8c, 0x16, 0xc4, 0x6c, 0x45, 0x16, 0xbe, 0x37, 0xa7, 0x64, 0x95, 0xea, 0xd7, 0x23, + 0xdd, 0x37, 0xfb, 0xf1, 0xf8, 0x67, 0x00, 0x00, 0x00, 0xff, 0xff, 0x38, 0x00, 0x46, 0x41, 0x7b, + 0x02, 0x00, 0x00, } func (this *Params) Equal(that interface{}) bool { diff --git a/x/wasm/lbmtypes/validation.go b/x/wasmplus/types/validation.go similarity index 97% rename from x/wasm/lbmtypes/validation.go rename to x/wasmplus/types/validation.go index 0d3465209c..1d526ab4a3 100644 --- a/x/wasm/lbmtypes/validation.go +++ b/x/wasmplus/types/validation.go @@ -1,4 +1,4 @@ -package lbmtypes +package types import ( sdkerrors "github.com/line/lbm-sdk/types/errors" From 5854ff635ad79a52020c8551aae3f92ad1c34a29 Mon Sep 17 00:00:00 2001 From: zemyblue Date: Thu, 19 Jan 2023 23:09:17 +0900 Subject: [PATCH 03/17] feat: move custom cli of lbm-sdk to `wasmplus` client package --- Makefile | 1 + cmd/wasmplusd/genaccounts.go | 192 ++++++++++++ cmd/wasmplusd/genwasm.go | 28 ++ cmd/wasmplusd/main.go | 24 ++ cmd/wasmplusd/root.go | 282 ++++++++++++++++++ x/wasm/client/cli/gov_tx.go | 107 ------- x/wasm/client/cli/query.go | 64 ---- x/wasm/client/cli/query_test.go | 53 ---- x/wasm/client/cli/tx.go | 110 ------- x/wasm/client/proposal_handler.go | 2 - x/wasm/client/testutil/cli_test.go | 55 +++- x/wasm/client/testutil/query.go | 81 +---- x/wasm/client/testutil/suite.go | 15 +- .../testutil/testdata/wasm_genesis.json | 5 - x/wasm/client/testutil/tx.go | 79 ----- x/wasmplus/client/cli/gov_tx.go | 121 ++++++++ x/wasmplus/client/cli/query.go | 119 ++++++++ x/wasmplus/client/cli/query_test.go | 140 +++++++++ x/wasmplus/client/cli/tx.go | 160 ++++++++++ x/wasmplus/client/proposal_handler.go | 24 ++ x/wasmplus/client/testutil/cli_test.go | 72 +++++ x/{wasm => wasmplus}/client/testutil/gov.go | 2 +- x/wasmplus/client/testutil/query.go | 80 +++++ x/wasmplus/client/testutil/suite.go | 161 ++++++++++ .../testutil/testdata/wasm_genesis.json | 71 +++++ x/wasmplus/client/testutil/tx.go | 90 ++++++ x/wasmplus/module.go | 9 +- 27 files changed, 1639 insertions(+), 508 deletions(-) create mode 100644 cmd/wasmplusd/genaccounts.go create mode 100644 cmd/wasmplusd/genwasm.go create mode 100644 cmd/wasmplusd/main.go create mode 100644 cmd/wasmplusd/root.go create mode 100644 x/wasmplus/client/cli/gov_tx.go create mode 100644 x/wasmplus/client/cli/query.go create mode 100644 x/wasmplus/client/cli/query_test.go create mode 100644 x/wasmplus/client/cli/tx.go create mode 100644 x/wasmplus/client/proposal_handler.go create mode 100644 x/wasmplus/client/testutil/cli_test.go rename x/{wasm => wasmplus}/client/testutil/gov.go (98%) create mode 100644 x/wasmplus/client/testutil/query.go create mode 100644 x/wasmplus/client/testutil/suite.go create mode 100644 x/wasmplus/client/testutil/testdata/wasm_genesis.json create mode 100644 x/wasmplus/client/testutil/tx.go diff --git a/Makefile b/Makefile index c27800f72c..5e9d3d4f7c 100644 --- a/Makefile +++ b/Makefile @@ -83,6 +83,7 @@ ifeq ($(OS),Windows_NT) exit 1 else go build -mod=readonly $(BUILD_FLAGS) -o build/wasmd ./cmd/wasmd + go build -mod=readonly $(BUILD_FLAGS) -o build/wasmplusd ./cmd/wasmplusd endif build-contract-tests-hooks: diff --git a/cmd/wasmplusd/genaccounts.go b/cmd/wasmplusd/genaccounts.go new file mode 100644 index 0000000000..990c6aa898 --- /dev/null +++ b/cmd/wasmplusd/genaccounts.go @@ -0,0 +1,192 @@ +package main + +import ( + "bufio" + "encoding/json" + "errors" + "fmt" + + "github.com/spf13/cobra" + + "github.com/line/lbm-sdk/client" + "github.com/line/lbm-sdk/client/flags" + "github.com/line/lbm-sdk/crypto/keyring" + "github.com/line/lbm-sdk/server" + sdk "github.com/line/lbm-sdk/types" + authtypes "github.com/line/lbm-sdk/x/auth/types" + authvesting "github.com/line/lbm-sdk/x/auth/vesting/types" + banktypes "github.com/line/lbm-sdk/x/bank/types" + "github.com/line/lbm-sdk/x/genutil" + genutiltypes "github.com/line/lbm-sdk/x/genutil/types" +) + +const ( + flagVestingStart = "vesting-start-time" + flagVestingEnd = "vesting-end-time" + flagVestingAmt = "vesting-amount" +) + +// AddGenesisAccountCmd returns add-genesis-account cobra Command. +func AddGenesisAccountCmd(defaultNodeHome string) *cobra.Command { + cmd := &cobra.Command{ + Use: "add-genesis-account [address_or_key_name] [coin][,[coin]]", + Short: "Add a genesis account to genesis.json", + Long: `Add a genesis account to genesis.json. The provided account must specify +the account address or key name and a list of initial coins. If a key name is given, +the address will be looked up in the local Keybase. The list of initial tokens must +contain valid denominations. Accounts may optionally be supplied with vesting parameters. +`, + Args: cobra.ExactArgs(2), + RunE: func(cmd *cobra.Command, args []string) error { + clientCtx := client.GetClientContextFromCmd(cmd) + serverCtx := server.GetServerContextFromCmd(cmd) + config := serverCtx.Config + + config.SetRoot(clientCtx.HomeDir) + + var kr keyring.Keyring + addr, err := sdk.AccAddressFromBech32(args[0]) + if err != nil { + inBuf := bufio.NewReader(cmd.InOrStdin()) + keyringBackend, err := cmd.Flags().GetString(flags.FlagKeyringBackend) + if err != nil { + return fmt.Errorf("failed to parse keyring backend: %w", err) + } + if keyringBackend != "" && clientCtx.Keyring == nil { + var err error + kr, err = keyring.New(sdk.KeyringServiceName(), keyringBackend, clientCtx.HomeDir, inBuf) + if err != nil { + return err + } + } else { + kr = clientCtx.Keyring + } + + info, err := kr.Key(args[0]) + if err != nil { + return fmt.Errorf("failed to get address from Keyring: %w", err) + } + addr = info.GetAddress() + } + + coins, err := sdk.ParseCoinsNormalized(args[1]) + if err != nil { + return fmt.Errorf("failed to parse coins: %w", err) + } + + vestingStart, err := cmd.Flags().GetInt64(flagVestingStart) + if err != nil { + return fmt.Errorf("failed to parse vesting start: %w", err) + } + vestingEnd, err := cmd.Flags().GetInt64(flagVestingEnd) + if err != nil { + return fmt.Errorf("failed to parse vesting end: %w", err) + } + vestingAmtStr, err := cmd.Flags().GetString(flagVestingAmt) + if err != nil { + return fmt.Errorf("failed to parse vesting amount: %w", err) + } + + vestingAmt, err := sdk.ParseCoinsNormalized(vestingAmtStr) + if err != nil { + return fmt.Errorf("failed to parse vesting amount: %w", err) + } + + // create concrete account type based on input parameters + var genAccount authtypes.GenesisAccount + + balances := banktypes.Balance{Address: addr.String(), Coins: coins.Sort()} + baseAccount := authtypes.NewBaseAccount(addr, nil, 0, 0) + + if !vestingAmt.IsZero() { + baseVestingAccount := authvesting.NewBaseVestingAccount(baseAccount, vestingAmt.Sort(), vestingEnd) + + if (balances.Coins.IsZero() && !baseVestingAccount.OriginalVesting.IsZero()) || + baseVestingAccount.OriginalVesting.IsAnyGT(balances.Coins) { + return errors.New("vesting amount cannot be greater than total amount") + } + + switch { + case vestingStart != 0 && vestingEnd != 0: + genAccount = authvesting.NewContinuousVestingAccountRaw(baseVestingAccount, vestingStart) + + case vestingEnd != 0: + genAccount = authvesting.NewDelayedVestingAccountRaw(baseVestingAccount) + + default: + return errors.New("invalid vesting parameters; must supply start and end time or end time") + } + } else { + genAccount = baseAccount + } + + if err := genAccount.Validate(); err != nil { + return fmt.Errorf("failed to validate new genesis account: %w", err) + } + + genFile := config.GenesisFile() + appState, genDoc, err := genutiltypes.GenesisStateFromGenFile(genFile) + if err != nil { + return fmt.Errorf("failed to unmarshal genesis state: %w", err) + } + + authGenState := authtypes.GetGenesisStateFromAppState(clientCtx.Codec, appState) + + accs, err := authtypes.UnpackAccounts(authGenState.Accounts) + if err != nil { + return fmt.Errorf("failed to get accounts from any: %w", err) + } + + if accs.Contains(addr) { + return fmt.Errorf("cannot add account at existing address %s", addr) + } + + // Add the new account to the set of genesis accounts and sanitize the + // accounts afterwards. + accs = append(accs, genAccount) + accs = authtypes.SanitizeGenesisAccounts(accs) + + genAccs, err := authtypes.PackAccounts(accs) + if err != nil { + return fmt.Errorf("failed to convert accounts into any's: %w", err) + } + authGenState.Accounts = genAccs + + authGenStateBz, err := clientCtx.Codec.MarshalJSON(&authGenState) + if err != nil { + return fmt.Errorf("failed to marshal auth genesis state: %w", err) + } + + appState[authtypes.ModuleName] = authGenStateBz + + bankGenState := banktypes.GetGenesisStateFromAppState(clientCtx.Codec, appState) + bankGenState.Balances = append(bankGenState.Balances, balances) + bankGenState.Balances = banktypes.SanitizeGenesisBalances(bankGenState.Balances) + bankGenState.Supply = bankGenState.Supply.Add(balances.Coins...) + + bankGenStateBz, err := clientCtx.Codec.MarshalJSON(bankGenState) + if err != nil { + return fmt.Errorf("failed to marshal bank genesis state: %w", err) + } + + appState[banktypes.ModuleName] = bankGenStateBz + + appStateJSON, err := json.Marshal(appState) + if err != nil { + return fmt.Errorf("failed to marshal application genesis state: %w", err) + } + + genDoc.AppState = appStateJSON + return genutil.ExportGenesisFile(genDoc, genFile) + }, + } + + cmd.Flags().String(flags.FlagHome, defaultNodeHome, "The application home directory") + cmd.Flags().String(flags.FlagKeyringBackend, flags.DefaultKeyringBackend, "Select keyring's backend (os|file|kwallet|pass|test)") + cmd.Flags().String(flagVestingAmt, "", "amount of coins for vesting accounts") + cmd.Flags().Int64(flagVestingStart, 0, "schedule start time (unix epoch) for vesting accounts") + cmd.Flags().Int64(flagVestingEnd, 0, "schedule end time (unix epoch) for vesting accounts") + flags.AddQueryFlagsToCmd(cmd) + + return cmd +} diff --git a/cmd/wasmplusd/genwasm.go b/cmd/wasmplusd/genwasm.go new file mode 100644 index 0000000000..49fec3b3dd --- /dev/null +++ b/cmd/wasmplusd/genwasm.go @@ -0,0 +1,28 @@ +package main + +import ( + "github.com/spf13/cobra" + + "github.com/line/lbm-sdk/client" + + wasmcli "github.com/line/wasmd/x/wasm/client/cli" +) + +func AddGenesisWasmMsgCmd(defaultNodeHome string) *cobra.Command { + txCmd := &cobra.Command{ + Use: "add-wasm-genesis-message", + Short: "Wasm genesis subcommands", + DisableFlagParsing: true, + SuggestionsMinimumDistance: 2, + RunE: client.ValidateCmd, + } + genesisIO := wasmcli.NewDefaultGenesisIO() + txCmd.AddCommand( + wasmcli.GenesisStoreCodeCmd(defaultNodeHome, genesisIO), + wasmcli.GenesisInstantiateContractCmd(defaultNodeHome, genesisIO), + wasmcli.GenesisExecuteContractCmd(defaultNodeHome, genesisIO), + wasmcli.GenesisListContractsCmd(defaultNodeHome, genesisIO), + wasmcli.GenesisListCodesCmd(defaultNodeHome, genesisIO), + ) + return txCmd +} diff --git a/cmd/wasmplusd/main.go b/cmd/wasmplusd/main.go new file mode 100644 index 0000000000..f27b22f6e0 --- /dev/null +++ b/cmd/wasmplusd/main.go @@ -0,0 +1,24 @@ +package main + +import ( + "os" + + "github.com/line/lbm-sdk/server" + svrcmd "github.com/line/lbm-sdk/server/cmd" + + app "github.com/line/wasmd/appplus" +) + +func main() { + rootCmd, _ := NewRootCmd() + + if err := svrcmd.Execute(rootCmd, app.DefaultNodeHome); err != nil { + switch e := err.(type) { + case server.ErrorCode: + os.Exit(e.Code) + + default: + os.Exit(1) + } + } +} diff --git a/cmd/wasmplusd/root.go b/cmd/wasmplusd/root.go new file mode 100644 index 0000000000..a2ac06df1d --- /dev/null +++ b/cmd/wasmplusd/root.go @@ -0,0 +1,282 @@ +package main + +import ( + "errors" + "io" + "os" + "path/filepath" + + "github.com/prometheus/client_golang/prometheus" + "github.com/spf13/cast" + "github.com/spf13/cobra" + "github.com/spf13/viper" + dbm "github.com/tendermint/tm-db" + + "github.com/line/lbm-sdk/baseapp" + "github.com/line/lbm-sdk/client" + "github.com/line/lbm-sdk/client/config" + "github.com/line/lbm-sdk/client/debug" + "github.com/line/lbm-sdk/client/flags" + "github.com/line/lbm-sdk/client/keys" + "github.com/line/lbm-sdk/client/rpc" + "github.com/line/lbm-sdk/server" + servertypes "github.com/line/lbm-sdk/server/types" + "github.com/line/lbm-sdk/snapshots" + "github.com/line/lbm-sdk/store" + sdk "github.com/line/lbm-sdk/types" + "github.com/line/lbm-sdk/version" + authcmd "github.com/line/lbm-sdk/x/auth/client/cli" + authtypes "github.com/line/lbm-sdk/x/auth/types" + banktypes "github.com/line/lbm-sdk/x/bank/types" + "github.com/line/lbm-sdk/x/crisis" + genutilcli "github.com/line/lbm-sdk/x/genutil/client/cli" + tmcli "github.com/line/ostracon/libs/cli" + "github.com/line/ostracon/libs/log" + + "github.com/line/wasmd/app/params" + "github.com/line/wasmd/appplus" + "github.com/line/wasmd/x/wasm" + wasmkeeper "github.com/line/wasmd/x/wasm/keeper" + wasmtypes "github.com/line/wasmd/x/wasm/types" +) + +// NewRootCmd creates a new root command for wasmd. It is called once in the +// main function. +func NewRootCmd() (*cobra.Command, params.EncodingConfig) { + encodingConfig := appplus.MakeEncodingConfig() + + cfg := sdk.GetConfig() + cfg.SetBech32PrefixForAccount(appplus.Bech32PrefixAccAddr, appplus.Bech32PrefixAccPub) + cfg.SetBech32PrefixForValidator(appplus.Bech32PrefixValAddr, appplus.Bech32PrefixValPub) + cfg.SetBech32PrefixForConsensusNode(appplus.Bech32PrefixConsAddr, appplus.Bech32PrefixConsPub) + cfg.SetAddressVerifier(wasmtypes.VerifyAddressLen()) + cfg.Seal() + + initClientCtx := client.Context{}. + WithCodec(encodingConfig.Marshaler). + WithInterfaceRegistry(encodingConfig.InterfaceRegistry). + WithTxConfig(encodingConfig.TxConfig). + WithLegacyAmino(encodingConfig.Amino). + WithInput(os.Stdin). + WithAccountRetriever(authtypes.AccountRetriever{}). + WithBroadcastMode(flags.BroadcastBlock). + WithHomeDir(appplus.DefaultNodeHome). + WithViper("") + + rootCmd := &cobra.Command{ + Use: version.AppName, + Short: "Wasm Daemon (server)", + PersistentPreRunE: func(cmd *cobra.Command, _ []string) error { + // set the default command outputs + cmd.SetOut(cmd.OutOrStdout()) + cmd.SetErr(cmd.ErrOrStderr()) + + initClientCtx, err := client.ReadPersistentCommandFlags(initClientCtx, cmd.Flags()) + if err != nil { + return err + } + + initClientCtx, err = config.ReadFromClientConfig(initClientCtx) + if err != nil { + return err + } + + if err := client.SetCmdClientContextHandler(initClientCtx, cmd); err != nil { + return err + } + + return server.InterceptConfigsPreRunHandler(cmd, "", nil) + }, + } + + initRootCmd(rootCmd, encodingConfig) + + return rootCmd, encodingConfig +} + +func initRootCmd(rootCmd *cobra.Command, encodingConfig params.EncodingConfig) { + rootCmd.AddCommand( + genutilcli.InitCmd(appplus.ModuleBasics, appplus.DefaultNodeHome), + genutilcli.CollectGenTxsCmd(banktypes.GenesisBalancesIterator{}, appplus.DefaultNodeHome), + genutilcli.GenTxCmd(appplus.ModuleBasics, encodingConfig.TxConfig, banktypes.GenesisBalancesIterator{}, appplus.DefaultNodeHome), + genutilcli.ValidateGenesisCmd(appplus.ModuleBasics), + AddGenesisAccountCmd(appplus.DefaultNodeHome), + AddGenesisWasmMsgCmd(appplus.DefaultNodeHome), + tmcli.NewCompletionCmd(rootCmd, true), + // testnetCmd(appplus.ModuleBasics, banktypes.GenesisBalancesIterator{}), + debug.Cmd(), + config.Cmd(), + ) + + ac := appCreator{ + encCfg: encodingConfig, + } + server.AddCommands(rootCmd, appplus.DefaultNodeHome, ac.newApp, ac.appExport, addModuleInitFlags) + + // add keybase, auxiliary RPC, query, and tx child commands + rootCmd.AddCommand( + rpc.StatusCommand(), + queryCommand(), + txCommand(), + keys.Commands(appplus.DefaultNodeHome), + ) +} + +func addModuleInitFlags(startCmd *cobra.Command) { + crisis.AddModuleInitFlags(startCmd) + wasm.AddModuleInitFlags(startCmd) +} + +func queryCommand() *cobra.Command { + cmd := &cobra.Command{ + Use: "query", + Aliases: []string{"q"}, + Short: "Querying subcommands", + DisableFlagParsing: true, + SuggestionsMinimumDistance: 2, + RunE: client.ValidateCmd, + } + + cmd.AddCommand( + authcmd.GetAccountCmd(), + rpc.ValidatorCommand(), + rpc.BlockCommand(), + authcmd.QueryTxsByEventsCmd(), + authcmd.QueryTxCmd(), + ) + + appplus.ModuleBasics.AddQueryCommands(cmd) + cmd.PersistentFlags().String(flags.FlagChainID, "", "The network chain ID") + + return cmd +} + +func txCommand() *cobra.Command { + cmd := &cobra.Command{ + Use: "tx", + Short: "Transactions subcommands", + DisableFlagParsing: true, + SuggestionsMinimumDistance: 2, + RunE: client.ValidateCmd, + } + + cmd.AddCommand( + authcmd.GetSignCommand(), + authcmd.GetSignBatchCommand(), + authcmd.GetMultiSignCommand(), + authcmd.GetMultiSignBatchCmd(), + authcmd.GetValidateSignaturesCommand(), + flags.LineBreak, + authcmd.GetBroadcastCommand(), + authcmd.GetEncodeCommand(), + authcmd.GetDecodeCommand(), + ) + + appplus.ModuleBasics.AddTxCommands(cmd) + cmd.PersistentFlags().String(flags.FlagChainID, "", "The network chain ID") + + return cmd +} + +type appCreator struct { + encCfg params.EncodingConfig +} + +func (ac appCreator) newApp( + logger log.Logger, + db dbm.DB, + traceStore io.Writer, + appOpts servertypes.AppOptions, +) servertypes.Application { + var cache sdk.MultiStorePersistentCache + + ibCacheMetricsProvider := baseapp.MetricsProvider(cast.ToBool(viper.GetBool(server.FlagPrometheus))) + if cast.ToBool(appOpts.Get(server.FlagInterBlockCache)) { + cache = store.NewCommitKVStoreCacheManager( + cast.ToInt(appOpts.Get(server.FlagInterBlockCacheSize)), ibCacheMetricsProvider) + } + + skipUpgradeHeights := make(map[int64]bool) + for _, h := range cast.ToIntSlice(appOpts.Get(server.FlagUnsafeSkipUpgrades)) { + skipUpgradeHeights[int64(h)] = true + } + + pruningOpts, err := server.GetPruningOptionsFromFlags(appOpts) + if err != nil { + panic(err) + } + + snapshotDir := filepath.Join(cast.ToString(appOpts.Get(flags.FlagHome)), "data", "snapshots") + snapshotDB, err := sdk.NewLevelDB("metadata", snapshotDir) + if err != nil { + panic(err) + } + snapshotStore, err := snapshots.NewStore(snapshotDB, snapshotDir) + if err != nil { + panic(err) + } + var wasmOpts []wasm.Option + if cast.ToBool(appOpts.Get("telemetry.enabled")) { + wasmOpts = append(wasmOpts, wasmkeeper.WithVMCacheMetrics(prometheus.DefaultRegisterer)) + } + + return appplus.NewWasmApp(logger, db, traceStore, true, skipUpgradeHeights, + cast.ToString(appOpts.Get(flags.FlagHome)), + cast.ToUint(appOpts.Get(server.FlagInvCheckPeriod)), + ac.encCfg, + appplus.GetEnabledProposals(), + appOpts, + wasmOpts, + baseapp.SetPruning(pruningOpts), + baseapp.SetMinGasPrices(cast.ToString(appOpts.Get(server.FlagMinGasPrices))), + baseapp.SetHaltHeight(cast.ToUint64(appOpts.Get(server.FlagHaltHeight))), + baseapp.SetHaltTime(cast.ToUint64(appOpts.Get(server.FlagHaltTime))), + baseapp.SetMinRetainBlocks(cast.ToUint64(appOpts.Get(server.FlagMinRetainBlocks))), + baseapp.SetInterBlockCache(cache), + baseapp.SetTrace(cast.ToBool(appOpts.Get(server.FlagTrace))), + baseapp.SetIndexEvents(cast.ToStringSlice(appOpts.Get(server.FlagIndexEvents))), + baseapp.SetSnapshotStore(snapshotStore), + baseapp.SetSnapshotInterval(cast.ToUint64(appOpts.Get(server.FlagStateSyncSnapshotInterval))), + baseapp.SetSnapshotKeepRecent(cast.ToUint32(appOpts.Get(server.FlagStateSyncSnapshotKeepRecent))), + ) +} + +func (ac appCreator) appExport( + logger log.Logger, + db dbm.DB, + traceStore io.Writer, + height int64, + forZeroHeight bool, + jailAllowedAddrs []string, + appOpts servertypes.AppOptions, +) (servertypes.ExportedApp, error) { + var wasmApp *appplus.WasmPlusApp + homePath, ok := appOpts.Get(flags.FlagHome).(string) + if !ok || homePath == "" { + return servertypes.ExportedApp{}, errors.New("application home is not set") + } + + loadLatest := height == -1 + var emptyWasmOpts []wasm.Option + wasmApp = appplus.NewWasmApp( + logger, + db, + traceStore, + loadLatest, + map[int64]bool{}, + homePath, + cast.ToUint(appOpts.Get(server.FlagInvCheckPeriod)), + ac.encCfg, + appplus.GetEnabledProposals(), + appOpts, + emptyWasmOpts, + ) + + if height != -1 { + if err := wasmApp.LoadHeight(height); err != nil { + return servertypes.ExportedApp{}, err + } + } + + return wasmApp.ExportAppStateAndValidators(forZeroHeight, jailAllowedAddrs) +} diff --git a/x/wasm/client/cli/gov_tx.go b/x/wasm/client/cli/gov_tx.go index 6c33ba4f02..ad251f536b 100644 --- a/x/wasm/client/cli/gov_tx.go +++ b/x/wasm/client/cli/gov_tx.go @@ -16,7 +16,6 @@ import ( govtypes "github.com/line/lbm-sdk/x/gov/types" "github.com/line/wasmd/x/wasm/types" - types2 "github.com/line/wasmd/x/wasmplus/types" ) func ProposalStoreCodeCmd() *cobra.Command { @@ -713,109 +712,3 @@ $ %s tx gov submit-proposal update-instantiate-config 1:nobody 2:everybody 3:%s1 cmd.Flags().String(cli.FlagDeposit, "", "Deposit of proposal") return cmd } - -func ProposalDeactivateContractCmd() *cobra.Command { - cmd := &cobra.Command{ - Use: "deactivate-contract [contract_addr_bech32]", - Short: "Deactivate the contract. This contract will not be executed after that.", - Args: cobra.ExactArgs(1), - RunE: func(cmd *cobra.Command, args []string) error { - clientCtx, err := client.GetClientTxContext(cmd) - if err != nil { - return err - } - - proposalTitle, err := cmd.Flags().GetString(cli.FlagTitle) - if err != nil { - return fmt.Errorf("proposal title: %s", err) - } - proposalDescr, err := cmd.Flags().GetString(cli.FlagDescription) - if err != nil { - return fmt.Errorf("proposal description: %s", err) - } - depositArg, err := cmd.Flags().GetString(cli.FlagDeposit) - if err != nil { - return fmt.Errorf("deposit: %s", err) - } - deposit, err := sdk.ParseCoinsNormalized(depositArg) - if err != nil { - return err - } - - content := types2.DeactivateContractProposal{ - Title: proposalTitle, - Description: proposalDescr, - Contract: args[0], - } - - msg, err := govtypes.NewMsgSubmitProposal(&content, deposit, clientCtx.GetFromAddress()) - if err != nil { - return err - } - if err = msg.ValidateBasic(); err != nil { - return err - } - - return tx.GenerateOrBroadcastTxCLI(clientCtx, cmd.Flags(), msg) - }, - } - - cmd.Flags().String(cli.FlagTitle, "", "Title of proposal") - cmd.Flags().String(cli.FlagDescription, "", "Description of proposal") - cmd.Flags().String(cli.FlagDeposit, "", "Deposit of proposal") - - return cmd -} - -func ProposalActivateContractCmd() *cobra.Command { - cmd := &cobra.Command{ - Use: "activate-contract [contract_addr_bech32]", - Short: "Activate the inactive contract. This contract will be executed after that.", - Args: cobra.ExactArgs(1), - RunE: func(cmd *cobra.Command, args []string) error { - clientCtx, err := client.GetClientTxContext(cmd) - if err != nil { - return err - } - - proposalTitle, err := cmd.Flags().GetString(cli.FlagTitle) - if err != nil { - return fmt.Errorf("proposal title: %s", err) - } - proposalDescr, err := cmd.Flags().GetString(cli.FlagDescription) - if err != nil { - return fmt.Errorf("proposal description: %s", err) - } - depositArg, err := cmd.Flags().GetString(cli.FlagDeposit) - if err != nil { - return fmt.Errorf("deposit: %s", err) - } - deposit, err := sdk.ParseCoinsNormalized(depositArg) - if err != nil { - return err - } - - content := types2.ActivateContractProposal{ - Title: proposalTitle, - Description: proposalDescr, - Contract: args[0], - } - - msg, err := govtypes.NewMsgSubmitProposal(&content, deposit, clientCtx.GetFromAddress()) - if err != nil { - return err - } - if err = msg.ValidateBasic(); err != nil { - return err - } - - return tx.GenerateOrBroadcastTxCLI(clientCtx, cmd.Flags(), msg) - }, - } - - cmd.Flags().String(cli.FlagTitle, "", "Title of proposal") - cmd.Flags().String(cli.FlagDescription, "", "Description of proposal") - cmd.Flags().String(cli.FlagDeposit, "", "Deposit of proposal") - - return cmd -} diff --git a/x/wasm/client/cli/query.go b/x/wasm/client/cli/query.go index 68bc1a2f3e..e0d347f809 100644 --- a/x/wasm/client/cli/query.go +++ b/x/wasm/client/cli/query.go @@ -20,7 +20,6 @@ import ( "github.com/line/wasmd/x/wasm/keeper" "github.com/line/wasmd/x/wasm/types" - types2 "github.com/line/wasmd/x/wasmplus/types" ) func GetQueryCmd() *cobra.Command { @@ -43,8 +42,6 @@ func GetQueryCmd() *cobra.Command { GetCmdLibVersion(), GetCmdQueryParams(), GetCmdBuildAddress(), - GetCmdListInactiveContracts(), - GetCmdIsInactiveContract(), ) return queryCmd } @@ -593,67 +590,6 @@ func withPageKeyDecoded(flagSet *flag.FlagSet) *flag.FlagSet { return flagSet } -func GetCmdListInactiveContracts() *cobra.Command { - cmd := &cobra.Command{ - Use: "inactive-contracts", - Long: "List all inactive contracts", - Args: cobra.ExactArgs(0), - RunE: func(cmd *cobra.Command, args []string) error { - clientCtx, err := client.GetClientQueryContext(cmd) - if err != nil { - return err - } - - pageReq, err := client.ReadPageRequest(withPageKeyDecoded(cmd.Flags())) - if err != nil { - return err - } - queryClient := types2.NewQueryClient(clientCtx) - res, err := queryClient.InactiveContracts( - context.Background(), - &types2.QueryInactiveContractsRequest{ - Pagination: pageReq, - }, - ) - if err != nil { - return err - } - return clientCtx.PrintProto(res) - }, - } - flags.AddQueryFlagsToCmd(cmd) - flags.AddPaginationFlagsToCmd(cmd, "list of inactive contracts") - return cmd -} - -func GetCmdIsInactiveContract() *cobra.Command { - cmd := &cobra.Command{ - Use: "is-inactive [bech32_address]", - Long: "Check if inactive contract or not", - Args: cobra.ExactArgs(1), - RunE: func(cmd *cobra.Command, args []string) error { - clientCtx, err := client.GetClientQueryContext(cmd) - if err != nil { - return err - } - - queryClient := types2.NewQueryClient(clientCtx) - res, err := queryClient.InactiveContract( - context.Background(), - &types2.QueryInactiveContractRequest{ - Address: args[0], - }, - ) - if err != nil { - return err - } - return clientCtx.PrintProto(res) - }, - } - flags.AddQueryFlagsToCmd(cmd) - return cmd -} - // GetCmdQueryParams implements a command to return the current wasm // parameters. func GetCmdQueryParams() *cobra.Command { diff --git a/x/wasm/client/cli/query_test.go b/x/wasm/client/cli/query_test.go index ba70fe26ce..220f4bbaf7 100644 --- a/x/wasm/client/cli/query_test.go +++ b/x/wasm/client/cli/query_test.go @@ -22,7 +22,6 @@ import ( "github.com/stretchr/testify/require" "github.com/line/wasmd/x/wasm/types" - types2 "github.com/line/wasmd/x/wasmplus/types" ) var ( @@ -376,58 +375,6 @@ func TestGetCmdListPinnedCode(t *testing.T) { } } -func TestGetCmdListInactiveContracts(t *testing.T) { - res := types2.QueryInactiveContractsResponse{} - bz, err := res.Marshal() - require.NoError(t, err) - ctx := makeContext(bz) - tests := testcase{ - {"execute success", nil, ctx, nil, nil}, - {"bad status", badStatusError, ctx, nil, nil}, - {"invalid request", invalidRequestError, ctx, invalidRequestFlags, nil}, - {"invalid url", invalidControlChar, context.Background(), invalidNodeFlags, nil}, - } - for _, tt := range tests { - t.Run(tt.name, func(t *testing.T) { - cmd := GetCmdListInactiveContracts() - err := cmd.ParseFlags(tt.flags) - require.NoError(t, err) - cmd.SetContext(tt.ctx) - actual := cmd.RunE(cmd, tt.args) - if tt.want == nil { - assert.Nilf(t, actual, "GetCmdListInactiveContracts()") - } else { - assert.Equalf(t, tt.want.Error(), actual.Error(), "GetCmdListInactiveContracts()") - } - }) - } -} - -func TestGetCmdIsInactiveContract(t *testing.T) { - res := types2.QueryInactiveContractResponse{} - bz, err := res.Marshal() - require.NoError(t, err) - ctx := makeContext(bz) - tests := testcase{ - {"execute success", nil, ctx, nil, argsWithAddr}, - {"bad status", badStatusError, ctx, nil, argsWithAddr}, - {"invalid url", invalidControlChar, context.Background(), invalidNodeFlags, argsWithAddr}, - } - for _, tt := range tests { - t.Run(tt.name, func(t *testing.T) { - cmd := GetCmdIsInactiveContract() - err := cmd.ParseFlags(tt.flags) - require.NoError(t, err) - cmd.SetContext(tt.ctx) - actual := cmd.RunE(cmd, tt.args) - if tt.want == nil { - assert.Nilf(t, actual, "GetCmdIsInactiveContract()") - } else { - assert.Equalf(t, tt.want.Error(), actual.Error(), "GetCmdIsInactiveContract()") - } - }) - } -} func makeContext(bz []byte) context.Context { result := ocrpctypes.ResultABCIQuery{Response: ocabcitypes.ResponseQuery{Value: bz}} mockClient := ocrpcmocks.RemoteClient{} diff --git a/x/wasm/client/cli/tx.go b/x/wasm/client/cli/tx.go index 9c644bb1b6..b67ab792ce 100644 --- a/x/wasm/client/cli/tx.go +++ b/x/wasm/client/cli/tx.go @@ -19,7 +19,6 @@ import ( "github.com/line/wasmd/x/wasm/client/cli/os" "github.com/line/wasmd/x/wasm/ioutils" "github.com/line/wasmd/x/wasm/types" - types2 "github.com/line/wasmd/x/wasmplus/types" ) const ( @@ -49,7 +48,6 @@ func GetTxCmd() *cobra.Command { StoreCodeCmd(), InstantiateContractCmd(), InstantiateContract2Cmd(), - StoreCodeAndInstantiateContractCmd(), ExecuteContractCmd(), MigrateContractCmd(), UpdateContractAdminCmd(), @@ -328,114 +326,6 @@ func parseInstantiateArgs(rawCodeID, initMsg string, sender sdk.AccAddress, flag return &msg, nil } -// StoreCodeAndInstantiateContractCmd will upload code and instantiate a contract using it -func StoreCodeAndInstantiateContractCmd() *cobra.Command { - cmd := &cobra.Command{ - Use: "store-instantiate [wasm file] [json_encoded_init_args] --label [text] --admin [address,optional] --amount [coins,optional]", - Short: "Upload a wasm binary and instantiate a wasm contract from the code", - Args: cobra.ExactArgs(2), - RunE: func(cmd *cobra.Command, args []string) error { - clientCtx, err := client.GetClientTxContext(cmd) - if err != nil { - return err - } - msg, err := parseStoreCodeAndInstantiateContractArgs(args[0], args[1], clientCtx.GetFromAddress(), cmd.Flags()) - if err != nil { - return err - } - if err = msg.ValidateBasic(); err != nil { - return err - } - return tx.GenerateOrBroadcastTxCLI(clientCtx, cmd.Flags(), &msg) - }, - } - - cmd.Flags().String(flagInstantiateByEverybody, "", "Everybody can instantiate a contract from the code, optional") - cmd.Flags().String(flagInstantiateByAddress, "", "Only this address can instantiate a contract instance from the code, optional") - cmd.Flags().String(flagAmount, "", "Coins to send to the contract during instantiation") - cmd.Flags().String(flagLabel, "", "A human-readable name for this contract in lists") - cmd.Flags().String(flagAdmin, "", "Address of an admin") - flags.AddTxFlagsToCmd(cmd) - return cmd -} - -func parseStoreCodeAndInstantiateContractArgs(file string, initMsg string, sender sdk.AccAddress, flags *flag.FlagSet) (types2.MsgStoreCodeAndInstantiateContract, error) { - wasm, err := os.ReadFileWithSizeLimit(file, int64(types.MaxWasmSize)) - if err != nil { - return types2.MsgStoreCodeAndInstantiateContract{}, err - } - - // gzip the wasm file - if ioutils.IsWasm(wasm) { - wasm, err = ioutils.GzipIt(wasm) - - if err != nil { - return types2.MsgStoreCodeAndInstantiateContract{}, err - } - } else if !ioutils.IsGzip(wasm) { - return types2.MsgStoreCodeAndInstantiateContract{}, fmt.Errorf("invalid input file. Use wasm binary or gzip") - } - - var perm *types.AccessConfig - onlyAddrStr, err := flags.GetString(flagInstantiateByAddress) - if err != nil { - return types2.MsgStoreCodeAndInstantiateContract{}, fmt.Errorf("instantiate by address: %s", err) - } - if onlyAddrStr != "" { - addr, err := sdk.AccAddressFromBech32(onlyAddrStr) - if err != nil { - return types2.MsgStoreCodeAndInstantiateContract{}, sdkerrors.Wrap(err, flagInstantiateByAddress) - } - x := types.AccessTypeOnlyAddress.With(addr) - perm = &x - } else { - everybodyStr, err := flags.GetString(flagInstantiateByEverybody) - if err != nil { - return types2.MsgStoreCodeAndInstantiateContract{}, fmt.Errorf("instantiate by everybody: %s", err) - } - if everybodyStr != "" { - ok, err := strconv.ParseBool(everybodyStr) - if err != nil { - return types2.MsgStoreCodeAndInstantiateContract{}, fmt.Errorf("boolean value expected for instantiate by everybody: %s", err) - } - if ok { - perm = &types.AllowEverybody - } - } - } - - amountStr, err := flags.GetString(flagAmount) - if err != nil { - return types2.MsgStoreCodeAndInstantiateContract{}, fmt.Errorf("amount: %s", err) - } - amount, err := sdk.ParseCoinsNormalized(amountStr) - if err != nil { - return types2.MsgStoreCodeAndInstantiateContract{}, fmt.Errorf("amount: %s", err) - } - label, err := flags.GetString(flagLabel) - if err != nil { - return types2.MsgStoreCodeAndInstantiateContract{}, fmt.Errorf("label: %s", err) - } - if label == "" { - return types2.MsgStoreCodeAndInstantiateContract{}, errors.New("label is required on all contracts") - } - adminStr, err := flags.GetString(flagAdmin) - if err != nil { - return types2.MsgStoreCodeAndInstantiateContract{}, fmt.Errorf("admin: %s", err) - } - - msg := types2.MsgStoreCodeAndInstantiateContract{ - Sender: sender.String(), - WASMByteCode: wasm, - InstantiatePermission: perm, - Label: label, - Funds: amount, - Msg: []byte(initMsg), - Admin: adminStr, - } - return msg, nil -} - // ExecuteContractCmd will instantiate a contract from previously uploaded code. func ExecuteContractCmd() *cobra.Command { cmd := &cobra.Command{ diff --git a/x/wasm/client/proposal_handler.go b/x/wasm/client/proposal_handler.go index db1ad1139a..cc134f70f9 100644 --- a/x/wasm/client/proposal_handler.go +++ b/x/wasm/client/proposal_handler.go @@ -18,6 +18,4 @@ var ProposalHandlers = []govclient.ProposalHandler{ govclient.NewProposalHandler(cli.ProposalPinCodesCmd), govclient.NewProposalHandler(cli.ProposalUnpinCodesCmd), govclient.NewProposalHandler(cli.ProposalUpdateInstantiateConfigCmd), - govclient.NewProposalHandler(cli.ProposalDeactivateContractCmd), - govclient.NewProposalHandler(cli.ProposalActivateContractCmd), } diff --git a/x/wasm/client/testutil/cli_test.go b/x/wasm/client/testutil/cli_test.go index f979202abe..0556a23c63 100644 --- a/x/wasm/client/testutil/cli_test.go +++ b/x/wasm/client/testutil/cli_test.go @@ -4,15 +4,68 @@ package testutil import ( + "fmt" "testing" + "time" "github.com/stretchr/testify/suite" + dbm "github.com/tendermint/tm-db" + "github.com/line/lbm-sdk/crypto/hd" + "github.com/line/lbm-sdk/crypto/keyring" + servertypes "github.com/line/lbm-sdk/server/types" + storetypes "github.com/line/lbm-sdk/store/types" "github.com/line/lbm-sdk/testutil/network" + sdk "github.com/line/lbm-sdk/types" + authtypes "github.com/line/lbm-sdk/x/auth/types" + ostrand "github.com/line/ostracon/libs/rand" + + wasmapp "github.com/line/wasmd/app" + "github.com/line/wasmd/app/params" + "github.com/line/wasmd/x/wasm/types" ) func TestIntegrationTestSuite(t *testing.T) { - cfg := network.DefaultConfig() + cfg := DefaultConfig() cfg.NumValidators = 1 suite.Run(t, NewIntegrationTestSuite(cfg)) } + +func DefaultConfig() network.Config { + encCfg := wasmapp.MakeEncodingConfig() + + return network.Config{ + Codec: encCfg.Marshaler, + LegacyAmino: encCfg.Amino, + InterfaceRegistry: encCfg.InterfaceRegistry, + TxConfig: encCfg.TxConfig, + AccountRetriever: authtypes.AccountRetriever{}, + AppConstructor: NewAppConstructor(encCfg), + GenesisState: wasmapp.ModuleBasics.DefaultGenesis(encCfg.Marshaler), + TimeoutCommit: 1 * time.Second, + ChainID: "chain-" + ostrand.NewRand().Str(6), + NumValidators: 4, + BondDenom: sdk.DefaultBondDenom, + MinGasPrices: fmt.Sprintf("0.000006%s", sdk.DefaultBondDenom), + AccountTokens: sdk.TokensFromConsensusPower(1000, sdk.DefaultPowerReduction), + StakingTokens: sdk.TokensFromConsensusPower(500, sdk.DefaultPowerReduction), + BondedTokens: sdk.TokensFromConsensusPower(100, sdk.DefaultPowerReduction), + PruningStrategy: storetypes.PruningOptionNothing, + CleanupDir: true, + SigningAlgo: string(hd.Secp256k1Type), + KeyringOptions: []keyring.Option{}, + } +} + +func NewAppConstructor(encodingCfg params.EncodingConfig) network.AppConstructor { + return func(val network.Validator) servertypes.Application { + return wasmapp.NewWasmApp( + val.Ctx.Logger, dbm.NewMemDB(), nil, true, + map[int64]bool{}, val.Ctx.Config.RootDir, 0, + encodingCfg, + types.EnableAllProposals, + wasmapp.EmptyBaseAppOptions{}, + nil, + ) + } +} diff --git a/x/wasm/client/testutil/query.go b/x/wasm/client/testutil/query.go index 0a9b6f26fc..80f5f51f7c 100644 --- a/x/wasm/client/testutil/query.go +++ b/x/wasm/client/testutil/query.go @@ -12,7 +12,6 @@ import ( "github.com/line/wasmd/x/wasm/client/cli" "github.com/line/wasmd/x/wasm/types" - types2 "github.com/line/wasmd/x/wasmplus/types" ) func (s *IntegrationTestSuite) TestGetCmdListCode() { @@ -95,10 +94,14 @@ func (s *IntegrationTestSuite) TestGetCmdQueryCodeInfo() { }, true, &types.CodeInfoResponse{ - CodeID: codeID, - Creator: val.Address.String(), - DataHash: expectedDataHash, - InstantiatePermission: types.AllowEverybody, + CodeID: codeID, + Creator: val.Address.String(), + DataHash: expectedDataHash, + InstantiatePermission: types.AccessConfig{ + Permission: types.AccessTypeEverybody, + Address: "", + Addresses: []string{}, + }, }, }, "no codeID": { @@ -467,71 +470,3 @@ func (s *IntegrationTestSuite) TestGetCmdListPinnedCode() { s.Require().NoError(val.ClientCtx.Codec.UnmarshalJSON(out.Bytes(), &contractInfo), out.String()) s.Require().Equal(expcted, &contractInfo) } - -func (s *IntegrationTestSuite) TestGetCmdListInactiveContracts() { - val := s.network.Validators[0] - - cmd := cli.GetCmdListInactiveContracts() - out, err := clitestutil.ExecTestCLICmd(val.ClientCtx, cmd, s.queryCommonArgs()) - s.Require().NoError(err) - - expected := &types2.QueryInactiveContractsResponse{ - Addresses: []string{s.inactiveContractAddress}, - Pagination: &query.PageResponse{}, - } - var resInfo types2.QueryInactiveContractsResponse - s.Require().NoError(val.ClientCtx.Codec.UnmarshalJSON(out.Bytes(), &resInfo), out.String()) - s.Require().Equal(expected, &resInfo) -} - -func (s *IntegrationTestSuite) TestGetCmdIsInactiveContract() { - val := s.network.Validators[0] - - testCases := map[string]struct { - args []string - valid bool - expected proto.Message - }{ - "valid query(inactivate)": { - []string{ - s.inactiveContractAddress, - }, - true, - &types2.QueryInactiveContractResponse{ - Inactivated: true, - }, - }, - "valid query(activate)": { - []string{ - "link1hmayw7vv0p3gzeh3jzwmw9xj8fy8a3kmpqgjrysljdnecqkps02qrq5rvm", - }, - false, - nil, - }, - "wrong bech32_address": { - []string{ - "xxx", - }, - false, - nil, - }, - } - - for name, tc := range testCases { - tc := tc - - s.Run(name, func() { - cmd := cli.GetCmdIsInactiveContract() - out, err := clitestutil.ExecTestCLICmd(val.ClientCtx, cmd, append(tc.args, s.queryCommonArgs()...)) - if !tc.valid { - s.Require().Error(err) - return - } - s.Require().NoError(err) - - var resInfo types2.QueryInactiveContractResponse - s.Require().NoError(val.ClientCtx.Codec.UnmarshalJSON(out.Bytes(), &resInfo), out.String()) - s.Require().Equal(tc.expected, &resInfo) - }) - } -} diff --git a/x/wasm/client/testutil/suite.go b/x/wasm/client/testutil/suite.go index 596270f844..f5b74aab80 100644 --- a/x/wasm/client/testutil/suite.go +++ b/x/wasm/client/testutil/suite.go @@ -25,10 +25,9 @@ type IntegrationTestSuite struct { setupHeight int64 - codeID string - contractAddress string - nonExistValidAddress string - inactiveContractAddress string + codeID string + contractAddress string + nonExistValidAddress string // for hackatom contract verifier string @@ -52,8 +51,6 @@ func (s *IntegrationTestSuite) SetupSuite() { s.T().Skip("skipping test in unit-tests mode.") } - s.inactiveContractAddress = "link14hj2tavq8fpesdwxxcu44rty3hh90vhujrvcmstl4zr3txmfvw9sgf2vn8" - // add inactive contract to genesis var wasmData types.GenesisState genesisState := s.cfg.GenesisState @@ -119,7 +116,11 @@ func (s *IntegrationTestSuite) deployContract() string { // parse codeID for _, v := range res.Events { if v.Type == types.EventTypeStoreCode { - return string(v.Attributes[0].Value) + for _, attr := range v.Attributes { + if string(attr.Key) == types.AttributeKeyCodeID { + return string(attr.Value) + } + } } } diff --git a/x/wasm/client/testutil/testdata/wasm_genesis.json b/x/wasm/client/testutil/testdata/wasm_genesis.json index dabc0aa2db..4a4787056b 100644 --- a/x/wasm/client/testutil/testdata/wasm_genesis.json +++ b/x/wasm/client/testutil/testdata/wasm_genesis.json @@ -42,8 +42,6 @@ ], "gen_msgs": [], - "inactive_contract_addresses": - ["link14hj2tavq8fpesdwxxcu44rty3hh90vhujrvcmstl4zr3txmfvw9sgf2vn8"], "params": { "code_upload_access": @@ -51,9 +49,6 @@ "address": "", "permission": "Everybody" }, - "compile_cost": "3", - "gas_multiplier": "140000000", - "instance_cost": "60000", "instantiate_default_permission": "Everybody" }, "sequences": diff --git a/x/wasm/client/testutil/tx.go b/x/wasm/client/testutil/tx.go index d54599796a..7109a95096 100644 --- a/x/wasm/client/testutil/tx.go +++ b/x/wasm/client/testutil/tx.go @@ -2,8 +2,6 @@ package testutil import ( "fmt" - "os" - "github.com/line/lbm-sdk/client/flags" clitestutil "github.com/line/lbm-sdk/testutil/cli" sdk "github.com/line/lbm-sdk/types" @@ -166,80 +164,3 @@ func (s *IntegrationTestSuite) TestExecuteContractCmd() { }) } } - -func (s *IntegrationTestSuite) TestStoreCodeAndInstantiateContractCmd() { - val := s.network.Validators[0] - owner := val.Address.String() - - wasmPath := "../../keeper/testdata/hackatom.wasm" - _, err := os.ReadFile(wasmPath) - s.Require().NoError(err) - - params := fmt.Sprintf("{\"verifier\": \"%s\", \"beneficiary\": \"%s\"}", s.network.Validators[0].Address.String(), keeper.RandomAccountAddress(s.T())) - - testCases := map[string]struct { - args []string - valid bool - }{ - "valid storeCodeAndInstantiateContract": { - []string{ - wasmPath, - params, - fmt.Sprintf("--label=%s", "TestContract"), - fmt.Sprintf("--admin=%s", owner), - fmt.Sprintf("--%s=%s", flags.FlagFrom, val.Address.String()), - fmt.Sprintf("--%s=%d", flags.FlagGas, 1600000), - }, - true, - }, - "wrong args count": { - []string{"0"}, - false, - }, - "no label error": { - []string{ - wasmPath, - params, - }, - false, - }, - "no sender error": { - []string{ - wasmPath, - params, - fmt.Sprintf("--label=%s", "TestContract"), - fmt.Sprintf("--admin=%s", owner), - }, - false, - }, - "wrong wasm path error": { - []string{ - "../../keeper/testdata/noexist.wasm", - params, - fmt.Sprintf("--label=%s", "TestContract"), - fmt.Sprintf("--admin=%s", owner), - fmt.Sprintf("--%s=%s", flags.FlagFrom, val.Address.String()), - fmt.Sprintf("--%s=%d", flags.FlagGas, 1600000), - }, - false, - }, - } - - for name, tc := range testCases { - tc := tc - - s.Run(name, func() { - cmd := cli.StoreCodeAndInstantiateContractCmd() - out, err := clitestutil.ExecTestCLICmd(val.ClientCtx, cmd, append(tc.args, commonArgs...)) - if !tc.valid { - s.Require().Error(err) - return - } - s.Require().NoError(err) - - var res sdk.TxResponse - s.Require().NoError(val.ClientCtx.Codec.UnmarshalJSON(out.Bytes(), &res), out.String()) - s.Require().EqualValues(0, res.Code, out.String()) - }) - } -} diff --git a/x/wasmplus/client/cli/gov_tx.go b/x/wasmplus/client/cli/gov_tx.go new file mode 100644 index 0000000000..44b08e74c9 --- /dev/null +++ b/x/wasmplus/client/cli/gov_tx.go @@ -0,0 +1,121 @@ +package cli + +import ( + "fmt" + + "github.com/spf13/cobra" + + "github.com/line/lbm-sdk/client" + "github.com/line/lbm-sdk/client/tx" + sdk "github.com/line/lbm-sdk/types" + "github.com/line/lbm-sdk/x/gov/client/cli" + govtypes "github.com/line/lbm-sdk/x/gov/types" + + "github.com/line/wasmd/x/wasmplus/types" +) + +func ProposalDeactivateContractCmd() *cobra.Command { + cmd := &cobra.Command{ + Use: "deactivate-contract [contract_addr_bech32]", + Short: "Deactivate the contract. This contract will not be executed after that.", + Args: cobra.ExactArgs(1), + RunE: func(cmd *cobra.Command, args []string) error { + clientCtx, err := client.GetClientTxContext(cmd) + if err != nil { + return err + } + + proposalTitle, err := cmd.Flags().GetString(cli.FlagTitle) + if err != nil { + return fmt.Errorf("proposal title: %s", err) + } + proposalDescr, err := cmd.Flags().GetString(cli.FlagDescription) + if err != nil { + return fmt.Errorf("proposal description: %s", err) + } + depositArg, err := cmd.Flags().GetString(cli.FlagDeposit) + if err != nil { + return fmt.Errorf("deposit: %s", err) + } + deposit, err := sdk.ParseCoinsNormalized(depositArg) + if err != nil { + return err + } + + content := types.DeactivateContractProposal{ + Title: proposalTitle, + Description: proposalDescr, + Contract: args[0], + } + + msg, err := govtypes.NewMsgSubmitProposal(&content, deposit, clientCtx.GetFromAddress()) + if err != nil { + return err + } + if err = msg.ValidateBasic(); err != nil { + return err + } + + return tx.GenerateOrBroadcastTxCLI(clientCtx, cmd.Flags(), msg) + }, + } + + cmd.Flags().String(cli.FlagTitle, "", "Title of proposal") + cmd.Flags().String(cli.FlagDescription, "", "Description of proposal") + cmd.Flags().String(cli.FlagDeposit, "", "Deposit of proposal") + + return cmd +} + +func ProposalActivateContractCmd() *cobra.Command { + cmd := &cobra.Command{ + Use: "activate-contract [contract_addr_bech32]", + Short: "Activate the inactive contract. This contract will be executed after that.", + Args: cobra.ExactArgs(1), + RunE: func(cmd *cobra.Command, args []string) error { + clientCtx, err := client.GetClientTxContext(cmd) + if err != nil { + return err + } + + proposalTitle, err := cmd.Flags().GetString(cli.FlagTitle) + if err != nil { + return fmt.Errorf("proposal title: %s", err) + } + proposalDescr, err := cmd.Flags().GetString(cli.FlagDescription) + if err != nil { + return fmt.Errorf("proposal description: %s", err) + } + depositArg, err := cmd.Flags().GetString(cli.FlagDeposit) + if err != nil { + return fmt.Errorf("deposit: %s", err) + } + deposit, err := sdk.ParseCoinsNormalized(depositArg) + if err != nil { + return err + } + + content := types.ActivateContractProposal{ + Title: proposalTitle, + Description: proposalDescr, + Contract: args[0], + } + + msg, err := govtypes.NewMsgSubmitProposal(&content, deposit, clientCtx.GetFromAddress()) + if err != nil { + return err + } + if err = msg.ValidateBasic(); err != nil { + return err + } + + return tx.GenerateOrBroadcastTxCLI(clientCtx, cmd.Flags(), msg) + }, + } + + cmd.Flags().String(cli.FlagTitle, "", "Title of proposal") + cmd.Flags().String(cli.FlagDescription, "", "Description of proposal") + cmd.Flags().String(cli.FlagDeposit, "", "Deposit of proposal") + + return cmd +} diff --git a/x/wasmplus/client/cli/query.go b/x/wasmplus/client/cli/query.go new file mode 100644 index 0000000000..a88ead4fbb --- /dev/null +++ b/x/wasmplus/client/cli/query.go @@ -0,0 +1,119 @@ +package cli + +import ( + "context" + "encoding/base64" + + "github.com/spf13/cobra" + flag "github.com/spf13/pflag" + + "github.com/line/lbm-sdk/client" + "github.com/line/lbm-sdk/client/flags" + + wasmcli "github.com/line/wasmd/x/wasm/client/cli" + "github.com/line/wasmd/x/wasmplus/types" +) + +func GetQueryCmd() *cobra.Command { + queryCmd := &cobra.Command{ + Use: types.ModuleName, + Short: "Querying commands for the wasm module", + DisableFlagParsing: true, + SuggestionsMinimumDistance: 2, + RunE: client.ValidateCmd, + } + queryCmd.AddCommand( + wasmcli.GetCmdListCode(), + wasmcli.GetCmdListContractByCode(), + wasmcli.GetCmdQueryCode(), + wasmcli.GetCmdQueryCodeInfo(), + wasmcli.GetCmdGetContractInfo(), + wasmcli.GetCmdGetContractHistory(), + wasmcli.GetCmdGetContractState(), + wasmcli.GetCmdListPinnedCode(), + wasmcli.GetCmdLibVersion(), + wasmcli.GetCmdQueryParams(), + wasmcli.GetCmdBuildAddress(), + GetCmdListInactiveContracts(), + GetCmdIsInactiveContract(), + ) + return queryCmd +} + +// sdk ReadPageRequest expects binary, but we encoded to base64 in our marshaller +func withPageKeyDecoded(flagSet *flag.FlagSet) *flag.FlagSet { + encoded, err := flagSet.GetString(flags.FlagPageKey) + if err != nil { + panic(err.Error()) + } + raw, err := base64.StdEncoding.DecodeString(encoded) + if err != nil { + panic(err.Error()) + } + err = flagSet.Set(flags.FlagPageKey, string(raw)) + if err != nil { + panic(err.Error()) + } + return flagSet +} + +func GetCmdListInactiveContracts() *cobra.Command { + cmd := &cobra.Command{ + Use: "inactive-contracts", + Long: "List all inactive contracts", + Args: cobra.ExactArgs(0), + RunE: func(cmd *cobra.Command, args []string) error { + clientCtx, err := client.GetClientQueryContext(cmd) + if err != nil { + return err + } + + pageReq, err := client.ReadPageRequest(withPageKeyDecoded(cmd.Flags())) + if err != nil { + return err + } + queryClient := types.NewQueryClient(clientCtx) + res, err := queryClient.InactiveContracts( + context.Background(), + &types.QueryInactiveContractsRequest{ + Pagination: pageReq, + }, + ) + if err != nil { + return err + } + return clientCtx.PrintProto(res) + }, + } + flags.AddQueryFlagsToCmd(cmd) + flags.AddPaginationFlagsToCmd(cmd, "list of inactive contracts") + return cmd +} + +func GetCmdIsInactiveContract() *cobra.Command { + cmd := &cobra.Command{ + Use: "is-inactive [bech32_address]", + Long: "Check if inactive contract or not", + Args: cobra.ExactArgs(1), + RunE: func(cmd *cobra.Command, args []string) error { + clientCtx, err := client.GetClientQueryContext(cmd) + if err != nil { + return err + } + + queryClient := types.NewQueryClient(clientCtx) + res, err := queryClient.InactiveContract( + context.Background(), + &types.QueryInactiveContractRequest{ + Address: args[0], + }, + ) + if err != nil { + return err + } + return clientCtx.PrintProto(res) + }, + } + flags.AddQueryFlagsToCmd(cmd) + return cmd +} diff --git a/x/wasmplus/client/cli/query_test.go b/x/wasmplus/client/cli/query_test.go new file mode 100644 index 0000000000..13a5bba1a8 --- /dev/null +++ b/x/wasmplus/client/cli/query_test.go @@ -0,0 +1,140 @@ +package cli + +import ( + "context" + "errors" + "net/url" + "testing" + + "github.com/stretchr/testify/mock" + "google.golang.org/grpc/codes" + "google.golang.org/grpc/status" + + "github.com/line/lbm-sdk/client" + "github.com/line/lbm-sdk/codec" + sdkerrors "github.com/line/lbm-sdk/types/errors" + ocabcitypes "github.com/line/ostracon/abci/types" + ocrpcmocks "github.com/line/ostracon/rpc/client/mocks" + ocrpctypes "github.com/line/ostracon/rpc/core/types" + + "github.com/line/wasmd/x/wasmplus/types" + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" +) + +var ( + accAddress = "link1yxfu3fldlgux939t0gwaqs82l4x77v2kasa7jf" +) + +type testcase []struct { + name string + want error + ctx context.Context + flags []string + args []string +} + +func TestGetCmdListInactiveContracts(t *testing.T) { + res := types.QueryInactiveContractsResponse{} + bz, err := res.Marshal() + require.NoError(t, err) + ctx := makeContext(bz) + tests := testcase{ + {"execute success", nil, ctx, nil, nil}, + { + "bad status", + status.Error(codes.Unknown, ""), + ctx, + nil, + nil, + }, + { + "invalid request", + sdkerrors.Wrap(sdkerrors.ErrInvalidRequest, + "page and offset cannot be used together"), + ctx, + []string{"--page=2", "--offset=1"}, + nil}, + { + "invalid url", + &url.Error{Op: "parse", URL: string(rune(0)), + Err: errors.New("net/url: invalid control character in URL")}, + context.Background(), + []string{"--node=" + string(rune(0))}, + nil, + }, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + cmd := GetCmdListInactiveContracts() + err := cmd.ParseFlags(tt.flags) + require.NoError(t, err) + cmd.SetContext(tt.ctx) + actual := cmd.RunE(cmd, tt.args) + if tt.want == nil { + assert.Nilf(t, actual, "GetCmdListInactiveContracts()") + } else { + assert.Equalf(t, tt.want.Error(), actual.Error(), "GetCmdListInactiveContracts()") + } + }) + } +} + +func TestGetCmdIsInactiveContract(t *testing.T) { + res := types.QueryInactiveContractResponse{} + bz, err := res.Marshal() + require.NoError(t, err) + ctx := makeContext(bz) + tests := testcase{ + {"execute success", nil, ctx, nil, []string{accAddress}}, + {"bad status", + status.Error(codes.Unknown, ""), + ctx, + nil, + []string{accAddress}, + }, + { + "invalid url", + &url.Error{Op: "parse", URL: string(rune(0)), + Err: errors.New("net/url: invalid control character in URL")}, + context.Background(), + []string{"--node=" + string(rune(0))}, + []string{accAddress}, + }, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + cmd := GetCmdIsInactiveContract() + err := cmd.ParseFlags(tt.flags) + require.NoError(t, err) + cmd.SetContext(tt.ctx) + actual := cmd.RunE(cmd, tt.args) + if tt.want == nil { + assert.Nilf(t, actual, "GetCmdIsInactiveContract()") + } else { + assert.Equalf(t, tt.want.Error(), actual.Error(), "GetCmdIsInactiveContract()") + } + }) + } +} + +func makeContext(bz []byte) context.Context { + result := ocrpctypes.ResultABCIQuery{Response: ocabcitypes.ResponseQuery{Value: bz}} + mockClient := ocrpcmocks.RemoteClient{} + { + // #1 + mockClient.On("ABCIQueryWithOptions", + mock.Anything, mock.Anything, mock.Anything, mock.Anything, + ).Once().Return(&result, nil) + } + { + // #2 + failure := result + failure.Response.Code = 1 + mockClient.On("ABCIQueryWithOptions", + mock.Anything, mock.Anything, mock.Anything, mock.Anything, + ).Once().Return(&failure, nil) + } + cli := client.Context{}.WithClient(&mockClient).WithCodec(codec.NewProtoCodec(nil)) + return context.WithValue(context.Background(), client.ClientContextKey, &cli) +} diff --git a/x/wasmplus/client/cli/tx.go b/x/wasmplus/client/cli/tx.go new file mode 100644 index 0000000000..00cee82abc --- /dev/null +++ b/x/wasmplus/client/cli/tx.go @@ -0,0 +1,160 @@ +package cli + +import ( + "errors" + "fmt" + "strconv" + + "github.com/spf13/cobra" + flag "github.com/spf13/pflag" + + "github.com/line/lbm-sdk/client" + "github.com/line/lbm-sdk/client/flags" + "github.com/line/lbm-sdk/client/tx" + sdk "github.com/line/lbm-sdk/types" + sdkerrors "github.com/line/lbm-sdk/types/errors" + + wasmcli "github.com/line/wasmd/x/wasm/client/cli" + "github.com/line/wasmd/x/wasm/client/cli/os" + "github.com/line/wasmd/x/wasm/ioutils" + wasmTypes "github.com/line/wasmd/x/wasm/types" + "github.com/line/wasmd/x/wasmplus/types" +) + +const ( + flagAmount = "amount" + flagLabel = "label" + flagAdmin = "admin" + flagInstantiateByEverybody = "instantiate-everybody" + flagInstantiateByAddress = "instantiate-only-address" +) + +// GetTxCmd returns the transaction commands for this module +func GetTxCmd() *cobra.Command { + txCmd := &cobra.Command{ + Use: types.ModuleName, + Short: "Wasm transaction subcommands", + DisableFlagParsing: true, + SuggestionsMinimumDistance: 2, + RunE: client.ValidateCmd, + } + txCmd.AddCommand( + wasmcli.StoreCodeCmd(), + wasmcli.InstantiateContractCmd(), + wasmcli.InstantiateContract2Cmd(), + StoreCodeAndInstantiateContractCmd(), + wasmcli.ExecuteContractCmd(), + wasmcli.MigrateContractCmd(), + wasmcli.UpdateContractAdminCmd(), + wasmcli.ClearContractAdminCmd(), + ) + return txCmd +} + +// StoreCodeAndInstantiateContractCmd will upload code and instantiate a contract using it +func StoreCodeAndInstantiateContractCmd() *cobra.Command { + cmd := &cobra.Command{ + Use: "store-instantiate [wasm file] [json_encoded_init_args] --label [text] --admin [address,optional] --amount [coins,optional]", + Short: "Upload a wasm binary and instantiate a wasm contract from the code", + Args: cobra.ExactArgs(2), + RunE: func(cmd *cobra.Command, args []string) error { + clientCtx, err := client.GetClientTxContext(cmd) + if err != nil { + return err + } + msg, err := parseStoreCodeAndInstantiateContractArgs(args[0], args[1], clientCtx.GetFromAddress(), cmd.Flags()) + if err != nil { + return err + } + if err = msg.ValidateBasic(); err != nil { + return err + } + return tx.GenerateOrBroadcastTxCLI(clientCtx, cmd.Flags(), &msg) + }, + } + + cmd.Flags().String(flagInstantiateByEverybody, "", "Everybody can instantiate a contract from the code, optional") + cmd.Flags().String(flagInstantiateByAddress, "", "Only this address can instantiate a contract instance from the code, optional") + cmd.Flags().String(flagAmount, "", "Coins to send to the contract during instantiation") + cmd.Flags().String(flagLabel, "", "A human-readable name for this contract in lists") + cmd.Flags().String(flagAdmin, "", "Address of an admin") + flags.AddTxFlagsToCmd(cmd) + return cmd +} + +func parseStoreCodeAndInstantiateContractArgs(file string, initMsg string, sender sdk.AccAddress, flags *flag.FlagSet) (types.MsgStoreCodeAndInstantiateContract, error) { + wasm, err := os.ReadFileWithSizeLimit(file, int64(wasmTypes.MaxWasmSize)) + if err != nil { + return types.MsgStoreCodeAndInstantiateContract{}, err + } + + // gzip the wasm file + if ioutils.IsWasm(wasm) { + wasm, err = ioutils.GzipIt(wasm) + + if err != nil { + return types.MsgStoreCodeAndInstantiateContract{}, err + } + } else if !ioutils.IsGzip(wasm) { + return types.MsgStoreCodeAndInstantiateContract{}, fmt.Errorf("invalid input file. Use wasm binary or gzip") + } + + var perm *wasmTypes.AccessConfig + onlyAddrStr, err := flags.GetString(flagInstantiateByAddress) + if err != nil { + return types.MsgStoreCodeAndInstantiateContract{}, fmt.Errorf("instantiate by address: %s", err) + } + if onlyAddrStr != "" { + addr, err := sdk.AccAddressFromBech32(onlyAddrStr) + if err != nil { + return types.MsgStoreCodeAndInstantiateContract{}, sdkerrors.Wrap(err, flagInstantiateByAddress) + } + x := wasmTypes.AccessTypeOnlyAddress.With(addr) + perm = &x + } else { + everybodyStr, err := flags.GetString(flagInstantiateByEverybody) + if err != nil { + return types.MsgStoreCodeAndInstantiateContract{}, fmt.Errorf("instantiate by everybody: %s", err) + } + if everybodyStr != "" { + ok, err := strconv.ParseBool(everybodyStr) + if err != nil { + return types.MsgStoreCodeAndInstantiateContract{}, fmt.Errorf("boolean value expected for instantiate by everybody: %s", err) + } + if ok { + perm = &wasmTypes.AllowEverybody + } + } + } + + amountStr, err := flags.GetString(flagAmount) + if err != nil { + return types.MsgStoreCodeAndInstantiateContract{}, fmt.Errorf("amount: %s", err) + } + amount, err := sdk.ParseCoinsNormalized(amountStr) + if err != nil { + return types.MsgStoreCodeAndInstantiateContract{}, fmt.Errorf("amount: %s", err) + } + label, err := flags.GetString(flagLabel) + if err != nil { + return types.MsgStoreCodeAndInstantiateContract{}, fmt.Errorf("label: %s", err) + } + if label == "" { + return types.MsgStoreCodeAndInstantiateContract{}, errors.New("label is required on all contracts") + } + adminStr, err := flags.GetString(flagAdmin) + if err != nil { + return types.MsgStoreCodeAndInstantiateContract{}, fmt.Errorf("admin: %s", err) + } + + msg := types.MsgStoreCodeAndInstantiateContract{ + Sender: sender.String(), + WASMByteCode: wasm, + InstantiatePermission: perm, + Label: label, + Funds: amount, + Msg: []byte(initMsg), + Admin: adminStr, + } + return msg, nil +} diff --git a/x/wasmplus/client/proposal_handler.go b/x/wasmplus/client/proposal_handler.go new file mode 100644 index 0000000000..da0bb2bc5b --- /dev/null +++ b/x/wasmplus/client/proposal_handler.go @@ -0,0 +1,24 @@ +package client + +import ( + govclient "github.com/line/lbm-sdk/x/gov/client" + "github.com/line/wasmd/x/wasmplus/client/cli" + + wasmcli "github.com/line/wasmd/x/wasm/client/cli" +) + +// ProposalHandlers define the wasm cli proposal types and rest handler. +var ProposalHandlers = []govclient.ProposalHandler{ + govclient.NewProposalHandler(wasmcli.ProposalStoreCodeCmd), + govclient.NewProposalHandler(wasmcli.ProposalInstantiateContractCmd), + govclient.NewProposalHandler(wasmcli.ProposalMigrateContractCmd), + govclient.NewProposalHandler(wasmcli.ProposalExecuteContractCmd), + govclient.NewProposalHandler(wasmcli.ProposalSudoContractCmd), + govclient.NewProposalHandler(wasmcli.ProposalUpdateContractAdminCmd), + govclient.NewProposalHandler(wasmcli.ProposalClearContractAdminCmd), + govclient.NewProposalHandler(wasmcli.ProposalPinCodesCmd), + govclient.NewProposalHandler(wasmcli.ProposalUnpinCodesCmd), + govclient.NewProposalHandler(wasmcli.ProposalUpdateInstantiateConfigCmd), + govclient.NewProposalHandler(cli.ProposalDeactivateContractCmd), + govclient.NewProposalHandler(cli.ProposalActivateContractCmd), +} diff --git a/x/wasmplus/client/testutil/cli_test.go b/x/wasmplus/client/testutil/cli_test.go new file mode 100644 index 0000000000..ededc42407 --- /dev/null +++ b/x/wasmplus/client/testutil/cli_test.go @@ -0,0 +1,72 @@ +//go:build norace +// +build norace + +package testutil + +import ( + "fmt" + "testing" + "time" + + "github.com/stretchr/testify/suite" + dbm "github.com/tendermint/tm-db" + + "github.com/line/lbm-sdk/crypto/hd" + "github.com/line/lbm-sdk/crypto/keyring" + servertypes "github.com/line/lbm-sdk/server/types" + storetypes "github.com/line/lbm-sdk/store/types" + "github.com/line/lbm-sdk/testutil/network" + sdk "github.com/line/lbm-sdk/types" + authtypes "github.com/line/lbm-sdk/x/auth/types" + ostrand "github.com/line/ostracon/libs/rand" + + wasmapp "github.com/line/wasmd/app" + wasmappparams "github.com/line/wasmd/app/params" + wasmplusapp "github.com/line/wasmd/appplus" + "github.com/line/wasmd/x/wasmplus/types" +) + +func TestIntegrationTestSuite(t *testing.T) { + cfg := DefaultConfig() + cfg.NumValidators = 1 + suite.Run(t, NewIntegrationTestSuite(cfg)) +} + +func DefaultConfig() network.Config { + encCfg := wasmplusapp.MakeEncodingConfig() + + return network.Config{ + Codec: encCfg.Marshaler, + LegacyAmino: encCfg.Amino, + InterfaceRegistry: encCfg.InterfaceRegistry, + TxConfig: encCfg.TxConfig, + AccountRetriever: authtypes.AccountRetriever{}, + AppConstructor: NewAppConstructor(encCfg), + GenesisState: wasmplusapp.ModuleBasics.DefaultGenesis(encCfg.Marshaler), + TimeoutCommit: 1 * time.Second, + ChainID: "chain-" + ostrand.NewRand().Str(6), + NumValidators: 4, + BondDenom: sdk.DefaultBondDenom, + MinGasPrices: fmt.Sprintf("0.000006%s", sdk.DefaultBondDenom), + AccountTokens: sdk.TokensFromConsensusPower(1000, sdk.DefaultPowerReduction), + StakingTokens: sdk.TokensFromConsensusPower(500, sdk.DefaultPowerReduction), + BondedTokens: sdk.TokensFromConsensusPower(100, sdk.DefaultPowerReduction), + PruningStrategy: storetypes.PruningOptionNothing, + CleanupDir: true, + SigningAlgo: string(hd.Secp256k1Type), + KeyringOptions: []keyring.Option{}, + } +} + +func NewAppConstructor(encodingCfg wasmappparams.EncodingConfig) network.AppConstructor { + return func(val network.Validator) servertypes.Application { + return wasmplusapp.NewWasmApp( + val.Ctx.Logger, dbm.NewMemDB(), nil, true, + map[int64]bool{}, val.Ctx.Config.RootDir, 0, + encodingCfg, + types.EnableAllProposals, + wasmapp.EmptyBaseAppOptions{}, + nil, + ) + } +} diff --git a/x/wasm/client/testutil/gov.go b/x/wasmplus/client/testutil/gov.go similarity index 98% rename from x/wasm/client/testutil/gov.go rename to x/wasmplus/client/testutil/gov.go index ae2e960d8f..0dc912b7fd 100644 --- a/x/wasm/client/testutil/gov.go +++ b/x/wasmplus/client/testutil/gov.go @@ -9,7 +9,7 @@ import ( govcli "github.com/line/lbm-sdk/x/gov/client/cli" "github.com/line/lbm-sdk/x/gov/types" - "github.com/line/wasmd/x/wasm/client/cli" + "github.com/line/wasmd/x/wasmplus/client/cli" ) func (s *IntegrationTestSuite) TestProposalDeactivateContractCmd() { diff --git a/x/wasmplus/client/testutil/query.go b/x/wasmplus/client/testutil/query.go new file mode 100644 index 0000000000..ae1e056e64 --- /dev/null +++ b/x/wasmplus/client/testutil/query.go @@ -0,0 +1,80 @@ +package testutil + +import ( + "github.com/gogo/protobuf/proto" + + clitestutil "github.com/line/lbm-sdk/testutil/cli" + "github.com/line/lbm-sdk/types/query" + + _ "github.com/line/wasmd/x/wasm/client/testutil" + "github.com/line/wasmd/x/wasmplus/client/cli" + "github.com/line/wasmd/x/wasmplus/types" +) + +func (s *IntegrationTestSuite) TestGetCmdListInactiveContracts() { + val := s.network.Validators[0] + + cmd := cli.GetCmdListInactiveContracts() + out, err := clitestutil.ExecTestCLICmd(val.ClientCtx, cmd, s.queryCommonArgs()) + s.Require().NoError(err) + + expected := &types.QueryInactiveContractsResponse{ + Addresses: []string{s.inactiveContractAddress}, + Pagination: &query.PageResponse{}, + } + var resInfo types.QueryInactiveContractsResponse + s.Require().NoError(val.ClientCtx.Codec.UnmarshalJSON(out.Bytes(), &resInfo), out.String()) + s.Require().Equal(expected, &resInfo) +} + +func (s *IntegrationTestSuite) TestGetCmdIsInactiveContract() { + val := s.network.Validators[0] + + testCases := map[string]struct { + args []string + valid bool + expected proto.Message + }{ + "valid query(inactivate)": { + []string{ + s.inactiveContractAddress, + }, + true, + &types.QueryInactiveContractResponse{ + Inactivated: true, + }, + }, + "valid query(activate)": { + []string{ + "link1hmayw7vv0p3gzeh3jzwmw9xj8fy8a3kmpqgjrysljdnecqkps02qrq5rvm", + }, + false, + nil, + }, + "wrong bech32_address": { + []string{ + "xxx", + }, + false, + nil, + }, + } + + for name, tc := range testCases { + tc := tc + + s.Run(name, func() { + cmd := cli.GetCmdIsInactiveContract() + out, err := clitestutil.ExecTestCLICmd(val.ClientCtx, cmd, append(tc.args, s.queryCommonArgs()...)) + if !tc.valid { + s.Require().Error(err) + return + } + s.Require().NoError(err) + + var resInfo types.QueryInactiveContractResponse + s.Require().NoError(val.ClientCtx.Codec.UnmarshalJSON(out.Bytes(), &resInfo), out.String()) + s.Require().Equal(tc.expected, &resInfo) + }) + } +} diff --git a/x/wasmplus/client/testutil/suite.go b/x/wasmplus/client/testutil/suite.go new file mode 100644 index 0000000000..e15d07a0f9 --- /dev/null +++ b/x/wasmplus/client/testutil/suite.go @@ -0,0 +1,161 @@ +package testutil + +import ( + "fmt" + "os" + "testing" + + "github.com/line/lbm-sdk/client/flags" + clitestutil "github.com/line/lbm-sdk/testutil/cli" + "github.com/line/lbm-sdk/testutil/network" + sdk "github.com/line/lbm-sdk/types" + ostcli "github.com/line/ostracon/libs/cli" + "github.com/stretchr/testify/suite" + + "github.com/line/wasmd/x/wasm/client/cli" + wasmkeeper "github.com/line/wasmd/x/wasm/keeper" + wasmtypes "github.com/line/wasmd/x/wasm/types" + "github.com/line/wasmd/x/wasmplus/types" +) + +type IntegrationTestSuite struct { + suite.Suite + + cfg network.Config + network *network.Network + + setupHeight int64 + + codeID string + contractAddress string + nonExistValidAddress string + inactiveContractAddress string + + // for hackatom contract + verifier string + beneficiary sdk.AccAddress +} + +var commonArgs = []string{ + fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation), + fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastBlock), + fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin(sdk.DefaultBondDenom, sdk.NewInt(100))).String()), +} + +func NewIntegrationTestSuite(cfg network.Config) *IntegrationTestSuite { + return &IntegrationTestSuite{cfg: cfg} +} + +func (s *IntegrationTestSuite) SetupSuite() { + //s.T().Log("Setting up integration test suite.") + + if testing.Short() { + s.T().Skip("skipping test in unit-tests mode.") + } + + s.inactiveContractAddress = "link14hj2tavq8fpesdwxxcu44rty3hh90vhujrvcmstl4zr3txmfvw9sgf2vn8" + + // add inactive contract to genesis + var wasmData types.GenesisState + genesisState := s.cfg.GenesisState + genesisData, err := os.ReadFile("./testdata/wasm_genesis.json") + s.Require().NoError(err) + s.Require().NoError(s.cfg.Codec.UnmarshalJSON(genesisData, &wasmData)) + wasmDataBz, err := s.cfg.Codec.MarshalJSON(&wasmData) + s.Require().NoError(err) + genesisState[types.ModuleName] = wasmDataBz + s.cfg.GenesisState = genesisState + + s.network = network.New(s.T(), s.cfg) + _, err = s.network.WaitForHeight(1) + s.Require().NoError(err) + + // deploy contract + s.codeID = s.deployContract() + + s.verifier = s.network.Validators[0].Address.String() + s.beneficiary = wasmkeeper.RandomAccountAddress(s.T()) + params := fmt.Sprintf("{\"verifier\": \"%s\", \"beneficiary\": \"%s\"}", s.verifier, s.beneficiary) + s.contractAddress = s.instantiate(s.codeID, params) + + s.nonExistValidAddress = wasmkeeper.RandomAccountAddress(s.T()).String() + + s.setupHeight, err = s.network.LatestHeight() + s.Require().NoError(err) + s.Require().NoError(s.network.WaitForNextBlock()) +} + +func (s *IntegrationTestSuite) TearDownSuite() { + s.T().Log("tearing down integration test suite") + s.network.Cleanup() +} + +func (s *IntegrationTestSuite) queryCommonArgs() []string { + return []string{ + fmt.Sprintf("--%s=%d", flags.FlagHeight, s.setupHeight), + fmt.Sprintf("--%s=json", ostcli.OutputFlag), + } +} + +func (s *IntegrationTestSuite) deployContract() string { + val := s.network.Validators[0] + + wasmPath := "../../../wasm/keeper/testdata/hackatom.wasm" + _, err := os.ReadFile(wasmPath) + s.Require().NoError(err) + + args := append([]string{ + wasmPath, + fmt.Sprintf("--%s=%s", flags.FlagFrom, val.Address.String()), + fmt.Sprintf("--%s=%d", flags.FlagGas, 1500000), + }, commonArgs...) + + out, err := clitestutil.ExecTestCLICmd(val.ClientCtx, cli.StoreCodeCmd(), args) + s.Require().NoError(err) + + var res sdk.TxResponse + s.Require().NoError(val.ClientCtx.Codec.UnmarshalJSON(out.Bytes(), &res), out.String()) + s.Require().EqualValues(0, res.Code, out.String()) + + // parse codeID + for _, v := range res.Events { + if v.Type == wasmtypes.EventTypeStoreCode { + for _, attr := range v.Attributes { + if string(attr.Key) == wasmtypes.AttributeKeyCodeID { + return string(attr.Value) + } + } + } + } + + return "" +} + +func (s *IntegrationTestSuite) instantiate(codeID, params string) string { + val := s.network.Validators[0] + owner := val.Address.String() + + args := append([]string{ + codeID, + params, + fmt.Sprintf("--label=%s", "TestContract"), + fmt.Sprintf("--admin=%s", owner), + fmt.Sprintf("--%s=%s", flags.FlagFrom, val.Address.String()), + }, commonArgs...) + + out, err := clitestutil.ExecTestCLICmd(val.ClientCtx, cli.InstantiateContractCmd(), args) + s.Require().NoError(err) + + var res sdk.TxResponse + s.Require().NoError(val.ClientCtx.Codec.UnmarshalJSON(out.Bytes(), &res), out.String()) + s.Require().EqualValues(0, res.Code, out.String()) + + // parse contractAddress + for _, v := range res.Events { + if v.Type == wasmtypes.EventTypeInstantiate { + return string(v.Attributes[0].Value) + } + } + + return "" +} diff --git a/x/wasmplus/client/testutil/testdata/wasm_genesis.json b/x/wasmplus/client/testutil/testdata/wasm_genesis.json new file mode 100644 index 0000000000..dabc0aa2db --- /dev/null +++ b/x/wasmplus/client/testutil/testdata/wasm_genesis.json @@ -0,0 +1,71 @@ +{ + "codes": + [ + { + "code_bytes": "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BzYCACAAQSBqIA02AgAgAEEcaiAENgIAIABBGGogEzYCACAAQRRqIAw2AgAgAEEQaiAKNgIAIABBDGogBjYCACAAQQhqIAs2AgAgACAJNgIEQQAhEAwNC0EBCyEOQQAhCUEBIQYgBA0IDAkLQQAhCkEBIQYgBA0HDAgLIAEhDAwBCyADQdgAaiAIEMEBAkAgAygCWCICQRVHBEAgESASKQIANwIAIBFBCGogEkEIaigCADYCAAwBCyADQcgAaiAIEBggAygCSCICQRVGDQELIANB1ABqKAIAIQUgA0HQAGooAgAhByADKAJMIQEMAwsgA0EIaiAIEMMBQQAhAiADLQAJIQEgAy0ACEEBcQ0ACwtBAiECQQEhBiAEDQIMAwtBASEGIAQNAQwCC0EEIQJBASEGIARFDQELIA1FDQAgBBDrAQsgDEUgCkUgDkVyckUEQCAKEOsBCyAJQQBHIAZxRSALRXINACAJEOsBCyADQeQAaiAFNgIAIANB4ABqIAc2AgAgAyABNgJcIAMgAjYCWCAAQQhqQbWKwABBFiADQdgAahAcCyAAIBA2AgAgA0HwAGokAAumLwISfwJ+IwBBoAFrIgIkACACEMgBIAACfwJAAkACQAJAAkACQAJAAkACQAJAAkAgASgCAEEBRwRAIAIoAggiAyACKAIERgRAIAIgA0EBEA8gAigCCCEDCyACKAIAIANqQfsAOgAAIAIgA0EBajYCCCACQZABaiACQaGFwABBAhDLAQJAIAIoApABQQFHBEAgAigCCCIDIAIoAgRGBEAgAiADQQEQDyACKAIIIQMLIAIoAgAgA2pBOjoAACACIANBAWo2AgggAkGQAWogAhDPASACKAKQAUEBRg0BIAIgAigClAEiAzYCMCACQZgBai0AAARAIANBCGooAgAhBAwECyADKAIIIgUgA0EEaigCAEYEQCADIAVBARAPIAMoAgghBQsgAyAFQQFqIgQ2AgggAygCACAFakEsOgAADAMLIAJBHGogAkGcAWooAgA2AgAgAiACKQKUATcCFAwMCyACQSxqIAJBkAFqQQRyIgFBCGooAgA2AgAgAiABKQIANwIkDAoLIAJBEGogAiABQQRqECEgAigCEEEBRw0BDAoLIAJBADoANCADQQRqIgYoAgAgBEYEQCADIARBARAPIANBCGooAgAhBAsgAygCACAE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lAE2AkggAkGQAWogAkHIAGpBrYXAAEEEIAQQEyACKAKQAUEBRg0GIAJBkAFqIAJByABqIARBDGoiBBAjIAIoApABQQFGBEAgAkGMAWogAkGcAWooAgA2AgAgAiACKQKUATcChAEMCQsgAkGAAWogAigCSCACLQBMEMYBIAIoAoABQQFGDQhBASEGIARBDGoiBCAJRw0AC0EABSAIC0H/AXFBAEcQxQEgAigCcEEBRg0HIANBCGoiBSgCACIEIANBBGoiBigCAEYEQCADIARBARAPIAUoAgAhBAsgAygCACAEakEsOgAAIAUgBEEBaiIENgIAIAJBADoANCAGKAIAIARGBEAgAyAEQQEQDyADQQhqKAIAIQQLIAMoAgAgBGpBIjoAACADQQhqIgUgBEEBaiIENgIAIAFBKGohASADQQRqIgYoAgAgBGtBA00EQCADIARBBBAPIAUoAgAhBAsgAygCACAEakHkwtGLBjYAACAFIARBBGoiBDYCACAGKAIAIARrQQFNBEAgAyAEQQIQDyADQQhqKAIAIQQLIAMoAgAgBGpBovQAOwAAIANBCGogBEECajYCACABKAIADQEgAkGQAWogAxDMAQwCCyACQYwBaiAHQQhqKAIANgIAIAIgBykCADcChAEMBQsgAkGAAWogARCeASACQZABaiADIAIoAoABIgEgAigCiAEQywEgAigChAFFIAFFcg0AIAEQ6wELIAIoApABQQFGBEAgAkEsaiACQZwBaigCADYCACACIAIpApQBNwIkDAkLIAJBIGogA0EAEMYBIAIoAiBBAUYNCCACKAIIIgMgAigCBEYEQCACIANBARAPIAIoAgghAwsgAigCACADakH9ADoAACACIANBAWo2AggLIAJBiAFqIAJBCGooAgAiATYCACACIAIpAwAiFDcDgAEgAEEMaiABNgIAIAAgFDcCBEEADAkLIAJBjAFqIAJBnAFqKAIANgIAIAIgAikClAE3AoQBDAELIAJB/ABqIAJBkAFqQQRyIgFBCGooAgA2AgAgAiABKQIANwJ0DAELIAJB/ABqIAJBjAFqKAIANgIAIAIgAikChAE3AnQLIAJBLGogAkH8AGooAgA2AgAgAiACKQJ0NwIkDAMLIAJBxABqIAJBkAFqQQRyIgFBCGooAgA2AgAgAiABKQIANwI8DAELIAJBxABqIAJB1ABqKAIANgIAIAIgAikCTDcCPAsgAkEsaiACQcQAaigCADYCACACIAIpAjw3AiQLIAJBHGogAkEsaigCADYCACACIAIpAiQ3AhQLIAJBiAFqIgEgAkEcaigCADYCACACIAIpAhQ3A4ABAkAgAigCBEUNACACKAIAIgNFDQAgAxDrAQsgAkGYAWogASgCADYCACACIAIpA4ABNwOQASAAQQhqQYSHwABB4QAgAkGQAWoQJEEBCzYCACACQaABaiQAC/0CAgJ/AX4jAEEgayIEJAAgASgCCCIDIAFBBGooAgBGBEAgASADQQEQDyABKAIIIQMLIAEgA0EBajYCCCABKAIAIANqQfsAOgAAIARBEGogAUGWhcAAQQUQywECQAJAIAQoAhBBAUcEQCABKAIIIgMgAUEEaigCAEYEQCABIANBARAPIAEoAgghAwsgASADQQFqNgIIIAEoAgAgA2pBOjoAACAEQRBqIAEgAigCACACQQhqKAIAEMsBIAQoAhBBAUYNASABKAIIIgMgAUEEaigCAEYEQCABIANBARAPIAEoAgghAwsgAEEANgIAIAEgA0EBajYCCCABKAIAIANqQf0AOgAADAILIARBCGogBEEcaigCACIBNgIAIAQgBCkCFCIFNwMAIABBDGogATYCACAAIAU3AgQgAEEBNgIADAELIARBCGogBEEcaigCACIBNgIAIAQgBCkCFCIFNwMAIABBDGogATYCACAAIAU3AgQgAEEBNgIACyAEQSBqJAALuQMCAn8BfiMAQTBrIgIkACABKAIIIgMgAUEEaigCAEYEQCABIANBARAPIAEoAgghAwsgASADQQFqNgIIIAEoAgAgA2pB+wA6AAAgAkEgaiABQYeBwABBBhDLAQJAAkACQAJAIAIoAiBBAUcEQCABKAIIIgMgAUEEaigCAEYEQCABIANBARAPIAEoAgghAwsgASADQQFqNgIIIAEoAgAgA2pBOjoAACACQSBqIAEQzwEgAigCIEEBRw0BIAJBHGogAkEgakEEciIBQQhqKAIANgIAIAIgASkCADcCFAwCCyACQRhqIAJBLGooAgAiATYCACACIAIpAiQiBDcDECAAQQxqIAE2AgAgACAENwIEIABBATYCAAwDCyACQRBqIAIoAiQgAkEoai0AABDGASACKAIQQQFHDQELIAJBCGogAkEcaigCACIBNgIAIAIgAikCFCIENwMAIABBDGogATYCACAAIAQ3AgQgAEEBNgIADAELIAEoAggiAyABQQRqKAIARgRAIAEgA0EBEA8gASgCCCEDCyAAQQA2AgAgASADQQFqNgIIIAEoAgAgA2pB/QA6AAALIAJBMGokAAuABwIFfwF+IwBB0ABrIgMkACABKAIAIQUCQCABLQAEBEAgBUEIaigCACEEDAELIAUoAggiBiAFQQRqKAIARgRAIAUgBkEBEA8gBSgCCCEGCyAFIAZBAWoiBDYCCCAFKAIAIAZqQSw6AAALIAFBADoABCAFQQRqIgYoAgAgBEYEQCAFIARBARAPIAVBCGooAgAhBAsgBSgCACAEakEiOgAAIAVBCGoiASAEQQFqIgQ2AgAgBigCACAEa0EJTQRAIAUgBEEKEA8gASgCACEECyAFKAIAIARqIgZBsYXAACkAADcAACAGQQhqQbmFwAAvAAA7AAAgASAEQQpqIgQ2AgAgBUEEaigCACAEa0EBTQRAIAUgBEECEA8gBUEIaigCACEECyAFKAIAIARqQaL0ADsAACAFQQhqIARBAmo2AgAgAigCACEEIANBQGsgBSACKAIIIgEQzgECQAJAAkAgAygCQEEBRwRAIANByABqLQAAIQYgAygCRCECAkACQCABBEAgBCABQRhsaiEHIANBQGtBBHIhBSAGQf8BcUUhASACQQRqIQYDQCABQQFxBEAgAigCCCIBIAYoAgBGBEAgAiABQQEQDyACKAIIIQELIAIgAUEBajYCCCACKAIAIAFqQSw6AAALIANBQGsgAhDPASADKAJAQQFGDQIgAyADLQBIOgA8IAMgAygCRDYCOCADQUBrIANBOGpB7IHAAEEDIAQQEyADKAJAQQFGDQMgA0FAayADQThqQcSFwABBBSAEQQxqIgQQEyADKAJAQQFGBEAgA0E0aiADQcwAaigCADYCACADIAMpAkQ3AiwMBgsgA0EoaiADKAI4IAMtADwQxgEgAygCKEEBRg0FQQEhASAEQQxqIgQgB0cNAAtBACEGC0EAIQQgA0EYaiACIAZB/wFxQQBHEMUBIAMoAhhBAUYNBAwFCyADQTRqIAVBCGooAgA2AgAgAyAFKQIANwIsDAILIANBNGogA0HMAGooAgA2AgAgAyADKQJENwIsDAELIANBJGogA0FAa0EEciIBQQhqKAIANgIAIAMgASkCADcCHAwBCyADQSRqIANBNGooAgA2AgAgAyADKQIsNwIcCyADQRBqIANBJGooAgAiATYCACADIAMpAhwiCDcDCCAAQQxqIAE2AgAgACAINwIEQQEhBAsgACAENgIAIANB0ABqJAALkAMBA38jAEFAaiIEJAACQAJAAkAgAkEATgRAIAINAUEBIQUMAgsQkwIACyACQQEQSyIFRQ0BCyAFIAEgAhDdAiEGIARCADcCBCAEQZSNwAAoAgA2AgAgBEEQaiIFIARB2IXAABDAAiMAQTBrIgEkAAJ/IAMoAgBFBEAgAUEcakEANgIAIAFBsNvAADYCGCABQgE3AgwgAUHw5MAANgIIIAUgAUEIahDDAgwBCyABIAM2AgQgAUEcakEBNgIAIAFCATcCDCABQcDbwAA2AgggAUHlADYCJCABIAFBIGo2AhggASABQSxqNgIgIAEgAUEEajYCLCAFIAFBCGoQwwILIAFBMGokAEUEQCAAQQxqIAI2AgAgAEEIaiACNgIAIAAgBjYCBCAAQRBqIAQpAwA3AgAgAEEJNgIAIABBGGogBEEIaigCADYCAAJAIAMoAgAiAEUNACADQQRqKAIARQ0AIAAQ6wELIARBQGskAA8LQfCFwABBNyAEQThqQbiMwABB9IbAABCvAgALIAJBARCSAgALnQ8CAn8BfiMAQeAAayICJAAgAkEIahDIASAAAn8CQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQCABKAIAQQFrDgICAQALIAIoAhAiAyACKAIMRgRAIAJBCGogA0EBEA8gAigCECEDCyACKAIIIANqQfsAOgAAIAIgA0EBajYCECACQdAAaiACQQhqQY2BwABBBBDLASACKAJQQQFGDQMgAigCECIDIAIoAgxGBEAgAkEIaiADQQEQDyACKAIQIQMLIAIoAgggA2pBOjoAACACIANBAWo2AhACQAJAAkAgASgCBEEBRwRAIAJB0ABqIAJBCGpBrYHAAEEHENABIAIoAlBBAUYNASACIAIoAlQ2AkggAiACQdgAai0AADoATCACQdAAaiACQcgAakGmgcAAQQcgAUEIahATIAIoAlBBAUYNAiACQdAAaiACQcgAakH4gMAAQQUgAUEUahATIAIoAlBBAUYNAyACQThqIAIoAkggAi0ATBDH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CyACQSxqIAJBMGpBBHIiAUEIaigCADYCACACIAEpAgA3AiQMAwsgAkEsaiACQTxqKAIANgIAIAIgAikCNDcCJAwCCyACQSxqIAJBPGooAgA2AgAgAiACKQI0NwIkDAELIAJBCGogAkEYaigCACIBNgIAIAIgAikDECIENwMAIABBDGogATYCACAAIAQ3AgRBAAwBCyACQQhqIgEgAkEsaigCADYCACACIAIpAiQ3AwACQCACKAIURQ0AIAIoAhAiA0UNACADEOsBCyACQThqIAEoAgA2AgAgAiACKQMANwMwIABBCGpBtYrAAEEWIAJBMGoQJEEBCzYCACACQUBrJAALwBIBDX8jAEHQAWsiAyQAIANBOGogAhAlAkACQCAAAn8CQAJAAkACQAJAAkACQAJAIAMoAjhBAUcEQCADQUBrKAIAIQ8gA0E4aiABKAIAIAMoAjwiDSADQcQAaiIEKAIAIAEoAgQoAgwRBgAgAygCOEEBRg0BIAMoAjxBAUYNAyADQegAaiADQcgAaigCADYCACADIANBQGspAwA3A2AgA0EwaiADQeAAahCfASADQagBaiIBIAMoAjAgAygCNBC8ASADQShqIAEQwwEgAy0AKEEBcQ0CQQQhAQwICyADQYgBaiADQdgAaikDADcDACADQYABaiADQdAAaikDADcDACADQfgAaiADQcgAaikDADcDACADIANBQGspAwA3A3AgA0GkAWpBATYCACADQgE3ApQBIANBjIPAADYCkAEgA0EDNgKsASADIANBqAFqNgKgASADIANB8ABqIgE2AqgBIANBwAFqIANBkAFqEJQCIAEQKCADKALAASEBIABBEGogAykCxAE3AgAgAEEMaiABNgIAIABBCGpBAzYCACAAQQE2AgAMCgsgA0GIAWogA0HUAGooAgA2AgAgA0GAAWogA0HMAGopAgA3AwAgA0H4AGogBCkCADcDACADIAMpAjw3A3AgA0GkAWpBATYCACADQgE3ApQBIANByILAADYCkAEgA0EENgKsASADIANBqAFqNgKgASADIANB8ABqNgKoASADQcABaiADQZABahCUAiAAQQhqQQM2AgAgAEEMaiADKQPAATcCACAAQRRqIANByAFqKAIANgIAIABBATYCAAJAAkACQAJAIAMoAnAOBAECAwwACyADQfgAaigCAEUNCyAD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CyAAQRhqKAIARQ0BIABBFGooAgAiAEUNAQwCCyACDQAgARDrAQsPCyAAEOsBCw4AIAAoAgAgARA0GkEAC9QCAQN/IwBBEGsiAiQAAkAgAUH/AE0EQCAAKAIIIgMgAEEEaigCAEYEQCAAIANBARAPIAAoAgghAwsgACADQQFqNgIIIAAoAgAgA2ogAToAAAwBCyACQQA2AgwCfyABQYAQTwRAIAFBgIAESQRAIAIgAUE/cUGAAXI6AA4gAiABQQx2QeABcjoADCACIAFBBnZBP3FBgAFyOgANQQMMAgsgAiABQT9xQYABcjoADyACIAFBEnZB8AFyOgAMIAIgAUEGdkE/cUGAAXI6AA4gAiABQQx2QT9xQYABcjoADUEEDAELIAIgAUE/cUGAAXI6AA0gAiABQQZ2QcABcjoADEECCyEBIAEgAEEEaigCACAAQQhqIgQoAgAiA2tLBEAgACADIAEQDyAEKAIAIQMLIAAoAgAgA2ogAkEMaiABEN0CGiAEIAEgA2o2AgALIAJBEGokAEEAC1oBAX8jAEEgayICJAAgAiAAKAIANgIEIAJBGGogAUEQaikCADcDACACQRBqIAFBCGopAgA3AwAgAiABKQIANwMIIAJBBGpB0IvAACACQQhqEKICIAJBIGokAAtPAQJ/IAIgACgCACIDQQRqKAIAIANBCGoiBCgCACIAa0sEQCADIAAgAhAPIAQoAgAhAAsgAygCACAAaiABIAIQ3QIaIAQgACACajYCAEEAC+QEAQF/IwBBsAFrIgIkACACQQhqIAFBDGopAgA3AwAgAkEQaiABQRRqKQIANwMAIAJBGGogAUEcaikCADcDACACQSBqIAFBJGopAgA3AwAgAkEoaiABQSxqKQIANwMAIAIgASkCBDcDAAJAAkAgASgCAEEBRwRAIABBADYCACAAIAFBBGoiASkCADcCBCAAQSxqIAFBKGopAgA3AgAgAEEkaiABQSBqKQIANwIAIABBHGogAUEYaikCADcCACAAQRRqIAFBEGopAgA3AgAgAEEMaiABQQhqKQIANwIADAELIAJByABqIAJBHGopAgA3AwAgAkFAayACQRRqKQIANwMAIAJBOGogAkEMaikCADcDACACIAIpAgQ3AzAgAkIANwJUIAJBlI3AACgCADYCUCACQeAAaiACQdAAakHYhcAAEMACAkAg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AEEGEOACDQggAEEBOgABDAoLIAFBlZTAAEEMEOACRQ0BIAFB/pPAAEEMEOACDQcgAEEFOgABDAkLIAEpAABC4+DV+8Xt27fwAFINBiAAQQI6AAEMCAsgAEEDOgABDAcLIAFBipTAAEELEOACDQQgAEEEOgABDAYLIAFB5JPAAEEVEOACDQMgAEEGOgABDAULIAFB35PAAEEFEOACDQIgAEEHOgABDAQLIAFB/47AAEEHEOACRQ0CDAELIAFBx5PAAEEYEOACDQAgAEEIOgABDAILIABBBGogASACQcCUwABBCRA8IABBAToAAA8LIABBADoAASAAQQA6AAAPCyAAQQA6AAALqgIBBH8jAEEgayICJAAgAiABEMMBAkACQAJAIAItAABBAXEEQCACLQABQSJHDQEgARC9ASACQQhqIAEQwgEgAkEYaigCACEEIAJBFGooAgAhAyACQRBqKAIAIQEgAigCDCEFIAIoAghBAUYNAiAFRQRAAkAgA0ELRgRAIAFBn5PAAEELEOACRQ0BCyAAIAEgA0Gsk8AAQQEQPAwFCyAAQRU2AgAMBAsCQAJAIARBC0YEQCABQZ+TwABBCxDgAkUNAQsgACABIARBrJPAAEEBEDwMAQsgAEEVNgIACyADRSABRXINAyABEOsBDAMLIABBBDYCAAwCCyAAQQ42AgAMAQsgACABNgIEIAAgBTYCACAAQQxqIAQ2AgAgAEEIaiADNgIACyACQSBqJAAL2SUCGX8EfiMAQcADayIDJAAQ8AEgA0HoAGogABCzASADQfgAaiABELMBIANBiAFqIAIQswEgA0G4AmogAygCaCIPIAMoAnAQFQJAAkACQAJAAkACQAJAAkACQAJAAkACQCADKQO4AkIBUgRAIANBsAFqIANByAJqIgApAwA3AwAgA0GgAWogA0HgAmopAwA3AwAgAyADKQPAAjcDqAEgAyADQdgCaiICKQMANwOYASADQdACaiIBKAIAIQ0gA0HUAmooAgAhEyADQegCaigCACELIANB7AJqKAIAIRQgA0HwAmopAwAhHCADQbgCaiADKAJ4IhUgAygCgAEQHSADKAK4AkEBRg0CIAEoAgAhDiADQcwCaigCACEQIAAoAgAhESADQcQCaigCACEZIAMoAsACIRYgAygCvAIhEiADQdABaiIAIAMoAogBIhcgAygCkAEQvAEgA0EoaiAAEMMBIAMtAChBAXENAUEEIQIMCAsgA0HoAWogA0HYAmopAwA3AwAgA0HgAWogA0HQAmopAwA3AwAgA0HYAWogA0HIAmopAwA3AwAgAyADKQPAAjcD0AEgA0IANwK8ASADQZSNwAAoAgA2ArgBIANBgAJqIgAgA0G4AWpB2IXAABDAAiADQdABaiAAELEBDQsgA0E8aiADQcABaigCADYCACADIAMpA7gBNwI0IANBATYCMCADQdABahAoDAkLIAMtAClB+wBHBEBBDiECDAcLIANB0AFqIgAQvQEgA0EgaiAAELsBIAMtACQhASADQRhqIAMoAiAiABDDASADLQAYQQFxRQRAQQIhAgwECyADQTBqQQRyIQogA0GAAmpBBHIhGCADQYgCaiEMIAMtABkhAiABQQFxIQEDQAJAAkACQAJAAkACQAJAAkACQAJAIAJB/wFxIgRBLEcEQCAEQf0ARg0CIAFB/wFxDQFBCSECDA8LIAFB/wFxBEBBECECDA8LIAAQvQEgA0EQaiAAEMMBIAMtABBBAXFFDQ0gAy0AESECCyACQf8BcSIBQSJHBEBBE0EQIAFB/QBGGyECDA4LIANBCGogABDDASADLQAIQQFxRQ0MIAMtAAlBIkcEQEEOIQIMDgsgABC9ASADQYACaiAAEMIBIAMoApACIQYgAygCjAIhBCADKAKIAiEBIAMoAoQCIQIgAygCgAJBAUYNDSACRQRAIARBCGsOBAIICAQIC0ECIQICQAJAAkAgBkEIaw4EAAICAQILQQBBfiABKQAAQvbKycvmrNqy8gBRGyECDAELQX5BASABQZSTwABBCxDgAhshAgsgBEUgAUVyRQRAIAEQ6wELIAJBHnRBHnVBAEgNByACQQNxQQFrDQIMBAsgBQRAIAcNBiADQYACakEEckGUk8AAQQsQFiADQZACaigCACEGIANBjAJqKAIAIQQgA0GIAmooAgAhASADKAKEAiECIAhFDRAgBRDrAQwQCyADQYACakEEckGMk8AAQQgQFiADQZACaigCACEGIANBjAJqKAIAIQQgA0GIAmooAgAhASADKAKEAiECDAoLIAEpAABC9srJy+as2rLyAFINBQsgBUUNAiADQYACakGMk8AAQQgQFyADQYwCaigCACEGIANBiAJqKAIAIQQgAygChAIhASADKAKAAiECDAoLIAFBlJPAAEELEOACDQMLIAcEQCADQYACakGUk8AAQQsQFyADQYwCaigCACEGIANBiAJqKAIAIQQgAygChAIhASADKAKAAiECIAkNCgwLCyADQTBqIAAQwQECQCADKAIwIgJBFUcEQCAMIAopAgA3AgAgDEEIaiAKQQhqKAIANgIADAELIANBgAJqIAAQGSADKAKAAkEBRwRAIAMoAowCIRogAygCiAIhCSADKAKEAiEHDAULIAMoAoQCIQILIANBkAJqKAIAIQYgAygCjAIhBCADKAKIAiEBDAoLIANBMGogABDBAQJAIAMoAjAiAkEVRwRAIAwgCikCADcCACAMQQhqIApBCGooAgA2AgAMAQsgA0GAAmogABAZIAMoAoACQQFHBEAgAygCjAIhGyADKAKIAiEIIAMoAoQCIQUMBAsgAygChAIhAgsgA0GQAmooAgAhBiADKAKMAiEEIAMoAogCIQEMBQsgA0GAAmogA0HQAWoQwAEgAygCgAIiAkEVRwRAIANBjAJqKAIAIQYgA0GIAmooAgAhBCADKAKEAiEBIAgEQCAFEOsBCyAJRQ0KIAcQ6wEMCgsgA0GAAmogA0HQAWoQvgEgAygCgAIiAkEVRwRAIANBjAJqKAIAIQYgA0GIAmooAgAhBCADKAKEAiEBIAgEQCAFEOsBCyAJRQ0KIAcQ6wEMCgsgA0HIAmogBzYCACADQcQCaiIBIBs2AgAgA0HQAmoiAiAaNgIAIANBzAJqIgAgCTYCACADQcABaiIEIAEpAgA3AwAgA0HIAWoiASAAKQIANwMAIAMgCDYCwAIgAyAFNgK8AiADIAMpArwCNwO4ASADQYQDakHkgMAANgIAIANB/AJqQbSAwAA2AgAgA0H0AmpBnIDAADYCACADQcACaiADQbABaikDADcDACAAIBM2AgAgAiADKQOYATcDACADQdgCaiADQaABaikDADcDACADQZwDaiAONgIAIANBmANqIBA2AgAgA0GUA2ogETYCACADQZADaiAZNgIAIANBjANqIBY2AgAgA0HoAmogHDcDACADQeQCaiAUNgIAIANBgANqIANBuANqIgA2AgAgA0H4AmogADYCACADIAMpA6gBNwO4AiADIA02AsgCIAMgEjYCiAMgAyALNgLgAiADIAA2AvACIANBsANqIAEpAwA3AwAgA0Go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AwAgA0HgAWogASkDADcDACADQdgBaiAAKQMANwMAIAMgAykDwAI3A9ABIANCADcCvAEgA0GUjcAAKAIANgK4ASADQYACaiIAIANBuAFqQdiFwAAQwAIgA0HQAWogABCxAUUEQCADQTxqIANBwAFqKAIANgIAIAMgAykDuAE3AjQgA0EBNgIwIANB0AFqECgMBwsMCQtBACEFDAELQQQhAgsgB0UgCUVyDQELIAcQ6wELIAVFIAhFcg0AIAUQ6wELIANBjAJqIAY2AgAgA0GIAmogBDYCACADIAE2AoQCIAMgAjYCgAIgA0HAAmpBkYvAAEEdIANBgAJqIgAQHCADQegBaiADQdgCaikDADcDACADQeABaiADQdACaikDADcDACADQdgBaiADQcgCaikDADcDACADIAMpA8ACNwPQASADQgA3AvQBIANBlI3AACgCADYC8AEgACADQfABakHYhcAAEMACIANB0AFqIAAQsQENAyADQTxqIANB+AFqKAIANgIAIAMgAykD8AE3AjQgA0EBNgIwIANB0AFqECggFkUgEkVyRQRAIBIQ6wELIA4EQCAOQQV0IQEgEUEUaiECA0ACQCACKAIARQ0AIAJBBGsoAgAiAEUNACAAEOsBCyACQSBqIQIgAUEgayIBDQALCyAQRSAQQQV0RXINACAREOsBCyATRSANRXJFBEAgDRDrAQsgFEUgC0VyDQAgCxDrAQsCQCADKAKMAUUNACADKAKIASIARQ0AIAAQ6wELAkAgAygCfEUNACADKAJ4IgBFDQAgABDrAQsgAygCbEUgD0VyDQAgDxDrAQsgA0G4AmogA0EwahAgIAMoArgCQQFHBEAgA0GIAmogA0HEAmooAgAiADYCACADIAMpArwCIhw3A4ACIANBwAJqIAA2AgAgAyAcNwO4AiADQbgCahCyAQJAIAMoAjBFBEAgA0EwakEEchAxDAELIANBOGooAgBFDQAgAygCNCIBRQ0AIAEQ6wELIANBwANqJAAPCyADQZgCaiADQdgCaikDADcDACADQZACaiADQdACaikDADcDACADQYgCaiADQcgCaikDADcDACADIANBwAJqKQMANwOAAkHIjMAAQSsgA0GAAmpB9IzAAEHYg8AAEK8CAAtB8IXAAEE3IANBuANqQbiMwABB9IbAABCvAgAL+RwCFH8EfiMAQZADayICJAAQ8AEgAkHwAGogABCzASACQYABaiABELMBIAJBqAJqIAIoAnAiDSACKAJ4EBUCQAJAAkACQAJAAkACQAJAAkAgAikDqAJCAVIEQCACQagBaiACQbgCaiISKQMANwMAIAJBmAFqIAJB0AJqKQMANwMAIAIgAikDsAI3A6ABIAIgAkHIAmoiEykDADcDkAEgAkHAAmoiFCgCACEKIAJBxAJqKAIAIQ8gAkHYAmooAgAhDiACQdwCaigCACEQIAJB4AJqKQMAIRYgAkGYAmoiASACKAKAASIAIAIoAogBELwBIAJBMGogARDDASACLQAwQQFxRQRAQQQhAQwHCyACLQAxQfsARwRAQQ4hAQwHCyACQZgCaiIBEL0BIAJBKGogARC7ASACLQAsIQUgAkEgaiACKAIoIgQQwwFBAiEBIAItACBBAXFFDQIgAkHgAWpBBHIhCyACQegBaiERIAJBwAFqQQRyIQwgAi0AISEGIAVBAXEhBQNAAkACQAJAAkACQAJAAkAgBkH/AXEiB0EsRwRAIAdB/QBGDQIgBUH/AXENAUEJIQEMCwsgBUH/AXEEQEEQIQEMCwsgBBC9ASACQRhqIAQQwwEgAi0AGEEBcUUNCSACLQAZIQYLIAZB/wFxIgZBIkcEQEEQIQEgBkH9AEcNCkETIQEMCgsgAkEQaiAEEMMBIAItABBBAXFFDQggAi0AEUEiRwRAQQ4hAQwKCyAEEL0BIAJB4AFqIAQQwgEgAigC8AEhByACKALsASEGIAIoAugBIQUgAigC5AEhAyACKALgAUEBRgRAIAMhAQwKCwJAIANFBEAgBkEIRw0DIAUpAABC9srJy+as2rLyAFIhAwwBC0EBIQMgB0EIRgRAIAUpAABC9srJy+as2rLyAFIhAwsgBkUgBUVyDQAgBRDrAQsgAw0BIAlFDQIgAkE4akEEckGMk8AAQQgQFyAIRQ0MDAsLIAkNAiACQeABakEEckGMk8AAQQgQFiACQcQAaiACQewBaikCADcCACACIAIpAuQBNwI8DAsLIAJB4AFqIAQQwQECQCACKALgASIDQRVHBEAgDCALKQIANwIAIAxBCGogC0EIaigCADYCACACIAM2AsABDAELIAJBwAFqIAQQGCACKALAAUEVRg0ECyACQcQAaiACQcgBaikDADcCACACIAIpA8ABNwI8DAgLIAJBwAFqIAQQwQECQCACKALAASIDQRVHBEAgESAMKQIANwIAIBFBCGogDEEIaigCADYCACACIAM2AuQBDAELIAJB4AFqIAQQGSACKALgAUEBRw0CCyACQcQAaiALQQhqKQIANwIAIAIgCykCADcCPAwJCyACQeABaiACQZgCahDAASACKALgASIBQRVHBEAgAkHsAWooAgAhBiACQegBaigCACEFIAIoAuQBIQcgCEUNCiAJEOsBDAoLIAJB4AFqIAJBmAJqEL4BIAIoAuABIgFBFUcEQCACQewBaigCACEGIAJB6AFqKAIAIQUgAigC5AEhByAIRQ0KIAkQ6wEMCgsgAkG4AWoiAyAVNgIAIAIgCDYCsAIgAiAJNgKsAiACIAIpAqwCNwOwASACQfQCakHkgMAANgIAIAJB7AJqQbSAwAA2AgAgAkHkAmpBnIDAADYCACACQbACaiACQagBaikDADcDACACQbwCaiAPNgIAIAJBwAJqIAIpA5ABNwMAIAJByAJqIAJBmAFqKQMANwMAIAJB2AJqIBY3AwAgAkHUAmogEDYCACACQfACaiACQYgDaiIBNgIAIAJB6AJqIAE2AgAgAiACKQOgATcDqAIgAiAKNgK4AiACIA42AtACIAIgATYC4AIgAkGAA2ogAygCADYCACACIAIpA7ABNwP4AiACQeABaiEDIAJBqAJqIQUgAkH4AmohBiMAQYABayIBJAAgAUHYAGogAkHgAmoiBCgCACILQfOOwABBBiAEKAIEIgwoAgwRBgACQAJAAkACQAJAIAEoAlgiB0UEQEEFQQEQSyIERQ0BIARBBGpBmI/AAC0AADoAACAEQZSPwAAoAAA2AAAgA0EQakKFgICA0AA3AwAgA0EMaiAENgIAIANBCGpBBzYCACADQQE2AgAMBAsgASgCXCEJIAFB2ABqIAcgAUHgAGoiCCgCABAfAkACQCABKAJYQQFHBEAgAUHQAGogAUH8AGooAgAiCDYCACABQRBqIAFB5ABqIgopAgA3AwAgAUEYaiABQewAaikCADcDACABQSBqIAFB9ABqKQIANwMAIAFBKGogCDYCACABIAEpAlw3AwggAUHYAGogBCgCCCAGKAIAIgggBkEIaigCACAEQQxqKAIAKAIMEQYAIAEoAlhBAUYNASABQThqIgQgCigCADYCACABIAEpAlw3AzACQCABKAIMRQ0AIAEoAggiCkUNACAKEOsBCyABQRBqIAQoAgA2AgAgASABKQMwNwMIIAFB2ABqIAFBCGoQJiABKAJYQQFGDQIgAUHgAGooAgAgC0HzjsAAQQYgASgCXCIEIAFB5ABqKAIAIAwoAhARBwBFIARFckUEQCAEEOsBCyADQQA2AgAgA0EoakEANgIAIANBIGpCADcCACADQRxqQYSNwAAoAgAiBDYCACADQRRqQgA3AgAgA0EQaiAENgIAIANBCGpCADcCACADQYyNwAAoAgA2AgQCQCABKAIMRQ0AIAEoAggiBEUNACAEEOsBCwJAIAFBGGooAgBFDQAgASgCFCIERQ0AIAQQ6wELAkAgAUEkaigCAEUNACABKAIgIgRFDQAgBBDrAQsgCQRAIAcQ6wELIAZBBGooAgBFIAhFckUEQCAIEOsBCwJAIAVBFGooAgBFDQAgBUEQaigCACIGRQ0AIAYQ6wELIAVBLGooAgBFDQcgBUEoaigCACIFRQ0HIAUQ6wEMBwsgAUHMAGogAUH4AGopAwAiFjcCACABQcQAaiABQfAAaikDACIXNwIAIAFBPGogAUHoAGopAwAiGDcCACABIAgpAwAiGTcCNCADQSBqIBY3AgAgA0EYaiAXNwIAIANBEGogGDcCACADQQhqIBk3AgAgA0EBNgIADAQLIAFBzABqIAFB+ABqKQMAIhY3AgAgAUHEAGogAUHwAGopAwAiFzcCACABQTxqIAFB6ABqKQMAIhg3AgAgASABQeAAaikDACIZNwI0IANBIGogFjcCACADQRhqIBc3AgAgA0EQaiAYNwIAIANBCGogGTcCAAwCCyABQThqIAFB8ABqKQMAIhY3AwAgAUFAayABQfgAaikDACIXNwMAIAEgAUHoAGopAwAiGDcDMCABQeAAaikDACEZIANBIGogFzcCACADQRhqIBY3AgAgA0EQaiAYNwIAIANBCGogGTcDAAwBC0EFQQEQkgIACyADQQE2AgACQCABKAIMRQ0AIAEoAggiBEUNACAEEOsBCwJAIAFBGGooAgBFDQAgASgCFCIERQ0AIAQQ6wELIAFBJGooAgBFDQAgASgCICIERQ0AIAQQ6wELIAlFDQAgBxDrAQsCQCAGQQRqKAIARQ0AIAYoAgAiBkUNACAGEOsBCwJAIAVBFGooAgBFDQAgBUEQaigCACIGRQ0AIAYQ6wELIAVBLGooAgBFDQAgBUEoaigCACIFRQ0AIAUQ6wELIAFBgAFqJAAgAkE4aiADEDcgAigChAFFIABFckUEQCAAEOsBCyACKAJ0RSANRXINCyANEOsBDAsLIAIoAuwBIRUgAigC6AEhCCACKALkASEJCyACQQhqIAQQwwFBACEFIAItAAkhBiACLQAIQQFxDQALDAILIAJB2AFqIAJByAJqKQMANwMAIAJB0AFqIAJBwAJqKQMANwMAIAJByAFqIAJBuAJqKQMANwMAIAIgAikDsAI3A8ABIAJCADcCnAIgAkGUjcAAKAIANgKYAiACQeABaiIAIAJBmAJqQdiFwAAQwAIgAkHAAWogABCxAUUEQCACQcQAaiACQaACaigCADYCACACIAIpA5gCNwI8IAJBATYCOCACQcABahAoIAIoAoABIQAMBwsMCAtBBCEBCyACQcgAaiAHNgIAIAJBxABqIAY2AgAgAkFAayAFNgIAIAIgATYCPAsgCUUgCEVyDQELIAkQ6wELIAJByABqKAIAIQYgAkHEAGooAgAhBSACQUBrKAIAIQcgAigCPCEBCyACQewBaiAGNgIAIAJB6AFqIAU2AgAgAiAHNgLkASACIAE2AuABIAJBsAJqQZyKwABBGSACQeABaiIBEBwgAkHYAWogEykDADcDACACQdABaiAUKQMANwMAIAJByAFqIBIpAwA3AwAgAiACKQOwAjcDwAEgAkIANwKcAiACQZSNwAAoAgA2ApgCIAEgAkGYAmpB2IXAABDAAiACQcABaiABELEBDQIgAkHEAGogAkGgAmooAgA2AgAgAiACKQOYAjcCPCACQQE2AjggAkHAAWoQKCAPRSAKRXJFBEAgChDrAQsgEEUgDkVyDQAgDhDrAQsgAigChAFFIABFckUEQCAAEOsBCyACKAJ0RSANRXINACANEOsBCyACQagCaiACQThqECAgAigCqAJBAUcEQCACQegBaiACQbQCaigCACIANgIAIAIgAikCrAIiFjcD4AEgAkGwAmogADYCACACIBY3A6gCIAJBqAJqELIBAkAgAigCOEUEQCACQThqQQRyEDEMAQsgAkFAaygCAEUNACACKAI8IgFFDQAgARDrAQsgAkGQA2okAA8LIAJB+AFqIAJByAJqKQMANwMAIAJB8AFqIAJBwAJqKQMANwMAIAJB6AFqIAJBuAJqKQMANwMAIAIgAkGwAmopAwA3A+ABQciMwABBKyACQeABakH0jMAAQciDwAAQrwIAC0HwhcAAQTcgAkGIA2pBuIzAAEH0hsAAEK8CAAvwGwIXfwF+IwBB0AJrIgIkABDwASACQfgAaiAAELMBIAJBiAFqIAEQswEgAkGYAWogAigCeCIPIAIoAoABEBUCQAJAAkACQAJAAkACQAJAAkACQCACKQOYAUIBUgRAIAJBzAFqKAIAIRMgAkHIAWooAgAhECACQbQBaigCACEUIAJBsAFqIhcoAgAhESACQfABaiIBIAIoAogBIgAgAigCkAEQvAEgAkE4aiABEMMBQQQhASACLQA4QQFxRQ0HIAItADkiBEH7AEcEQCAEQSJHBEBBCiEBDAkLIAJBQGsgAkHwAWoQRSACKAJAIgFBFUcNAgwHCyACQfABaiINEL0BIAJBQGsgDRBFIAIoAkAiA0EVRgRAIAJBQGsgDRDBASACKAJAIgNBFUcEQCACQcwAaigCACEHIAJByABqKAIAIQYgAigCRCEEIAMhAQwJCyACQTBqIA0QwwEgAi0AMEEBcUUNCCACLQAxQfsARw0HIA0QvQEgAkEoaiANELsBIAIoAighCSACIAItACxBAXEiCDoAlAIgAiAJNgKQAiACQSBqIAkQwwFBAiEBIAItACBBAXFFDQYgAkGgAmpBBHIhEiACQUBrQQRyIRUgAkHIAGohFiACLQAhIQQgCCEGA0ACQAJAAkACQAJAAkACQAJAAkACQAJAAkAgBEH/AXEiB0EsRwRAIAdB/QBGDQMgCA0BQQkhASAFRQ0UDBMLIAZB/wFxDQAgCRC9ASACQRhqIAkQwwEgAi0AGEEBcUUNESACLQAZIQQMAQtBACEIIAJBADoAlAILIARB/wFxIgRBIkcEQEEQIQEgBEH9AEcND0ETIQEMDwsgAkEIaiAJEMMBIAItAAhBAXFFDQ8gAi0ACUEiRwRAQQ4hASAFRQ0SDBELIAkQvQEgAkFAayAJEMIBIAIoAlAhByACKAJMIQYgAigCSCEEIAIoAkQhAyACKAJAQQFGBEAgAyEBIAVFDRIMEQsgA0UEQCAGQQZrDgQECQkCCQtBAiEDAkACQAJAIAdBBmsOBAECAgACC0F+QQAgBEG0k8AAQQkQ4AIbIQMMAQtBfkEBIARB/YDAAEEGEOACGyEDCyAGRSAERXJFBEAgBBDrAQsgA0EedEEedUEASA0IIANBA3FBAWsNAgwECyAKBEAgBQ0HIAJBQGtBBHJB/YDAAEEGEBYgAkHQAGooAgAhByACQcwAaigCACEGIAJByABqKAIAIQQgAigCRCEBIA5FDRMgChDrAQwTCyACQUBrQQRyQbSTwABBCRAWIAJB0ABqKAIAIQcgAkHMAGooAgAhBiACQcgAaigCACEEIAIoAkQhAUEAIQogBUUNEAwPCyAEQbSTwABBCRDgAg0GCyAKRQ0CIAJBQGtBtJPAAEEJEBcgAkHMAGooAgAhByACQcgAaigCACEGIAIoAkQhBCACKAJAIQEgBUUNDgwNCyAEQf2AwABBBhDgAg0ECyAFRQRAIAJBQGsgAkGQAmoQHiACKAJAQQFGDQIgAigCTCELIAIoAkghDCACKAJEIQUMBQsgAkFAa0H9gMAAQQYQFyACQcwAaigCACEHIAJByABqKAIAIQYgAigCRCEEIAIoAkAhAQwLCyACQaACaiAJEMEBAkAgAigCoAIiA0EVRwRAIBYgEikCADcCACAWQQhqIBJBCGooAgA2AgAMAQsgAkFAayAJEBkgAigCQEEBRwRAIAIoAkwhGCACKAJIIQ4gAigCRCEKDAULIAIoAkQhAwsgAkHQAGooAgAhByACKAJMIQYgAigCSCEEQQAhCiAFRQRAIAMhAQwMCyADIQEMCgsgAkHQAGooAgAhByACKAJMIQYgAigCSCEEIAIoAkQhAQwKCyACQUBrIA0QwAEgAigCQCIBQRVHBEAgAkHMAGooAgAhByACQcgAaigCACEGIAIoAkQhBCAOBEAgChDrAQsgCwRAIAtBBXQhCCAFQRRqIQMDQAJAIAMoAgBFDQAgA0EEaygCACIJRQ0AIAkQ6wELIANBIGohAyAIQSBrIggNAAsLIAxFIAxBBXRFcg0MIAUQ6wEMDAsgAkEQaiANEMMBAkAgAi0AEEEBcQRAIAItABFB/QBGDQEgDgRAIAoQ6wELIAsEQCALQQV0IQQgBUEUaiEBA0ACQCABKAIAIgZFDQAgAUEEaygCACIHRQ0AIAcQ6wELIAFBIGohASAEQSBrIgQNAAsLQQshASAMRQ0NIAxBBXQiBEUNDSAFEOsBDA0LIA4EQCAKEOsBCyALBEAgC0EFdCEEIAVBFGohAQNAAkAgASgCACIGRQ0AIAFBBGsoAgAiB0UNACAHEOsBCyABQSBqIQEgBEEgayIEDQALC0EEIQEgDEUNDCAMQQV0IgRFDQwgBRDrAQwMCyANEL0BIAJBQGsgAkHwAWoQvgEgAigCQCIBQRVHBEAgAkHMAGooAgAhByACQcgAaigCACEGIAIoAkQhBCAOBEAgChDrAQsgCwRAIAtBBXQhCCAFQRRqIQMDQAJAIAMoAgBFDQAgA0EEaygCACIJRQ0AIAkQ6wELIANBIGohAyAIQSBrIggNAAsLIAxFIAxBBXRFcg0MIAUQ6wEMDAsgAkGoAWogBTYCACACQaQBaiIDIBg2AgAgAkGwAWogCzYCACACQawBaiIBIAw2AgAgAkHgAWoiBiADKQIANwMAIAJB6AFqIgggASkCADcDACACIA42AqABIAIgCjYCnAEgAiACKQKcATcD2AEgAkGwAmogCCkDADcDACACQagCaiAGKQMANwMAIAIgAikD2AE3A6ACIAJB3ABqQgA3AgAgAkHYAGoiBEGEjcAAKAIAIgg2AgAgAkHQAGoiBUIANwMAIAJBADYCZCACIAg2AkwgAkIANwJEIAJBjI3AACgCADYCQCACQUBrQQAQOyACQcgAaiIIIAgoAgAiB0EBajYCACABIAUpAwA3AgAgAkG0AWogBCkDADcCACACQbwBaiACQeAAaikDADcCACACQcQBaiACQegAaikDADcCACACKAJAIAdB6ABsaiIBQgA3AwAgAUEDOgBgIAFCADcDUCABQQhqQgA3AwAgAUEQaiACKQPYATcCACABQRhqIAYoAgA2AgAgAUEcaiACKQKsAjcCACABQSRqIAJBtAJqKAIANgIAIAMgCCkDADcCACACIAIpA0A3ApwBIAJBADYCmAEgFEUgEUVyRQRAIBEQ6wELIBNFIBBFckUEQCAQEOsBCyACQUBrIAJBmAFqEDcgAigCjAFFIABFckUEQCAAEOsBCyACKAJ8RSAPRXINDSAPEOsBDA0LIAJBQGsgCRDBAQJAIAIoAkAiA0EVRwRAIBIgFSkCADcCACASQQhqIBVBCGooAgA2AgAMAQsgAkGgAmogCRAYIAIoAqACIgNBFUYNAQsgAkGsAmooAgAhByACQagCaigCACEGIAIoAqQCIQQgBUUEQCADIQEMCQsgAyEBDAcLIAIgCRDDAUEAIQYgAi0AASEEIAItAABBAXENAAsMAwsgAkHMAGooAgAhByACQcgAaigCACEGIAIoAkQhBCADIQEMBwsgAkGIAmogAkG4AWopAwA3AwAgAkGAAmogAkGwAWopAwA3AwAgAkH4AWogAkGoAWopAwA3AwAgAiACKQOgATcD8AEgAkIANwLcASACQZSNwAAoAgA2AtgBIAJBoAJqIgAgAkHYAWpB2IXAABDAAiACQfABaiAAELEBRQRAIAJBzABqIAJB4AFqKAIANgIAIAIgAikD2AE3AkQgAkEBNgJAIAJB8AFqECggAigCiAEhAAwICwwJCyACQcwAaigCACEHIAJByABqKAIAIQYgAigCRCEEDAULIAVFDQIMAQtBBCEBIAVFDQELIAsEQCALQQV0IQggBUEUaiEDA0ACQCADKAIARQ0AIANBBGsoAgAiCUUNACAJEOsBCyADQSBqIQMgCEEgayIIDQALCyAMRSAMQQV0RXINACAFEOsBCyAKRSAORXINASAKEOsBDAELQQ4hAQsgAkHMAGoiAyAHNgIAIAJByABqIAY2AgAgAiAENgJEIAIgATYCQCACQaABakGGisAAQRYgAkFAaxAcIAJBiAJqIAJBuAFqKQMANwMAIAJBgAJqIBcpAwA3AwAgAkH4AWogAkGoAWopAwA3AwAgAiACKQOgATcD8AEgAkIANwKUAiACQZSNwAAoAgA2ApACIAJBoAJqIgEgAkGQAmpB2IXAABDAAiACQfABaiABELEBDQIgAyACQZgCaigCADYCACACIAIpA5ACNwJEIAJBATYCQCACQfABahAoIBRFIBFFckUEQCAREOsBCyATRSAQRXINACAQEOsBCyACKAKMAUUgAEVyRQRAIAAQ6wELIAIoAnxFIA9Fcg0AIA8Q6wELIAJBmAFqIAJBQGsQICACKAKYAUEBRwRAIAJBqAJqIAJBpAFqKAIAIgA2AgAgAiACKQKcASIZNwOgAiACQaABaiAANgIAIAIgGTcDmAEgAkGYAWoQsgECQCACKAJARQRAIAJBQGtBBHIQMQwBCyACQcgAaigCAEUNACACKAJEIgFFDQAgARDrAQsgAkHQAmokAA8LIAJBuAJqIAJBuAFqKQMANwMAIAJBsAJqIAJBsAFqKQMANwMAIAJBqAJqIAJBqAFqKQMANwMAIAIgAkGgAWopAwA3A6ACQciMwABBKyACQaACakH0jMAAQeiDwAAQrwIAC0HwhcAAQTcgAkHIAmpBuIzAAEH0hsAAEK8CAAvqwQECHX8EfiMAQZAHayIDJAAQ8AEgA0G4BGogABCzASADQcgEaiABELMBIANB2ARqIAIQswEgA0GYBmogAygCuAQiGiADKALABBAVAkACQAJAAkAgA0HEBWoCfwJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQCADKQOYBkIBUgRAIANBgAVqIANBqAZqIgApAwA3AwAgA0HwBGogA0HABmopAwA3AwAgAyADKQOgBjcD+AQgAyADQbgGaiICKQMANwPoBCADQbAGaiIBKAIAIQkgA0G0BmooAgAhFSADQcgGaigCACEMIANBzAZqKAIAIREgA0HQBmopAwAhICADQZgGaiADKALIBCIdIAMoAtAEEB0gAygCmAZBAUYNAiABKAIAIQ4gA0GsBmooAgAhDyAAKAIAIRAgA0GkBmooAgAhFCADKAKgBiESIAMoApwGIRMgA0HwBWoiACADKALYBCIeIAMoAuAEELwBIANB+ANqIAAQwwFBACECIAMtAPgDQQFxDQFBBCEADBULIANBsAVqIANBuAZqKQMANwMAIANBqAVqIANBsAZqKQMANwMAIANBoAVqIANBqAZqKQMANwMAIAMgAykDoAY3A5gFIANCADcChAYgA0GUjcAAKAIANgKABiADQbgFaiIAIANBgAZqQdiFwAAQwAIgA0GYBWogABCxAQ0ZIANBjARqIANBiAZqKAIANgIAIAMgAykDgAY3AoQEIANBATYCgAQgA0GYBWoQKAwXCyADLQD5AyIAQfsARwRAIABBIkcEQEEKIQAMFQsgA0G4BWogA0HwBWoQQyADLQC4BUEBRg0CQQ4hAAwUCyADQfAFaiIEEL0BIANBuAVqIAQQQwJAAn8gAy0AuAVBAUcEQCADLQC5BSEBIANBuAVqIAQQwQEgAygCuAUiAEEVRwRAIANBwAVqKQMAISAgAygCvAUMAgsgAUEBaw4IDAsKCQgHBgUCCyADKAK8BSIAQQh2IQIgA0HEBWopAgAhICADQcAFaigCAAshASADICA3AoQGIAMgATYCgAYMFAsgA0EwaiAEEMMBIAMtADBBAXFFDREgAy0AMUH7AEcNECAEEL0BIANBKGogBBC7ASADLQAsIQggA0EgaiADKAIoIgEQwwEgAy0AIEEBcUUNDyADQYAEakEEciEHIANBuAVqQQRyIQsgAy0AISEAIAhBAXEhCANAAkACQAJAIABB/wFxIgZBLEcEQCAGQf0ARg0CIAhB/wFxDQFBCSEADBcLIAhB/wFxBEBBECEADBcLIAEQvQEgA0EYaiABEMMBIAMtABhBAXFFDRUgAy0AGSEACyAAQf8BcSINQSJHBEBBECEAIA1B/QBHDRZBEyEADBYLIANBCGogARDDASADLQAIQQFxRQ0UIAMtAAlBIkcNEyABEL0BIANBuAVqIAEQwgEgAygCxAUhCCADKALABSEGIAMoArwFIQAgAygCuAVBAUcEQCAGRSAARSAIRXJyDQIgBhDrAQwCCyAAQRVGDQEgAygCyAUhAgwVCyADQbgFaiAEEMABIAMoArgFIgBBFUcEQCADQcQFaigCACECIANBwAVqKAIAIQggAygCvAUhBgwVCyADQRBqIAQQwwEgAy0AEEEBcUUEQEEEIQAMFgtBCyEAIAMtABFB/QBHDRUgBBC9AUEAIQAMDAsgA0G4BWogARDBASADKAK4BSIAQRVHBEAgByALKQIANwIAIAdBCGogC0EIaigCADYCAAwQCyADQYAEaiABEBggAygCgAQiAEEVRw0PIAMgARDDAUEAIQggAy0AASEAIAMtAABBAXENAAsMDwsgA0GwBWogAikDADcDACADQagFaiABKQMANwMAIANBoAVqIAApAwA3AwAgAyADKQOgBjcDmAUgA0IANwKEBiADQZSNwAAoAgA2AoAGIANBuAVqIgAgA0GABmpB2IXAABDAAiADQZgFaiAAELEBRQRAIANBjARqIANBiAZqKAIANgIAIAMgAykDgAY3AoQEIANBATYCgAQgA0GYBWoQKAwVCwwXCyADIANBxAVqKQIANwKEBiADIANBwAVqKAIANgKABiADLwC9BSADLQC/BUEQdHIhAiADLQC8BSEADBELIANB8ANqIAQQwwECQAJAIAMtAPADQQFxRQ0AAkAgAy0A8QNB+wBHDQAgBBC9ASADQegDaiAEELsBIAMtAOwDIQggA0HgA2ogAygC6AMiARDDAQJAIAMtAOADQQFxRQ0AIANBgARqQQRyIQcgA0G4BWpBBHIhCyADLQDhAyEAIAhBAXEhCANAAkACQAJAIABB/wFxIgZBLEcEQCAGQf0ARg0CIAhB/wFxDQFBCSEADAgLIAhB/wFxBEBBECEADAgLIAEQvQEgA0HYA2ogARDDASADLQDYA0EBcUUNBiADLQDZAyEACyAAQf8BcSINQSJHBEBBECEAIA1B/QBHDQdBEyEADAcLIANByANqIAEQwwEgAy0AyANBAXFFDQUgAy0AyQNBIkcNBCABEL0BIANBuAVqIAEQwgEgAygCxAUhCCADKALABSEGIAMoArwFIQAgAygCuAVBAUcEQCAGRSAARSAIRXJyDQIgBhDrAQwCCyAAQRVGDQEgAygCyAUhAgwGCyADQbgFaiAEEMABIAMoArgFIgBBFUcEQCADQcQFaigCACECIANBwAVqKAIAIQggAygCvAUhBgwGCyADQdADaiAEEMMBIAMtANADQQFxRQRAQQQhAAwXC0ELIQAgAy0A0QNB/QBHDRYgBBC9AUEIIQAMDQsgA0G4BWogARDBAQJAIAMoArgFIgBBFUcEQCAHIAspAgA3AgAgB0EIaiALQQhqKAIANgIADAELIANBgARqIAEQGCADKAKABCIAQRVHDQAgA0HAA2ogARDDAUEAIQggAy0AwQMhACADLQDAA0EBcUUNAgwBCwsgA0GMBGooAgAhAiADQYgEaigCACEIIAMoAoQEIQYMAwtBAiEADAILQQ4hAAwBC0EEIQALIAMgAjYCiAYgAyAINgKEBiADIAY2AoAGIABBCHYhAgwQCyADQbgDaiAEEMMBAkACQCADLQC4A0EBcUUNAAJAIAMtALkDQfsARw0AIAQQvQEgA0GwA2ogBBC7ASADLQC0AyEIIANBqANqIAMoArADIgEQwwECQCADLQCoA0EBcUUNACADQYAEakEEciEHIANBuAVqQQRyIQsgAy0AqQMhACAIQQFxIQgDQAJAAkACQCAAQf8BcSIGQSxHBEAgBkH9AEYNAiAIQf8BcQ0BQQkhAAwICyAIQf8BcQRAQRAhAAwICyABEL0BIANBoANqIAEQwwEgAy0AoANBAXFFDQYgAy0AoQMhAAsgAEH/AXEiDUEiRwRAQRAhACANQf0ARw0HQRMhAAwHCyADQZADaiABEMMBIAMtAJADQQFxRQ0FIAMtAJEDQSJHDQQgARC9ASADQbgFaiABEMIBIAMoAsQFIQggAygCwAUhBiADKAK8BSEAIAMoArgFQQFHBEAgBkUgAEUgCEVycg0CIAYQ6wEMAgsgAEEVRg0BIAMoAsgFIQIMBgsgA0G4BWogBBDAASADKAK4BSIAQRVHBEAgA0HEBWooAgAhAiADQcAFaigCACEIIAMoArwFIQYMBgsgA0GYA2ogBBDDASADLQCYA0EBcUUEQEEEIQAMFgtBCyEAIAMtAJkDQf0ARw0VIAQQvQFBByEADAwLIANBuAVqIAEQwQECQCADKAK4BSIAQRVHBEAgByALKQIANwIAIAdBCGogC0EIaigCADYCAAwBCyADQYAEaiABEBggAygCgAQiAEEVRw0AIANBiANqIAEQwwFBACEIIAMtAIkDIQAgAy0AiANBAXFFDQIMAQsLIANBjARqKAIAIQIgA0GIBGooAgAhCCADKAKEBCEGDAMLQQIhAAwCC0EOIQAMAQtBBCEACyADIAI2AogGIAMgCDYChAYgAyAGNgKABiAAQQh2IQIMDwsgA0GAA2ogBBDDAQJAIAMtAIADQQFxRQRAQQQhAAwBCyADLQCBA0H7AEcEQEEOIQAMAQsgBBC9ASADQfgCaiAEELsBIAMoAvgCIQsgAyADLQD8AkEBcSIGOgCUBiADIAs2ApAGIANB8AJqIAsQwwFBAiECAkACQCADLQDwAkEBcUUNACADQZgFakEEciENIANBuAVqQQRyIRYgAy0A8QIhACAGIQECQANAAkACQAJAAkACQAJAAkACQCAAQf8BcSIIQSxHBEAgCEH9AEYNAyAGQf8BcQ0BQQkhAgwLCyABQf8BcQ0AIAsQvQEgA0HoAmogCxDDASADLQDoAkEBcUUNCSADLQDpAiEADAELQQAhBiADQQA6AJQGCyAAQf8BcSIHQSJHBEBBECECIAdB/QBHDQlBEyECDAkLIANB2AJqIAsQwwEgAy0A2AJBAXFFDQcgAy0A2QJBIkcEQEEOIQIMCQsgCxC9ASADQbgFaiALEMIBIAMoAsgFIQggAygCxAUhACADKALABSEBIAMoArwFIQcgAygCuAVBAUYEQCAHIQIMCQsCQCAHRQRAIABBBUcNAyABQfmTwABBBRDgAkEARyEHDAELQQEhByAIQQVGBEAgAUH5k8AAQQUQ4AJBAEchBwsgAEUgAUVyDQAgARDrAQsgBw0BIAUNAyADQbgFaiADQZAGahAbIAMoArgFQQFGDQIgAygCvAUhCkEBIQUMBQsgBQ0DIANBuAVqQQRyQfmTwABBBRAWIANBjARqIANBxAVqKQIANwIAIAMgAykCvAU3AoQEDAgLIANBuAVqIAsQwQECQCADKAK4BSIAQRVHBEAgDSAWKQIANwIAIA1BCGogFkEIaigCADYCACADIAA2ApgFDAELIANBmAVqIAsQGCADKAKYBUEVRg0ECyADQYwEaiADQaAFaikDADcCACADIAMpA5gFNwKEBAwHCyADQYwEaiADQcQFaikCADcCACADIAMpArwFNwKEBAwGCyADQYAEakEEckH5k8AAQQUQFwwFCyADQbgFaiAEEMABIAMoArgFIgBBFUcEQCADQcQFaigCACECIAMpArwFISAMBgsgA0HgAmogBBDDAUEAIQIgAy0A4AJBAXFFBEBBBCEADBULQQshACADLQDhAkH9AEcNFCAEEL0BIAMgCjYCgAZBBiEADAsLIANB0AJqIAsQwwFBACEBIAMtANECIQAgAy0A0AJBAXENAAsMAQtBBCECCyADQZAEaiAINgIAIANBjARqIAA2AgAgA0GIBGogATYCACADIAI2AoQECyADQYgEaikDACEgIANBkARqKAIAIQIgAygChAQhAAsgAyACNgKIBiADICA3A4AGIABBCHYhAgwOCyADQcgCaiAEEMMBAkAgAy0AyAJBAXFFBEBBBCEADAELAkAgAy0AyQJB+wBHDQAgBBC9ASADQcACaiAEELsBIAMtAMQCIQggA0G4AmogAygCwAIiARDDAQJAIAMtALgCQQFxRQ0AIANBgARqQQRyIQcgA0G4BWpBBHIhCyADLQC5AiEAIAhBAXEhCAJAA0ACQAJAAkAgAEH/AXEiBkEsRwRAIAZB/QBGDQIgCEH/AXENAUEJIQAMCAsgCEH/AXEEQEEQIQAMCAsgARC9ASADQbACaiABEMMBIAMtALACQQFxRQ0EIAMtALECIQALIABB/wFxIg1BIkcEQEEQIQAgDUH9AEcNB0ETIQAMBwsgA0GgAmogARDDASADLQCgAkEBcUUNAyADLQChAkEiRw0FIAEQvQEgA0G4BWogARDCASADKALEBSEIIAMoAsAFIQYgAygCvAUhACADKAK4BUEBRwRAIAZFIABFIAhFcnINAiAGEOsBDAILIABBFUYNASADKALIBSEC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AkH/AXEiGEEiRwRAQRAhACAYQf0ARw0TQRMhAAwTCyADQUBrIAEQwwEgAy0AQEEBcUUNECADLQBBQSJHBEBBDiEADBMLIAEQvQEgA0G4BWogARDCASADKALIBSEGIAMoAsQFIQggAygCwAUhAiADKAK8BSEAIAMoArgFQQFGDRIgAEUEQCAIQQhrDgICBA0LQQIhAAJAAkACQCAGQQhrDgIAAQILQQBBfiACKQAAQu3Ktfu17Nu59ABRGyEADAELQX5BASACQbeUwABBCRDgAhshAAsgCEUgAkVyRQRAIAIQ6wELIABBHnRBHnVBAEgNDCAAQQNxQQFrDQIMBAsgBUUNByAKQQFGDQYgA0G4BWpBBHJBt5TAAEEJEBYgA0HIBWooAgAhBiADQcQFaigCACEIIANBwAVqKAIADAgLIAIpAABC7cq1+7Xs27n0AFINCgsgBQ0CIANBuAVqIANBmAVqEBsgAygCvAUhCyADKAK4BUEBRg0DQQEhBQwKCyACQbeUwABBCRDgAg0ICwJAIApBAUcEQCADQbgFaiADQZgFahAbIAMoArwFIQ0gAygCuAVBAUYNAUEBIQoMCgsgA0G4BWpBt5TAAEEJEBcMBwsgA0HIBWooAgAhBiADQcQFaigCACEIIANBwAVqKAIAIQIgDSEADA0LIANBuAVqQa+UwABBCBAXDAULIANByAVqKAIAIQYgA0HEBWooAgAhCCADQcAFaigCACECIAshAAwLCyADQbgFaiAEEMABIAMoArgFIgBBFUcEQCADQcQFaigCACEGIANBwAVqKAIAIQggAygCvAUhAgwLCyADQcgAaiAEEMMBQQAhAiADLQBIQQFxDQJBBCEADBALIANBuAVqQQRyQa+UwABBCBAWIANByAVqKAIAIQYgA0HEBWooAgAhCCADQcAFaigCAAshAiADKAK8BSEADAgLQQshACADLQBJQf0ARw0NIAQQvQEgAyANNgKEBiADIAs2AoAGQQEhAAwECyADQcQFaigCACEGIANBwAVqKAIAIQggAygCvAUhAiADKAK4BSEADAYLIANBuAVqIAEQwQECQCADKAK4BSIAQRVHBEAgFiAXKQIANwIAIBZBCGogF0EIaigCADYCAAwBCyADQYAEaiABEBggAygCgAQiAEEVRg0BCyADQYwEaigCACEGIANBiARqKAIAIQggAygChAQhAgwFCyADQThqIAEQwwFBACEAIAMtADkhAiADLQA4QQFxDQALDAILIAM1AoQGISEgAzUCgAYhIiADQbgFaiADQfAFahC+ASADKAK4BSICQRVHBEAgAykCvAUhICADQcQFaigCAAwKCyADICFCIIYgIoQ3A6AGIANBkAVqIgEgA0GkBmooAgA2AgAgAyAANgKcBiADIAMpApwGNwOIBSADQeQGakHkgMAANgIAIANB3AZqQbSAwAA2AgAgA0HUBmpBnIDAADYCACADQaAGaiADQYAFaikDADcDACADQawGaiAVNgIAIANBsAZqIAMpA+gENwMAIANBuAZqIANB8ARqKQMANwMAIANB/AZqIA42AgAgA0H4BmogDzYCACADQfQGaiAQNgIAIANB8AZqIBQ2AgAgA0HsBmogEjYCACADQcgGaiAgNwMAIANBxAZqIBE2AgAgA0HgBmogA0HwBWoiADYCACADQdgGaiAANgIAIAMgAykD+AQ3A5gGIAMgCTYCqAYgAyATNgLoBiADIAw2AsAGIAMgADYC0AYgA0GIB2ogASgCADYCACADIAMpA4gFNwOAByADQbgFaiEKIANB0AZqIQAgA0GYBmohECADQegGaiETIwBBwAJrIgQkAAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQCADQYAHaiIBKAIAQQFrDggBAgMEBQYHCAALIARBGGogAEEQaikCADcDACAEQRBqIABBCGopAgA3AwAgBCAAKQIAIiA3AwggEEEUaigCACEJIBBBLGooAgAhFSAQQTBqKQMAISEgE0EQaigCACECIBNBFGooAgAhBiAQKAIQIQcgECgCKCEFIBMoAgAhASATKAIEIQ4gEygCCCEAIBMoAgwhDSAEQdABaiAgp0HzjsAAQQYgBCgCDCgCDBEGACAEKALQASIPRQRAQQVBARBLIgBFDRkgAEEEakGYj8AALQAAOgAAIABBlI/AACgAADYAACAKQRBqQoWAgIDQADcDACAKQQxqIAA2AgAgCkEIakEHNgIAIApBATYCACAORSABRXJFBEAgARDrAQsgBgRAIAZBBXQhDyANQRRqIQADQAJAIAAoAgBFDQAgAEEEaygCACIBRQ0AIAEQ6wELIABB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QQFqNgIAIAJBAEgNCSABQQRqEG0hAUEkQQQQSyIGRQ0IIAYgCDYCICAGIAA2AhxBACEOIAZBADYCGCAGIBE2AhQgBkEANgIQIAYgCzYCDCAGIAk2AgggBiABNgIEIAYgBzYCACAFQbgBaikDACEgIAUoArQBIQACfyAFQcABaigCAARAIAVBxAFqKAIADAELAn9BsLPBACgCAEUEQEGws8EAQYEgNgIAQYAgDAELQQALCxogAARAIAUgIDcCLCAFIAA2AiggBUGYAWoiByAFQShqIgMQnAFBACEBQQAhCyMAQSBrIg0kACAHKAIAIQICQCAHQQhqKAIAIgBBCE8EQCANQQhqQQAgAiAAELECIA0oAgwhACANKAIIIQsMAQsgAEUEQEEAIQAMAQsCQCACLQAARQ0AQQEhASAAQQFGDQEgAi0AAUUNAEECIQEgAEECRg0BIAItAAJFDQBBAyEBIABBA0YNASACLQADRQ0AQQQhASAAQQRGDQEgAi0ABEUNAEEFIQEgAEEFRg0BIAItAAVFDQBBBiEBIABBBkYNASACLQAGDQELQQEhCyABIQALIAMCfyALRQRAIA1BGGogB0EIaigCADYCACANIAcpAgA3AxAjAEEgayICJAACQAJAAkACQAJAAkAgDUEQaiIBQQRqKAIAIgcgASgCCCIARgRAIABBAWoiByAASQ0EAkAgAARAIAJBGGpBATYCACACIAA2AhQgAiABKAIANgIQDAELIAJBADYCEAsgAiAHQQEgAkEQahA5IAIoAgBBAUYNASACKAIEIQsgAUEEaiACQQhqKAIAIgc2AgAgASALNgIACyAAIAdGBEAgASAAQQEQDyABQQRqKAIAIQcgASgCCCEACyABIABBAWoiCzYCCCABKAIAIgEgAGpBADoAACAHIAtLDQEgASEADAILIAJBCGooAgAiAEUNAiACKAIEIAAQkgIACyALRQRAQQEhACABEOsBDAELIAEgB0EBIAsQTCIARQ0CCyANIAs2AgQgDSAANgIAIAJBIGokAAwCCxCTAgALIAtBARCSAgALIAMgDSkDADcCBEEADAELIAMgADYCBCADQQhqIAcpAgA3AgAgA0EQaiAHQQhqKAIANgIAQQELNgIAIA1BIGokACAFKAIoQQFGDQggBSgCLCEOIAVBMGooAgAhBwsCfyMAQSBrIgAkAEGo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FEEEEJICAAsgBUGgAWogBUE0aikCADcDACAFIAUpAiw3A5gBQYybwABBLyAFQZgBakGcnMAAQbybwAAQrwIAC0EkQQQQkgIACwALQQxBBBCSAgALQRhBBBCSAgALIAcgACABajYCAAsgBSgCmAEhAiAFKAKcASEMIAUoAqABDAILIAcgACABajYCAAsgDSECQQALIQACQCAXDQBBxLPBACgCAEH/////B3FFDQAQ4AENACASQQE6AAELIBJBADoAAAJAAkAgAARAQQxBBBBLIgZFDQEgBiAANgIIIAYgDDYCBCAGIAI2AgAMAgtBACEGIAxBA3RFIAxFIAJFcnINASACEOsBDAELQQxBBBCSAgALIAUoApABIgAgACgCACIAQQFrNgIAIABBAUYEQCAFQZABahBVCyARQQFqIREgBgRAIAYoAgAhASAGKAIIIgAEQCABIABBA3RqIQADQCABKAIAIAFBBGoiAigCACgCABEEACACKAIAIgIoAgQEQCACKAIIGiABKAIAEOsBCyABQQhqIgEgAEcNAAsgBigCACEBCyAGQQRqKAIAIgBFIAFFciAAQQN0RXJFBEAgARDrAQsgBhDrAQsgEUEERw0ACyILIBtHDQALDAQLIAAgAkH0ocAAEJkCAAsgACACQeShwAAQmQIAC0GwncAAQSFB5KHAABCdAgALIAkoAhwiBkUgAEVyDQBBACEBA0BBACECA0AgBUIANwO4ASAFIAE2ArABIAUgAjYCtAEgCSAFQbABaiAFQRhqEFQgACACQQFqIgJHDQALQQAhAgNAIAVCATcDuAEgBSABNgKwASAFIAI2ArQBIAkgBUGwAWogBUEYahBUIAAgAkEBaiICRw0AC0EAIQIDQCAFQgI3A7gBIAUgATYCsAEgBSACNgK0ASAJIAVBsAFqIAVBGGoQVCAAIAJBAWoiAkcNAAtBACECA0AgBUIDNwO4ASAFIAE2ArABIAUgAjYCtAEgCSAFQbABaiAFQRhqEFQgACACQQFqIgJHDQALIAFBAWoiASAGRw0ACwsgCUEkaigCACIBQQFrIgIgAUsNBiACIAUoAiQiB08NAyAJQQxqKAIAIQ0gCUEIaigCACEAIAVBsAFqIAUoAiAiBiACQQp0akGACBDdAhogDUECTwRAIAFBCnQhCCABQQt0IAZqQYAIayEGIAGtISBBASEO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QgA3AoQGIANBlI3AACgCADYCgAYgACADQYAGakHYhcAAEMACIANBmAVqIAAQsQENAyADQYwEaiADQYgGaigCADYCACADIAMpA4AGNwKEBCADQQE2AoAEIANBmAVqECggEkUgE0VyRQRAIBMQ6wELIA4EQCAOQQV0IQEgEEEUaiECA0ACQCACKAIARQ0AIAJBBGsoAgAiAEUNACAAEOsBCyACQSBqIQIgAUEgayIBDQALCyAPRSAPQQV0RXINACAQEOsBCyAVRSAJRXJFBEAgCRDrAQsgEUUgDEVyDQAgDBDrAQsCQCADKALcBEUNACADKALYBCIARQ0AIAAQ6wELAkAgAygCzARFDQAgAygCyAQiAEUNACAAEOsBCyADKAK8BEUgGkVyDQAgGhDrAQsgA0GYBmogA0GABGoQICADKAKYBkEBRwRAIANBwAVqIANBpAZqKAIAIgA2AgAgAyADKQKcBiIgNwO4BSADQaAGaiAANgIAIAMgIDcDmAYgA0GYBmoQsgECQCADKAKABEUEQCADQYAEakEEchAxDAELIANBiARqKAIARQ0AIAMoAoQEIgFFDQAgARDrAQsgA0GQB2okAA8LIANB0AVqIANBuAZqKQMANwMAIANByAVqIANBsAZqKQMANwMAIANBwAVqIANBqAZqKQMANwMAIAMgA0GgBmopAwA3A7gFQciMwABBKyADQbgFakH0jMAAQbiDwAAQrwIAC0HwhcAAQTcgA0HwBWpBuIzAAEH0hsAAEK8CAAvTdwIYfwR+IwBBsARrIgMkABDwASADQfgBaiAAELMBIANBiAJqIAEQswEgA0HwAmogAygC+AEiFCADKAKAAhAVAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQCADKQPwAkIBUgRAIANBsAJqIANBgANqKQMANwMAIANBoAJqIANBmANqKQMANwMAIAMgAykD+AI3A6gCIAMgA0GQA2opAwA3A5gCIANBiANqKAIAIREgA0GMA2ooAgAhDyADQaADaigCACEKIANBpANqKAIAIRIgA0GoA2opAwAhGiADQegBaiIBIAMoAogCIgAgAygCkAIQvAEgA0HgAWogARDDASADLQDgAUEBcUUNEiADLQDhASIBQfsARwRAIAFBIkcEQEEKIQEMFQsgA0HIAmog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QdQAaigCACIKQRh0IApBCHRBgID8B3FyIApBCHZBgP4DcSAKQRh2cnI2AAggByABQdAAaigCACIBQRh0IAFBCHRBgID8B3FyIAFBCHZBgP4DcSABQRh2cnI2AARBIEEBEEsiAUUNByABIAIpA+ABNwAAIAFBGGogDSkDADcAACABQRBqIAkpAwA3AAAgAUEIaiAMKQMANwAAIAVFIAtFckUEQCALEOsBC0EgIQdBICEFIARBAWsiBA0ACyACIAE2AqgCCyACIAU2AqwCIAIgBzYCsAIgEUUEQCACQcADaiACQbACaigCADYCACACIAIpA6gCNwO4AyACQcgCaiACQbgDahCcASACQcQBaiACQdACaigCADYCACACQQA2ArgBIAIgAikDyAI3ArwBIBNFIBJFcg0oIBIQ6wEMKAsgAiAXNgLAAyACIBM2ArwDIAIgEjYCuAMgAkG4AmogAkG4A2oQnAEgAkHABGoiARDIASACQYgCaiABQZeVwABBBxDQASACKAKIAkEBRg0GIAIgAigCjAI2ArgEIAIgAkGQAmotAAA6ALwEIAJBiAJqIAJBuARqQZ6VwABBBSARQQFrEBQgAigCiAJBAUYNByACQYgCaiACQbgEakGjlcAAQQQgBhAUIAIoAogCQQFGBEAgAkH0AGogAkGUAmooAgA2AgAgAiACKQKMAjcCbAwnCyACQegAaiACKAK4BCACLQC8BBDHASACKAJoQQFGDSYgAkHoAWogAkHIBGooAgAiATYCACACQcgAaiACKQO4AjcDACACQdAAaiACQcACaigCADYCACACQdQAaiACKQPABCIaNwIAIAJB3ABqIAE2AgAgAiAaNwPgASACQQA2AkQgAkECNgJAIAJBuANqIAJBQGsQJSACKAK4A0EBRwRAIAJBwANqKAIAIRMgAkG4A2ogFiACKAK8AyIPIAJBxANqIgQoAgAgFSgCDBEGAAJAAkAgAigCuANBAUcEQCACKAK8A0EBRg0CIAJByARqIAJByANqKAIANgIAIAIgAkHAA2opAwA3A8AEIAJBOGogAkHABGoQnwEgAkHoAGoiASACKAI4IAIoAjwQvAEgAkEwaiABEMMBIAItADBBAXENAUEEIQcMJgsgAkHgAmogAkHUA2ooAgA2AgAgAkHYAmogAkHMA2opAgA3AwAgAkHQAmoiASAEKQIANwMAIAIgAikCvAM3A8gCIAJB9AFqQQE2AgAgAkIBNwLkASACQciCwAA2AuABIAJBBDYCbCACIAJB6ABqNgLwASACIAJByAJqNgJoIAJBiAJqIAJB4AFqEJQCIAJBwAFqQQM2AgAgAkHEAWogAikDiAI3AgAgAkHMAWogAkGQAmooAgA2AgAgAkEBNgK4AQJAAkACQAJAIAIoAsgCDgQBAgMrAAsgASgCAEUNKiACKALMAiIBRQ0qIAEQ6wEMKgsCQCABKAIARQ0AIAIoAswCIgFFDQAgARDrAQsgAkHcAmooAgBFDSkgAkHYAmooAgAiAUUNKSABEOsBDCkLAkAgASgCAEUNACACKALMAiIBRQ0AIAEQ6wELIAJB3AJqKAIARQ0oIAJB2AJqKAIAIgFFDSggARDrAQwoCyABKAIARQ0nIAIoAswCIgFFDScgARDrAQwnCyACLQAxQfsARwRAQQ4hBwwlCyACQegAaiIBEL0BIAJBKGogARC7ASACLQAsIQkgAkEgaiACKAIoIgsQwwFBAiEBIAItACBBAXFFBEBBACEEDCELIAJB4AFqQQRyIQcgAkHoAWohECACQcgCakEEciEKIAItACEhDSAJQQFxIQlBACEEAkADQAJAAkACQAJAAkACQCANQf8BcSIMQSxHBEAgDEH9AEYNAiAJQf8BcQ0BQQkhAQwpCyAJQf8BcQRAQRAhAQwpCyALEL0BIAJBGGogCxDDASACLQAYQQFxRQ0nIAItABkhDQsgDUH/AXEiDUEiRwRAQRAhASANQf0ARw0oQRMhAQwoCyACQRBqIAsQwwEgAi0AEEEBcUUNJiACLQARQSJHBEBBDiEBDCgLIAsQvQEgAkHIAmogCxDCASACKALYAiEMIAIoAtQCIQ0gAigC0AIhCSACKALMAiEGIAIoAsgCQQFGBEAgBiEBDCgLAkAgBkUEQCANQQZHDQMgCUHzlcAAQQYQ4AJBAEchBgwBC0EBIQYgDEEGRgRAIAlB85XAAEEGEOACQQBHIQYLIA1FIAlFcg0AIAkQ6wELIAYNASAERQ0CIAJBiAJqQQRyQfOVwABBBhAXIBFFDSoMKQsgBA0FIAJByAJqQQRyQfOVwABBBhAWIAJBlAJqIAJB1AJqKQIANwIAIAIgAikCzAI3AowCDCkLIAJByAJqIAsQwQECQCACKALIAiIGQRVHBEAgByAKKQIANwIAIAdBCGogCkEIaigCADYCACACIAY2AuABDAELIAJB4AFqIAsQGCACKALgAUEVRg0CCyACQZQCaiACQegBaikDADcCACACIAIpA+ABNwKMAgwmCyACQcgCaiALEMEBIAIoAsgCIgRBFUcNECACQQhqIAsQwwEgAi0ACEEBcUUNASACLQAJQSJHDQ4gCxC9ASACQcgCaiALEMIBIAIoAtgCIQkgAigC1AIhBiACKALQAiEEIAIoAswCIQwgAigCyAJBAUYNDwJAIAxFBEAgAkHgAWogBCAGED8MAQsgAkHgAWogBCAJED8gBkUgBEVyDQAgBBDrAQsgAigC4AFBAUYNIiACKALsASESIAIoAugBIREgAigC5AEhBAsgAiALEMMBQQAhCSACLQABIQ0gAi0AAEEBcQ0BDCMLCyACQQQ2AuQBDB8LIAJByAJqIAJB6ABqEMABIAIoAsgCIgdBFUcEQCACQdQCaigCACENIAJB0AJqKAIAIQkgAigCzAIhDCARRQ0lIAQQ6wEMJQsgAkHIAmogAkHoAGoQvgEgAigCyAIiB0EVRg0NIAJB1AJqKAIAIQ0gAkHQAmooAgAhCSACKALMAiEMIBFFDSQgBBDrAQwkCyACQegBaiACQcgDaigCADYCACACIAJBwANqKQMANwPgASACQdwCakEBNgIAIAJCATcCzAIgAkHogsAANgLIAiACQQU2AmwgAiACQegAajYC2AIgAiACQeABajYCaCACQYgCaiACQcgCahCUAiACQcABakEDNgIAIAJBxAFqIAIpA4gCNwIAIAJBzAFqIAJBkAJqKAIANgIAIAJBATYCuAEgAigC5AFFDSUgAigC4AEiAUUNJSABEOsBDCULIAJB4AJqIAJB2ANqKQMANwMAIAJB2AJqIAJB0ANqKQMANwMAIAJB0AJqIAJByANqKQMANwMAIAIgAkHAA2opAwA3A8gCIAJB9AFqQQE2AgAgAkIBNwLkASACQYyDwAA2AuABIAJBAzYCjAIgAiACQYgCajYC8AEgAiACQcgCaiIBNgKIAiACQagEaiACQeABahCUAiABECggAkHAAWpBAzYCACACQcgBaiACKQKsBDcDACACQcQBaiACKAKoBDYCACACQQE2ArgBDCULIAJBuAFqIgEQyAEgAkG4A2ogARDPASACKAK4A0EBRwRAIAIoArwDIQEgAkHAA2otAAAEQCABQQhqKAIAIQUMGAsgASgCCCIEIAFBBGooAgBGBEAgASAEQQEQDyABKAIIIQQLIAEgBEEBaiIFNgIIIAEoAgAgBGpBLDoAAAwXCyACQdQCaiACQbgDakEEciIBQQhqKAIANgIAIAIgASkCADcCzAIMFwsgAkH4AGoiBCABQRBqKQIANwMAIAJB8ABqIAFBCGopAgA3AwAgAiABKQIANwNoIAJBkAJqIAspAgQ3AwAgAkGYAmogC0EMaigCADYCACACQoCAgIAQNwOIAiACQbgDaiAEIAJBiAJqECcgAigCuANBAUYNEiACQegBaiIBIAJBxANqKAIANgIAIAIgAikCvAM3A+ABIAJBiAJqEDIgAkGYAWogASgCACIBNgIAIAJByABqIAE2AgAgAkHIBGogATYCACACIAIpA+ABIho3A0AgAiAaNwPABCACQbgBaiIBEMgBIAJBuANqIAEQzwEgAigCuANBAUcEQCACKAK8AyEBIAJBwANqLQAABEAgAUEIaigCACEFDBALIAEoAggiBCABQQRqKAIARgRAIAEgBEEBEA8gASgCCCEECyABIARBAWoiBTYCCCABKAIAIARqQSw6AAAMDwsgAkHUAmogAkG4A2pBBHIiAUEIaigCADYCACACIAEpAgA3AswCDA8LIAJByAJqIAIoApABIAItAJQBEMYBIAIoAsgCQQFHDQoMCwsgAUEEakGYj8AALQAAOgAAIAFBlI/AACgAADYAAEEHIRFBBSEGCyAIQQE2AgAgCEEkaiANNgIAIAhBIGogCTYCACAIQRxqIAw2AgAgCEEYaiAENgIAIAhBFGogBzYCACAIQRBqIAY2AgAgCEEMaiABNgIAIAhBCGogETYCAAwQC0EgQQEQkgIACyACQfQAaiACQZQCaigCADYCACACIAIpAowCNwJsDB8LIAJB9ABqIAJBlAJqKAIANgIAIAIgAikCjAI3AmwMHgsgAkEONgLkAQwTCyACIAk2AvABIAIgBjYC7AEgAiAENgLoASACIAw2AuQBDBILIBAgCikCADcCACAQQQhqIApBCGooAgA2AgAgAiAENgLkAQwRCyACQcQBaiASNgIAIAJBwAFqIBE2AgAgAiAENgK8AUEADBcLIAJB1AJqIAJBuANqQQRyIgRBCGooAgA2AgAg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AEUNACAOQRBqKAIAIgFFDQAgARDrAQsgDkEsaigCAEUNDCAOQShqKAIAIgFFDQwgARDrAQwMCyACQZQCaiAHQQhqKQIANwIAIAIgBykCADcCjAIMBAtBBCEBCyACQZgCaiAMNgIAIAJBlAJqIA02AgAgAkGQAmogCTYCACACIAE2AowCCyAERSARRXINAQsgBBDrAQsgAkGYAmooAgAhDSACQZQCaigCACEJIAJBkAJqKAIAIQwgAigCjAIhBwsgAkHUAmogDTYCACACQdACaiAJNgIAIAIgDDYCzAIgAiAHNgLIAiACQcABakGSiMAAQR4gAkHIAmoQHEEBCzYCuAEgAigCxARFDQAgAigCwAQiAUUNACABEOsBCyATRSAPRXINACAPEOsBCyACQUBrEDIgBUUNASACKAKoAiIBRQ0BIAEQ6wEMAQsgAkGwBGoiASACQfQAaigCADYCACACIAIpAmw3A6gEAkAgAigCxARFDQAgAigCwAQiBEUNACAEEOsBCyACQZACaiABKAIANgIAIAIgAikDqAQ3A4gCIAJBwANqIgFBsIjAAEEXIAJBiAJqECQgAkHsAWogAkHIA2opAwAiGzcCACACQfQBaiACQdADaikDACIcNwIAIAJB/AFqIAJB2ANqKQMAIh03AgAgAkHAAWogASkDACIaNwMAIAJByAFqIBs3AwAgAkHQAWogHDcDACACQdgBaiAdNwMAIAIgGjcCzAIgAiAaNwLkASACQQE2ArgBAkAgAigCvAJFDQAgAigCuAIiAUUNACABEOsBCyAFRQ0AIAIoAqgCIgFFDQAgARDrAQsgAigCuAFBAUYEQCACQawBaiACQdgBaikDACIaNwIAIAJBpAFqIAJB0AFqKQMAIhs3AgAgAkGcAWogAkHIAWopAwAiHDcCACACIAJBwAFqKQMAIh03ApQBIAhBIGogGjcCACAIQRhqIBs3AgAgCEEQaiAcNwIAIAhBCGogHTcCACAIQQE2AgAgDkEUaigCAEUNASAOQRBqKAIAIgFFDQEgARDrAQwBCyACQZgBaiACQcQBaigCACIBNgIAIAJBiAFqIAE2AgAgAiACKQK8ASIaNwOQASACIBo3A4ABIAJB4AFqIgEQyAEgAkG4A2ogARDPAQJAAkACQAJAIAIoArgDQQFHBEAgAigCvAMhASACQcADai0AAARAIAFBCGooAgAhBQwCCyABKAIIIgQgAUEEaigCAEYEQCABIARBARAPIAEoAgghBAsgASAEQQFqIgU2AgggASgCACAEakEsOgAADAELIAJB1AJqIAJBuANqQQRyIgFBCGooAgA2AgAgAiABKQIANwLMAgwBCyABQQRqIgYoAgAgBUYEQCABIAVBARAPIAFBCGooAgAhBQsgASgCACAFakEiOgAAIAFBCGoiBCAFQQFqIgU2AgAgBigCACAFa0EFTQRAIAEgBUEGEA8gBCgCACEFCyABKAIAIAVqIgZB85XAACgAADYAACAGQQRqQfeVwAAvAAA7AAAgBCAFQQZqIgU2AgAgAUEEaigCACAFa0EBTQRAIAEgBUECEA8gAUEIaigCACEFCyABKAIAIAVqQaL0ADsAACABQQhqIAVBAmo2AgAgAkG4AWogAkGAAWoQngEgAkG4A2ogASACKAK4ASIEIAIoAsABEMsBIAIoArwBRSAERXJFBEAgBBDrAQsgAigCuANBAUYEQCACQdQCaiACQcQDaigCADYCACACIAIpArwDNwLMAgwBC0EAIQUgAkHIAmogAUEAEMYBIAIoAsgCQQFHDQELIAJBkAJqIgEgAkHUAmooAgA2AgAgAiACKQLMAjcDiAICQCACKALkAUUNACACKALgASIERQ0AIAQQ6wELIAJB0AJqIAEoAgA2AgAgAiACKQOIAjcDyAIgAkHAA2oiAUGSiMAAQR4gAkHIAmoQJCAIQSBqIAJB2ANqKQMANwMAIAhBGGogAkHQA2opAwA3AwAgCEEQaiACQcgDaikDADcDACAIQQhqIAEpAwA3AwBBASEFDAELIAJBxANqIAJB6AFqKAIAIgE2AgAgAiACKQPgASIaNwK8AyAIQQxqIAE2AgAgCCAaNwIECyAIIAU2AgACQCACKAKEAUUNACACKAKAASIBRQ0AIAEQ6wELIA5BFGooAgBFDQAgDkEQaigCACIBRQ0AIAEQ6wELIAJB0ARqJAAgA0HYA2ogA0HUAmopAgA3AwAgA0HgA2ogA0HcAmopAgA3AwAgA0HoA2ogA0HkAmopAgA3AwAgA0HwA2ogA0HsAmooAgA2AgAgAyADKQLMAjcD0AMCQAJ/IAMoAsgCQQFHBEAgA0H0AWogA0HIAmpBBHIiAUEIaigCADYCACADQQA2AugBIAMgASkCADcC7AFBAAwBCyADQZAEaiADQewDaikCADcDACADQYgEaiADQeQDaikCADcDACADQYAEaiADQdwDaikCADcDACADIAMpAtQDNwP4AyADQgA3ApwEIANBlI3AACgCADYCmAQgA0HwAmoiASADQZgEakHYhcAAEMACIANB+ANqIAEQsQENASADQfQBaiADQaAEaigCADYCACADIAMpA5gENwLsASADQQE2AugBIANB+ANqEChBAQshASADKAKMAkUgAEVyRQRAIAAQ6wELIAMoAvwBRSAURXINESAUEOsBDBELDBELQQQhBAsgA0HgA2ogBzYCACADQdwDaiABNgIAIANB2ANqIAY2AgAgAyAENgLUAwsgC0UgAkVyDQELIAsQ6wELIANB4ANqKAIAIQggA0HcA2ooAgAhByADQdgDaigCACEGIAMoAtQDIQELIAFBCHYhCSAHrSAIrUIghoQhGgwHC0ELIQEMBgsgA0HcA2ooAgAhCCADQdgDaigCACEFIAMoAtQDIQYMAwtBAiEBDAILQQ4hAQwBC0EEIQELIAFBCHYhCSAFrSAIrUIghoQhGgwBC0EEIQELIAFB/wFxIAlBCHRyIQkLIANB0AJqIBo3AwAgAyAGNgLMAiADIAk2AsgCIANB+AJqQbCIwABBFyADQcgCaiIBEBwgA0HoA2ogA0GQA2opAwA3AwAgA0HgA2ogA0GIA2opAwA3AwAgA0HYA2ogA0GAA2opAwA3AwAgAyADKQP4AjcD0AMgA0IANwL8AyADQZSNwAAoAgA2AvgDIAEgA0H4A2pB2IXAABDAAiADQdADaiABELEBDQIgA0H0AWogA0GABGooAgA2AgAgAyADKQP4AzcC7AEgA0EBNgLoASADQdADahAoIA9FIBFFckUEQCAREOsBCyASRSAKRXINACAKEOsBCyADKAKMAkUgAEVyRQRAIAAQ6wELIAMoAvwBRSAURXJFBEAgFBDrAQtBASEBCyADQfgDahDIASADQegBakEEciEEAkACQAJAIAFFBEAgAygCgAQiACADKAL8A0YEQCADQfgDaiAAQQEQDyADKAKABCEACyADKAL4AyAAakH7ADoAACADIABBAWo2AoAEIANB8AJqIANB+ANqQaGFwABBAhDLASADKALwAkEBRg0BIAMoAoAEIgAgAygC/ANGBEAgA0H4A2ogAEEBEA8gAygCgAQhAAsgAygC+AMgAGpBOjoAACADIABBAWo2AoAEIANB0ANqIAQQngEgA0HwAmogA0H4A2ogAygC0AMiACADKALYAxDLASADKALUA0UgAEVyRQRAIAAQ6wELIAMoAvACQQFHBEAgAygCgAQiASADKAL8A0YEQCADQfgDaiABQQEQDyADKAKABCEBCyADKAL4AyABakH9ADoAACADIAFBAWo2AoAEDAQLIANB1AJqIANB/AJqKAIANgIAIAMgAykC9AI3AswCDAILIANByAJqIANB+ANqIAQQISADKALIAkEBRw0CDAELIANB1AJqIANB/AJqKAIANgIAIAMgAykC9AI3AswCCyADQcACaiIAIANB1AJqKAIANgIAIAMgAykCzAI3A7gCAkAgAygC/ANFDQAgAygC+AMiAUUNACABEOsBCyADQdACaiIBIAAoAgA2AgAgAyADKQO4AjcDyAIgA0H4AmoiAEHhiMAAQdQAIANByAJqIgQQJCADQeACaiADQZADaikDADcDACADQdgCaiADQYgDaikDADcDACABIANBgANqKQMANwMAIAMgACkDADcDyAJByIzAAEErIARB9IzAAEH4g8AAEK8CAAsgA0HYA2ogA0GABGooAgAiADYCACADIAMpA/gDIho3A9ADIANB+AJqIAA2AgAgAyAaNwPwAiADQfACahCyAQJAIANB8AFqKAIARQ0AIAMoAuwBIgFFDQAgARDrAQsgA0GwBGokAA8LQfCFwABBNyADQagEakG4jMAAQfSGwAAQrwIACwkAIAAgARDlAQuKBwEGfwJ/AkACQAJAIAJBCU8EQCADIAIQ5QEiBw0BQQAMBAtBgIB8QQhBCBD5AUEUQQgQ+QFqQRBBCBD5AWprQXdxQQNrIgFBAEEQQQgQ+QFBAnRrIgIgASACSRsgA00NAUEQIANBBGpBEEEIEPkBQQVrIANLG0EIEPkBIQIgABCJAiIBIAEQ/QEiBRCGAiEEAkACQAJAAkACQAJAAkAgARCAAkUEQCACIAVNDQEgBEHstsEAKAIARg0CIARB6LbBACgCAEYNAyAEEP4BDQcgBBD9ASIGIAVqIgggAkkNByAIIAJrIQUgBkGAAkkNBCAEEOgBDAULIAEQ/QEhBCACQYACSQ0GIAQgAmtBgYAISSACQQRqIARNcQ0FIAEoAgAiBSAEakEQaiEGIAJBH2pBgIAEEPkBIQRBACICRQ0GIAIgBWoiASAEIAVrIgBBEGsiAzYCBCABIAMQhgJBBzYCBCABIABBDGsQhgJBADYCBEHwtsEAQfC2wQAoAgAgBCAGa2oiADYCAEGMt8EAQYy3wQAoAgAiAyACIAIgA0sbNgIAQfS2wQBB9LbBACgCACICIAAgACACSRs2AgAMCQtBEEEIEPkBIAUgAmsiBEsNBCABIAIQhgIhBSABIAIQgQIgBSAEEIECIAUgBBDnAQwEC0HktsEAKAIAIAVqIgUgAk0NBCABIAIQhgIhBCABIAIQgQIgBCAFIAJrIgJBAXI2AgRB5LbBACACNgIAQey2wQAgBDYCAAwDC0HgtsEAKAIAIAVqIgUgAkkNAwJAQRBBCBD5ASAFIAJrIgRLBEAgASAFEIECQQAhBEEAIQUMAQsgASACEIYCIgUgBBCGAiEGIAEgAhCBAiAFIAQQhAIgBiAGKAIEQX5xNgIEC0HotsEAIAU2AgBB4LbBACAENgIADAILIARBDGooAgAiCSAEQQhqKAIAIgRHBEAgBCAJNgIMIAkgBDYCCAwBC0HQs8EAQdCzwQAoAgBBfiAGQQN2d3E2AgALQRBBCBD5ASAFTQRAIAEgAhCGAiEEIAEgAhCBAiAEIAUQgQIgBCAFEOcBDAELIAEgCBCBAgsgAQ0DCyADEOYBIgJFDQEgAiAAIAMgARD9AUF4QXwgARCAAhtqIgEgASADSxsQ3QIgABDrAQwDCyAHIAAgAyABIAEgA0sbEN0CGiAAEOsBCyAHDAELIAEQgAIaIAEQiAILCykBAX8CQCAAQQEQ5QEiAUUNACABEIkCEIACDQAgAUEAIAAQ3wIaCyABC/0CAQV/IwBBMGsiAyQAAkACQAJAAkAgASgCCCICIAFBDGooAgBGDQADQCABIAJBBGo2AgggAigCACICRQ0BIAMgAjYCECACLQAIIQQgAkEBOgAIIAMgBEEBcSIEOgAXIAQNAiACQQhqIQRBACEFQcSzwQAoAgBB/////wdxBEAQ4AFBAXMhBQsgBC0AAQ0DIAIoAgwgAkEANgIMAkAgBQ0AQcSzwQAoAgBB/////wdxRQ0AEOABDQAgBEEBOgABCyACQQA6AAggAiACKAIAIgJBAWs2AgAgAkEBRgRAIANBEGoQTwsNBCABKAIIIgIgASgCDEcNAAsLIABBADYCACADQTBqJAAPCyADQSxqQQA2AgAgA0EoakGsmcAANgIAIANCATcCHCADQaSZwAA2AhggA0EXaiADQRhqEFAACyADIAU6ABwgAyAENgIYQbycwABBKyADQRhqQYidwABB8JjAABCvAgALIwBBEGskAEHgm8AAQStB7JrAABCdAgALgAEBAn8CQCAAKAIAIgIoAgwiAUUNACABIAEoAgAiAUEBazYCACABQQFGBEAgAigCDBBdCyACKAIQIgEgASgCACIBQQFrNgIAIAFBAUcNACACKAIQEFkLAkAgACgCACIAQX9GDQAgACAAKAIEIgJBAWs2AgQgAkEBRw0AIAAQ6wELC2cBAX8jAEEgayICJAAgAkGAmcAANgIEIAIgADYCACACQRhqIAFBEGopAgA3AwAgAkEQaiABQQhqKQIANwMAIAIgASkCADcDCCACQZidwAAgAkEEakGYncAAIAJBCGpBjJrAABCsAgALDQBC9Pme5u6jqvn+AAsrAAJ/IAAoAgAtAABFBEAgAUGfmMEAQQUQnAIMAQsgAUGbmMEAQQQQnAILC+IDAgV/AX4jAEEwayIBJAAgASAAKAIENgIMIAEgACgCACIFNgIIIAFBKGoiAyAAQRhqKQIANwMAIAFBIGogAEEQaikCADcDACABIAApAggiBjcDGCAGpyABQRhqQQRyIAEoAiwQVCAAKAIgIgItAAghBCACQQE6AAggASAEQQFxIgQ6ABcCQCAERQRAIAJBCGohAkEAIQMCQAJ/AkBBxLPBACgCAEH/////B3EEQBDgASEDIAItAAFFDQEgA0EBcyEDDAULIAItAAENBCACQQE6AAIgAkEBagwBCyACQQE6AAIgA0UNASACQQFqC0HEs8EAKAIAQf////8HcUUNABDgAQ0AQQE6AAALIAJBADoAACAFIAUoAgAiAkEBazYCACACQQFGBEAgAUEIahBVCyABQQhqQQRyEGwgASgCDCICIAIoAgAiAkEBazYCACACQQFGBEAgASgCDBBWCyAAKAIgIgIgAigCACICQQFrNgIAIAJBAUYEQCAAKAIgEFYLIAFBMGokAA8LIAFBLGpBADYCACADQayZwAA2AgAgAUIBNwIcIAFBpJnAADYCGCABQRdqIAFBGGoQUAALIAEgAzoAHCABIAI2AhhBvJzAAEErIAFBGGpB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AgwgBCAHIApqNgIICyADIARBCGoQcCAEQRBqJAAMAgsgByAGQdixwAAQmwIAC0HwrsAAQSFByLHAABCdAgALIAkgAkEIaiICRw0ACwsgBUHoAWohAiMAQUBqIgMkACADQThqIAVBEGoiBEE4aikDADcDACADQTBqIARBMGopAwA3AwAgA0EoaiAEQShqKQMANwMAIANBIGogBEEgaikDADcDACADQRhqIARBGGopAwA3AwAgA0EQaiAEQRBqKQMANwMAIANBCGogBEEIaikDADcDACADIAQpAwA3AwAgBC0A0AEiBkGBAU8EQCAGQYABQeixwAAQmwIACyAEQdAAaiAGIAMgBCkDQCAEQcgAaikDACAELQDRAUEAEG4gAiAELQDSAToAQCACIAMpAzg3ADggAiADKQMwNwAwIAIgAykDKDcAKCACIAMpAyA3ACAgAiADKQMYNwAYIAIgAykDEDcAECACIAMpAwg3AAggAiADKQMANwAAIANBQGskACAFQQhqIQMgAi0AQCIEQcEATwRAIARBwABB+LHAABCbAgALIAMgBDYCBCADIAI2AgAgBSgCDCICIAFHDQEgACAFKAIIIAEQ3QIaIAVBsANqJAAPCyAFQSRqQQE2AgAgBUIBNwIUIAVBwJbAADYCECAFQSQ2AqwDIAUgBUGoA2o2AiAgBSAFQaQDajYCqAMgBUEQakGgl8AAEKECAAsgASACQdShwAAQzgIAC9sFAQ5/IwBBoAFrIgQkAAJAAkACQAJAIAFBwQBPBEAgBEFAayIJQgA3AwAgBEE4aiIKQgA3AwAgBEEwaiILQgA3AwBBICEFIARBKGpCADcDACAEQSBqIgZCADcDACAEQRhqIgdCADcDACAEQRBqIghCADcDACAEQgA3AwggBEGAAWoiDEIANwMAIARB+ABqIg1CADcDACAEQfAAaiIOQgA3AwAgBEHoAGpCADcDACAEQeAAaiIPQgA3AwAgBEHYAGoiEEIANwMAIARB0ABqIhFCADcDACAEQgA3A0ggBEGUAWogAzYCACAEIAI2ApABIARBBDYCjAEgBCAEQZwBajYCiAEgBCABNgKcASAEQQhqQcAAIARBiAFqQQIQZiAAQRhqIAYpAwA3AAAgAEEQaiAHKQMANwAAIABBCGogCCkDADcAACAAIAQpAwg3AAAgAUEgayIDQcEATwRAQSAhAgNAIAwgCSkDADcDACANIAopAwA3AwAgDiALKQMANwMAIARB6ABqIARBKGopAwA3AwAgDyAGKQMANwMAIBAgBykDADcDACARIAgpAwA3AwAgBCAEKQMINwNIIARBwAA2AowBIAQgBEHIAGo2AogBIARBCGpBwAAgBEGIAWpBARBmIAJBIGoiBSACSQ0EIAEgBUkNBiAAIAJqIgIgBCkDCDcAACACQRhqIAYpAwA3AAAgAkEQaiAHKQMANwAAIAJBCGogCCkDADcAACAFIQIgA0EgayIDQcAASw0ACwsgASAFSQ0DIARBwAA2AowBIAQgBEEIajYCiAEgACAFaiABIAVrIARBiAFqQQEQZgwBCyAEQdQAaiADNgIAIAQgAjYCUCAEQQQ2AkwgBCABNgIIIAQgBEEIajYCSCAAIAEgBEHIAGpBAhBmCyAEQaABaiQADwtBkJbAAEEcQfyjwAAQnQIACyAFIAFBnKTAABCeAgALIAUgAUGMpMAAEJsCAAvsGQIUfg5/IwBBgBBrIhkkACAZIAFBgAgQ3QIhGUEAIQEDQCABIBlqIhggGCkDACAAIAFqIhopAwCFNwMAIBhBCGoiGyAbKQMAIBpBCGopAwCFNwMAIBhBEGoiGyAbKQMAIBpBEGopAwCFNwMAIBhBGGoiGCAYKQMAIBpBGGopAwCFNwMAIAFBIGoiAUGACEcNAAsgGUGACGogGUGACBDdAhogAwRAQQAhAQNAIBlBgAhqIAFqIgAgACkDACABIAJqIgMpAwCFNwMAIABBCGoiGCAYKQMAIANBCGopAwCFNwMAIABBEGoiGCAYKQMAIANBEGopAwCFNwMAIABBGGoiACAAKQMAIANBGGopAwCFNwMAIAFBIGoiAUGACEcNAAsLQQAhAQNAIAEgGWoiAEEYaiIDIABBOGoiGCkDACIHIAMpAwAiBHwgB0L/////D4MgBEIBhkL+////H4N+fCIEIABB+ABqIgMpAwCFQiCJIgwgAEHYAGoiGikDACIIfCAMQv////8PgyAIQgGGQv7///8fg358IgggB4VCKIkiByAEfCAHQv////8PgyAEQgGGQv7///8fg358IgQgAEEgaiIbKQMAIgogACkDACIFfCAKQv////8PgyAFQgGGQv7///8fg358IgUgAEHgAGoiHCkDAIVCIIkiDSAAQUBrIh0pAwAiC3wgDUL/////D4MgC0IBhkL+////H4N+fCILIAqFQiiJIgogBXwgCkL/////D4MgBUIBhkL+////H4N+fCIFIA2FQjCJIg0gC3wgDUL/////D4MgC0IBhkL+////H4N+fCILIAqFQgGJIgp8IARCAYZC/v///x+DIApC/////w+DfnwiDiAAQTBqIh4pAwAiBiAAQRBqIh8pAwAiCXwgBkL/////D4MgCUIBhkL+////H4N+fCIJIABB8ABqIiApAwCFQiCJIg8gAEHQAGoiISkDACITfCAPQv////8PgyATQgGGQv7///8fg358IhMgBoVCKIkiBiAJfCAGQv////8PgyAJQgGGQv7///8fg358IgkgD4VCMIkiD4VCIIkiFSAAQShqIiIpAwAiFCAAQQhqIiMpAwAiEHwgFEL/////D4MgEEIBhkL+////H4N+fCIQIABB6ABqIiQpAwCFQiCJIhEgAEHIAGoiJSkDACISfCARQv////8PgyASQgGGQv7///8fg358IhIgFIVCKIkiFCAQfCAUQv////8PgyAQQgGGQv7///8fg358IhAgEYVCMIkiESASfCARQv////8PgyASQgGGQv7///8fg358IhJ8IBVC/////w+DIBJCAYZC/v///x+DfnwiFiAKhUIoiSIKIA58IApC/////w+DIA5CAYZC/v///x+DfnwiFzcDACAfIAcgBCAMhUIwiSIHIAh8IAdC/////w+DIAhCAYZC/v///x+DfnwiBIVCAYkiDCAJfCAMQv////8PgyAJQgGGQv7///8fg358IgggEYVCIIkiDiALfCAOQv////8PgyALQgGGQv7///8fg358IgsgDIVCKIkiDCAIfCAMQv////8PgyAIQgGGQv7///8fg358IhE3AwAgIyANIA8gE3wgD0L/////D4MgE0IBhkL+////H4N+fCIIIAaFQgGJIg0gEHwgDUL/////D4MgEEIBhkL+////H4N+fCIGhUIgiSIJIAR8IAlC/////w+DIARCAYZC/v///x+DfnwiBCANhUIoiSINIAZ8IA1C/////w+DIAZCAYZC/v///x+DfnwiDzcDACAAIAcgEiAUhUIBiSIGIAV8IAZC/////w+DIAVCAYZC/v///x+DfnwiBYVCIIkiByAIfCAIQgGGQv7///8fgyAHQv////8Pg358IgggBoVCKIkiBiAFfCAGQv////8PgyAFQgGGQv7///8fg358IhM3AwAgICAVIBeFQjCJIgU3AwAgAyAHIBOFQjCJIgc3AwAgJCAOIBGFQjCJIg43AwAgHCAJIA+FQjCJIgk3AwAgJSAFIBZ8IAVC/////w+DIBZCAYZC/v///x+DfnwiBTcDACAaIAQgCXwgCUL/////D4MgBEIBhkL+////H4N+fCIENwMAICEgByAIfCAHQv////8PgyAIQgGGQv7///8fg358Igc3AwAgHSALIA58IA5C/////w+DIAtCAYZC/v///x+DfnwiCDcDACAbIAUgCoVCAYk3AwAgGCAIIAyFQgGJNwMAIB4gBCANhUIBiTcDACAiIAYgB4VCAYk3AwAgAUGAAWoiAUGACEcNAAtBACEBA0AgASAZaiIAQYgBaiIDIABBgAJqIhgpAwAiByAAKQMAIgR8IAdC/////w+DIARCAYZC/v///x+DfnwiBCAAQYAGaiIaKQMAhUIgiSIMIABBgARqIhspAwAiCHwgDEL/////D4MgCEIBhkL+////H4N+fCIIIAeFQiiJIgcgBHwgB0L/////D4MgBEIBhkL+////H4N+fCIEIAyFQjCJIgwgCHwgDEL/////D4MgCEIBhkL+////H4N+fCIIIAeFQgGJIgcgAEGIA2oiHCkDACIKIAMpAwAiBXwgCkL/////D4MgBUIBhkL+////H4N+fCIFIABBiAdqIgMpAwCFQiCJIg0gAEGIBWoiHSkDACILfCANQv////8PgyALQgGGQv7///8fg358IgsgCoVCKIkiCiAFfCAKQv////8PgyAFQgGGQv7///8fg358IgV8IAdC/////w+DIAVCAYZC/v///x+DfnwiDiAAQYADaiIeKQMAIgYgAEGAAWoiHykDACIJfCAGQv////8PgyAJQgGGQv7///8fg358IgkgAEGAB2oiICkDAIVCIIkiDyAAQYAFaiIhKQMAIhN8IA9C/////w+DIBNCAYZC/v///x+DfnwiEyAGhUIoiSIGIAl8IAZC/////w+DIAlCAYZC/v///x+DfnwiCSAPhUIwiSIPhUIgiSIVIABBiAJqIiIpAwAiFCAAQQhqIiMpAwAiEHwgFEL/////D4MgEEIBhkL+////H4N+fCIQIABBiAZqIiQpAwCFQiCJIhEgAEGIBGoiJSkDACISfCARQv////8PgyASQgGGQv7///8fg358IhIgFIVCKIkiFCAQfCAUQv////8PgyAQQgGGQv7///8fg358IhAgEYVCMIkiESASfCARQv////8PgyASQgGGQv7///8fg358IhJ8IBVC/////w+DIBJCAYZC/v///x+DfnwiFiAHhUIoiSIHIA58IAdC/////w+DIA5CAYZC/v///x+DfnwiFzcDACAfIAogBSANhUIwiSIKIAt8IApC/////w+DIAtCAYZC/v///x+DfnwiBYVCAYkiDSAJfCANQv////8PgyAJQgGGQv7///8fg358IgsgEYVCIIkiDiAIfCAOQv////8PgyAIQgGGQv7///8fg358IgggDYVCKIkiDSALfCANQv////8PgyALQgGGQv7///8fg358IhE3AwAgIyAMIA8gE3wgD0L/////D4MgE0IBhkL+////H4N+fCIMIAaFQgGJIgsgEHwgC0L/////D4MgEEIBhkL+////H4N+fCIGhUIgiSIJIAV8IAlC/////w+DIAVCAYZC/v///x+DfnwiBSALhUIoiSILIAZ8IAtC/////w+DIAZCAYZC/v///x+DfnwiDzcDACAAIAogEiAUhUIBiSIKIAR8IApC/////w+DIARCAYZC/v///x+DfnwiBIVCIIkiBiAMfCAGQv////8PgyAMQgGGQv7///8fg358IgwgCoVCKIkiCiAEfCAKQv////8PgyAEQgGGQv7///8fg358IhM3AwAgICAVIBeFQjCJIgQ3AwAgAyAGIBOFQjCJIgY3AwAgJCAOIBGFQjCJIg43AwAgGiAJIA+FQjCJIgk3AwAgJSAEIBZ8IARC/////w+DIBZCAYZC/v///x+DfnwiBDcDACAdIAUgCXwgCUL/////D4MgBUIBhkL+////H4N+fCIFNwMAICEgBiAMfCAGQv////8PgyAMQgGGQv7///8fg358Igw3AwAgGyAIIA58IA5C/////w+DIAhCAYZC/v///x+DfnwiCDcDACAYIAQgB4VCAYk3AwAgHCAIIA2FQgGJNwMAIB4gBSALhUIBiTcDACAiIAogDIVCAYk3AwAgAUEQaiIBQYABRw0ACyACIBlBgAhqQYAIEN0CIQNBACEBA0AgASADaiIAIAApAwAgASAZaiICKQMAhTcDACAAQQhqIhggGCkDACACQQhqKQMAhTcDACAAQRBqIhggGCkDACACQRBqKQMAhTcDACAAQRhqIgAgACkDACACQRhqKQMAhTcDACABQSBqIgFBgAhHDQALIBlBgBBqJAALpwMBA38jAEEwayIEJABBm6nAACECQRMhAwJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAIAAtAABBAWsOEgABAgMEBQYHCAkKCwwNDg8QERILQYmpwAAhAkESIQMMEQtB9KjAACECQRUhAwwQC0HgqMAAIQJBFCEDDA8LQc+owAAhAkERIQMMDgtBv6jAACECQRAhAwwNC0GjqMAAIQJBHCEDDAwLQYiowAAhAkEbIQMMCwtB9afAACECDAoLQeOnwAAhAkESIQMMCQtBzafAACECQRYhAwwIC0G3p8AAIQJBFiEDDAcLQZ+nwAAhAkEYIQMMBgtBh6fAACECQRghAwwFC0H6psAAIQJBDSEDDAQLQeymwAAhAkEOIQMMAwtBzabAACECQR8hAwwCC0GrpsAAIQJBIiEDDAELQZymwAAhAkEPIQMLIARBHGpBATYCACAEIAM2AiwgBCACNgIoIARBJzYCJCAEQgE3AgwgBEHMpcAANgIIIAQgBEEoajYCICAEIARBIGo2AhggASAEQQhqEMMCIARBMGokAAtnAQF/IwBBIGsiAiQAIAJBrqrAADYCBCACIAA2AgAgAkEYaiABQRBqKQIANwMAIAJBEGogAUEIaikCADcDACACIAEpAgA3AwggAkGorMAAIAJBBGpBqKzAACACQQhqQbirwAAQrAIACysAIwBBEGsiACQAIAAgAUG4rMAAQQsQxgI3AwggAEEIahCzAiAAQRBqJAALmQIBBX8jAEEgayIBJAAgACgCACIALQAIIQIgAEEBOgAIIAEgAkEBcSICOgAHAkACQCACRQRAIABBCGohAkHEs8EAKAIAQf////8HcQRAEOABQQFzIQMLIAItAAENASAAKAIMIgRBAWsiBSAESw0CIAAgBTYCDAJAIAMNAEHEs8EAKAIAQf////8HcUUNABDgAQ0AIAJBAToAAQsgAkEAOgAAIAFBIGokAA8LIAFBHGpBADYCACABQRhqQcSuwAA2AgAgAUIBNwIMIAFB0KrAADYCCCABQQdqIAFBCGoQagALIAEgAzoA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ACAAQeC3wAA2AhggAEIBNwIMIABB1NDAADYCCCABIABBCGoQwwIMAwsgAEEcakEANgIAIABB4LfAADYCGCAAQgE3AgwgAEG42sAANgIIIAEgAEEIahDDAgwCCyAAQRxqQQA2AgAgAEHgt8AANgIYIABCATcCDCAAQbTQwAA2AgggASAAQQhqEMMCDAELIABBHGpBATYCACAAQgE3AgwgAEHkzsAANgIIIABBPzYCJCAAIAJBBGo2AiwgACAAQSBqNgIYIAAgAEEsajYCICABIABBCGoQwwILIABBMGokAAveAQEBfyMAQTBrIgIkAAJ/AkACQAJAIAAoAgAiACgCAEEBaw4CAQIACyACQRxqQQA2AgAgAkHgt8AANgIYIAJCATcCDCACQbTPwAA2AgggASACQQhqEMMCDAILIAJBHGpBADYCACACQeC3wAA2AhggAkIBNwIMIAJBjM/AADYCCCABIAJBCGoQwwIMAQsgAkEcakEBNgIAIAJCATcCDCACQeTOwAA2AgggAkE/NgIkIAIgAEEEajYCLCACIAJBIGo2AhggAiACQSxqNgIgIAEgAkEIahDDAgsgAkEwaiQACwwAIAAoAgAgARCgAgueAQEBfyMAQUBqIgIkACAAKAIAIQAgAkEUakEDNgIAIAJBLGpBwAA2AgAgAkEkakHAADYCACACIABBGGo2AjQgAiAANgI4IAJCAzcCBCACQdTXwAA2AgAgAkHBADYCHCACIABBDGo2AjwgAiACQRhqNgIQIAIgAkE8ajYCKCACIAJBOGo2AiAgAiACQTRqNgIYIAEgAhDDAiACQUBrJAALlQIBAX8gACgCACECIwBBMGsiACQAAn8CQAJAAkACQCACKAIAQQFrDgMBAgMACyAAQRxqQQA2AgAgAEHgt8AANgIYIABCATcCDCAAQfDQwAA2AgggASAAQQhqEMMCDAMLIABBHGpBADYCACAAQeC3wAA2AhggAEIBNwIMIABB1NDAADYCCCABIABBCGoQwwIMAgsgAEEcakEANgIAIABB4LfAADYCGCAAQgE3AgwgAEG00MAANgIIIAEgAEEIahDDAgwBCyAAQRxqQQE2AgAgAEIBNwIMIABB5M7AADYCCCAAQT82AiQgACACQQRqNgIsIAAgAEEgajYCGCAAIABBLGo2AiAgASAAQQhqEMMCCyAAQTBqJAAL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AyENIAsgFUsNAyASIAs2AjgMAwtBgLPAAEEcQcC/wAAQnQIACyACIBVB0L/AABCZAgALIANCCIghBCADpyENCyASKAI0IQIgEigCMCEBIAACfwJAIA1B/wFxQQNHBEAgEiANOgAgIBIgBD4AISASIARCMIg8ACcgEiAEQiCIPQAlIAJFIAFFckUEQCABEOsBCyASKAIgIQEgEiAEQhiIPgIsIBIgATYCKCASQgA3AjQgEkHgt8AAKAIANgIwIBJBQGsiCyASQTBqQdizwAAQwAIjAEEwayIBJAACfwJAAkACQCASQShqIgItAABBAWsOAgECAAsgASACQQRqKAIANgIAIAEgAi0AAToAByABQRxqQQI2AgAgAUEsakEkNgIAIAFCAzcCDCABQezrwAA2AgggAUHrADYCJCABIAFBIGo2AhggASABNgIoIAEgAUEHajYCICALIAFBCGoQwwIMAgsgAUEcakEANgIAIAFB3OvAADYCGCABQgE3AgwgAUHU68AANgIIIAsgAUEIahDDAgwBCyABIAJBBGooAgA2AgAgASACLQABOgAHIAFBHGpBAjYCACABQSxqQSQ2AgAgAUIDNwIMIAFBkOvAADYCCCABQesANgIkIAEgAUEgajYCGCABIAE2AiggASABQQdqNgIgIAsgAUEIahDDAgsgAUEwaiQARQ0BQfCzwABBNyASQegAakG0tsAAQfS0wAAQrwIACyASKAI4IQ0gAEEIaiACNgIAIAAgATYCBEEADAELIBJBCGogEkEYaikDACIDNwMAIBIgEikDECIENwMAIBIoAjAhDSASKQI0IQUgAEEgaiADNwIAIABBGGogBDcCACAAQRBqIAU3AwAgAEEIakEENgIAQQELNgIAIABBDGogDTYCACASQfAAaiQAC70CAQR/IwBBIGsiAiQAIAEoAgAhBCACIAFBCGooAgAiBUGAAhDSAQJAAkACQCACKAIABEAgAigCBCIBQQBIDQFBASEDIAEEQCABEE0iA0UNAwsgBCAFQYACIAMgARDRASACQQhqIAMgARDPAiACKAIIQQFGDQMgACABNgIIIAAgATYCBCAAIAM2AgAgAkEgaiQADwsjAEEQayIAJAAgAEHEwcAANgIIIABBLTYCBCAAQZTBwAA2AgAgACgCACEBIAAoAgQhAiAAKAIIIQMjAEEQayIAJAAg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IAI2AgggACACNgIEIAAgATYCACAAEAMgABDrAQuaBAICfwF+IwBBQGoiASQAAkACQAJAAkACQAJAAkACQCADQYACTQRAQQxBBBBLIgRFDQUgBCADNgIIIAQgAzYCBCAEIAI2AgAgBBAEIgUNAyADDQFBASEFDAILQSBBARBLIgJFDQUgAEEBNgIAIAJBGGpBoMnAACkAADcAACACQRBqQZjJwAApAAA3AAAgAkEIakGQycAAKQAANwAAIAJBiMnAACkAADcAACAAQRBqQqCAgICABDcDACAAQQxqIAI2AgAgAEEIakEDNgIADAMLIANBARBLIgVFDQULIAUgAiADEN0CIQIgAEEMaiADNgIAIABBCGogAzYCACAAIAI2AgQgAEEANgIAIAQQ6wEMAQsgBSgCACICRQ0EIAUpAgQhBiAFEOsBIAEgBjcCBCABIAI2AgAgAUE8akEBNgIAIAFCATcCLCABQcDJwAA2AiggAUHEADYCJCABIAFBIGo2AjggASABNgIgIAFBEGogAUEoahCUAiAAQQhqQQM2AgAgAEEMaiABKQMQNwIAIABBFGogAUEYaigCADYCACAAQQE2AgACQCABKAIERQ0AIAEoAgAiAEUNACAAEOsBCyAEEOsBCyABQUBrJAAPC0EMQQQQkgIAC0EgQQEQkgIACyADQQEQkgIACyABQTxqQQA2AgAgAUHgt8AANgI4IAFCATcCLCABQazOwAA2AiggAUEoakG0zsAAEKECAAvEBAIBfwF+IwBBQGoiASQAAkACQAJAAkACQAJAAkAgA0GAAk0EQEEMQQQQSyIERQ0DIAQgAzYCCCAEIAM2AgQgBCACNgIAQcAAQQEQSyIDRQ0EQQxBBBBLIgJFDQUgAkLAADcCBCACIAM2AgAgBCACEAUiAw0BIAIoAgAiA0UNByACKQIEIQUgAhDrASAAQQhqIAU3AgAgACADNgIEIABBADYCACAEEOsBDAILQSRBARBLIgJFDQUgAEEBNgIAIAJBIGpB6MnAACgAADYAACACQRhqQeDJwAApAAA3AAAgAkEQakHYycAAKQAANwAAIAJBCGpB0MnAACkAADcAACACQcjJwAApAAA3AAAgAEEQakKkgICAwAQ3AwAgAEEMaiACNgIAIABBCGpBAzYCAAwBCyADKAIAIgJFDQUgAykCBCEFIAMQ6wEgASAF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QThqQbS2wABB9LTAABCvAgALIARBATYC2AIgBEGwA2ogBEH4AmopAwA3AwAgBEGoA2ogBEHwAmopAwA3AwAgBEGgA2ogBEHoAmopAwA3AwAgBCADKQMANwOYAyAEQgA3ArwDIARB4LfAACgCADYCuAMgBiAEQbgDakHYs8AAEMACIARBmANqIAYQsQENASAAQQhqIAQpA7gDNwIAIABBEGogBEHAA2ooAgA2AgAgAEEcaiAVNgIAIABBGGogFDYCACAAQRRqIBM2AgAgAEKBgICAEDcCACAEQZgDahAoCyASEOsBIARB8ANqJAAPC0Hws8AAQTcgBEGAA2pBtLbAAEH0tMAAEK8CAAvZCAEBfyMAQTBrIgIkAAJ/AkACQAJAAkACQAJAAkACQAJAAkACQAJAAkAgACgCAEEBaw4MAQIDBAUGBwgJCgsMAAsgAkEsakEBNgIAIAJCATcCHCACQdzUwAA2AhggAkHGADYCBCACIABBBGo2AhQgAiACNgIoIAIgAkEUajYCACABIAJBGGoQwwIMDAsgAkEsakEBNgIAIAJCATcCHCACQcDUwAA2AhggAkHHADYCBCACIABBBGo2AhQgAiACNgIoIAIgAkEUajYCACABIAJBGGoQwwIMCwsgAkEsakEBNgIAIAJCATcCHCACQaDUwAA2AhggAkHIADYCBCACIABBBGo2AhQgAiACNgIoIAIgAkEUajYCACABIAJBGGoQwwIMCgsgAkEsakEBNgIAIAJCATcCHCACQYDUwAA2AhggAkHAADYCBCACIABBBGo2AhQgAiACNgIoIAIgAkEUajYCACABIAJBGGoQwwIMCQsgAkEsakEBNgIAIAJCATcCHCACQejTwAA2AhggAkHAADYCBCACIABBBGo2AhQgAiACNgIoIAIgAkEUajYCACABIAJBGGoQwwIMCAsgAkEMakHJADYCACACQSxqQQI2AgAgAiAAQQhqNgIQIAJCAjcCHCACQcDTwAA2AhggAkHJADYCBCACIABBEGo2AhQgAiACNgIoIAIgAkEUajYCCCACIAJBEGo2AgAgASACQRhqEMMCDAcLIAJBLGpBATYCACACQgE3AhwgAkGU08AANgIYIAJBwAA2AgQgAiAAQQRqNgIUIAIgAjYCKCACIAJBFGo2AgAgASACQRhqEMMCDAYLIAJBLGpBATYCACACQgI3AhwgAkHc0sAANgIYIAJBwAA2AgQgAiAAQQRqNgIUIAIgAjYCKCACIAJBFGo2AgAgASACQRhqEMMCDAULIAJBDGpBwAA2AgAgAkEsakECNgIAIAIgAEEEajYCECACQgI3AhwgAkHA0sAANgIYIAJBwAA2AgQgAiAAQRBqNgIUIAIgAjYCKCACIAJBFGo2AgggAiACQRBqNgIAIAEgAkEYahDDAgwECyACQQxqQcAANgIAIAJBLGpBAjYCACACIABBBGo2AhAgAkICNwIcIAJBmNLAADYCGCACQcAANgIEIAIgAEEQajYCFCACIAI2AiggAiACQRRqNgIIIAIgAkEQajYCACABIAJBGGoQwwIMAwsgAkEsakEBNgIAIAJCATcCHCACQfTRwAA2AhggAkHKADYCBCACIABBBGo2AhQgAiACNgIoIAIgAkEUajYCACABIAJBGGoQwwIMAgsgAkEsakEBNgIAIAJCATcCHCACQeDRwAA2AhggAkHLADYCBCACIABBBGo2AhQgAiACNgIoIAIgAkEUajYCACABIAJBGGoQwwIMAQsgAkEsakEANgIAIAJB4LfAADYCKCACQgE3AhwgAkHI0cAANgIYIAEgAkEYahDDAgsgAkEwaiQAC0ABAn8gAEEIaigCACEBIAAoAgAhAkEMQQQQSyIARQRAQQxBBBCSAgALIAAgATYCCCAAIAE2AgQgACACNgIAIAALoQEBAn8jAEEgayICJAACQCABBEAgASgCACIDDQEgAkEcakEANgIAIAJB4LfAADYCGCACQgE3AgwgAkGszsAANgIIIAJBCGpBtM7AABChAgALIAJBHGpBADYCACACQeC3wAA2AhggAkIBNwIMIAJB9M3AADYCCCACQQhqQfzNwAAQoQIACyAAIAM2AgAgACABKQIENwIEIAEQ6wEgAkEgaiQACz4BAX8jAEEQayICJAAgAiABQcTOwABBBBDHAiACIAA2AgwgAiACQQxqQey4wAAQtQIaIAIQtgIgAkEQaiQACz4BAX8jAEEQayICJAAgAiABQcjOwABBDRDHAiACIAA2AgwgAiACQQxqQdy4wAAQtQIaIAIQtgIgAkEQaiQAC9wGAQF/IwBBEGsiAiQAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQCAAKAIAQQFrDgwBAgMEBQYHCAkKCwwA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KAIIIQYLIANBIGogBiACEM8CIAMoAiBBAUcNBCAKRSAGRXJFBEAgBhDrAQtBDyEFDAILQQYhBQsCQCADKAIMIgJFDQAgAygCCCIKRQ0AIAoQ6wELCyAAIAU2AgQgAEEMaiACNgIAIABBCGogCjYCAEEBIQIMBwtBgOPAAEEhQeziwAAQnQIACyAAQRBqIAI2AgAgAEEMaiAKNgIAIABBCGogBjYCACAAQQE2AgRBACECDAULIAIgB0HA5MAAEJsCAAsgBCACQcDkwAAQngIACyACIAdB0OTAABCbAgALIAQgAkHQ5MAAEJ4CAAsgACABNgIEIABBCGogBDYCAAsgACACNgIAIANBMGokAA8LIAFBARCSAgALbQEGfwJAIAEoAggiAiABKAIEIgRPDQAgASgCACEFA0AgAiAFai0AACIGQQlrIgdBF01BAEEBIAd0QZOAgARxG0UEQEEBIQMMAgsgASACQQFqIgI2AgggAiAERw0ACwsgACAGOgABIAAgAzoAAAszAQN/IAAgASgCCCICIAEoAgQiA0kEfyABKAIAIAJqLQAABSAECzoAASAAIAIgA0k6AAALQwAgASgCCCICIAFBBGooAgBGBEAgASACQQEQDyABKAIIIQILIABBADYCACABIAJBAWo2AgggASgCACACakHdADoAAAtDACABKAIIIgIgAUEEaigCAEYEQCABIAJBARAPIAEoAgghAgsgAEEANgIAIAEgAkEBajYCCCABKAIAIAJqQf0AOgAAC4cBAQJ/IAEoAggiAiABQQRqIgMoAgAiBEYEQCABIAJBARAPIAMoAgAhBCABKAIIIQILIAEgAkEBaiIDNgIIIAIgASgCACICakH9ADoAACADIARGBEAgASAEQQEQDyABKAIIIQMgASgCACECCyAAQQA2AgAgASADQQFqNgIIIAIgA2pB/QA6AAALKQEBf0GACEEBEEsiAUUEQEGACEEBEJICAAsgAEKACDcCBCAAIAE2AgAL+wMBBH8jAEEQayIDJABBCCEEIANBCGoiBUEAOgAAIANCADcDACADIAIgAkEKbiIGQQpsa0EwcjoACQJ/IAJBCkkEQCADQQlqIQVBAQwBCyADIAZBCnBBMHI6AAgCQCACQeMATQ0AIAMgAkHkAG5BCnBBMHI6AAcgAkHoB0kEQEEHIQQgA0EHciEFDAELIAMg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aiABQRBqKQIANwMAIAJBIGogAUEIaikCADcDACACIAEpAgA3AxggAkEUakH4gcEAIAJBGGoQogIaIANBCGogAkEQaigCADYCACADIAIpAwg3AgALIABBzIbBADYCBCAAIAM2AgAgAkEwaiQAC0UBAn8gASgCBCECIAEoAgAhA0EIQQQQSyIBRQRAQQhBBBCSAgALIAEgAjYCBCABIAM2AgAgAEHchsEANgIEIAAgATYCAAsTACAAQdyGwQA2AgQgACABNgIAC1UBAn8gASgCACECIAFBADYCAAJAIAIEQCABKAIEIQNBCEEEEEsiAUUNASABIAM2AgQgASACNgIAIABB3IbBADYCBCAAIAE2AgAPCwALQQhBBBCSAgALHQAgASgCAEUEQAALIABB3IbBADYCBCAAIAE2AgALVwEBfyMAQRBrIgIkACACIAFBi4fBAEEIEMcCIAIgADYCDCACIAJBDGoiAUHsgsEAELUCGiACIABBBGo2AgwgAiABQZSHwQAQtQIaIAIQtgIgAkEQaiQACxAAIAAgAWpBAWtBACABa3ELDwAgAEEBdCIAQQAgAGtyCwoAQQAgAGsgAHELEgBBAEEZIABBAXZrIABBH0YbCwoAIAAoAgRBeHELDQAgAC0ABEECcUEBdgsKACAAKAIEQQFxCwsAIAAtAARBA3FFCyoAIAAgACgCBEEBcSABckECcjYCBCAAIAFqQQRqIgAgACgCAEEBcjYCAAshACAAIAFBA3I2AgQgACABakEEaiIAIAAoAgBBAXI2AgALDAAgACABQQNyNgIECxYAIAAgAUEBcjYCBCAAIAFqIAE2AgALIwAgAiACKAIEQX5xNgIEIAAgAUEBcjYCBCAAIAFqIAE2AgALBwAgACABagsHACAAIAFrCwcAIABBCGoLBwAgAEEIawsZAQF/IAAoAhAiAQR/IAEFIABBFGooAgALCwoAIAAoAgxBAXELCgAgACgCDEEBdgsNACAAKAIAIAAoAgRqC2cBAn8jAEEQayICJAAgACgCACIAQQhqKAIAIQMgACgCACEAIAIgARDIAjcDACADBEADQCACIAA2AgwgAiACQQxqQYSOwQAQtwIgAEEBaiEAIANBAWsiAw0ACwsgAhC4AiACQRBqJAAL7QEBAX8gACgCACECIwBBEGsiACQAIAAgAa1CgICAgBBCACABKAIY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AkF8Sw0LIAMgBEkNDCABIAU2AgAgACACNgIEIAAgBjYCACABIAMgBGs2AgQgAEEMakEDNgIADBwLIAlBGHRBGHVBAE4gCUGgAU9yDRIMAgsgC0EfakH/AXFBDE8EQCALQX5xQW5HIAlBGHRBGHVBAE5yIAlBwAFPcg0SDAILIAlBGHRBGHVBAE4NESAJQcABSQ0BDBELIAlB4AFxQaABRw0QCyAGIAJBAmoiBGoiBUGAkMEAIAMgBEsbLQAAQcABcUGAAUYEQCACQQNqIQIMEgsgAiADSw0JIAJBfUsNCiADIARJDQsMFwsgBSAGaiIEQYCQwQAgAyAFSxstAABBwAFxQYABRg0NIAIgA0sNCyACIANPDQwMEwsgAiADQbidwQAQmwIACyAFIANBuJ3BABCbAgALIAIgA0HIncEAEJsCAAsgAiAEQcidwQAQngIACyAEIANByJ3BABCbAgALIAIgA0HYncEAEJsCAAsgAiAEQdidwQAQngIACyAEIANB2J3BABCbAgALIAIgA0H4ncEAEJsCAAsgAiAEQfidwQAQngIACyAEIANB+J3BABCbAgALIAIgA0GYnsEAEJsCAAsgBSADQZiewQAQmwIACyACQQJqIQIMAgsCQCACIANNBEAgAiADTw0BIAEgCDYCAAwHCyACIANBiJ7BABCbAgALIAUgA0GInsEAEJsCAAsCQCACIANNBEAgAiADTw0BDAULIAIgA0HoncEAEJsCAAsgBSADQeidwQAQmwIACyACIANJDQALIAFBADYCBCABQYSQwQA2AgAgACADNgIEIAAgBjYCACAAQQxqQQA2AgAgAEEIakGEkMEANgIADwsgAEEANgIADwsgASAENgIACyAAIAI2AgQgACAGNgIAIAEgAyAFazYCBAsgAEEMakEBNgIADAELIAEgBTYCACAAIAI2AgQgACAGNgIAIAEgAyAEazYCBCAAQQxqQQI2AgALIABBCGogBzYCAAuTAQEDfyMAQYABayIDJAAgAC0AACECQQAhAANAIAAgA2pB/wBqQTBB1wAgAkEPcSIEQQpJGyAEajoAACAAQQFrIQAgAiIEQQR2IQIgBEEPSw0ACyAAQYABaiICQYEBTwRAIAJBgAFB4JXBABCaAgALIAFBAUHwlcEAQQIgACADakGAAWpBACAAaxC6AiADQYABaiQACw4AIAApAwBBASABENYCC40BAQN/IwBBgAFrIgMkACAAKAIAIQADQCACIANqQf8AakEwQdcAIABBD3EiBEEKSRsgBGo6AAAgAkEBayECIABBD0sgAEEEdiEADQALIAJBgAFqIgBBgQFPBEAgAEGAAUHglcEAEJoCAAsgAUEBQfCVwQBBAiACIANqQYABakEAIAJrELoCIANBgAFqJAALwQICBX8BfiMAQTBrIgUkAEEnIQMCQCAAQpDOAFQEQCAAIQgMAQsDQCAFQQlqIANqIgRBBGsgACAAQpDOAIAiCEKQzgB+faciBkH//wNxQeQAbiIHQQF0QfKVwQBqLwAAOwAAIARBAmsgBiAHQeQAbGtB//8DcUEBdEHylcEAai8AADsAACADQQRrIQMgAEL/wdcvViAIIQANAAsLIAinIgRB4wBKBEAgA0ECayIDIAVBCWpqIAinIgQgBEH//wNxQeQAbiIEQeQAbGtB//8DcUEBdEHylcEAai8AADsAAAsCQCAEQQpOBEAgA0ECayIDIAVBCWpqIARBAXRB8pXBAGovAAA7AAAMAQsgA0EBayIDIAVBCWpqIARBMGo6AAALIAIgAUGEkMEAQQAgBUEJaiADakEnIANrELoCIAVBMGokAAuMAQEDfyMAQYABayIDJAAgACgCACEAA0AgAiADakH/AGpBMEE3IABBD3EiBEEKSRsgBGo6AAAgAkEBayECIABBD0sgAEEEdiEADQALIAJBgAFqIgBBgQFPBEAgAEGAAUHglcEAEJoCAAsgAUEBQfCVwQBBAiACIANqQYABakEAIAJrELoCIANBgAFqJAALIgAgACgCACIArSAAQX9zrEIBfCAAQQBOIgAbIAAgARDWAgscACABKAIYQayswQBBBSABQRxqKAIAKAIMEQIAC5gCAQJ/IwBBEGsiAiQAAn8gACgCACIALQAAQQFHBEAgASgCGEGorMEAQQQgAUEcaigCACgCDBECAAwBCyACIAEoAhhBpKzBAEEEIAFBHGooAgAoAgwRAgA6AAggAiABNgIAIAJBADoACSACQQA2AgQgAiAAQQFqNgIMIAIgAkEMakG0lcEAELUCGgJ/IAItAAgiASACKAIEIgNFDQAaIAFB/wFxIQBBASAADQAaIAIoAgAhAAJAIANBAUcNACACLQAJRQ0AIAAtAABBBHENAEEBIAAoAhhBsJXB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AAwAAAANAAAACgAAAAAAAAABAAAADgAAAA8AAAAQAAAAEQAAABIAAAATAAAAFAAAABUAAAAWAAAACgAAAAAAAAABAAAAFwAAAENvaW5kZW5vbWFtb3VudHdhc21jdXN0b21iYW5rQmFua1F1ZXJ5YWxsX2JhbGFuY2VzYWRkcmVzc2JhbGFuY2VBbGxCYWxhbmNlUmVzcG9uc2VXYXNtUXVlcnljb250cmFjdF9pbmZvY29udHJhY3RfYWRkcnJhd2tleXNtYXJ0bXNnYmxvY2t0cmFuc2FjdGlvbmNvbnRyYWN0aGVpZ2h0dGltZWNoYWluX2lkc2VuZGVyZnVuZHNpbmRleFF1ZXJpZXIgc3lzdGVtIGVycm9yOiAAMQEQABYAAABRdWVyaWVyIGNvbnRyYWN0IGVycm9yOiBQARAAGAAAAFNlcmlhbGl6aW5nIFF1ZXJ5UmVxdWVzdDogAABwARAAGgAAAC9jb2RlL3BhY2thZ2VzL3N0ZC9zcmMvZXhwb3J0cy5ycwAAAJQBEAAhAAAAiQAAABoAAACUARAAIQAAAKEAAAAaAAAAlAEQACEAAABrAAAAGgAAAJQBEAAhAAAAuQAAABoAAACUARAAIQAAAOYAAAAaAAAAQmFua01zZ2J1cm5zZW5kdG9fYWRkcmVzc1dhc21Nc2djbGVhcl9hZG1pbnVwZGF0ZV9hZG1pbmFkbWlubWlncmF0ZW5ld19jb2RlX2lkaW5zdGFudGlhdGVjb2RlX2lkbGFiZWxleGVjdXRlU3ViTXNnZ2FzX2xpbWl0UmVwbHlPbm5ldmVyc3VjY2Vzc2Vycm9yYWx3YXlzb2tFbXB0eUV2ZW50dHlwZWF0dHJpYnV0ZXNBdHRyaWJ1dGV2YWx1ZVJlc3BvbnNlZXZlbnRzABgAAAAMAAAABAAAABkAAAAaAAAAGwAAAGEgRGlzcGxheSBpbXBsZW1lbnRhdGlvbiByZXR1cm5lZCBhbiBlcnJvciB1bmV4cGVjdGVkbHkvcnVzdGMvZGI5ZDFiMjBiYmExOTY4YzFlYzFmYzQ5NjE2ZDQ3NDJjMTcyNWI0Yi9saWJyYXJ5L2FsbG9jL3NyYy9zdHJpbmcucnMAACcDEABLAAAAYQkAAA4AAABjb3Ntd2FzbV9zdGQ6OnJlc3VsdHM6OmNvbnRyYWN0X3Jlc3VsdDo6Q29udHJhY3RSZXN1bHQ8Y29zbXdhc21fc3RkOjpyZXN1bHRzOjpyZXNwb25zZTo6UmVzcG9uc2U+Y29zbXdhc21fc3RkOjpxdWVyeTo6YmFuazo6QWxsQmFsYW5jZVJlc3BvbnNlaGFja2F0b206Om1zZzo6UmVjdXJzZVJlc3BvbnNlaGFja2F0b206Om1zZzo6UXVlcnlNc2doYWNrYXRvbTo6bXNnOjpJbnRSZXNwb25zZWNvc213YXNtX3N0ZDo6cmVzdWx0czo6Y29udHJhY3RfcmVzdWx0OjpDb250cmFjdFJlc3VsdDxjb3Ntd2FzbV9zdGQ6OmJpbmFyeTo6QmluYXJ5PmNvc213YXNtX3N0ZDo6dHlwZXM6Ok1lc3NhZ2VJbmZvY29zbXdhc21fc3RkOjp0eXBlczo6RW52aGFja2F0b206Om1zZzo6RXhlY3V0ZU1zZ2hhY2thdG9tOjptc2c6OlN1ZG9Nc2doYWNrYXRvbTo6bXNnOjpNaWdyYXRlTXNnaGFja2F0b206OnN0YXRlOjpTdGF0ZWNvc213YXNtX3N0ZDo6cXVlcnk6OlF1ZXJ5UmVxdWVzdDxjb3Ntd2FzbV9zdGQ6OnJlc3VsdHM6OmVtcHR5OjpFbXB0eT5oYWNrYXRvbTo6bXNnOjpJbnN0YW50aWF0ZU1zZ2hhY2thdG9tOjptc2c6OlZlcmlmaWVyUmVzcG9uc2UAAAAKAAAABAAAAAQAAAAcAAAAHQAAAB4AAABjYWxsZWQgYFJlc3VsdDo6dW53cmFwX2VycigpYCBvbiBhbiBgT2tgIHZhbHVlAAAYAAAADAAAAAQAAAAfAAAAGAAAAAwAAAAEAAAAIAAAAAoAAAAAAAAAAQAAACEAAABjYWxsZWQgYFJlc3VsdDo6dW53cmFwKClgIG9uIGFuIGBFcnJgIHZhbHVlACIAAAAgAAAACAAAAAkAAAAEAAAAAAAAAAgAAAAAAAAAAQAAAAAAAABtaXNzaW5nIGZpZWxkIGBgnAYQAA8AAACrBhAAAQAAAGR1cGxpY2F0ZSBmaWVsZCBgAAAAvAYQABEAAACrBhAAAQAAAHVua25vd24gdmFyaWFudCBgYCwgZXhwZWN0ZWQgAAAA4AYQABEAAADxBhAADAAAAGludmFsaWQgYmFzZTY0OiAQBxAAEAAAAGludmFsaWQgVWludDY0ICcnIC0gKAcQABAAAAA4BxAABAAAAGludmFsaWQgVWludDEyOCAnAAAATAcQABEAAAA4BxAABAAAAHVsbGNvbmZpZ2FjdGlvbnJlbGVhc2VkZXN0aW5hdGlvbvALqlN0YXRlcGFzc3dvcmRvdGhlcnNhbHRoYXNoX2VuY29kZWQgZXJyb3JlZDogqgcQABYAAABzcmMvY29udHJhY3QucnN0ZXN0LmtleQDIBxAADwAAAJYAAAAJAAAAbXVzdCBub3QgYmUgZW1wdHkAAADIBxAADwAAAJ4AAAAhAAAAyAcQAA8AAACeAAAAEwAAAG1lbW9yeS5ncm93IGZhaWxlZFRoaXMgcGFnZSBpbnRlbnRpb25hbGx5IGZhdWx0ZWQAAAA2CBAAHwAAAMgHEAAPAAAAwwAAAAUAAADIBxAADwAAANYAAAAoAAAAVW5leHBlY3RlZCBlcnJvciBpbiBkb191c2VyX2Vycm9yc19pbl9hcGlfY2FsbHM6IAAAAIAIEAAxAAAAYm45aGhzc29tZWx0dmh6Z3Z1cWt3amtwd3hvamZ1aWdsdHdlZGF5enhsanVjZWZpa3VpZWlsbG93YXRpY2tzb2lzdHFveW5tZ2NuajIxOWHIBxAADwAAAOMAAAAxAAAAyAcQAA8AAADxAAAAJQAAAMgHEAAPAAAA/QAAACkAAADIBxAADwAAAAkBAAAsAAAAaGVyZSB3ZSBnbyDwn5qATGV0IHRoZWhhY2tpbmcgYmVnaW5VbmF1dGhvcml6ZWQAbwkQAAwAAACEBhAAAAAAAHZlcmlmaWVyYmVuZWZpY2lhcnlzdGVhbF9mdW5kcwAAnwkQAAsAAAByZWNpcGllbnRFeGVjdXRlTXNndXNlcl9lcnJvcnNfaW5fYXBpX2NhbGxzcGFuaWNhbGxvY2F0ZV9sYXJnZV9tZW1vcnlwYWdlc21lc3NhZ2VfbG9vcG1lbW9yeV9sb29wc3RvcmFnZV9sb29wY3B1X2xvb3BhcmdvbjJtZW1fY29zdHRpbWVfY29zdH8HEAAHAAAAKQoQAAYAAAAhChAACAAAABUKEAAMAAAACgoQAAsAAAD+CRAADAAAAOQJEAAVAAAA3wkQAAUAAADHCRAAGAAAAFF1ZXJ5TXNnZ2V0X2ludHJlY3Vyc2VkZXB0aHdvcmtvdGhlcl9iYWxhbmNljAkQAAgAAACnChAADQAAAJcKEAAHAAAAkAoQAAcAAABWZXJpZmllclJlc3BvbnNlUmVjdXJzZVJlc3BvbnNlaGFzaGVkSW50UmVzcG9uc2VpbnRmdW5kZXIAAABhdHRlbXB0IHRvIGFkZCB3aXRoIG92ZXJmbG93QmFkIGhhc2ggbGVuZ3RoOiAAAAAsCxAAEQAAAC91c3IvbG9jYWwvY2FyZ28vcmVnaXN0cnkvc3JjL2dpdGh1Yi5jb20tMWVjYzYyOTlkYjllYzgyMy9ibGFrZTJiX3NpbWQtMC41LjExL3NyYy9saWIucnNICxAAWAAAAO8AAAAJAAAAKAAAACQAAAAEAAAAKQAAAC91c3IvbG9jYWwvY2FyZ28vcmVnaXN0cnkvc3JjL2dpdGh1Yi5jb20tMWVjYzYyOTlkYjllYzgyMy9jcm9zc2JlYW0tdXRpbHMtMC44Ljgvc3JjL3RocmVhZC5ycwAAAMALEABdAAAAuAEAACQAAABmYWlsZWQgdG8gc3Bhd24gc2NvcGVkIHRocmVhZAAAAMALEABdAAAA/QAAAA4AAADACxAAXQAAAKoAAAAKAAAAwAsQAF0AAACtAAAALAAAAABjYW5ub3QgcmVjdXJzaXZlbHkgYWNxdWlyZSBtdXRleAAAAIEMEAAgAAAAL3J1c3RjL2RiOWQxYjIwYmJhMTk2OGMxZWMxZmM0OTYxNmQ0NzQyYzE3MjViNGIvbGlicmFyeS9zdGQvc3JjL3N5cy93YXNtLy4uL3Vuc3VwcG9ydGVkL211dGV4LnJzrAwQAGAAAAAXAAAACQAAAC9ydXN0Yy9kYjlkMWIyMGJiYTE5NjhjMWVjMWZjNDk2MTZkNDc0MmMxNzI1YjRiL2xpYnJhcnkvc3RkL3NyYy90aHJlYWQvbW9kLnJzAAAAHA0QAE0AAAD7BAAAHAAAACoAAAAUAAAABAAAACsAAAB0aHJlYWQgbmFtZSBtYXkgbm90IGNvbnRhaW4gaW50ZXJpb3IgbnVsbCBieXRlcwAcDRAATQAAAM4BAAAgAAAALAAAAAgAAAAEAAAALQAAAC4AAABjYWxsZWQgYE9wdGlvbjo6dW53cmFwKClgIG9uIGEgYE5vbmVgIHZhbHVlAC8AAAAIAAAABAAAADAAAAAxAAAAEAAAAAQAAAAyAAAAMwAAABQAAAAEAAAANAAA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AC8VEAAgAAAAL3J1c3RjL2RiOWQxYjIwYmJhMTk2OGMxZWMxZmM0OTYxNmQ0NzQyYzE3MjViNGIvbGlicmFyeS9zdGQvc3JjL3N5cy93YXNtLy4uL3Vuc3VwcG9ydGVkL211dGV4LnJzWBUQAGAAAAAXAAAACQBB0KvAAAvxAmF0dGVtcHQgdG8gYWRkIHdpdGggb3ZlcmZsb3djYWxsZWQgYFJlc3VsdDo6dW53cmFwKClgIG9uIGFuIGBFcnJgIHZhbHVlADkAAAAIAAAABAAAADoAAAA7AAAABAAAAAQAAAA8AAAAUG9pc29uRXJyb3IvdXNyL2xvY2FsL2NhcmdvL3JlZ2lzdHJ5L3NyYy9naXRodWIuY29tLTFlY2M2Mjk5ZGI5ZWM4MjMvY3Jvc3NiZWFtLXV0aWxzLTAuOC44L3NyYy9zeW5jL3dhaXRfZ3JvdXAucnMAAABDFhAAZgAAAGkAAAAlAAAAQxYQAGYAAABwAAAALAAAAEMWEABmAAAAcgAAACwAAABDFhAAZgAAAHkAAAAxAAAAQxYQAGYAAAB6AAAACQAAAAAAAABhdHRlbXB0IHRvIHN1YnRyYWN0IHdpdGggb3ZlcmZsb3cAAABDFhAAZgAAAIQAAAAxAAAAQxYQAGYAAACFAAAACQBB0K7AAAuhBGF0dGVtcHQgdG8gYWRkIHdpdGggb3ZlcmZsb3cAAAAAYXR0ZW1wdCB0byBzdWJ0cmFjdCB3aXRoIG92ZXJmbG93L3Vzci9sb2NhbC9jYXJnby9yZWdpc3RyeS9zcmMvZ2l0aHViLmNvbS0xZWNjNjI5OWRiOWVjODIzL2JsYWtlMmJfc2ltZC0wLjUuMTEvc3JjL3BvcnRhYmxlLnJzAACRFxAAXQAAAIQAAAAFAAAAkRcQAF0AAACWAAAAFQAAAJEXEABdAAAApAAAAAkAAAAvdXNyL2xvY2FsL2NhcmdvL3JlZ2lzdHJ5L3NyYy9naXRodWIuY29tLTFlY2M2Mjk5ZGI5ZWM4MjMvYmxha2UyYl9zaW1kLTAuNS4xMS9zcmMvbGliLnJzIBgQAFgAAACpAQAAHQAAACAYEABYAAAAqgEAACgAAAAgGBAAWAAAAKoBAAAJAAAAIBgQAFgAAACqAQAARQAAACAYEABYAAAAqwEAAAkAAAAgGBAAWAAAAMsBAAAJAAAAIBgQAFgAAADOAQAAEgAAACAYEABYAAAA5QEAAA4AAAAgGBAAWAAAAE4CAAAKAAAAL3J1c3RjL2RiOWQxYjIwYmJhMTk2OGMxZWMxZmM0OTYxNmQ0NzQyYzE3MjViNGIvbGlicmFyeS9jb3JlL3NyYy9pdGVyL2FkYXB0ZXJzL2VudW1lcmF0ZS5ycwAIGRAAWwAAADAAAAAJAEGAs8AAC9EIYXR0ZW1wdCB0byBhZGQgd2l0aCBvdmVyZmxvdwAAAABhdHRlbXB0IHRvIG11bHRpcGx5IHdpdGggb3ZlcmZsb3cAAABMAAAACAAAAAQAAABNAAAATgAAAE8AAAAMAAAABAAAAFAAAABRAAAAUgAAAGEgRGlzcGxheSBpbXBsZW1lbnRhdGlvbiByZXR1cm5lZCBhbiBlcnJvciB1bmV4cGVjdGVkbHkvcnVzdGMvZGI5ZDFiMjBiYmExOTY4YzFlYzFmYzQ5NjE2ZDQ3NDJjMTcyNWI0Yi9saWJyYXJ5L2FsbG9jL3NyYy9zdHJpbmcucnMAACcaEABLAAAAYQkAAA4AAABjb3Ntd2FzbV9zdGQ6OnJlc3VsdHM6OnN5c3RlbV9yZXN1bHQ6OlN5c3RlbVJlc3VsdDxjb3Ntd2FzbV9zdGQ6OnJlc3VsdHM6OmNvbnRyYWN0X3Jlc3VsdDo6Q29udHJhY3RSZXN1bHQ8Y29zbXdhc21fc3RkOjpiaW5hcnk6OkJpbmFyeT4+TAAAAAQAAAAEAAAAUwAAAFQAAABVAAAATwAAABQAAAAEAAAANAAAAEwAAAAAAAAAAQAAACEAAAAvcnVzdGMvZGI5ZDFiMjBiYmExOTY4YzFlYzFmYzQ5NjE2ZDQ3NDJjMTcyNWI0Yi9saWJyYXJ5L2NvcmUvc3JjL2l0ZXIvdHJhaXRzL2FjY3VtLnJzAAAARBsQAFUAAACNAAAAAQAAAGludGVybmFsIGVycm9yOiBlbnRlcmVkIHVucmVhY2hhYmxlIGNvZGU6IAAArBsQACoAAAABAAAAAAAAAG1pc3NpbmcgZmllbGQgYGDoGxAADwAAAPcbEAABAAAAZHVwbGljYXRlIGZpZWxkIGAAAAAIHBAAEQAAAPcbEAABAAAAdW5rbm93biB2YXJpYW50IGBgLCBleHBlY3RlZCAAAAAsHBAAEQAAAD0cEAAMAAAATAAAAAQAAAAEAAAAVgAAAEwAAAAEAAAABAAAAFcAAAAvdXNyL2xvY2FsL2NhcmdvL3JlZ2lzdHJ5L3NyYy9naXRodWIuY29tLTFlY2M2Mjk5ZGI5ZWM4MjMvYmFzZTY0LTAuMTMuMC9zcmMvZGVjb2RlLnJzAAAAfBwQAFUAAADSAQAAHwAAAHwcEABVAAAA2AEAAB8AAAB8HBAAVQAAANsBAAANAAAAfBwQAFUAAADhAQAAHwAAAHwcEABVAAAA5AEAAA0AAAB8HBAAVQAAAOoBAAAfAAAAfBwQAFUAAADtAQAADQAAAHwcEABVAAAA8wEAAB8AAAB8HBAAVQAAAPYBAAANAAAAfBwQAFUAAAD8AQAAHwAAAHwcEABVAAAA/wEAAA0AAAB8HBAAVQAAAAUCAAAfAAAAfBwQAFUAAAAIAgAADQAAAHwcEABVAAAADgIAAB8AAAB8HBAAVQAAABECAAANAAAAfBwQAFUAAABuAAAALwBB4LvAAAuHBmF0dGVtcHQgdG8gc3VidHJhY3Qgd2l0aCBvdmVyZmxvdwAAAHwcEABVAAAAAwEAADcAAAB8HBAAVQAAAAMBAAAkAAAAfBwQAFUAAAAEAQAAPgAAAHwcEABVAAAABAEAACkAAAB8HBAAVQAAACEBAAARAAAAfBwQAFUAAAAqAQAAKQAAAHwcEABVAAAAKgEAABYAAAB8HBAAVQAAAC4BAAApAAAAfBwQAFUAAAAuAQAAKAAAAHwcEABVAAAALQEAABoAAAB8HBAAVQAAADMBAAARAAAAfBwQAFUAAABBAQAADgAAAHwcEABVAAAARAEAACcAAAB8HBAAVQAAAEQBAAASAAAAfBwQAFUAAABHAQAACQAAAHwcEABVAAAAWAEAABMAAAB8HBAAVQAAAGYBAAApAAAAfBwQAFUAAAB4AQAADQAAAHwcEABVAAAAggEAABEAAAB8HBAAVQAAAIoBAAAVAAAAfBwQAFUAAACOAQAAMQAAAEltcG9zc2libGU6IG11c3Qgb25seSBoYXZlIDAgdG8gOCBpbnB1dCBieXRlcyBpbiBsYXN0IGNodW5rLCB3aXRoIG5vIGludmFsaWQgbGVuZ3Roc1QfEABUAAAAfBwQAFUAAACdAQAADgAAAHwcEABVAAAAqAEAAA0AAAB8HBAAVQAAALEBAAAJAAAAT3ZlcmZsb3cgd2hlbiBjYWxjdWxhdGluZyBvdXRwdXQgYnVmZmVyIGxlbmd0aAAAfBwQAFUAAACWAAAACgAAAC91c3IvbG9jYWwvY2FyZ28vcmVnaXN0cnkvc3JjL2dpdGh1Yi5jb20tMWVjYzYyOTlkYjllYzgyMy9iYXNlNjQtMC4xMy4wL3NyYy9lbmNvZGUucnNJbnZhbGlkIFVURjgAAAAgIBAAVQAAADQAAAAcAAAAaW50ZWdlciBvdmVyZmxvdyB3aGVuIGNhbGN1bGF0aW5nIGJ1ZmZlciBzaXplAAAAICAQAFUAAAAvAAAAEQAAAEwAAAAIAAAABAAAAFgAAADgGxAAQfDBwAALCSAAAAAIAAAAAgBBhMLAAAu9IAIAAAADAAAAQmluYXJ5KAAMIRAABwAAACkAAAAcIRAAAQAAAGludmFsaWQgYmFzZTY0OiAoIRAAEAAAAFVuc3VwcG9ydGVkIHF1ZXJ5IHR5cGU6IEAhEAAYAAAAVW5rbm93biBzeXN0ZW0gZXJyb3JgIRAAFAAAAE5vIHN1Y2ggY29udHJhY3Q6IAAAfCEQABIAAABDYW5ub3QgcGFyc2UgcmVzcG9uc2U6ICBpbjogmCEQABcAAACvIRAABQAAAENhbm5vdCBwYXJzZSByZXF1ZXN0OiAAAMQhEAAWAAAAryEQAAUAAABMAAAAAAAAAAEAAABZAAAAWgAAAFoAAAAvY29kZS9wYWNrYWdlcy9zdGQvc3JjL3NlY3Rpb25zLnJzAAAEIhAAIgAAABoAAAAQAAAABCIQACIAAAAaAAAABQAAAFRMO0RSOiBWYWx1ZSBtdXN0IG5vdCBiZSBlbXB0eSBpbiBTdG9yYWdlOjpzZXQgYnV0IGluIG1vc3QgY2FzZXMgeW91IGNhbiB1c2UgU3RvcmFnZTo6cmVtb3ZlIGluc3RlYWQuIExvbmcgc3Rvcnk6IEdldHRpbmcgZW1wdHkgdmFsdWVzIGZyb20gc3RvcmFnZSBpcyBub3Qgd2VsbCBzdXBwb3J0ZWQgYXQgdGhlIG1vbWVudC4gU29tZSBvZiBvdXIgaW50ZXJuYWwgaW50ZXJmYWNlcyBjYW5ub3QgZGlmZmVyZW50aWF0ZSBiZXR3ZWVuIGEgbm9uLWV4aXN0ZW50IGtleSBhbmQgYW4gZW1wdHkgdmFsdWUuIFJpZ2h0IG5vdywgeW91IGNhbm5vdCByZWx5IG9uIHRoZSBiZWhhdmlvdXIgb2YgZW1wdHkgdmFsdWVzLiBUbyBwcm90ZWN0IHlvdSBmcm9tIHRyb3VibGUgbGF0ZXIgb24sIHdlIHN0b3AgaGVyZS4gU29ycnkgZm9yIHRoZSBpbmNvbnZlbmllbmNlISBXZSBoaWdobHkgd2VsY29tZSB5b3UgdG8gY29udHJpYnV0ZSB0byB1cywgbWFraW5nIHRoaXMgbW9yZSBzb2xpZCBvbmUgd2F5IG9yIHRoZSBvdGhlci4AAEgiEAACAgAAL2NvZGUvcGFja2FnZXMvc3RkL3NyYy9pbXBvcnRzLnJzAAAAVCQQACEAAABwAAAADQAAAGlucHV0IHRvbyBsb25nIGZvciBhZGRyX3ZhbGlkYXRlYWRkcl92YWxpZGF0ZSBlcnJvcmVkOiAAqCQQABcAAABpbnB1dCB0b28gbG9uZyBmb3IgYWRkcl9jYW5vbmljYWxpemVhZGRyX2Nhbm9uaWNhbGl6ZSBlcnJvcmVkOiAA7CQQABsAAABhZGRyX2h1bWFuaXplIGVycm9yZWQ6IAAQJRAAFwAAAE1lc3NhZ2VUb29Mb25nIG11c3Qgbm90IGhhcHBlbi4gVGhpcyBpcyBhIGJ1ZyBpbiB0aGUgVk0uMCUQADgAAABUJBAAIQAAAA0BAAASAAAAVCQQACEAAAAqAQAAEgAAAEludmFsaWRIYXNoRm9ybWF0IG11c3Qgbm90IGhhcHBlbi4gVGhpcyBpcyBhIGJ1ZyBpbiB0aGUgVk0uAJAlEAA7AAAAVCQQACEAAABEAQAAEgAAAEVycm9yIGNvZGUgMiB1bnVzZWQgc2luY2UgQ29zbVdhc20gMC4xNS4gVGhpcyBpcyBhIGJ1ZyBpbiB0aGUgVk0uAAAA5CUQAEEAAABUJBAAIQAAAEMBAAASAAAAVCQQACEAAABkAQAAEgAAAFQkEAAhAAAAYwEAABIAAABUJBAAIQAAAH0BAAASAAAARXhwZWN0ZWQgYSBWZWMgb2YgbGVuZ3RoICBidXQgaXQgd2FzIAAAAHAmEAAZAAAAiSYQAAwAAAAUAAAAVCQQACEAAAB4AQAAFQAAAC9jb2RlL3BhY2thZ2VzL3N0ZC9zcmMvbWVtb3J5LnJzUmVnaW9uIHBvaW50ZXIgaXMgbnVsbAAA3CYQABYAAAC8JhAAIAAAADkAAAAFAAAAUmVnaW9uIHN0YXJ0cyBhdCBudWxsIHBvaW50ZXIAAAAMJxAAHQAAALwmEAAgAAAAPwAAAAUAAABBZGRyQ2Fub25pY2FsQWRkclVua25vd24gZXJyb3I6IFUnEAAPAAAASW5wdXQgaXMgbG9uZ2VyIHRoYW4gc3VwcG9ydGVkAABsJxAAHgAAAElucHV0cyBhcmUgbGFyZ2VyIHRoYW4gc3VwcG9ydGVklCcQACAAAABVbmtub3duRXJyZXJyb3JfY29kZUwAAAAEAAAABAAAAFsAAABJbnB1dFRvb0xvbmdlcklucHV0c1Rvb0xhcmdlckludmFsaWQgcmVjb3ZlcnkgcGFyYW1ldGVyLiBTdXBwb3J0ZWQgdmFsdWVzOiAwIGFuZCAxLgD9JxAANgAAAEludmFsaWQgc2lnbmF0dXJlIGZvcm1hdDwoEAAYAAAASW52YWxpZCBoYXNoIGZvcm1hdABcKBAAEwAAAEludmFsaWRSZWNvdmVyeVBhcmFtSW52YWxpZFNpZ25hdHVyZUZvcm1hdEludmFsaWRIYXNoRm9ybWF0Q29udmVyc2lvbiBlcnJvcjogAAAAsygQABIAAABEaXZpZGUgYnkgemVybzog0CgQABAAAABPdmVyZmxvdzogAADoKBAACgAAAEVycm9yIHNlcmlhbGl6aW5nIHR5cGUgOiAAAAD8KBAAFwAAABMpEAACAAAARXJyb3IgcGFyc2luZyBpbnRvIHR5cGUgKCkQABgAAAATKRAAAgAAACBub3QgZm91bmQAAOAbEAAAAAAAUCkQAAoAAABDYW5ub3QgZGVjb2RlIFVURjggYnl0ZXMgaW50byBzdHJpbmc6IAAAbCkQACYAAABJbnZhbGlkIGRhdGEgc2l6ZTogZXhwZWN0ZWQ9IGFjdHVhbD2cKRAAHAAAALgpEAAIAAAASW52YWxpZCBCYXNlNjQgc3RyaW5nOiAA0CkQABcAAABHZW5lcmljIGVycm9yOiAA8CkQAA8AAABIYXNoIENhbGN1bGF0aW9uIGVycm9yOiAIKhAAGAAAAFJlY292ZXIgcHVia2V5IGVycm9yOiAAACgqEAAWAAAAVmVyaWZpY2F0aW9uIGVycm9yOiBIKhAAFAAAAENvbnZlcnNpb25PdmVyZmxvd3NvdXJjZUwAAAAEAAAABAAAAFwAAABEaXZpZGVCeVplcm9MAAAABAAAAAQAAABdAAAAT3ZlcmZsb3dMAAAABAAAAAQAAABeAAAAU2VyaWFsaXplRXJyc291cmNlX3R5cGVtc2dQYXJzZUVycnRhcmdldF90eXBlTm90Rm91bmRraW5kSW52YWxpZFV0ZjhJbnZhbGlkRGF0YVNpemVleHBlY3RlZABMAAAABAAAAAQAAABfAAAAYWN0dWFsSW52YWxpZEJhc2U2NEdlbmVyaWNFcnJIYXNoQ2FsY3VsYXRpb25FcnJvcgAAAEwAAAAEAAAABAAAAGAAAABSZWNvdmVyUHVia2V5RXJyTAAAAAQAAAAEAAAAYQAAAFZlcmlmaWNhdGlvbkVycgBMAAAABAAAAAQAAABiAAAAU2hsU2hyUG93TXVsU3ViQWRkQ2Fubm90ICB3aXRoICBhbmQgwisQAAcAAADJKxAABgAAAM8rEAAFAAAAT3ZlcmZsb3dFcnJvcm9wZXJhdGlvbgAATAAAAAQAAAAEAAAAPgAAAG9wZXJhbmQxb3BlcmFuZDJDb252ZXJzaW9uT3ZlcmZsb3dFcnJvcgBMAAAABAAAAAQAAABjAAAAdmFsdWVDYW5ub3QgZGV2aWRlICBieSB6ZXJvAFEsEAAOAAAAXywQAAgAAABEaXZpZGVCeVplcm9FcnJvcm9wZXJhbmRpbnZhbGlkX3JlcXVlc3RpbnZhbGlkX3Jlc3BvbnNlbm9fc3VjaF9jb250cmFjdHVua25vd251bnN1cHBvcnRlZF9yZXF1ZXN0AAAAkCwQAA8AAACfLBAAEAAAAK8sEAAQAAAAvywQAAcAAADGLBAAEwAAAGFkZHJlcnJvcnJlc3BvbnNlcmVxdWVzdEludmFsaWQgcHVibGljIGtleSBmb3JtYXQAAAAcLRAAGQAAAEdlbmVyaWMgZXJyb3IAAABALRAADQAAAEJhdGNoIGVycm9yAFgtEAALAAAASW52YWxpZFB1YmtleUZvcm1hdEJhdGNoRXJyb2sAAACHLRAAAgAAAAgtEAAFAAAAZgAAAAgAAAAEAAAAZwAAAGgAAABmAAAACAAAAAQAAABpAAAAsC0QAAAAAABKU09OIGhhcyBhIGNvbW1hIGFmdGVyIHRoZSBsYXN0IHZhbHVlIGluIGFuIGFycmF5IG9yIG1hcC5KU09OIGhhcyBub24td2hpdGVzcGFjZSB0cmFpbGluZyBjaGFyYWN0ZXJzIGFmdGVyIHRoZSB2YWx1ZS5Gb3VuZCBhIGxvbmUgc3Vycm9nYXRlLCB3aGljaCBjYW4gZXhpc3QgaW4gSlNPTiBidXQgY2Fubm90IGJlIGVuY29kZWQgdG8gVVRGLTguT2JqZWN0IGtleSBpcyBub3QgYSBzdHJpbmcuSW52YWxpZCB1bmljb2RlIGNvZGUgcG9pbnQuSW52YWxpZCB0eXBlSW52YWxpZCBudW1iZXIuSW52YWxpZCBlc2NhcGUgc2VxdWVuY2UuRXhwZWN0ZWQgdGhpcyBjaGFyYWN0ZXIgdG8gc3RhcnQgYSBKU09OIHZhbHVlLkV4cGVjdGVkIHRvIHBhcnNlIGVpdGhlciBhIGB0cnVlYCwgYGZhbHNlYCwgb3IgYSBgbnVsbGAuRXhwZWN0ZWQgdGhpcyBjaGFyYWN0ZXIgdG8gYmUgZWl0aGVyIGEgYCcsJ2Agb3IgYSBgJ30nYC5FeHBlY3RlZCBhIGxvdyBzdXJyb2dhdGUgKERDMDDigJNERkZGKS5FeHBlY3RlZCB0aGlzIGNoYXJhY3RlciB0byBiZSBlaXRoZXIgYSBgJywnYCBvcmEgYCddJ2AuRXhwZWN0ZWQgYSBoaWdoIHN1cnJvZ2F0ZSAoRDgwMOKAk0RCRkYpLkV4cGVjdGVkIHRoaXMgY2hhcmFjdGVyIHRvIGJlIGEgYCc6J2AuRU9GIHdoaWxlIHBhcnNpbmcgYSBKU09OIHZhbHVlLkVPRiB3aGlsZSBwYXJzaW5nIGEgc3RyaW5nLkVPRiB3aGlsZSBwYXJzaW5nIGFuIG9iamVjdC5FT0Ygd2hpbGUgcGFyc2luZyBhIGxpc3QuQ29udHJvbCBjaGFyYWN0ZXIgZm91bmQgaW4gc3RyaW5nLi91c3IvbG9jYWwvY2FyZ28vcmVnaXN0cnkvc3JjL2dpdGh1Yi5jb20tMWVjYzYyOTlkYjllYzgyMy9zZXJkZS1qc29uLXdhc20tMC40LjEvc3JjL2RlL3VuZXNjYXBlLnJzAADQMBAAYgAAACUAAAAVAEHQ4sAAC5UDYXR0ZW1wdCB0byBhZGQgd2l0aCBvdmVyZmxvd9AwEABiAAAAMwAAACkAAAAAAAAAYXR0ZW1wdCB0byBzdWJ0cmFjdCB3aXRoIG92ZXJmbG93Tm9uLWhleCBBU0NJSSBjaGFyYWN0ZXIgZm91bmQAANAwEABiAAAAmQAAAA4AAAAvdXNyL2xvY2FsL2NhcmdvL3JlZ2lzdHJ5L3NyYy9naXRodWIuY29tLTFlY2M2Mjk5ZGI5ZWM4MjMvc2VyZGUtanNvbi13YXNtLTAuNC4xL3NyYy9kZS9tb2QucnMAAADQMRAAXQAAACQAAAAJAAAA0DEQAF0AAAB9AAAAIgAAANAxEABdAAAAgQAAACwAAABCdWZmZXIgaXMgZnVsbAAAYDIQAA4AAAAvdXNyL2xvY2FsL2NhcmdvL3JlZ2lzdHJ5L3NyYy9naXRodWIuY29tLTFlY2M2Mjk5ZGI5ZWM4MjMvc2VyZGUtanNvbi13YXNtLTAuNC4xL3NyYy9zZXIvbW9kLnJzAAB4MhAAXgAAANcAAAAJAEHw5cAACyFhdHRlbXB0IHRvIHN1YnRyYWN0IHdpdGggb3ZlcmZsb3cAQaDmwAALkRphdHRlbXB0IHRvIGFkZCB3aXRoIG92ZXJmbG93L3Vzci9sb2NhbC9jYXJnby9yZWdpc3RyeS9zcmMvZ2l0aHViLmNvbS0xZWNjNjI5OWRiOWVjODIzL2Jhc2U2NC0wLjEzLjAvc3JjL2VuY29kZS5ycwAAADwzEABVAAAAkgAAACcAAAB1c2l6ZSBvdmVyZmxvdyB3aGVuIGNhbGN1bGF0aW5nIGI2NCBsZW5ndGgAADwzEABVAAAAmQAAAAoAAAA8MxAAVQAAALYAAAAzAAAAPDMQAFUAAAC2AAAAIAAAADwzEABVAAAAtwAAADoAAAA8MxAAVQAAALcAAAAlAAAAPDMQAFUAAAD3AAAAGAAAADwzEABVAAAA/AAAAC8AAAA8MxAAVQAAAPwAAAAcAAAAPDMQAFUAAAD9AAAANgAAADwzEABVAAAA/QAAACEAAAA8MxAAVQAAABMBAAAuAAAAPDMQAFUAAAATAQAACQAAADwzEABVAAAAFAEAAAkAAAA8MxAAVQAAAAsBAAAuAAAAPDMQAFUAAAALAQAACQAAADwzEABVAAAADQEAAA8AAAA8MxAAVQAAAAwBAAAJAAAAPDMQAFUAAAAPAQAACQAAADwzEABVAAAAEQEAAAkAAABpbnRlcm5hbCBlcnJvcjogZW50ZXJlZCB1bnJlYWNoYWJsZSBjb2RlOiAAAAA1EAAqAAAASW1wb3NzaWJsZSByZW1haW5kZXI0NRAAFAAAADwzEABVAAAAKgEAABYAAAA8MxAAVQAAADsBAAAJAAAASW52YWxpZCBsYXN0IHN5bWJvbCAsIG9mZnNldCAuAABwNRAAFAAAAIQ1EAAJAAAAjTUQAAEAAABFbmNvZGVkIHRleHQgY2Fubm90IGhhdmUgYSA2LWJpdCByZW1haW5kZXIuAKg1EAArAAAASW52YWxpZCBieXRlIAAAANw1EAANAAAAhDUQAAkAAACNNRAAAQAAAE92ZXJmbG93IHdoZW4gY2FsY3VsYXRpbmcgbnVtYmVyIG9mIGNodW5rcyBpbiBpbnB1dC91c3IvbG9jYWwvY2FyZ28vcmVnaXN0cnkvc3JjL2dpdGh1Yi5jb20tMWVjYzYyOTlkYjllYzgyMy9iYXNlNjQtMC4xMy4wL3NyYy9kZWNvZGUucnM3NhAAVQAAALwAAAAKAAAAISIjJCUmJygpKissLTAxMjM0NTY3ODlAQUJDREVGR0hJSktMTU5QUVJTVFVWWFlaW2BhYmNkZWhpamtsbXBxckFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5KywuL0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Li8wMTIzNDU2Nzg5QUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ekFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5LV9BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsv////////////////////////////////////////////AAECAwQFBgcICQoLDP//DQ4PEBESExQVFv///////xcYGRobHB0eHyAhIiMkJf8mJygpKiss/y0uLzD/////MTIzNDU2//83ODk6Ozz//z0+P/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////8+P////zQ1Njc4OTo7PD3/////////AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBn///////8aGxwdHh8gISIjJCUmJygpKissLS4vMDEyM///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////AAE2Nzg5Ojs8PT4//////////wIDBAUGBwgJCgsMDQ4PEBESExQVFhcYGRob////////HB0eHyAhIiMkJSYnKCkqKywtLi8wMTIzNDX//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////wABAgMEBQYHCAkKC/////////8MDQ4PEBESExQVFhcYGRobHB0eHyAhIiMkJf///////yYnKCkqKywtLi8wMTIzNDU2Nzg5Ojs8PT4//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////z7//zQ1Njc4OTo7PD3/////////AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBn/////P/8aGxwdHh8gISIjJCUmJygpKissLS4vMDEyM///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////Pv///z80NTY3ODk6Ozw9/////////wABAgMEBQYHCAkKCwwNDg8QERITFBUWFxgZ////////GhscHR4fICEiIyQlJicoKSorLC0uLzAxMjP/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////3DcQAJw3EABcNxAAHDcQANw2EACcNhAAHD0QABw8EAAcOxAAHDoQABw5EAAcOBAAbgAAAAgAAAAEAAAAbwAAAHAAAABuAAAACAAAAAQAAABxAAAAYG9uZSBvZiBxPhAABwAAACwgAACAPhAAAgAAAHA+EAABAAAAcD4QAAEAAABgIG9yIGAAAHA+EAABAAAAnD4QAAYAAABwPhAAAQAAAC91c3IvbG9jYWwvY2FyZ28vcmVnaXN0cnkvc3JjL2dpdGh1Yi5jb20tMWVjYzYyOTlkYjllYzgyMy9zZXJkZS0xLjAuMTM3L3NyYy9kZS9tb2QucnNleHBsaWNpdCBwYW5pYwC8PhAAVQAAAOgIAAASAAAAYXR0ZW1wdCB0byBhZGQgd2l0aCBvdmVyZmxvdy91c3IvbG9jYWwvY2FyZ28vcmVnaXN0cnkvc3JjL2dpdGh1Yi5jb20tMWVjYzYyOTlkYjllYzgyMy9ibG9jay1idWZmZXItMC45LjAvc3JjL2xpYi5ycwBMPxAAVwAAAIQAAAAJAAAATD8QAFcAAACFAAAACQAAAEw/EABXAAAAhwAAABcAAABMPxAAVwAAAIsAAAAbAAAATD8QAFcAAAA6AAAAIwAAAEw/EABXAAAAOgAAAA0AAABMPxAAVwAAADoAAAAxAAAATD8QAFcAAAA7AAAADQAAAEw/EABXAAAAQQAAAA0AQcCAwQALxxthdHRlbXB0IHRvIHN1YnRyYWN0IHdpdGggb3ZlcmZsb3cAAABMPxAAVwAAANYAAAAJAAAAZ+YJaoWuZ7ty8248OvVPpX9SDlGMaAWbq9mDHxnN4FsvdXNyL2xvY2FsL2NhcmdvL3JlZ2lzdHJ5L3NyYy9naXRodWIuY29tLTFlY2M2Mjk5ZGI5ZWM4MjMvc2hhMi0wLjkuOS9zcmMvc2hhMjU2LnJzAACUQBAAUgAAAB8AAAAJAAAAcwAAAAQAAAAEAAAAdAAAAHUAAAB2AAAAcwAAAAQAAAAEAAAAdwAAAGFscmVhZHkgYm9ycm93ZWRjYWxsZWQgYE9wdGlvbjo6dW53cmFwKClgIG9uIGEgYE5vbmVgIHZhbHVlAHMAAAAAAAAAAQAAAHgAAABzAAAABAAAAAQAAAB5AAAAcwAAAAQAAAAEAAAAegAAAAEAAAAAAAAAbGlicmFyeS9zdGQvc3JjL3RocmVhZC9tb2QucnNmYWlsZWQgdG8gZ2VuZXJhdGUgdW5pcXVlIHRocmVhZCBJRDogYml0c3BhY2UgZXhoYXVzdGVklEEQAB0AAAD7AwAAEQAAAJRBEAAdAAAAAQQAACoAAAAARXJyb3JraW5kAABzAAAAAQAAAAEAAAB7AAAAbWVzc2FnZQBzAAAACAAAAAQAAAB8AAAAS2luZE9zY29kZQAAcwAAAAQAAAAEAAAAfQAAAH4AAAAMAAAABAAAAH8AAABsaWJyYXJ5L3N0ZC9zcmMvc3lzX2NvbW1vbi90aHJlYWRfaW5mby5ycwAAAGhCEAApAAAAKwAAACsAAABjYW5ub3QgbW9kaWZ5IHRoZSBwYW5pYyBob29rIGZyb20gYSBwYW5pY2tpbmcgdGhyZWFkbGlicmFyeS9zdGQvc3JjL3Bhbmlja2luZy5yc9hCEAAcAAAAdgAAAAkAAADYQhAAHAAAAPABAAAfAAAA2EIQABwAAADxAQAAHgAAAIAAAAAQAAAABAAAAIEAAACCAAAAcwAAAAgAAAAEAAAAgwAAAIQAAAB+AAAADAAAAAQAAACFAAAAcwAAAAgAAAAEAAAAhgAAAHMAAAAIAAAABAAAAIcAAACIAAAAVW5zdXBwb3J0ZWROdWxFcnJvcgBzAAAABAAAAAQAAACJAAAAZXJyb3JDdXN0b20AcwAAAAQAAAAEAAAAigAAAHMAAAAEAAAABAAAAIsAAABVbmNhdGVnb3JpemVkT3RoZXJPdXRPZk1lbW9yeVVuZXhwZWN0ZWRFb2ZJbnRlcnJ1cHRlZEFyZ3VtZW50TGlzdFRvb0xvbmdGaWxlbmFtZVRvb0xvbmdUb29NYW55TGlua3NDcm9zc2VzRGV2aWNlc0RlYWRsb2NrRXhlY3V0YWJsZUZpbGVCdXN5UmVzb3VyY2VCdXN5RmlsZVRvb0xhcmdlRmlsZXN5c3RlbVF1b3RhRXhjZWVkZWROb3RTZWVrYWJsZVN0b3JhZ2VGdWxsV3JpdGVaZXJvVGltZWRPdXRJbnZhbGlkRGF0YUludmFsaWRJbnB1dFN0YWxlTmV0d29ya0ZpbGVIYW5kbGVGaWxlc3lzdGVtTG9vcFJlYWRPbmx5RmlsZXN5c3RlbURpcmVjdG9yeU5vdEVtcHR5SXNBRGlyZWN0b3J5Tm90QURpcmVjdG9yeVdvdWxkQmxvY2tBbHJlYWR5RXhpc3RzQnJva2VuUGlwZU5ldHdvcmtEb3duQWRkck5vdEF2YWlsYWJsZUFkZHJJblVzZU5vdENvbm5lY3RlZENvbm5lY3Rpb25BYm9ydGVkTmV0d29ya1VucmVhY2hhYmxlSG9zdFVucmVhY2hhYmxlQ29ubmVjdGlvblJlc2V0Q29ubmVjdGlvblJlZnVzZWRQZXJtaXNzaW9uRGVuaWVkTm90Rm91bmRvcGVyYXRpb24gc3VjY2Vzc2Z1bG9wZXJhdGlvbiBub3Qgc3VwcG9ydGVkIG9uIHRoaXMgcGxhdGZvcm0A90UQACgAAABjb25kdmFyIHdhaXQgbm90IHN1cHBvcnRlZGxpYnJhcnkvc3RkL3NyYy9zeXMvd2FzbS8uLi91bnN1cHBvcnRlZC9jb25kdmFyLnJzQkYQADIAAAAXAAAACQAAAGNhbm5vdCByZWN1cnNpdmVseSBhY3F1aXJlIG11dGV4hEYQACAAAABsaWJyYXJ5L3N0ZC9zcmMvc3lzL3dhc20vLi4vdW5zdXBwb3J0ZWQvbXV0ZXgucnOsRhAAMAAAABcAAAAJAAAAjAAAAAQAAAAEAAAAjQAAAI4AAACPAAAAjAAAAAQAAAAEAAAAkAAAAIwAAAAAAAAAAQAAACEAAABsaWJyYXJ5L2FsbG9jL3NyYy9yYXdfdmVjLnJzY2FwYWNpdHkgb3ZlcmZsb3cAAAAkRxAAHAAAAP0BAAAFAAAAYSBmb3JtYXR0aW5nIHRyYWl0IGltcGxlbWVudGF0aW9uIHJldHVybmVkIGFuIGVycm9ybGlicmFyeS9hbGxvYy9zcmMvZm10LnJzAJdHEAAYAAAAVQIAABwAAADvv71Gcm9tVXRmOEVycm9yYnl0ZXMAAACMAAAABAAAAAQAAACRAAAAZXJyb3IAAACMAAAABAAAAAQAAACSAAAAAAAAAG51bWJlciB3b3VsZCBiZSB6ZXJvIGZvciBub24temVybyB0eXBlbnVtYmVyIHRvbyBzbWFsbCB0byBmaXQgaW4gdGFyZ2V0IHR5cGVudW1iZXIgdG9vIGxhcmdlIHRvIGZpdCBpbiB0YXJnZXQgdHlwZWludmFsaWQgZGlnaXQgZm91bmQgaW4gc3RyaW5nY2Fubm90IHBhcnNlIGludGVnZXIgZnJvbSBlbXB0eSBzdHJpbmcuLgC5SBAAAgAAAEJvcnJvd011dEVycm9yY2FsbGVkIGBPcHRpb246OnVud3JhcCgpYCBvbiBhIGBOb25lYCB2YWx1ZToAAARIEAAAAAAA/UgQAAEAAAD9SBAAAQAAAJsAAAAAAAAAAQAAAJwAAABwYW5pY2tlZCBhdCAnJywgNEkQAAEAAAA1SRAAAwAAAARIEAAAAAAAaW5kZXggb3V0IG9mIGJvdW5kczogdGhlIGxlbiBpcyAgYnV0IHRoZSBpbmRleCBpcyAAAFBJEAAgAAAAcEkQABIAAABtYXRjaGVzIT09PWFzc2VydGlvbiBmYWlsZWQ6IGAobGVmdCAgcmlnaHQpYAogIGxlZnQ6IGBgLAogcmlnaHQ6IGBgOiAAAACfSRAAGQAAALhJEAASAAAAykkQAAwAAADWSRAAAwAAAGAAAACfSRAAGQAAALhJEAASAAAAykkQAAwAAAD8SRAAAQAAADogAAAESBAAAAAAACBKEAACAAAAmwAAAAwAAAAEAAAAnQAAAJ4AAACfAAAAICAgIGxpYnJhcnkvY29yZS9zcmMvZm10L2J1aWxkZXJzLnJzUEoQACAAAAAvAAAAIQAAAFBKEAAgAAAAMAAAABIAAAAgewosCiwgIHsgLi4KfSwgLi4gfSB7IC4uIH0gfSgKKCwpClubAAAABAAAAAQAAACgAAAAXWxpYnJhcnkvY29yZS9zcmMvZm10L251bS5yc8VKEAAbAAAAZQAAABQAAAAweDAwMDEwMjAzMDQwNTA2MDcwODA5MTAxMTEyMTMxNDE1MTYxNzE4MTkyMDIxMjIyMzI0MjUyNjI3MjgyOTMwMzEzMjMzMzQzNTM2MzczODM5NDA0MTQyNDM0NDQ1NDY0NzQ4NDk1MDUxNTI1MzU0NTU1NjU3NTg1OTYwNjE2MjYzNjQ2NTY2Njc2ODY5NzA3MTcyNzM3NDc1NzY3Nzc4Nzk4MDgxODI4Mzg0ODU4Njg3ODg4OTkwOTE5MjkzOTQ5NTk2OTc5ODk5YXNzZXJ0aW9uIGZhaWxlZDogKmN1cnIgPiAxOQAAxUoQABsAAADlAQAABQAAAJsAAAAEAAAABAAAAKEAAACiAAAAowAAAGxpYnJhcnkvY29yZS9zcmMvZm10L21vZC5yc3RydWVmYWxzZQBMEAAbAAAAXQgAAB4AAAAATBAAGwAAAGQIAAAWAAAAbGlicmFyeS9jb3JlL3NyYy9zbGljZS9tZW1jaHIucnNETBAAIAAAAFsAAAAFAAAAcmFuZ2Ugc3RhcnQgaW5kZXggIG91dCBvZiByYW5nZSBmb3Igc2xpY2Ugb2YgbGVuZ3RoIHRMEAASAAAAhkwQACIAAAByYW5nZSBlbmQgaW5kZXgguEwQABAAAACGTBAAIgAAAHNsaWNlIGluZGV4IHN0YXJ0cyBhdCAgYnV0IGVuZHMgYXQgANhMEAAWAAAA7kwQAA0AAABzb3VyY2Ugc2xpY2UgbGVuZ3RoICgpIGRvZXMgbm90IG1hdGNoIGRlc3RpbmF0aW9uIHNsaWNlIGxlbmd0aCAoDE0QABUAAAAhTRAAKwAAALFKEAABAAAAbGlicmFyeS9jb3JlL3NyYy9zdHIvdmFsaWRhdGlvbnMucnMBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB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OQcRQAULAg6X+AiE1ioJoueBMy0DEQQIgYyJBGsFDQMJBxCSYEcJdDyA9gpzCHAVRoCaFAxXCRmAh4FHA4VCDxWEUB+A4SuA1S0DGgQCgUAfEToFAYTggPcpTAQKBAKDEURMPYDCPAYBBFUFGzQCgQ4sBGQMVgqArjgdDSwECQcCDgaAmoPYBRADDQN0DFkHDAQBDwwEOAgKBigIIk6BVAwVAwUDBwkdAwsFBgoKBggIBwmAyyUKhAZsaWJyYXJ5L2NvcmUvc3JjL3VuaWNvZGUvdW5pY29kZV9kYXRhLnJzAAAAuVUQACgAAABLAAAAKAAAALlVEAAoAAAAVwAAABYAAAC5VRAAKAAAAFIAAAA+AAAAmwAAAAQAAAAEAAAApAAAAFNvbWVOb25lRXJyb3JVdGY4RXJyb3J2YWxpZF91cF90b2Vycm9yX2xlbgAAmwAAAAQAAAAEAAAApQAAAAADAACDBCAAkQVgAF0ToAASFyAfDCBgH+8soCsqMCAsb6bgLAKoYC0e+2AuAP4gNp7/YDb9AeE2AQohNyQN4TerDmE5LxihOTAc4UfzHiFM8GrhT09vIVCdvKFQAM9hUWXRoVEA2iFSAODhUzDhYVWu4qFW0OjhViAAblfwAf9XAHAABwAtAQEBAgECAQFICzAVEAFlBwIGAgIBBCMBHhtbCzoJCQEYBAEJAQMBBSsDPAgqGAEgNwEBAQQIBAEDBwoCHQE6AQEBAgQIAQkBCgIaAQICOQEEAgQCAgMDAR4CAwELAjkBBAUBAgQBFAIWBgEBOgEBAgEECAEHAwoCHgE7AQEBDAEJASgBAwE3AQEDBQMBBAcCCwIdAToBAgECAQMBBQIHAgsCHAI5AgEBAgQIAQkBCgIdAUgBBAECAwEBCAFRAQIHDAhiAQIJCwZKAhsBAQEBATcOAQUBAgULASQJAWYEAQYBAgICGQIEAxAEDQECAgYBDwEAAwADHQIeAh4CQAIBBwgBAgsJAS0DAQF1AiIBdgMEAgkBBgPbAgIBOgEBBwEBAQECCAYKAgEwHzEEMAcBAQUBKAkMAiAEAgIBAzgBAQIDAQEDOggCApgDAQ0BBwQBBgEDAsZAAAHDIQADjQFgIAAGaQIABAEKIAJQAgABAwEEARkCBQGXAhoSDQEmCBkLLgMwAQIEAgInAUMGAgICAgwBCAEvATMBAQMCAgUCAQEqAggB7gECAQQBAAEAEBAQAAIAAeIBlQUAAwECBQQoAwQBpQIABAACmQsxBHsBNg8pAQICCgMxBAICBwE9AyQFAQg+AQwCNAkKBAIBXwMCAQECBgGgAQMIFQI5AgEBAQEWAQ4HAwXDCAIDAQEXAVEBAgYBAQIBAQIBAusBAgQGAgECGwJVCAIBAQJqAQEBAgYBAWUDAgQBBQAJAQL1AQoCAQEEAZAEAgIEASAKKAYCBAgBCQYCAy4NAQIABwEGAQFSFgIHAQIBAnoGAwEBAgEHAQFIAgMBAQEAAgAFOwcAAT8EUQEAAgAuAhcAAQEDBAUICAIHHgSUAwA3BDIIAQ4BFgUBDwAHARECBwECAQUABwABPQQAB20HAGCA8ABBqLPBAAsBAQ==", + "code_id": "1", + "code_info": + { + "code_hash": "RwxbcDpoL3eLiwiNSBabjW5D9/RKxwMWaSzb5p5mBeM=", + "creator": "link146asaycmtydq45kxc8evntqfgepagygelel00h", + "instantiate_config": + { + "address": "", + "permission": "Everybody" + } + }, + "pinned": false + } + ], + "contracts": + [ + { + "contract_address": "link14hj2tavq8fpesdwxxcu44rty3hh90vhujrvcmstl4zr3txmfvw9sgf2vn8", + "contract_info": + { + "admin": "", + "code_id": "1", + "created": null, + "creator": "link146asaycmtydq45kxc8evntqfgepagygelel00h", + "extension": null, + "ibc_port_id": "", + "label": "From deploy_hackatom.js (0)" + }, + "contract_state": + [ + { + "key": "636F6E666967", + "value": "eyJ2ZXJpZmllciI6ImxpbmsxNDZhc2F5Y210eWRxNDVreGM4ZXZudHFmZ2VwYWd5Z2VsZWwwMGgiLCJiZW5lZmljaWFyeSI6ImxpbmsxNDZhc2F5Y210eWRxNDVreGM4ZXZudHFmZ2VwYWd5Z2VsZWwwMGgiLCJmdW5kZXIiOiJsaW5rMTQ2YXNheWNtdHlkcTQ1a3hjOGV2bnRxZmdlcGFneWdlbGVsMDBoIn0=" + } + ] + } + ], + "gen_msgs": + [], + "inactive_contract_addresses": + ["link14hj2tavq8fpesdwxxcu44rty3hh90vhujrvcmstl4zr3txmfvw9sgf2vn8"], + "params": + { + "code_upload_access": + { + "address": "", + "permission": "Everybody" + }, + "compile_cost": "3", + "gas_multiplier": "140000000", + "instance_cost": "60000", + "instantiate_default_permission": "Everybody" + }, + "sequences": + [ + { + "id_key": "BGxhc3RDb2RlSWQ=", + "value": "2" + }, + { + "id_key": "BGxhc3RDb250cmFjdElk", + "value": "2" + } + ] +} +} \ No newline at end of file diff --git a/x/wasmplus/client/testutil/tx.go b/x/wasmplus/client/testutil/tx.go new file mode 100644 index 0000000000..67fa32d5d0 --- /dev/null +++ b/x/wasmplus/client/testutil/tx.go @@ -0,0 +1,90 @@ +package testutil + +import ( + "fmt" + "os" + + "github.com/line/lbm-sdk/client/flags" + clitestutil "github.com/line/lbm-sdk/testutil/cli" + sdk "github.com/line/lbm-sdk/types" + + wasmkeeper "github.com/line/wasmd/x/wasm/keeper" + "github.com/line/wasmd/x/wasmplus/client/cli" +) + +func (s *IntegrationTestSuite) TestStoreCodeAndInstantiateContractCmd() { + val := s.network.Validators[0] + owner := val.Address.String() + + wasmPath := "../../../wasm/keeper/testdata/hackatom.wasm" + _, err := os.ReadFile(wasmPath) + s.Require().NoError(err) + + params := fmt.Sprintf("{\"verifier\": \"%s\", \"beneficiary\": \"%s\"}", s.network.Validators[0].Address.String(), wasmkeeper.RandomAccountAddress(s.T())) + + testCases := map[string]struct { + args []string + valid bool + }{ + "valid storeCodeAndInstantiateContract": { + []string{ + wasmPath, + params, + fmt.Sprintf("--label=%s", "TestContract"), + fmt.Sprintf("--admin=%s", owner), + fmt.Sprintf("--%s=%s", flags.FlagFrom, val.Address.String()), + fmt.Sprintf("--%s=%d", flags.FlagGas, 1600000), + }, + true, + }, + "wrong args count": { + []string{"0"}, + false, + }, + "no label error": { + []string{ + wasmPath, + params, + }, + false, + }, + "no sender error": { + []string{ + wasmPath, + params, + fmt.Sprintf("--label=%s", "TestContract"), + fmt.Sprintf("--admin=%s", owner), + }, + false, + }, + "wrong wasm path error": { + []string{ + "../../keeper/testdata/noexist.wasm", + params, + fmt.Sprintf("--label=%s", "TestContract"), + fmt.Sprintf("--admin=%s", owner), + fmt.Sprintf("--%s=%s", flags.FlagFrom, val.Address.String()), + fmt.Sprintf("--%s=%d", flags.FlagGas, 1600000), + }, + false, + }, + } + + for name, tc := range testCases { + tc := tc + + s.Run(name, func() { + cmd := cli.StoreCodeAndInstantiateContractCmd() + out, err := clitestutil.ExecTestCLICmd(val.ClientCtx, cmd, append(tc.args, commonArgs...)) + if !tc.valid { + s.Require().Error(err) + return + } + s.Require().NoError(err) + + var res sdk.TxResponse + s.Require().NoError(val.ClientCtx.Codec.UnmarshalJSON(out.Bytes(), &res), out.String()) + s.Require().EqualValues(0, res.Code, out.String()) + }) + } +} diff --git a/x/wasmplus/module.go b/x/wasmplus/module.go index 8f3d44be19..ab546ccd81 100644 --- a/x/wasmplus/module.go +++ b/x/wasmplus/module.go @@ -20,6 +20,7 @@ import ( wasmkeeper "github.com/line/wasmd/x/wasm/keeper" "github.com/line/wasmd/x/wasm/simulation" wasmtypes "github.com/line/wasmd/x/wasm/types" + "github.com/line/wasmd/x/wasmplus/client/cli" "github.com/line/wasmd/x/wasmplus/keeper" "github.com/line/wasmd/x/wasmplus/types" ) @@ -73,16 +74,12 @@ func (a AppModuleBasic) RegisterGRPCGatewayRoutes(clientCtx client.Context, serv // GetTxCmd returns the root tx command for the wasm module. func (a AppModuleBasic) GetTxCmd() *cobra.Command { - //return wasmcli.GetTxCmd() - //TODO implement me - panic("implement me") + return cli.GetTxCmd() } // GetQueryCmd returns no root query command for the wasm module. func (a AppModuleBasic) GetQueryCmd() *cobra.Command { - //return cli.GetQueryCmd() - //TODO implement me - panic("implement me") + return cli.GetQueryCmd() } type AppModule struct { From d5e1b016059f68878e516ca229f8f69e840cc517 Mon Sep 17 00:00:00 2001 From: zemyblue Date: Fri, 20 Jan 2023 14:25:24 +0900 Subject: [PATCH 04/17] feat: remove params for wasmplus. just use original params of x/wasm --- docs/proto/proto-docs.md | 40 +-- proto/lbm/wasm/v1/genesis.proto | 4 +- proto/lbm/wasm/v1/types.proto | 24 -- x/wasmplus/keeper/genesis.go | 5 +- x/wasmplus/keeper/genesis_test.go | 46 +-- x/wasmplus/keeper/keeper.go | 36 +-- x/wasmplus/keeper/test_common.go | 2 +- x/wasmplus/module.go | 2 +- x/wasmplus/types/genesis.pb.go | 59 ++-- x/wasmplus/types/genesis_test.go | 86 ------ x/wasmplus/types/params.go | 131 -------- x/wasmplus/types/params_test.go | 243 --------------- x/wasmplus/types/test_fixtures.go | 53 ---- x/wasmplus/types/types.pb.go | 476 ------------------------------ 14 files changed, 69 insertions(+), 1138 deletions(-) delete mode 100644 proto/lbm/wasm/v1/types.proto delete mode 100644 x/wasmplus/types/genesis_test.go delete mode 100644 x/wasmplus/types/params.go delete mode 100644 x/wasmplus/types/params_test.go delete mode 100644 x/wasmplus/types/test_fixtures.go delete mode 100644 x/wasmplus/types/types.pb.go diff --git a/docs/proto/proto-docs.md b/docs/proto/proto-docs.md index 52fde349b7..895122161d 100644 --- a/docs/proto/proto-docs.md +++ b/docs/proto/proto-docs.md @@ -88,9 +88,6 @@ - [EventActivateContractProposal](#lbm.wasm.v1.EventActivateContractProposal) - [EventDeactivateContractProposal](#lbm.wasm.v1.EventDeactivateContractProposal) -- [lbm/wasm/v1/types.proto](#lbm/wasm/v1/types.proto) - - [Params](#lbm.wasm.v1.Params) - - [lbm/wasm/v1/genesis.proto](#lbm/wasm/v1/genesis.proto) - [GenesisState](#lbm.wasm.v1.GenesisState) @@ -1347,41 +1344,6 @@ EventDeactivateContractProposal is the event that is emitted when the contract i - - - - - - - - - - - -

Top

- -## lbm/wasm/v1/types.proto - - - - - -### Params -Params defines the set of wasm parameters. - - -| Field | Type | Label | Description | -| ----- | ---- | ----- | ----------- | -| `code_upload_access` | [cosmwasm.wasm.v1.AccessConfig](#cosmwasm.wasm.v1.AccessConfig) | | | -| `instantiate_default_permission` | [cosmwasm.wasm.v1.AccessType](#cosmwasm.wasm.v1.AccessType) | | | -| `gas_multiplier` | [uint64](#uint64) | | | -| `instance_cost` | [uint64](#uint64) | | | -| `compile_cost` | [uint64](#uint64) | | | - - - - - @@ -1407,7 +1369,7 @@ GenesisState - genesis state of x/wasm | Field | Type | Label | Description | | ----- | ---- | ----- | ----------- | -| `params` | [Params](#lbm.wasm.v1.Params) | | | +| `params` | [cosmwasm.wasm.v1.Params](#cosmwasm.wasm.v1.Params) | | | | `codes` | [cosmwasm.wasm.v1.Code](#cosmwasm.wasm.v1.Code) | repeated | | | `contracts` | [cosmwasm.wasm.v1.Contract](#cosmwasm.wasm.v1.Contract) | repeated | | | `sequences` | [cosmwasm.wasm.v1.Sequence](#cosmwasm.wasm.v1.Sequence) | repeated | | diff --git a/proto/lbm/wasm/v1/genesis.proto b/proto/lbm/wasm/v1/genesis.proto index 0b4d9c5e84..b6712e065d 100644 --- a/proto/lbm/wasm/v1/genesis.proto +++ b/proto/lbm/wasm/v1/genesis.proto @@ -2,14 +2,14 @@ syntax = "proto3"; package lbm.wasm.v1; import "gogoproto/gogo.proto"; -import "lbm/wasm/v1/types.proto"; +import "cosmwasm/wasm/v1/types.proto"; import "cosmwasm/wasm/v1/genesis.proto"; option go_package = "github.com/line/wasmd/x/wasmplus/types"; // GenesisState - genesis state of x/wasm message GenesisState { - Params params = 1 [ (gogoproto.nullable) = false ]; + cosmwasm.wasm.v1.Params params = 1 [ (gogoproto.nullable) = false ]; repeated cosmwasm.wasm.v1.Code codes = 2 [ (gogoproto.nullable) = false, (gogoproto.jsontag) = "codes,omitempty" ]; repeated cosmwasm.wasm.v1.Contract contracts = 3 [ diff --git a/proto/lbm/wasm/v1/types.proto b/proto/lbm/wasm/v1/types.proto deleted file mode 100644 index c60c66f1f1..0000000000 --- a/proto/lbm/wasm/v1/types.proto +++ /dev/null @@ -1,24 +0,0 @@ -syntax = "proto3"; -package lbm.wasm.v1; - -import "gogoproto/gogo.proto"; -import "cosmwasm/wasm/v1/types.proto"; - -option go_package = "github.com/line/wasmd/x/wasmplus/types"; -option (gogoproto.goproto_getters_all) = false; -option (gogoproto.equal_all) = true; - -// Params defines the set of wasm parameters. -message Params { - option (gogoproto.goproto_stringer) = false; - cosmwasm.wasm.v1.AccessConfig code_upload_access = 1 [ - (gogoproto.nullable) = false, - (gogoproto.moretags) = "yaml:\"code_upload_access\"" - ]; - cosmwasm.wasm.v1.AccessType instantiate_default_permission = 2 - [ (gogoproto.moretags) = "yaml:\"instantiate_default_permission\"" ]; - - uint64 gas_multiplier = 3 [(gogoproto.moretags) = "yaml:\"gas_multiplier\""]; - uint64 instance_cost = 4 [(gogoproto.moretags) = "yaml:\"instance_cost\""]; - uint64 compile_cost = 5 [(gogoproto.moretags) = "yaml:\"compile_cost\""]; -} diff --git a/x/wasmplus/keeper/genesis.go b/x/wasmplus/keeper/genesis.go index e6a28973c1..8b17fe4498 100644 --- a/x/wasmplus/keeper/genesis.go +++ b/x/wasmplus/keeper/genesis.go @@ -21,8 +21,6 @@ func InitGenesis( return nil, sdkerrors.Wrap(err, "wasm") } - keeper.setParams(ctx, data.Params) - // set InactiveContractAddresses for i, contractAddr := range data.InactiveContractAddresses { inactiveContractAddr := sdk.MustAccAddressFromBech32(contractAddr) @@ -38,10 +36,9 @@ func InitGenesis( // ExportGenesis returns a GenesisState for a given context and keeper. func ExportGenesis(ctx sdk.Context, keeper *Keeper) *types.GenesisState { wasmState := wasmkeeper.ExportGenesis(ctx, &keeper.Keeper) - params := keeper.getParams(ctx) genState := types.GenesisState{ - Params: params, + Params: wasmState.Params, Codes: wasmState.Codes, Contracts: wasmState.Contracts, Sequences: wasmState.Sequences, diff --git a/x/wasmplus/keeper/genesis_test.go b/x/wasmplus/keeper/genesis_test.go index fc9cc67cff..1ddc159166 100644 --- a/x/wasmplus/keeper/genesis_test.go +++ b/x/wasmplus/keeper/genesis_test.go @@ -51,7 +51,7 @@ func TestGenesisExportImport(t *testing.T) { // store some test data f := fuzz.New().Funcs(wasmkeeper.ModelFuzzers...) - wasmKeeper.setParams(srcCtx, types.DefaultParams()) + wasmKeeper.SetParams(srcCtx, wasmTypes.DefaultParams()) for i := 0; i < 5; i++ { var ( @@ -99,9 +99,9 @@ func TestGenesisExportImport(t *testing.T) { _, _, err = contractKeeper.Instantiate(srcCtx, codeID, creatorAddr, creatorAddr, initMsgBz, "test", nil) require.NoError(t, err) } - var wasmParams types.Params + var wasmParams wasmTypes.Params f.NilChance(0).Fuzz(&wasmParams) - wasmKeeper.setParams(srcCtx, wasmParams) + wasmKeeper.SetParams(srcCtx, wasmParams) // add inactiveContractAddr var inactiveContractAddr []sdk.AccAddress @@ -128,7 +128,7 @@ func TestGenesisExportImport(t *testing.T) { require.NoError(t, err) // compare - dstParams := dstKeeper.getParams(dstCtx) + dstParams := dstKeeper.GetParams(dstCtx) require.Equal(t, wasmParams, dstParams) var destInactiveContractAddr []sdk.AccAddress @@ -161,7 +161,7 @@ func TestGenesisInit(t *testing.T) { {IDKey: wasmTypes.KeyLastCodeID, Value: 2}, {IDKey: wasmTypes.KeyLastInstanceID, Value: 1}, }, - Params: types.DefaultParams(), + Params: wasmTypes.DefaultParams(), }, expSuccess: true, }, @@ -180,7 +180,7 @@ func TestGenesisInit(t *testing.T) { {IDKey: wasmTypes.KeyLastCodeID, Value: 10}, {IDKey: wasmTypes.KeyLastInstanceID, Value: 1}, }, - Params: types.DefaultParams(), + Params: wasmTypes.DefaultParams(), }, expSuccess: true, }, @@ -200,7 +200,7 @@ func TestGenesisInit(t *testing.T) { {IDKey: wasmTypes.KeyLastCodeID, Value: 3}, {IDKey: wasmTypes.KeyLastInstanceID, Value: 1}, }, - Params: types.DefaultParams(), + Params: wasmTypes.DefaultParams(), }, expSuccess: true, }, @@ -210,7 +210,7 @@ func TestGenesisInit(t *testing.T) { CodeInfo: wasmTypes.CodeInfoFixture(func(i *wasmTypes.CodeInfo) { i.CodeHash = make([]byte, sha256.Size) }), CodeBytes: wasmCode, }}, - Params: types.DefaultParams(), + Params: wasmTypes.DefaultParams(), }}, "prevent duplicate codeIDs": {src: types.GenesisState{ Codes: []wasmTypes.Code{ @@ -225,7 +225,7 @@ func TestGenesisInit(t *testing.T) { CodeBytes: wasmCode, }, }, - Params: types.DefaultParams(), + Params: wasmTypes.DefaultParams(), }}, "codes with same checksum can be pinned": { src: types.GenesisState{ @@ -243,7 +243,7 @@ func TestGenesisInit(t *testing.T) { Pinned: true, }, }, - Params: types.DefaultParams(), + Params: wasmTypes.DefaultParams(), }, }, "happy path: code id in info and contract do match": { @@ -263,7 +263,7 @@ func TestGenesisInit(t *testing.T) { {IDKey: wasmTypes.KeyLastCodeID, Value: 2}, {IDKey: wasmTypes.KeyLastInstanceID, Value: 2}, }, - Params: types.DefaultParams(), + Params: wasmTypes.DefaultParams(), }, expSuccess: true, }, @@ -287,7 +287,7 @@ func TestGenesisInit(t *testing.T) { {IDKey: wasmTypes.KeyLastCodeID, Value: 2}, {IDKey: wasmTypes.KeyLastInstanceID, Value: 3}, }, - Params: types.DefaultParams(), + Params: wasmTypes.DefaultParams(), }, expSuccess: true, }, @@ -299,7 +299,7 @@ func TestGenesisInit(t *testing.T) { ContractInfo: wasmTypes.ContractInfoFixture(func(c *wasmTypes.ContractInfo) { c.CodeID = 1 }, wasmTypes.OnlyGenesisFields), }, }, - Params: types.DefaultParams(), + Params: wasmTypes.DefaultParams(), }, }, "prevent duplicate contract address": { @@ -318,7 +318,7 @@ func TestGenesisInit(t *testing.T) { ContractInfo: wasmTypes.ContractInfoFixture(func(c *wasmTypes.ContractInfo) { c.CodeID = 1 }, wasmTypes.OnlyGenesisFields), }, }, - Params: types.DefaultParams(), + Params: wasmTypes.DefaultParams(), }, }, "prevent duplicate contract model keys": { @@ -344,7 +344,7 @@ func TestGenesisInit(t *testing.T) { }, }, }, - Params: types.DefaultParams(), + Params: wasmTypes.DefaultParams(), }, }, "prevent duplicate sequences": { @@ -353,7 +353,7 @@ func TestGenesisInit(t *testing.T) { {IDKey: []byte("foo"), Value: 1}, {IDKey: []byte("foo"), Value: 9999}, }, - Params: types.DefaultParams(), + Params: wasmTypes.DefaultParams(), }, }, "prevent code id seq init value == max codeID used": { @@ -366,7 +366,7 @@ func TestGenesisInit(t *testing.T) { Sequences: []wasmTypes.Sequence{ {IDKey: wasmTypes.KeyLastCodeID, Value: 1}, }, - Params: types.DefaultParams(), + Params: wasmTypes.DefaultParams(), }, }, "prevent contract id seq init value == count contracts": { @@ -386,7 +386,7 @@ func TestGenesisInit(t *testing.T) { {IDKey: wasmTypes.KeyLastCodeID, Value: 2}, {IDKey: wasmTypes.KeyLastInstanceID, Value: 1}, }, - Params: types.DefaultParams(), + Params: wasmTypes.DefaultParams(), }, }, "validator set update called for any genesis messages": { @@ -396,7 +396,7 @@ func TestGenesisInit(t *testing.T) { StoreCode: wasmTypes.MsgStoreCodeFixture(), }}, }, - Params: types.DefaultParams(), + Params: wasmTypes.DefaultParams(), }, stakingMock: StakingKeeperMock{expCalls: 1, validatorUpdate: []abci.ValidatorUpdate{ { @@ -416,7 +416,7 @@ func TestGenesisInit(t *testing.T) { StoreCode: wasmTypes.MsgStoreCodeFixture(), }}, }, - Params: types.DefaultParams(), + Params: wasmTypes.DefaultParams(), }, msgHandlerMock: MockMsgHandler{expCalls: 1, err: errors.New("test error response")}, stakingMock: StakingKeeperMock{expCalls: 0}, @@ -439,7 +439,7 @@ func TestGenesisInit(t *testing.T) { {IDKey: wasmTypes.KeyLastCodeID, Value: 2}, {IDKey: wasmTypes.KeyLastInstanceID, Value: 3}, }, - Params: types.DefaultParams(), + Params: wasmTypes.DefaultParams(), InactiveContractAddresses: []string{keeper.BuildContractAddressClassic(1, 1).String()}, }, expSuccess: true, @@ -455,7 +455,7 @@ func TestGenesisInit(t *testing.T) { {IDKey: wasmTypes.KeyLastCodeID, Value: 2}, {IDKey: wasmTypes.KeyLastInstanceID, Value: 1}, }, - Params: types.DefaultParams(), + Params: wasmTypes.DefaultParams(), InactiveContractAddresses: []string{humanAddress}, }, }, @@ -470,7 +470,7 @@ func TestGenesisInit(t *testing.T) { {IDKey: wasmTypes.KeyLastCodeID, Value: 2}, {IDKey: wasmTypes.KeyLastInstanceID, Value: 1}, }, - Params: types.DefaultParams(), + Params: wasmTypes.DefaultParams(), InactiveContractAddresses: []string{keeper.BuildContractAddressClassic(1, 1).String()}, }, }, diff --git a/x/wasmplus/keeper/keeper.go b/x/wasmplus/keeper/keeper.go index 6a956c3e9b..ffa7b67b2e 100644 --- a/x/wasmplus/keeper/keeper.go +++ b/x/wasmplus/keeper/keeper.go @@ -2,7 +2,7 @@ package keeper import ( "fmt" - + "github.com/line/lbm-sdk/codec" sdk "github.com/line/lbm-sdk/types" bankpluskeeper "github.com/line/lbm-sdk/x/bankplus/keeper" @@ -16,11 +16,10 @@ import ( type Keeper struct { wasmkeeper.Keeper - cdc codec.Codec - storeKey sdk.StoreKey - metrics *Metrics - bank bankpluskeeper.Keeper - paramSpace paramtypes.Subspace + cdc codec.Codec + storeKey sdk.StoreKey + metrics *Metrics + bank bankpluskeeper.Keeper } func NewKeeper( @@ -48,16 +47,12 @@ func NewKeeper( if !ok { panic("bankKeeper should be bankPlusKeeper") } - // set KeyTable if it has not already been set - if !paramSpace.HasKeyTable() { - paramSpace = paramSpace.WithKeyTable(types.ParamKeyTable()) - } result := Keeper{ - cdc: cdc, - storeKey: storeKey, - metrics: NopMetrics(), - bank: bankPlusKeeper, - paramSpace: paramSpace, + cdc: cdc, + storeKey: storeKey, + metrics: NopMetrics(), + bank: bankPlusKeeper, + //paramSpace: paramSpace, } result.Keeper = wasmkeeper.NewKeeper( cdc, @@ -98,14 +93,3 @@ func (Keeper) Logger(ctx sdk.Context) log.Logger { func ModuleLogger(ctx sdk.Context) log.Logger { return ctx.Logger().With("module", fmt.Sprintf("x/%s", types.ModuleName)) } - -// GetCustomParams returns the total set of wasm parameters. -func (k Keeper) getParams(ctx sdk.Context) types.Params { - var params types.Params - k.paramSpace.GetParamSet(ctx, ¶ms) - return params -} - -func (k Keeper) setParams(ctx sdk.Context, ps types.Params) { - k.paramSpace.SetParamSet(ctx, &ps) -} diff --git a/x/wasmplus/keeper/test_common.go b/x/wasmplus/keeper/test_common.go index 3876d6f7b4..bdbfc05d18 100644 --- a/x/wasmplus/keeper/test_common.go +++ b/x/wasmplus/keeper/test_common.go @@ -405,7 +405,7 @@ func createTestInput( queriers, opts..., ) - keeper.setParams(ctx, types.DefaultParams()) + keeper.SetParams(ctx, wasmtypes.DefaultParams()) // add wasm handler so we can loop-back (contracts calling contracts) contractKeeper := NewPermissionedKeeper(*wasmkeeper.NewDefaultPermissionKeeper(&keeper), keeper) router.AddRoute(sdk.NewRoute(types.RouterKey, TestHandler(contractKeeper))) diff --git a/x/wasmplus/module.go b/x/wasmplus/module.go index ab546ccd81..02b65329b8 100644 --- a/x/wasmplus/module.go +++ b/x/wasmplus/module.go @@ -50,7 +50,7 @@ func (a AppModuleBasic) RegisterInterfaces(registry cdctypes.InterfaceRegistry) // DefaultGenesis returns default genesis state as raw bytes for the wasm module. func (a AppModuleBasic) DefaultGenesis(cdc codec.JSONCodec) json.RawMessage { return cdc.MustMarshalJSON(&types.GenesisState{ - Params: types.DefaultParams(), + Params: wasmtypes.DefaultParams(), }) } diff --git a/x/wasmplus/types/genesis.pb.go b/x/wasmplus/types/genesis.pb.go index c5fbcf3cf5..3dfe136c35 100644 --- a/x/wasmplus/types/genesis.pb.go +++ b/x/wasmplus/types/genesis.pb.go @@ -26,7 +26,7 @@ const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package // GenesisState - genesis state of x/wasm type GenesisState struct { - Params Params `protobuf:"bytes,1,opt,name=params,proto3" json:"params"` + Params types.Params `protobuf:"bytes,1,opt,name=params,proto3" json:"params"` Codes []types.Code `protobuf:"bytes,2,rep,name=codes,proto3" json:"codes,omitempty"` Contracts []types.Contract `protobuf:"bytes,3,rep,name=contracts,proto3" json:"contracts,omitempty"` Sequences []types.Sequence `protobuf:"bytes,4,rep,name=sequences,proto3" json:"sequences,omitempty"` @@ -68,11 +68,11 @@ func (m *GenesisState) XXX_DiscardUnknown() { var xxx_messageInfo_GenesisState proto.InternalMessageInfo -func (m *GenesisState) GetParams() Params { +func (m *GenesisState) GetParams() types.Params { if m != nil { return m.Params } - return Params{} + return types.Params{} } func (m *GenesisState) GetCodes() []types.Code { @@ -117,32 +117,33 @@ func init() { func init() { proto.RegisterFile("lbm/wasm/v1/genesis.proto", fileDescriptor_3308f670fed712dc) } var fileDescriptor_3308f670fed712dc = []byte{ - // 396 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x74, 0x92, 0xcd, 0x8a, 0xda, 0x50, - 0x14, 0xc7, 0x93, 0x46, 0x6d, 0x8d, 0x85, 0x42, 0x2c, 0x35, 0x46, 0x88, 0xa1, 0x14, 0xc9, 0x42, - 0x12, 0xb4, 0x2f, 0xd0, 0xa6, 0x94, 0xae, 0x0a, 0x45, 0xe9, 0x66, 0x60, 0x90, 0x7c, 0x5c, 0xae, - 0x81, 0xdc, 0xdc, 0x4c, 0xce, 0xd5, 0x19, 0xdf, 0x62, 0x1e, 0xcb, 0xa5, 0xcb, 0x59, 0xc9, 0xa0, - 0x3b, 0x5f, 0x62, 0x86, 0xdc, 0x7c, 0x18, 0x18, 0x5d, 0x25, 0x39, 0xe7, 0xff, 0xfb, 0x1d, 0x72, - 0x38, 0x72, 0x3f, 0xf2, 0x88, 0x7d, 0xef, 0x02, 0xb1, 0xd7, 0x13, 0x1b, 0xa3, 0x18, 0x41, 0x08, - 0x56, 0x92, 0x52, 0x46, 0x95, 0x4e, 0xe4, 0x11, 0x2b, 0x6b, 0x59, 0xeb, 0x89, 0xf6, 0x19, 0x53, - 0x4c, 0x79, 0xdd, 0xce, 0xde, 0xf2, 0x88, 0xd6, 0xab, 0xd3, 0x6c, 0x93, 0xa0, 0x82, 0xd5, 0x74, - 0x9f, 0x02, 0xe1, 0x8d, 0x8b, 0xee, 0xaf, 0x2f, 0x92, 0xfc, 0xf1, 0x4f, 0x5e, 0x99, 0x33, 0x97, - 0x21, 0x65, 0x22, 0xb7, 0x12, 0x37, 0x75, 0x09, 0xa8, 0xa2, 0x21, 0x9a, 0x9d, 0x69, 0xd7, 0xaa, - 0x4d, 0xb7, 0xfe, 0xf1, 0x96, 0xd3, 0xd8, 0xee, 0x87, 0xc2, 0xac, 0x08, 0x2a, 0xbf, 0xe5, 0xa6, - 0x4f, 0x03, 0x04, 0xea, 0x3b, 0x43, 0x32, 0x3b, 0xd3, 0x2f, 0x56, 0x39, 0xb3, 0xc2, 0x7e, 0xd1, - 0x00, 0x39, 0xbd, 0x0c, 0x3a, 0xed, 0x87, 0x9f, 0x78, 0x78, 0x4c, 0x49, 0xc8, 0x10, 0x49, 0xd8, - 0x66, 0x96, 0xd3, 0xca, 0x7f, 0xb9, 0xed, 0xd3, 0x98, 0xa5, 0xae, 0xcf, 0x40, 0x95, 0xb8, 0x4a, - 0xbb, 0xa4, 0xca, 0x23, 0xce, 0xa0, 0xd0, 0x75, 0x2b, 0xa8, 0xa6, 0x3c, 0x9b, 0x32, 0x2d, 0xa0, - 0xbb, 0x15, 0x8a, 0x7d, 0x04, 0x6a, 0xe3, 0x9a, 0x76, 0x5e, 0x44, 0xce, 0xda, 0x0a, 0xaa, 0x6b, - 0xab, 0xa2, 0x72, 0x2b, 0x7f, 0xc0, 0x28, 0x5e, 0x10, 0xc0, 0xa0, 0x36, 0xb9, 0x75, 0xf4, 0xd6, - 0x5a, 0xdf, 0x6c, 0xf6, 0xf1, 0x17, 0x30, 0x38, 0x5a, 0x31, 0x41, 0x29, 0xf9, 0xda, 0x80, 0xf7, - 0x38, 0x0f, 0x29, 0x4b, 0x79, 0x10, 0xc6, 0xae, 0xcf, 0xc2, 0x35, 0x5a, 0x94, 0xff, 0xb2, 0x70, - 0x83, 0x20, 0x45, 0x00, 0x08, 0xd4, 0x96, 0x21, 0x99, 0x6d, 0xc7, 0x3c, 0xed, 0x87, 0xdf, 0xae, - 0xc6, 0xc6, 0xc6, 0xd9, 0xdb, 0x2f, 0x53, 0xe5, 0xfa, 0x7e, 0x96, 0x2a, 0xe7, 0xc7, 0xf6, 0xa0, - 0x8b, 0xbb, 0x83, 0x2e, 0x3e, 0x1f, 0x74, 0xf1, 0xf1, 0xa8, 0x0b, 0xbb, 0xa3, 0x2e, 0x3c, 0x1d, - 0x75, 0xe1, 0x66, 0x84, 0x43, 0xb6, 0x5c, 0x79, 0x96, 0x4f, 0x89, 0x1d, 0x85, 0x31, 0xe2, 0x27, - 0x14, 0xd8, 0x0f, 0xfc, 0x99, 0x44, 0x2b, 0xc8, 0x2f, 0xcd, 0x6b, 0xf1, 0x53, 0xfa, 0xfe, 0x1a, - 0x00, 0x00, 0xff, 0xff, 0x3b, 0x5b, 0x26, 0xed, 0xc3, 0x02, 0x00, 0x00, + // 401 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x74, 0x92, 0xcf, 0x8b, 0xda, 0x40, + 0x14, 0xc7, 0x93, 0xfa, 0xa3, 0x35, 0x16, 0x0a, 0x69, 0x69, 0x63, 0x2c, 0x31, 0x94, 0x22, 0x39, + 0x48, 0x82, 0x16, 0x7a, 0x6e, 0x53, 0x4a, 0x4f, 0x85, 0x45, 0xd9, 0xcb, 0xc2, 0x22, 0xf9, 0x31, + 0x8c, 0x81, 0x4c, 0x26, 0x9b, 0x37, 0xba, 0xeb, 0x7d, 0xff, 0x80, 0xfd, 0xb3, 0x3c, 0x7a, 0xdc, + 0x93, 0x2c, 0x7a, 0xf3, 0xaf, 0x58, 0x32, 0xc9, 0x68, 0x16, 0xd7, 0x53, 0x92, 0xf7, 0x3e, 0xdf, + 0xcf, 0xcb, 0x0c, 0x4f, 0xe9, 0xc4, 0x3e, 0x71, 0x6e, 0x3d, 0x20, 0xce, 0x62, 0xe8, 0x60, 0x94, + 0x20, 0x88, 0xc0, 0x4e, 0x33, 0xca, 0xa8, 0xda, 0x8e, 0x7d, 0x62, 0xe7, 0x2d, 0x7b, 0x31, 0xd4, + 0x3f, 0x61, 0x8a, 0x29, 0xaf, 0x3b, 0xf9, 0x5b, 0x81, 0xe8, 0x5f, 0x03, 0x0a, 0x84, 0xa7, 0x85, + 0x82, 0x2d, 0x53, 0x54, 0x0a, 0x74, 0xe3, 0xa4, 0xfb, 0x62, 0xc0, 0xb7, 0xfb, 0xba, 0xf2, 0xfe, + 0x5f, 0x51, 0x99, 0x30, 0x8f, 0x21, 0xf5, 0xa7, 0xd2, 0x4c, 0xbd, 0xcc, 0x23, 0xa0, 0xc9, 0xa6, + 0x6c, 0xb5, 0x47, 0x9a, 0x2d, 0x0c, 0xe2, 0x3f, 0xec, 0x0b, 0xde, 0x77, 0xeb, 0xab, 0x4d, 0x4f, + 0x1a, 0x97, 0xb4, 0xfa, 0x57, 0x69, 0x04, 0x34, 0x44, 0xa0, 0xbd, 0x31, 0x6b, 0x56, 0x7b, 0xf4, + 0xf9, 0x34, 0xf6, 0x87, 0x86, 0xc8, 0xfd, 0x92, 0x87, 0xf6, 0x9b, 0xde, 0x07, 0x0e, 0x0f, 0x28, + 0x89, 0x18, 0x22, 0x29, 0x5b, 0x8e, 0x8b, 0xb4, 0x7a, 0xa9, 0xb4, 0x02, 0x9a, 0xb0, 0xcc, 0x0b, + 0x18, 0x68, 0x35, 0xae, 0xd2, 0x5f, 0x53, 0x15, 0x88, 0xdb, 0x2d, 0x75, 0x1f, 0x0f, 0xa1, 0x8a, + 0xf2, 0x68, 0xca, 0xb5, 0x80, 0x6e, 0xe6, 0x28, 0x09, 0x10, 0x68, 0xf5, 0x73, 0xda, 0x49, 0x89, + 0x1c, 0xb5, 0x87, 0x50, 0x55, 0x7b, 0x28, 0xaa, 0xd7, 0xca, 0x3b, 0x8c, 0x92, 0x29, 0x01, 0x0c, + 0x5a, 0x83, 0x5b, 0xfb, 0xa7, 0xd6, 0xea, 0xf5, 0xe6, 0x1f, 0xff, 0x01, 0x83, 0xab, 0x97, 0x13, + 0x54, 0x91, 0xaf, 0x0c, 0x78, 0x8b, 0x0b, 0x48, 0x9d, 0x29, 0xdd, 0x28, 0xf1, 0x02, 0x16, 0x2d, + 0xd0, 0x54, 0x9c, 0x65, 0xea, 0x85, 0x61, 0x86, 0x00, 0x10, 0x68, 0x4d, 0xb3, 0x66, 0xb5, 0x5c, + 0x6b, 0xbf, 0xe9, 0x7d, 0x3f, 0x8b, 0x0d, 0xcc, 0xa3, 0xb7, 0x23, 0x28, 0x71, 0x7d, 0xbf, 0x85, + 0xca, 0xfd, 0xb5, 0xda, 0x1a, 0xf2, 0x7a, 0x6b, 0xc8, 0x4f, 0x5b, 0x43, 0x7e, 0xd8, 0x19, 0xd2, + 0x7a, 0x67, 0x48, 0x8f, 0x3b, 0x43, 0xba, 0xea, 0xe3, 0x88, 0xcd, 0xe6, 0xbe, 0x1d, 0x50, 0xe2, + 0xc4, 0x51, 0x82, 0xf8, 0x1e, 0x85, 0xce, 0x1d, 0x7f, 0xa6, 0xf1, 0x1c, 0x8a, 0x75, 0xf3, 0x9b, + 0x7c, 0x9f, 0x7e, 0x3c, 0x07, 0x00, 0x00, 0xff, 0xff, 0xf8, 0xb5, 0x23, 0x84, 0xcd, 0x02, 0x00, + 0x00, } func (m *GenesisState) Marshal() (dAtA []byte, err error) { diff --git a/x/wasmplus/types/genesis_test.go b/x/wasmplus/types/genesis_test.go deleted file mode 100644 index 25e719734a..0000000000 --- a/x/wasmplus/types/genesis_test.go +++ /dev/null @@ -1,86 +0,0 @@ -package types - -import ( - "testing" - - "github.com/stretchr/testify/require" -) - -const humanAddress = "link1hcttwju93d5m39467gjcq63p5kc4fdcn30dgd8" - -func TestValidateGenesisState(t *testing.T) { - specs := map[string]struct { - srcMutator func(state *GenesisState) - expError bool - }{ - "all good": { - srcMutator: func(s *GenesisState) {}, - }, - "params invalid": { - srcMutator: func(s *GenesisState) { - s.Params = Params{} - }, - expError: true, - }, - "codeinfo invalid": { - srcMutator: func(s *GenesisState) { - s.Codes[0].CodeInfo.CodeHash = nil - }, - expError: true, - }, - "contract invalid": { - srcMutator: func(s *GenesisState) { - s.Contracts[0].ContractAddress = "invalid" - }, - expError: true, - }, - "sequence invalid": { - srcMutator: func(s *GenesisState) { - s.Sequences[0].IDKey = nil - }, - expError: true, - }, - "genesis store code message invalid": { - srcMutator: func(s *GenesisState) { - s.GenMsgs[0].GetStoreCode().WASMByteCode = nil - }, - expError: true, - }, - "genesis instantiate contract message invalid": { - srcMutator: func(s *GenesisState) { - s.GenMsgs[1].GetInstantiateContract().CodeID = 0 - }, - expError: true, - }, - "genesis execute contract message invalid": { - srcMutator: func(s *GenesisState) { - s.GenMsgs[2].GetExecuteContract().Sender = "invalid" - }, - expError: true, - }, - "genesis invalid message type": { - srcMutator: func(s *GenesisState) { - s.GenMsgs[0].Sum = nil - }, - expError: true, - }, - "inactivate contract address invalid": { - srcMutator: func(s *GenesisState) { - s.InactiveContractAddresses[0] = "invalid_address" - }, - expError: true, - }, - } - - for msg, spec := range specs { - t.Run(msg, func(t *testing.T) { - state := GenesisFixture(spec.srcMutator) - got := state.ValidateBasic() - if spec.expError { - require.Error(t, got) - return - } - require.NoError(t, got) - }) - } -} diff --git a/x/wasmplus/types/params.go b/x/wasmplus/types/params.go deleted file mode 100644 index 57b2dc4ac7..0000000000 --- a/x/wasmplus/types/params.go +++ /dev/null @@ -1,131 +0,0 @@ -package types - -import ( - "fmt" - - "github.com/pkg/errors" - "gopkg.in/yaml.v2" - - sdkerrors "github.com/line/lbm-sdk/types/errors" - paramtypes "github.com/line/lbm-sdk/x/params/types" - - wasmkeeper "github.com/line/wasmd/x/wasm/keeper" - wasmtypes "github.com/line/wasmd/x/wasm/types" -) - -var ( - ParamStoreKeyGasMultiplier = []byte("gasMultiplier") - ParamStoreKeyInstanceCost = []byte("instanceCost") - ParamStoreKeyCompileCost = []byte("compileCost") -) - -// ParamKeyTable returns the parameter key table. -func ParamKeyTable() paramtypes.KeyTable { - return paramtypes.NewKeyTable().RegisterParamSet(&Params{}) -} - -func DefaultParams() Params { - return Params{ - CodeUploadAccess: wasmtypes.AllowEverybody, - InstantiateDefaultPermission: wasmtypes.AccessTypeEverybody, - GasMultiplier: wasmkeeper.DefaultGasMultiplier, - InstanceCost: wasmkeeper.DefaultInstanceCost, - CompileCost: wasmkeeper.DefaultCompileCost, - } -} - -func (p Params) String() string { - out, err := yaml.Marshal(p) - if err != nil { - panic(err) - } - return string(out) -} - -// ParamSetPairs returns the parameter set pairs. -func (p *Params) ParamSetPairs() paramtypes.ParamSetPairs { - return paramtypes.ParamSetPairs{ - paramtypes.NewParamSetPair(wasmtypes.ParamStoreKeyUploadAccess, &p.CodeUploadAccess, validateAccessConfig), - paramtypes.NewParamSetPair(wasmtypes.ParamStoreKeyInstantiateAccess, &p.InstantiateDefaultPermission, validateAccessType), - paramtypes.NewParamSetPair(ParamStoreKeyGasMultiplier, &p.GasMultiplier, validateGasMultiplier), - paramtypes.NewParamSetPair(ParamStoreKeyInstanceCost, &p.InstanceCost, validateInstanceCost), - paramtypes.NewParamSetPair(ParamStoreKeyCompileCost, &p.CompileCost, validateCompileCost), - } -} - -// ValidateBasic performs basic validation on wasm parameters -func (p Params) ValidateBasic() error { - if err := validateAccessType(p.InstantiateDefaultPermission); err != nil { - return errors.Wrap(err, "instantiate default permission") - } - if err := validateAccessConfig(p.CodeUploadAccess); err != nil { - return errors.Wrap(err, "upload access") - } - if err := validateGasMultiplier(p.GasMultiplier); err != nil { - return errors.Wrap(err, "gas multiplier") - } - if err := validateInstanceCost(p.InstanceCost); err != nil { - return errors.Wrap(err, "instance cost") - } - if err := validateCompileCost(p.CompileCost); err != nil { - return errors.Wrap(err, "compile cost") - } - return nil -} - -func validateAccessType(i interface{}) error { - a, ok := i.(wasmtypes.AccessType) - if !ok { - return fmt.Errorf("invalid parameter type: %T", i) - } - if a == wasmtypes.AccessTypeUnspecified { - return sdkerrors.Wrap(wasmtypes.ErrEmpty, "type") - } - for _, v := range wasmtypes.AllAccessTypes { - if v == a { - return nil - } - } - return sdkerrors.Wrapf(wasmtypes.ErrInvalid, "unknown type: %q", a) -} - -func validateAccessConfig(i interface{}) error { - v, ok := i.(wasmtypes.AccessConfig) - if !ok { - return fmt.Errorf("invalid parameter type: %T", i) - } - return v.ValidateBasic() -} - -func validateGasMultiplier(i interface{}) error { - a, ok := i.(uint64) - if !ok { - return sdkerrors.Wrapf(wasmtypes.ErrInvalid, "type: %T", i) - } - if a == 0 { - return sdkerrors.Wrap(wasmtypes.ErrInvalid, "must be greater than 0") - } - return nil -} - -func validateInstanceCost(i interface{}) error { - a, ok := i.(uint64) - if !ok { - return sdkerrors.Wrapf(wasmtypes.ErrInvalid, "type: %T", i) - } - if a == 0 { - return sdkerrors.Wrap(wasmtypes.ErrInvalid, "must be greater than 0") - } - return nil -} - -func validateCompileCost(i interface{}) error { - a, ok := i.(uint64) - if !ok { - return sdkerrors.Wrapf(wasmtypes.ErrInvalid, "type: %T", i) - } - if a == 0 { - return sdkerrors.Wrap(wasmtypes.ErrInvalid, "must be greater than 0") - } - return nil -} diff --git a/x/wasmplus/types/params_test.go b/x/wasmplus/types/params_test.go deleted file mode 100644 index 4dc89e5779..0000000000 --- a/x/wasmplus/types/params_test.go +++ /dev/null @@ -1,243 +0,0 @@ -package types - -import ( - "bytes" - "testing" - - "github.com/stretchr/testify/require" - - sdk "github.com/line/lbm-sdk/types" - - wasmkeeper "github.com/line/wasmd/x/wasm/keeper" - wasmtypes "github.com/line/wasmd/x/wasm/types" -) - -func TestValidateParams(t *testing.T) { - var ( - anyAddress sdk.AccAddress = make([]byte, wasmtypes.ContractAddrLen) - otherAddress sdk.AccAddress = bytes.Repeat([]byte{1}, wasmtypes.ContractAddrLen) - invalidAddress = "invalid address" - ) - - specs := map[string]struct { - src Params - expErr bool - }{ - "all good with defaults": { - src: DefaultParams(), - }, - "all good with nobody": { - src: Params{ - CodeUploadAccess: wasmtypes.AllowNobody, - InstantiateDefaultPermission: wasmtypes.AccessTypeNobody, - GasMultiplier: wasmkeeper.DefaultGasMultiplier, - InstanceCost: wasmkeeper.DefaultInstanceCost, - CompileCost: wasmkeeper.DefaultCompileCost, - }, - }, - "all good with everybody": { - src: Params{ - CodeUploadAccess: wasmtypes.AllowEverybody, - InstantiateDefaultPermission: wasmtypes.AccessTypeEverybody, - GasMultiplier: wasmkeeper.DefaultGasMultiplier, - InstanceCost: wasmkeeper.DefaultInstanceCost, - CompileCost: wasmkeeper.DefaultCompileCost, - }, - }, - "all good with only address": { - src: Params{ - CodeUploadAccess: wasmtypes.AccessTypeOnlyAddress.With(anyAddress), - InstantiateDefaultPermission: wasmtypes.AccessTypeOnlyAddress, - GasMultiplier: wasmkeeper.DefaultGasMultiplier, - InstanceCost: wasmkeeper.DefaultInstanceCost, - CompileCost: wasmkeeper.DefaultCompileCost, - }, - }, - "all good with anyOf address": { - src: Params{ - CodeUploadAccess: wasmtypes.AccessTypeAnyOfAddresses.With(anyAddress), - InstantiateDefaultPermission: wasmtypes.AccessTypeAnyOfAddresses, - GasMultiplier: wasmkeeper.DefaultGasMultiplier, - InstanceCost: wasmkeeper.DefaultInstanceCost, - CompileCost: wasmkeeper.DefaultCompileCost, - }, - }, - "all good with anyOf addresses": { - src: Params{ - CodeUploadAccess: wasmtypes.AccessTypeAnyOfAddresses.With(anyAddress, otherAddress), - InstantiateDefaultPermission: wasmtypes.AccessTypeAnyOfAddresses, - GasMultiplier: wasmkeeper.DefaultGasMultiplier, - InstanceCost: wasmkeeper.DefaultInstanceCost, - CompileCost: wasmkeeper.DefaultCompileCost, - }, - }, - "reject empty type in instantiate permission": { - src: Params{ - CodeUploadAccess: wasmtypes.AllowNobody, - GasMultiplier: wasmkeeper.DefaultGasMultiplier, - InstanceCost: wasmkeeper.DefaultInstanceCost, - CompileCost: wasmkeeper.DefaultCompileCost, - }, - expErr: true, - }, - "reject unknown type in instantiate": { - src: Params{ - CodeUploadAccess: wasmtypes.AllowNobody, - InstantiateDefaultPermission: 1111, - GasMultiplier: wasmkeeper.DefaultGasMultiplier, - InstanceCost: wasmkeeper.DefaultInstanceCost, - CompileCost: wasmkeeper.DefaultCompileCost, - }, - expErr: true, - }, - "reject CodeUploadAccess invalid address in only address": { - src: Params{ - CodeUploadAccess: wasmtypes.AccessConfig{Permission: wasmtypes.AccessTypeOnlyAddress, Address: invalidAddress}, - InstantiateDefaultPermission: wasmtypes.AccessTypeOnlyAddress, - GasMultiplier: wasmkeeper.DefaultGasMultiplier, - InstanceCost: wasmkeeper.DefaultInstanceCost, - CompileCost: wasmkeeper.DefaultCompileCost, - }, - expErr: true, - }, - "reject wrong field addresses in only address": { - src: Params{ - CodeUploadAccess: wasmtypes.AccessConfig{Permission: wasmtypes.AccessTypeOnlyAddress, Address: anyAddress.String(), Addresses: []string{anyAddress.String()}}, - InstantiateDefaultPermission: wasmtypes.AccessTypeOnlyAddress, - GasMultiplier: wasmkeeper.DefaultGasMultiplier, - InstanceCost: wasmkeeper.DefaultInstanceCost, - CompileCost: wasmkeeper.DefaultCompileCost, - }, - expErr: true, - }, - "reject CodeUploadAccess Everybody with obsolete address": { - src: Params{ - CodeUploadAccess: wasmtypes.AccessConfig{Permission: wasmtypes.AccessTypeEverybody, Address: anyAddress.String()}, - InstantiateDefaultPermission: wasmtypes.AccessTypeOnlyAddress, - GasMultiplier: wasmkeeper.DefaultGasMultiplier, - InstanceCost: wasmkeeper.DefaultInstanceCost, - CompileCost: wasmkeeper.DefaultCompileCost, - }, - expErr: true, - }, - "reject CodeUploadAccess Nobody with obsolete address": { - src: Params{ - CodeUploadAccess: wasmtypes.AccessConfig{Permission: wasmtypes.AccessTypeNobody, Address: anyAddress.String()}, - InstantiateDefaultPermission: wasmtypes.AccessTypeOnlyAddress, - GasMultiplier: wasmkeeper.DefaultGasMultiplier, - InstanceCost: wasmkeeper.DefaultInstanceCost, - CompileCost: wasmkeeper.DefaultCompileCost, - }, - expErr: true, - }, - "reject empty CodeUploadAccess": { - src: Params{ - InstantiateDefaultPermission: wasmtypes.AccessTypeOnlyAddress, - GasMultiplier: wasmkeeper.DefaultGasMultiplier, - InstanceCost: wasmkeeper.DefaultInstanceCost, - CompileCost: wasmkeeper.DefaultCompileCost, - }, - expErr: true, - }, - "reject undefined permission in CodeUploadAccess": { - src: Params{ - CodeUploadAccess: wasmtypes.AccessConfig{Permission: wasmtypes.AccessTypeUnspecified}, - InstantiateDefaultPermission: wasmtypes.AccessTypeOnlyAddress, - GasMultiplier: wasmkeeper.DefaultGasMultiplier, - InstanceCost: wasmkeeper.DefaultInstanceCost, - CompileCost: wasmkeeper.DefaultCompileCost, - }, - expErr: true, - }, - "reject empty addresses in any of addresses": { - src: Params{ - CodeUploadAccess: wasmtypes.AccessConfig{Permission: wasmtypes.AccessTypeAnyOfAddresses, Addresses: []string{}}, - InstantiateDefaultPermission: wasmtypes.AccessTypeAnyOfAddresses, - GasMultiplier: wasmkeeper.DefaultGasMultiplier, - InstanceCost: wasmkeeper.DefaultInstanceCost, - CompileCost: wasmkeeper.DefaultCompileCost, - }, - expErr: true, - }, - "reject addresses not set in any of addresses": { - src: Params{ - CodeUploadAccess: wasmtypes.AccessConfig{Permission: wasmtypes.AccessTypeAnyOfAddresses}, - InstantiateDefaultPermission: wasmtypes.AccessTypeAnyOfAddresses, - GasMultiplier: wasmkeeper.DefaultGasMultiplier, - InstanceCost: wasmkeeper.DefaultInstanceCost, - CompileCost: wasmkeeper.DefaultCompileCost, - }, - expErr: true, - }, - "reject invalid address in any of addresses": { - src: Params{ - CodeUploadAccess: wasmtypes.AccessConfig{Permission: wasmtypes.AccessTypeAnyOfAddresses, Addresses: []string{invalidAddress}}, - InstantiateDefaultPermission: wasmtypes.AccessTypeAnyOfAddresses, - GasMultiplier: wasmkeeper.DefaultGasMultiplier, - InstanceCost: wasmkeeper.DefaultInstanceCost, - CompileCost: wasmkeeper.DefaultCompileCost, - }, - expErr: true, - }, - "reject duplicate address in any of addresses": { - src: Params{ - CodeUploadAccess: wasmtypes.AccessConfig{Permission: wasmtypes.AccessTypeAnyOfAddresses, Addresses: []string{anyAddress.String(), anyAddress.String()}}, - InstantiateDefaultPermission: wasmtypes.AccessTypeAnyOfAddresses, - GasMultiplier: wasmkeeper.DefaultGasMultiplier, - InstanceCost: wasmkeeper.DefaultInstanceCost, - CompileCost: wasmkeeper.DefaultCompileCost, - }, - expErr: true, - }, - "reject wrong field address in any of addresses": { - src: Params{ - CodeUploadAccess: wasmtypes.AccessConfig{Permission: wasmtypes.AccessTypeAnyOfAddresses, Address: anyAddress.String(), Addresses: []string{anyAddress.String()}}, - InstantiateDefaultPermission: wasmtypes.AccessTypeAnyOfAddresses, - GasMultiplier: wasmkeeper.DefaultGasMultiplier, - InstanceCost: wasmkeeper.DefaultInstanceCost, - CompileCost: wasmkeeper.DefaultCompileCost, - }, - expErr: true, - }, - "reject zero GasMultiplier": { - src: Params{ - CodeUploadAccess: wasmtypes.AllowEverybody, - InstantiateDefaultPermission: wasmtypes.AccessTypeEverybody, - GasMultiplier: 0, - InstanceCost: wasmkeeper.DefaultInstanceCost, - CompileCost: wasmkeeper.DefaultCompileCost, - }, - expErr: true, - }, - "reject zero InstanceCost": { - src: Params{ - CodeUploadAccess: wasmtypes.AllowEverybody, - InstantiateDefaultPermission: wasmtypes.AccessTypeEverybody, - GasMultiplier: wasmkeeper.DefaultGasMultiplier, - InstanceCost: 0, - CompileCost: wasmkeeper.DefaultCompileCost, - }, - expErr: true, - }, - "reject zero CompileCost": { - src: Params{ - CodeUploadAccess: wasmtypes.AllowEverybody, - InstantiateDefaultPermission: wasmtypes.AccessTypeEverybody, - GasMultiplier: wasmkeeper.DefaultGasMultiplier, - InstanceCost: wasmkeeper.DefaultInstanceCost, - CompileCost: 0, - }, - expErr: true, - }, - } - for msg, spec := range specs { - t.Run(msg, func(t *testing.T) { - err := spec.src.ValidateBasic() - if spec.expErr { - require.Error(t, err) - } else { - require.NoError(t, err) - } - }) - } -} diff --git a/x/wasmplus/types/test_fixtures.go b/x/wasmplus/types/test_fixtures.go deleted file mode 100644 index ebeb29c899..0000000000 --- a/x/wasmplus/types/test_fixtures.go +++ /dev/null @@ -1,53 +0,0 @@ -package types - -import ( - "math/rand" - - wasmtypes "github.com/line/wasmd/x/wasm/types" -) - -func GenesisFixture(mutators ...func(*GenesisState)) GenesisState { - const ( - numCodes = 2 - numContracts = 2 - numSequences = 2 - numMsg = 3 - ) - - fixture := GenesisState{ - Params: DefaultParams(), - Codes: make([]wasmtypes.Code, numCodes), - Contracts: make([]wasmtypes.Contract, numContracts), - Sequences: make([]wasmtypes.Sequence, numSequences), - InactiveContractAddresses: make([]string, numContracts), - } - for i := 0; i < numCodes; i++ { - fixture.Codes[i] = wasmtypes.CodeFixture() - } - for i := 0; i < numContracts; i++ { - contract := wasmtypes.ContractFixture() - fixture.Contracts[i] = contract - fixture.InactiveContractAddresses[i] = contract.ContractAddress - } - for i := 0; i < numSequences; i++ { - fixture.Sequences[i] = wasmtypes.Sequence{ - IDKey: randBytes(5), - Value: uint64(i), - } - } - fixture.GenMsgs = []wasmtypes.GenesisState_GenMsgs{ - {Sum: &wasmtypes.GenesisState_GenMsgs_StoreCode{StoreCode: wasmtypes.MsgStoreCodeFixture()}}, - {Sum: &wasmtypes.GenesisState_GenMsgs_InstantiateContract{InstantiateContract: wasmtypes.MsgInstantiateContractFixture()}}, - {Sum: &wasmtypes.GenesisState_GenMsgs_ExecuteContract{ExecuteContract: wasmtypes.MsgExecuteContractFixture()}}, - } - for _, m := range mutators { - m(&fixture) - } - return fixture -} - -func randBytes(n int) []byte { - r := make([]byte, n) - rand.Read(r) - return r -} diff --git a/x/wasmplus/types/types.pb.go b/x/wasmplus/types/types.pb.go deleted file mode 100644 index 835578956d..0000000000 --- a/x/wasmplus/types/types.pb.go +++ /dev/null @@ -1,476 +0,0 @@ -// Code generated by protoc-gen-gogo. DO NOT EDIT. -// source: lbm/wasm/v1/types.proto - -package types - -import ( - fmt "fmt" - _ "github.com/gogo/protobuf/gogoproto" - proto "github.com/gogo/protobuf/proto" - types "github.com/line/wasmd/x/wasm/types" - io "io" - math "math" - math_bits "math/bits" -) - -// Reference imports to suppress errors if they are not otherwise used. -var _ = proto.Marshal -var _ = fmt.Errorf -var _ = math.Inf - -// This is a compile-time assertion to ensure that this generated file -// is compatible with the proto package it is being compiled against. -// A compilation error at this line likely means your copy of the -// proto package needs to be updated. -const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package - -// Params defines the set of wasm parameters. -type Params struct { - CodeUploadAccess types.AccessConfig `protobuf:"bytes,1,opt,name=code_upload_access,json=codeUploadAccess,proto3" json:"code_upload_access" yaml:"code_upload_access"` - InstantiateDefaultPermission types.AccessType `protobuf:"varint,2,opt,name=instantiate_default_permission,json=instantiateDefaultPermission,proto3,enum=cosmwasm.wasm.v1.AccessType" json:"instantiate_default_permission,omitempty" yaml:"instantiate_default_permission"` - GasMultiplier uint64 `protobuf:"varint,3,opt,name=gas_multiplier,json=gasMultiplier,proto3" json:"gas_multiplier,omitempty" yaml:"gas_multiplier"` - InstanceCost uint64 `protobuf:"varint,4,opt,name=instance_cost,json=instanceCost,proto3" json:"instance_cost,omitempty" yaml:"instance_cost"` - CompileCost uint64 `protobuf:"varint,5,opt,name=compile_cost,json=compileCost,proto3" json:"compile_cost,omitempty" yaml:"compile_cost"` -} - -func (m *Params) Reset() { *m = Params{} } -func (*Params) ProtoMessage() {} -func (*Params) Descriptor() ([]byte, []int) { - return fileDescriptor_5a7988258faf20f7, []int{0} -} -func (m *Params) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *Params) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_Params.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 *Params) XXX_Merge(src proto.Message) { - xxx_messageInfo_Params.Merge(m, src) -} -func (m *Params) XXX_Size() int { - return m.Size() -} -func (m *Params) XXX_DiscardUnknown() { - xxx_messageInfo_Params.DiscardUnknown(m) -} - -var xxx_messageInfo_Params proto.InternalMessageInfo - -func init() { - proto.RegisterType((*Params)(nil), "lbm.wasm.v1.Params") -} - -func init() { proto.RegisterFile("lbm/wasm/v1/types.proto", fileDescriptor_5a7988258faf20f7) } - -var fileDescriptor_5a7988258faf20f7 = []byte{ - // 419 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x92, 0x3f, 0x6f, 0xd4, 0x30, - 0x18, 0xc6, 0x63, 0x7a, 0x74, 0xc8, 0xb5, 0x15, 0x0a, 0x45, 0x4d, 0xab, 0x93, 0x73, 0x44, 0x02, - 0x1d, 0x4b, 0xa2, 0x96, 0xed, 0x24, 0x24, 0x48, 0x19, 0x58, 0x90, 0xaa, 0x08, 0x16, 0x96, 0xc8, - 0x71, 0xdc, 0x60, 0xc9, 0x8e, 0xad, 0xd8, 0x29, 0xdc, 0x87, 0x40, 0x62, 0x64, 0x64, 0xe4, 0xa3, - 0xdc, 0xc0, 0x70, 0x23, 0x53, 0x04, 0xb9, 0x6f, 0x90, 0x4f, 0x80, 0xe2, 0x5c, 0x8e, 0x43, 0xfc, - 0x99, 0xec, 0xf7, 0xfd, 0xbd, 0xcf, 0xf3, 0x58, 0xd6, 0x6b, 0x9f, 0xb0, 0x94, 0x87, 0xef, 0x90, - 0xe2, 0xe1, 0xcd, 0x79, 0xa8, 0x17, 0x92, 0xa8, 0x40, 0x96, 0x42, 0x0b, 0x67, 0xcc, 0x52, 0x1e, - 0x74, 0x20, 0xb8, 0x39, 0x3f, 0x3b, 0xce, 0x45, 0x2e, 0x4c, 0x3f, 0xec, 0x6e, 0xfd, 0xc8, 0xd9, - 0x04, 0x0b, 0xc5, 0x8d, 0xf6, 0x2f, 0x06, 0xfe, 0xd7, 0x3d, 0x7b, 0xff, 0x0a, 0x95, 0x88, 0x2b, - 0x47, 0xd8, 0x0e, 0x16, 0x19, 0x49, 0x2a, 0xc9, 0x04, 0xca, 0x12, 0x84, 0x31, 0x51, 0xca, 0x05, - 0x53, 0x30, 0x1b, 0x5f, 0xc0, 0x60, 0x70, 0x19, 0xd2, 0x82, 0x67, 0x86, 0x5f, 0x8a, 0xe2, 0x9a, - 0xe6, 0xd1, 0xfd, 0x65, 0xed, 0x59, 0x6d, 0xed, 0x9d, 0x2e, 0x10, 0x67, 0x73, 0xff, 0x4f, 0x1f, - 0x3f, 0xbe, 0xd3, 0x35, 0x5f, 0x9b, 0x5e, 0x2f, 0x75, 0x3e, 0x00, 0x1b, 0xd2, 0x42, 0x69, 0x54, - 0x68, 0x8a, 0x34, 0x49, 0x32, 0x72, 0x8d, 0x2a, 0xa6, 0x13, 0x49, 0x4a, 0x4e, 0x95, 0xa2, 0xa2, - 0x70, 0x6f, 0x4d, 0xc1, 0xec, 0xe8, 0x62, 0xf2, 0xaf, 0xf4, 0x57, 0x0b, 0x49, 0xa2, 0x47, 0x6d, - 0xed, 0x3d, 0xe8, 0x73, 0xff, 0xef, 0xe6, 0xc7, 0x93, 0x9d, 0x81, 0xe7, 0x3d, 0xbf, 0xda, 0x62, - 0xe7, 0xa9, 0x7d, 0x94, 0x23, 0x95, 0xf0, 0x8a, 0x69, 0x2a, 0x19, 0x25, 0xa5, 0xbb, 0x37, 0x05, - 0xb3, 0x51, 0x74, 0xda, 0xd6, 0xde, 0xbd, 0x3e, 0xe0, 0x77, 0xee, 0xc7, 0x87, 0x39, 0x52, 0x2f, - 0xb7, 0xb5, 0xf3, 0xc4, 0x3e, 0xec, 0x13, 0x30, 0x49, 0xb0, 0x50, 0xda, 0x1d, 0x19, 0x03, 0xb7, - 0xad, 0xbd, 0xe3, 0xdd, 0x17, 0x6e, 0xb0, 0x1f, 0x1f, 0x0c, 0xf5, 0xa5, 0x50, 0xda, 0x99, 0xdb, - 0x07, 0x58, 0x70, 0x49, 0xd9, 0x46, 0x7d, 0xdb, 0xa8, 0x4f, 0xda, 0xda, 0xbb, 0x3b, 0xfc, 0xeb, - 0x2f, 0xea, 0xc7, 0xe3, 0x4d, 0xd9, 0x69, 0xe7, 0xa3, 0x4f, 0x9f, 0x3d, 0x2b, 0x7a, 0xb1, 0xfc, - 0x01, 0xad, 0x2f, 0x0d, 0x04, 0xcb, 0x06, 0x82, 0x55, 0x03, 0xc1, 0xf7, 0x06, 0x82, 0x8f, 0x6b, - 0x68, 0xad, 0xd6, 0xd0, 0xfa, 0xb6, 0x86, 0xd6, 0x9b, 0x87, 0x39, 0xd5, 0x6f, 0xab, 0x34, 0xc0, - 0x82, 0x87, 0x8c, 0x16, 0xc4, 0x6c, 0x45, 0x16, 0xbe, 0x37, 0xa7, 0x64, 0x95, 0xea, 0xd7, 0x23, - 0xdd, 0x37, 0xfb, 0xf1, 0xf8, 0x67, 0x00, 0x00, 0x00, 0xff, 0xff, 0x38, 0x00, 0x46, 0x41, 0x7b, - 0x02, 0x00, 0x00, -} - -func (this *Params) Equal(that interface{}) bool { - if that == nil { - return this == nil - } - - that1, ok := that.(*Params) - if !ok { - that2, ok := that.(Params) - if ok { - that1 = &that2 - } else { - return false - } - } - if that1 == nil { - return this == nil - } else if this == nil { - return false - } - if !this.CodeUploadAccess.Equal(&that1.CodeUploadAccess) { - return false - } - if this.InstantiateDefaultPermission != that1.InstantiateDefaultPermission { - return false - } - if this.GasMultiplier != that1.GasMultiplier { - return false - } - if this.InstanceCost != that1.InstanceCost { - return false - } - if this.CompileCost != that1.CompileCost { - return false - } - return true -} -func (m *Params) 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 *Params) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *Params) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if m.CompileCost != 0 { - i = encodeVarintTypes(dAtA, i, uint64(m.CompileCost)) - i-- - dAtA[i] = 0x28 - } - if m.InstanceCost != 0 { - i = encodeVarintTypes(dAtA, i, uint64(m.InstanceCost)) - i-- - dAtA[i] = 0x20 - } - if m.GasMultiplier != 0 { - i = encodeVarintTypes(dAtA, i, uint64(m.GasMultiplier)) - i-- - dAtA[i] = 0x18 - } - if m.InstantiateDefaultPermission != 0 { - i = encodeVarintTypes(dAtA, i, uint64(m.InstantiateDefaultPermission)) - i-- - dAtA[i] = 0x10 - } - { - size, err := m.CodeUploadAccess.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintTypes(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0xa - return len(dAtA) - i, nil -} - -func encodeVarintTypes(dAtA []byte, offset int, v uint64) int { - offset -= sovTypes(v) - base := offset - for v >= 1<<7 { - dAtA[offset] = uint8(v&0x7f | 0x80) - v >>= 7 - offset++ - } - dAtA[offset] = uint8(v) - return base -} -func (m *Params) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = m.CodeUploadAccess.Size() - n += 1 + l + sovTypes(uint64(l)) - if m.InstantiateDefaultPermission != 0 { - n += 1 + sovTypes(uint64(m.InstantiateDefaultPermission)) - } - if m.GasMultiplier != 0 { - n += 1 + sovTypes(uint64(m.GasMultiplier)) - } - if m.InstanceCost != 0 { - n += 1 + sovTypes(uint64(m.InstanceCost)) - } - if m.CompileCost != 0 { - n += 1 + sovTypes(uint64(m.CompileCost)) - } - return n -} - -func sovTypes(x uint64) (n int) { - return (math_bits.Len64(x|1) + 6) / 7 -} -func sozTypes(x uint64) (n int) { - return sovTypes(uint64((x << 1) ^ uint64((int64(x) >> 63)))) -} -func (m *Params) 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 ErrIntOverflowTypes - } - 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: Params: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: Params: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field CodeUploadAccess", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthTypes - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthTypes - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if err := m.CodeUploadAccess.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 2: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field InstantiateDefaultPermission", wireType) - } - m.InstantiateDefaultPermission = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.InstantiateDefaultPermission |= types.AccessType(b&0x7F) << shift - if b < 0x80 { - break - } - } - case 3: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field GasMultiplier", wireType) - } - m.GasMultiplier = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.GasMultiplier |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - case 4: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field InstanceCost", wireType) - } - m.InstanceCost = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.InstanceCost |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - case 5: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field CompileCost", wireType) - } - m.CompileCost = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.CompileCost |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - default: - iNdEx = preIndex - skippy, err := skipTypes(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthTypes - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func skipTypes(dAtA []byte) (n int, err error) { - l := len(dAtA) - iNdEx := 0 - depth := 0 - for iNdEx < l { - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return 0, ErrIntOverflowTypes - } - if iNdEx >= l { - return 0, io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - wireType := int(wire & 0x7) - switch wireType { - case 0: - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return 0, ErrIntOverflowTypes - } - if iNdEx >= l { - return 0, io.ErrUnexpectedEOF - } - iNdEx++ - if dAtA[iNdEx-1] < 0x80 { - break - } - } - case 1: - iNdEx += 8 - case 2: - var length int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return 0, ErrIntOverflowTypes - } - if iNdEx >= l { - return 0, io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - length |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if length < 0 { - return 0, ErrInvalidLengthTypes - } - iNdEx += length - case 3: - depth++ - case 4: - if depth == 0 { - return 0, ErrUnexpectedEndOfGroupTypes - } - depth-- - case 5: - iNdEx += 4 - default: - return 0, fmt.Errorf("proto: illegal wireType %d", wireType) - } - if iNdEx < 0 { - return 0, ErrInvalidLengthTypes - } - if depth == 0 { - return iNdEx, nil - } - } - return 0, io.ErrUnexpectedEOF -} - -var ( - ErrInvalidLengthTypes = fmt.Errorf("proto: negative length found during unmarshaling") - ErrIntOverflowTypes = fmt.Errorf("proto: integer overflow") - ErrUnexpectedEndOfGroupTypes = fmt.Errorf("proto: unexpected end of group") -) From ab8d6018d047fae3f6ccc7b003cbdb87db8df836 Mon Sep 17 00:00:00 2001 From: zemyblue Date: Fri, 20 Jan 2023 15:49:17 +0900 Subject: [PATCH 05/17] chore: remove unused customEncoding and customQuerier --- appplus/app.go | 2 - x/wasm/keeper/keeper.go | 86 ------------------- x/wasm/keeper/options.go | 19 ++-- x/wasm/keeper/options_test.go | 19 ++++ x/wasm/keeper/wasmtesting/gas_register.go | 75 ++++++++++++++++ x/wasmplus/keeper/contract_keeper_test.go | 2 +- x/wasmplus/keeper/genesis_test.go | 2 - x/wasmplus/keeper/keeper.go | 4 - x/wasmplus/keeper/keeper_test.go | 6 +- .../keeper/proposal_integration_test.go | 6 +- x/wasmplus/keeper/querier_test.go | 6 +- x/wasmplus/keeper/test_common.go | 10 +-- x/wasmplus/module_test.go | 2 +- 13 files changed, 119 insertions(+), 120 deletions(-) create mode 100644 x/wasm/keeper/wasmtesting/gas_register.go diff --git a/appplus/app.go b/appplus/app.go index 0800b0b0aa..624294b0cc 100644 --- a/appplus/app.go +++ b/appplus/app.go @@ -533,8 +533,6 @@ func NewWasmApp( wasmDir, wasmConfig, availableCapabilities, - nil, - nil, wasmOpts..., ) diff --git a/x/wasm/keeper/keeper.go b/x/wasm/keeper/keeper.go index d4c9866f49..f5ab26ce75 100644 --- a/x/wasm/keeper/keeper.go +++ b/x/wasm/keeper/keeper.go @@ -172,66 +172,6 @@ func (k Keeper) getInstantiateAccessConfig(ctx sdk.Context) types.AccessType { return a } -//func (k Keeper) getGasMultiplier(ctx sdk.Context) GasMultiplier { -// var a uint64 -// k.paramSpace.Get(ctx, types.ParamStoreKeyGasMultiplier, &a) -// return NewGasMultiplier(a) -//} -// -//func (k Keeper) getInstanceCost(ctx sdk.Context) uint64 { -// var a uint64 -// k.paramSpace.Get(ctx, types.ParamStoreKeyInstanceCost, &a) -// return a -//} -// -//// NewContractInstanceCosts costs to crate a new contract instance from code -//func (k Keeper) newContractInstanceCosts(g WasmGasRegister, ctx sdk.Context, pinned bool, msgLen int) storetypes.Gas { -// return k.instantiateContractCosts(g, ctx, pinned, msgLen) -//} -// -//// InstantiateContractCosts costs when interacting with a wasm contract -//func (k Keeper) instantiateContractCosts(g WasmGasRegister, ctx sdk.Context, pinned bool, msgLen int) sdk.Gas { -// if msgLen < 0 { -// panic(sdkerrors.Wrap(types.ErrInvalid, "negative length")) -// } -// dataCosts := sdk.Gas(msgLen) * g.c.ContractMessageDataCost -// if pinned { -// return dataCosts -// } -// return k.getInstanceCost(ctx) + dataCosts -//} -// -//// ReplyCosts costs to to handle a message reply -//func (k Keeper) replyCosts(g WasmGasRegister, ctx sdk.Context, pinned bool, reply wasmvmtypes.Reply) sdk.Gas { -// var eventGas sdk.Gas -// msgLen := len(reply.Result.Err) -// if reply.Result.Ok != nil { -// msgLen += len(reply.Result.Ok.Data) -// var attrs []wasmvmtypes.EventAttribute -// for _, e := range reply.Result.Ok.Events { -// eventGas += sdk.Gas(len(e.Type)) * g.c.EventAttributeDataCost -// attrs = append(attrs, e.Attributes...) -// } -// // apply free tier on the whole set not per event -// eventGas += g.EventCosts(attrs, nil) -// } -// return eventGas + k.instantiateContractCosts(g, ctx, pinned, msgLen) -//} -// -//func (k Keeper) getCompileCost(ctx sdk.Context) uint64 { -// var a uint64 -// k.paramSpace.Get(ctx, types.ParamStoreKeyCompileCost, &a) -// return a -//} -// -//// CompileCosts costs to persist and "compile" a new wasm contract -//func (k Keeper) compileCosts(ctx sdk.Context, byteLength int) storetypes.Gas { -// if byteLength < 0 { -// panic(sdkerrors.Wrap(types.ErrInvalid, "negative length")) -// } -// return k.getCompileCost(ctx) * uint64(byteLength) -//} - // GetParams returns the total set of wasm parameters. func (k Keeper) GetParams(ctx sdk.Context) types.Params { var params types.Params @@ -1123,32 +1063,6 @@ func (k Keeper) newQueryHandler(ctx sdk.Context, contractAddress sdk.AccAddress) return NewQueryHandler(ctx, k.wasmVMQueryHandler, contractAddress, k.gasRegister) } -//type GasMultiplier struct { -// multiplier uint64 -//} -// -//func NewGasMultiplier(multiplier uint64) GasMultiplier { -// if multiplier == 0 { -// panic(sdkerrors.Wrap(sdkerrors.ErrLogic, "GasMultiplier can not be 0")) -// } -// -// return GasMultiplier{multiplier: multiplier} -//} -// -//// ToWasmVMGas convert to wasmVM contract runtime gas unit -//func (m GasMultiplier) ToWasmVMGas(source storetypes.Gas) uint64 { -// x := source * m.multiplier -// if x < source { -// panic(sdk.ErrorOutOfGas{Descriptor: "overflow"}) -// } -// return x -//} -// -//// FromWasmVMGas converts to SDK gas unit -//func (m GasMultiplier) FromWasmVMGas(source uint64) sdk.Gas { -// return source / m.multiplier -//} - // MultipliedGasMeter wraps the GasMeter from context and multiplies all reads by out defined multiplier type MultipliedGasMeter struct { originalMeter sdk.GasMeter diff --git a/x/wasm/keeper/options.go b/x/wasm/keeper/options.go index 9112b8ae33..65673ab462 100644 --- a/x/wasm/keeper/options.go +++ b/x/wasm/keeper/options.go @@ -117,21 +117,26 @@ func WithVMCacheMetrics(r prometheus.Registerer) Option { }) } -func WithVMMetrics(provider MetricsProvider) Option { - return optsFn(func(k *Keeper) { - k.metrics = provider() - }) -} - // WithGasRegister set a new gas register to implement custom gas costs. // When the "gas multiplier" for wasmvm gas conversion is modified inside the new register, // make sure to also use `WithApiCosts` option for non default values -func WithGasRegister(x WasmGasRegister) Option { +func WithGasRegister(x GasRegister) Option { + if x == nil { + panic("must not be nil") + } return optsFn(func(k *Keeper) { k.gasRegister = x }) } +// WithAPICosts sets custom api costs. Amounts are in cosmwasm gas Not SDK gas. +func WithAPICosts(human, canonical uint64) Option { + return optsFn(func(_ *Keeper) { + costHumanize = human + costCanonical = canonical + }) +} + // WithMaxQueryStackSize overwrites the default limit for maximum query stacks func WithMaxQueryStackSize(m uint32) Option { return optsFn(func(k *Keeper) { diff --git a/x/wasm/keeper/options_test.go b/x/wasm/keeper/options_test.go index ebdfe3c513..802282d8e9 100644 --- a/x/wasm/keeper/options_test.go +++ b/x/wasm/keeper/options_test.go @@ -66,6 +66,20 @@ func TestConstructorOptions(t *testing.T) { assert.IsType(t, &wasmtesting.MockCoinTransferrer{}, k.bank) }, }, + "costs": { + srcOpt: WithGasRegister(&wasmtesting.MockGasRegister{}), + verify: func(t *testing.T, k Keeper) { + assert.IsType(t, &wasmtesting.MockGasRegister{}, k.gasRegister) + }, + }, + "api costs": { + srcOpt: WithAPICosts(1, 2), + verify: func(t *testing.T, k Keeper) { + t.Cleanup(setApiDefaults) + assert.Equal(t, uint64(1), costHumanize) + assert.Equal(t, uint64(2), costCanonical) + }, + }, "max recursion query limit": { srcOpt: WithMaxQueryStackSize(1), verify: func(t *testing.T, k Keeper) { @@ -96,3 +110,8 @@ func TestConstructorOptions(t *testing.T) { }) } } + +func setApiDefaults() { + costHumanize = DefaultGasCostHumanAddress * DefaultGasMultiplier + costCanonical = DefaultGasCostCanonicalAddress * DefaultGasMultiplier +} diff --git a/x/wasm/keeper/wasmtesting/gas_register.go b/x/wasm/keeper/wasmtesting/gas_register.go new file mode 100644 index 0000000000..6f5873585a --- /dev/null +++ b/x/wasm/keeper/wasmtesting/gas_register.go @@ -0,0 +1,75 @@ +package wasmtesting + +import ( + sdk "github.com/line/lbm-sdk/types" + + wasmvmtypes "github.com/line/wasmvm/types" +) + +// MockGasRegister mock that implements keeper.GasRegister +type MockGasRegister struct { + CompileCostFn func(byteLength int) sdk.Gas + NewContractInstanceCostFn func(pinned bool, msgLen int) sdk.Gas + InstantiateContractCostFn func(pinned bool, msgLen int) sdk.Gas + ReplyCostFn func(pinned bool, reply wasmvmtypes.Reply) sdk.Gas + EventCostsFn func(evts []wasmvmtypes.EventAttribute) sdk.Gas + ToWasmVMGasFn func(source sdk.Gas) uint64 + FromWasmVMGasFn func(source uint64) sdk.Gas + UncompressCostsFn func(byteLength int) sdk.Gas +} + +func (m MockGasRegister) NewContractInstanceCosts(pinned bool, msgLen int) sdk.Gas { + if m.NewContractInstanceCostFn == nil { + panic("not expected to be called") + } + return m.NewContractInstanceCostFn(pinned, msgLen) +} + +func (m MockGasRegister) CompileCosts(byteLength int) sdk.Gas { + if m.CompileCostFn == nil { + panic("not expected to be called") + } + return m.CompileCostFn(byteLength) +} + +func (m MockGasRegister) UncompressCosts(byteLength int) sdk.Gas { + if m.UncompressCostsFn == nil { + panic("not expected to be called") + } + return m.UncompressCostsFn(byteLength) +} + +func (m MockGasRegister) InstantiateContractCosts(pinned bool, msgLen int) sdk.Gas { + if m.InstantiateContractCostFn == nil { + panic("not expected to be called") + } + return m.InstantiateContractCostFn(pinned, msgLen) +} + +func (m MockGasRegister) ReplyCosts(pinned bool, reply wasmvmtypes.Reply) sdk.Gas { + if m.ReplyCostFn == nil { + panic("not expected to be called") + } + return m.ReplyCostFn(pinned, reply) +} + +func (m MockGasRegister) EventCosts(evts []wasmvmtypes.EventAttribute, events wasmvmtypes.Events) sdk.Gas { + if m.EventCostsFn == nil { + panic("not expected to be called") + } + return m.EventCostsFn(evts) +} + +func (m MockGasRegister) ToWasmVMGas(source sdk.Gas) uint64 { + if m.ToWasmVMGasFn == nil { + panic("not expected to be called") + } + return m.ToWasmVMGasFn(source) +} + +func (m MockGasRegister) FromWasmVMGas(source uint64) sdk.Gas { + if m.FromWasmVMGasFn == nil { + panic("not expected to be called") + } + return m.FromWasmVMGasFn(source) +} diff --git a/x/wasmplus/keeper/contract_keeper_test.go b/x/wasmplus/keeper/contract_keeper_test.go index 69191f76d6..fa1075401d 100644 --- a/x/wasmplus/keeper/contract_keeper_test.go +++ b/x/wasmplus/keeper/contract_keeper_test.go @@ -18,7 +18,7 @@ func mustMarshal(t *testing.T, r interface{}) []byte { } func TestInactivateContract(t *testing.T) { - parentCtx, keepers := CreateTestInput(t, false, AvailableCapabilities, nil, nil) + parentCtx, keepers := CreateTestInput(t, false, AvailableCapabilities) example := InstantiateHackatomExampleContract(t, parentCtx, keepers) otherContract := StoreHackatomExampleContract(t, parentCtx, keepers) newVerifier := RandomAccountAddress(t) diff --git a/x/wasmplus/keeper/genesis_test.go b/x/wasmplus/keeper/genesis_test.go index 1ddc159166..746b13b638 100644 --- a/x/wasmplus/keeper/genesis_test.go +++ b/x/wasmplus/keeper/genesis_test.go @@ -589,8 +589,6 @@ func setupKeeper(t *testing.T) (*Keeper, sdk.Context, []sdk.StoreKey) { tempDir, wasmConfig, AvailableCapabilities, - nil, - nil, ) return &srcKeeper, ctx, []sdk.StoreKey{keys[types.StoreKey], keys[paramstypes.StoreKey]} } diff --git a/x/wasmplus/keeper/keeper.go b/x/wasmplus/keeper/keeper.go index ffa7b67b2e..295a8986a9 100644 --- a/x/wasmplus/keeper/keeper.go +++ b/x/wasmplus/keeper/keeper.go @@ -39,8 +39,6 @@ func NewKeeper( homeDir string, wasmConfig wasmtypes.WasmConfig, availableCapabilities string, - customEncoders *wasmkeeper.MessageEncoders, - customPlugins *wasmkeeper.QueryPlugins, opts ...wasmkeeper.Option, ) Keeper { bankPlusKeeper, ok := bankKeeper.(bankpluskeeper.Keeper) @@ -71,8 +69,6 @@ func NewKeeper( homeDir, wasmConfig, availableCapabilities, - //customEncoders, - //customPlugins, opts..., ) return result diff --git a/x/wasmplus/keeper/keeper_test.go b/x/wasmplus/keeper/keeper_test.go index 79398d162c..68956e562d 100644 --- a/x/wasmplus/keeper/keeper_test.go +++ b/x/wasmplus/keeper/keeper_test.go @@ -11,7 +11,7 @@ import ( ) func TestActivateContract(t *testing.T) { - ctx, keepers := CreateTestInput(t, false, AvailableCapabilities, nil, nil) + ctx, keepers := CreateTestInput(t, false, AvailableCapabilities) k := keepers.WasmKeeper example := InstantiateHackatomExampleContract(t, ctx, keepers) @@ -35,7 +35,7 @@ func TestActivateContract(t *testing.T) { } func TestDeactivateContract(t *testing.T) { - ctx, keepers := CreateTestInput(t, false, AvailableCapabilities, nil, nil) + ctx, keepers := CreateTestInput(t, false, AvailableCapabilities) k := keepers.WasmKeeper example := InstantiateHackatomExampleContract(t, ctx, keepers) @@ -55,7 +55,7 @@ func TestDeactivateContract(t *testing.T) { } func TestIterateInactiveContracts(t *testing.T) { - ctx, keepers := CreateTestInput(t, false, AvailableCapabilities, nil, nil) + ctx, keepers := CreateTestInput(t, false, AvailableCapabilities) k := keepers.WasmKeeper example1 := InstantiateHackatomExampleContract(t, ctx, keepers) diff --git a/x/wasmplus/keeper/proposal_integration_test.go b/x/wasmplus/keeper/proposal_integration_test.go index cce660a520..4787ac7a0b 100644 --- a/x/wasmplus/keeper/proposal_integration_test.go +++ b/x/wasmplus/keeper/proposal_integration_test.go @@ -6,12 +6,12 @@ import ( "github.com/stretchr/testify/require" sdk "github.com/line/lbm-sdk/types" - + "github.com/line/wasmd/x/wasmplus/types" ) func TestValidateDeactivateContractProposal(t *testing.T) { - ctx, keepers := CreateTestInput(t, false, "staking", nil, nil) + ctx, keepers := CreateTestInput(t, false, "staking") govKeeper, wasmKeeper := keepers.GovKeeper, keepers.WasmKeeper example := InstantiateHackatomExampleContract(t, ctx, keepers) @@ -39,7 +39,7 @@ func TestValidateDeactivateContractProposal(t *testing.T) { } func TestActivateContractProposal(t *testing.T) { - ctx, keepers := CreateTestInput(t, false, "staking", nil, nil) + ctx, keepers := CreateTestInput(t, false, "staking") govKeeper, wasmKeeper := keepers.GovKeeper, keepers.WasmKeeper example := InstantiateHackatomExampleContract(t, ctx, keepers) diff --git a/x/wasmplus/keeper/querier_test.go b/x/wasmplus/keeper/querier_test.go index 2638e34521..72f0718168 100644 --- a/x/wasmplus/keeper/querier_test.go +++ b/x/wasmplus/keeper/querier_test.go @@ -7,12 +7,12 @@ import ( "github.com/stretchr/testify/require" sdk "github.com/line/lbm-sdk/types" - + "github.com/line/wasmd/x/wasmplus/types" ) func TestQueryInactiveContracts(t *testing.T) { - ctx, keepers := CreateTestInput(t, false, AvailableCapabilities, nil, nil) + ctx, keepers := CreateTestInput(t, false, AvailableCapabilities) keeper := keepers.WasmKeeper example1 := InstantiateHackatomExampleContract(t, ctx, keepers) @@ -37,7 +37,7 @@ func TestQueryInactiveContracts(t *testing.T) { } func TestQueryIsInactiveContract(t *testing.T) { - ctx, keepers := CreateTestInput(t, false, AvailableCapabilities, nil, nil) + ctx, keepers := CreateTestInput(t, false, AvailableCapabilities) keeper := keepers.WasmKeeper example := InstantiateHackatomExampleContract(t, ctx, keepers) diff --git a/x/wasmplus/keeper/test_common.go b/x/wasmplus/keeper/test_common.go index bdbfc05d18..981a6a2588 100644 --- a/x/wasmplus/keeper/test_common.go +++ b/x/wasmplus/keeper/test_common.go @@ -190,7 +190,7 @@ type TestKeepers struct { // CreateDefaultTestInput common settings for CreateTestInput func CreateDefaultTestInput(t testing.TB) (sdk.Context, TestKeepers) { - return CreateTestInput(t, false, "staking", nil, nil) + return CreateTestInput(t, false, "staking") } // CreateTestInput encoders can be nil to accept the defaults, or set it to override some of the message handlers (like default) @@ -198,12 +198,10 @@ func CreateTestInput( t testing.TB, isCheckTx bool, availableCapabilities string, - encoders *wasmkeeper.MessageEncoders, - queriers *wasmkeeper.QueryPlugins, opts ...wasmkeeper.Option, ) (sdk.Context, TestKeepers) { // Load default wasm config - return createTestInput(t, isCheckTx, availableCapabilities, encoders, queriers, wasmtypes.DefaultWasmConfig(), dbm.NewMemDB(), opts...) + return createTestInput(t, isCheckTx, availableCapabilities, wasmtypes.DefaultWasmConfig(), dbm.NewMemDB(), opts...) } // encoders can be nil to accept the defaults, or set it to override some of the message handlers (like default) @@ -211,8 +209,6 @@ func createTestInput( t testing.TB, isCheckTx bool, availableCapabilities string, - encoders *wasmkeeper.MessageEncoders, - queriers *wasmkeeper.QueryPlugins, wasmConfig wasmtypes.WasmConfig, db dbm.DB, opts ...wasmkeeper.Option, @@ -401,8 +397,6 @@ func createTestInput( tempDir, wasmConfig, availableCapabilities, - encoders, - queriers, opts..., ) keeper.SetParams(ctx, wasmtypes.DefaultParams()) diff --git a/x/wasmplus/module_test.go b/x/wasmplus/module_test.go index 8af045c295..7cf2b4c91e 100644 --- a/x/wasmplus/module_test.go +++ b/x/wasmplus/module_test.go @@ -36,7 +36,7 @@ type testData struct { } func setupTest(t *testing.T) testData { - ctx, keepers := keeper.CreateTestInput(t, false, "iterator,staking,stargate,cosmwasm_1_1", nil, nil) + ctx, keepers := keeper.CreateTestInput(t, false, "iterator,staking,stargate,cosmwasm_1_1") cdc := wasmkeeper.MakeTestCodec(t) data := testData{ module: NewAppModule(cdc, keepers.WasmKeeper, keepers.StakingKeeper, keepers.AccountKeeper, keepers.BankKeeper), From 9501ad28dcfb692f610a62675af1f89bff33b9cf Mon Sep 17 00:00:00 2001 From: zemyblue Date: Mon, 30 Jan 2023 17:15:08 +0900 Subject: [PATCH 06/17] chore: apply a changes about separated ibc-go import path --- appplus/app.go | 36 +- appplus/sim_test.go | 294 ---- go.mod | 1 + go.sum | 2394 +++--------------------------- x/wasmplus/keeper/test_common.go | 10 +- 5 files changed, 206 insertions(+), 2529 deletions(-) delete mode 100644 appplus/sim_test.go diff --git a/appplus/app.go b/appplus/app.go index 624294b0cc..4c218ef05f 100644 --- a/appplus/app.go +++ b/appplus/app.go @@ -14,6 +14,24 @@ import ( "github.com/spf13/cast" dbm "github.com/tendermint/tm-db" + ica "github.com/line/ibc-go/v3/modules/apps/27-interchain-accounts" + icacontrollerkeeper "github.com/line/ibc-go/v3/modules/apps/27-interchain-accounts/controller/keeper" + icacontrollertypes "github.com/line/ibc-go/v3/modules/apps/27-interchain-accounts/controller/types" + icahost "github.com/line/ibc-go/v3/modules/apps/27-interchain-accounts/host" + icahostkeeper "github.com/line/ibc-go/v3/modules/apps/27-interchain-accounts/host/keeper" + icahosttypes "github.com/line/ibc-go/v3/modules/apps/27-interchain-accounts/host/types" + icatypes "github.com/line/ibc-go/v3/modules/apps/27-interchain-accounts/types" + transfer "github.com/line/ibc-go/v3/modules/apps/transfer" + ibctransferkeeper "github.com/line/ibc-go/v3/modules/apps/transfer/keeper" + ibctransfertypes "github.com/line/ibc-go/v3/modules/apps/transfer/types" + ibc "github.com/line/ibc-go/v3/modules/core" + ibcclient "github.com/line/ibc-go/v3/modules/core/02-client" + ibcclientclient "github.com/line/ibc-go/v3/modules/core/02-client/client" + ibcclienttypes "github.com/line/ibc-go/v3/modules/core/02-client/types" + porttypes "github.com/line/ibc-go/v3/modules/core/05-port/types" + ibchost "github.com/line/ibc-go/v3/modules/core/24-host" + ibckeeper "github.com/line/ibc-go/v3/modules/core/keeper" + ibcmock "github.com/line/ibc-go/v3/testing/mock" "github.com/line/lbm-sdk/baseapp" "github.com/line/lbm-sdk/client" nodeservice "github.com/line/lbm-sdk/client/grpc/node" @@ -63,24 +81,6 @@ import ( "github.com/line/lbm-sdk/x/gov" govkeeper "github.com/line/lbm-sdk/x/gov/keeper" govtypes "github.com/line/lbm-sdk/x/gov/types" - ica "github.com/line/lbm-sdk/x/ibc/applications/27-interchain-accounts" - icacontrollerkeeper "github.com/line/lbm-sdk/x/ibc/applications/27-interchain-accounts/controller/keeper" - icacontrollertypes "github.com/line/lbm-sdk/x/ibc/applications/27-interchain-accounts/controller/types" - icahost "github.com/line/lbm-sdk/x/ibc/applications/27-interchain-accounts/host" - icahostkeeper "github.com/line/lbm-sdk/x/ibc/applications/27-interchain-accounts/host/keeper" - icahosttypes "github.com/line/lbm-sdk/x/ibc/applications/27-interchain-accounts/host/types" - icatypes "github.com/line/lbm-sdk/x/ibc/applications/27-interchain-accounts/types" - transfer "github.com/line/lbm-sdk/x/ibc/applications/transfer" - ibctransferkeeper "github.com/line/lbm-sdk/x/ibc/applications/transfer/keeper" - ibctransfertypes "github.com/line/lbm-sdk/x/ibc/applications/transfer/types" - ibc "github.com/line/lbm-sdk/x/ibc/core" - ibcclient "github.com/line/lbm-sdk/x/ibc/core/02-client" - ibcclientclient "github.com/line/lbm-sdk/x/ibc/core/02-client/client" - ibcclienttypes "github.com/line/lbm-sdk/x/ibc/core/02-client/types" - porttypes "github.com/line/lbm-sdk/x/ibc/core/05-port/types" - ibchost "github.com/line/lbm-sdk/x/ibc/core/24-host" - ibckeeper "github.com/line/lbm-sdk/x/ibc/core/keeper" - ibcmock "github.com/line/lbm-sdk/x/ibc/testing/mock" "github.com/line/lbm-sdk/x/mint" mintkeeper "github.com/line/lbm-sdk/x/mint/keeper" minttypes "github.com/line/lbm-sdk/x/mint/types" diff --git a/appplus/sim_test.go b/appplus/sim_test.go deleted file mode 100644 index fa85d668fa..0000000000 --- a/appplus/sim_test.go +++ /dev/null @@ -1,294 +0,0 @@ -package appplus - -//import ( -// "encoding/json" -// "fmt" -// "os" -// "path/filepath" -// "testing" -// "time" -// -// "github.com/stretchr/testify/require" -// dbm "github.com/tendermint/tm-db" -// -// "github.com/line/lbm-sdk/baseapp" -// "github.com/line/lbm-sdk/codec" -// "github.com/line/lbm-sdk/simapp" -// "github.com/line/lbm-sdk/store" -// "github.com/line/lbm-sdk/store/prefix" -// sdk "github.com/line/lbm-sdk/types" -// "github.com/line/lbm-sdk/types/kv" -// "github.com/line/lbm-sdk/types/module" -// simtypes "github.com/line/lbm-sdk/types/simulation" -// authtypes "github.com/line/lbm-sdk/x/auth/types" -// authzkeeper "github.com/line/lbm-sdk/x/authz/keeper" -// banktypes "github.com/line/lbm-sdk/x/bank/types" -// capabilitytypes "github.com/line/lbm-sdk/x/capability/types" -// distrtypes "github.com/line/lbm-sdk/x/distribution/types" -// evidencetypes "github.com/line/lbm-sdk/x/evidence/types" -// "github.com/line/lbm-sdk/x/feegrant" -// govtypes "github.com/line/lbm-sdk/x/gov/types" -// ibctransfertypes "github.com/line/lbm-sdk/x/ibc/applications/transfer/types" -// ibchost "github.com/line/lbm-sdk/x/ibc/core/24-host" -// minttypes "github.com/line/lbm-sdk/x/mint/types" -// paramstypes "github.com/line/lbm-sdk/x/params/types" -// "github.com/line/lbm-sdk/x/simulation" -// slashingtypes "github.com/line/lbm-sdk/x/slashing/types" -// stakingtypes "github.com/line/lbm-sdk/x/staking/types" -// "github.com/line/ostracon/libs/log" -// ocproto "github.com/line/ostracon/proto/ostracon/types" -// -// wasmapp "github.com/line/wasmd/app" -// "github.com/line/wasmd/x/wasm" -// wasmtypes "github.com/line/wasmd/x/wasm/types" -// wasmplustypes "github.com/line/wasmd/x/wasmplus/types" -//) -// -//// Get flags every time the simulator is run -//func init() { -// simapp.GetSimulatorFlags() -//} -// -//type StoreKeysPrefixes struct { -// A sdk.StoreKey -// B sdk.StoreKey -// Prefixes [][]byte -//} -// -//// SetupSimulation wraps simapp.SetupSimulation in order to create any export directory if they do not exist yet -//func SetupSimulation(dirPrefix, dbName string) (simtypes.Config, dbm.DB, string, log.Logger, bool, error) { -// config, db, dir, logger, skip, err := simapp.SetupSimulation(dirPrefix, dbName) -// if err != nil { -// return simtypes.Config{}, nil, "", nil, false, err -// } -// -// paths := []string{config.ExportParamsPath, config.ExportStatePath, config.ExportStatsPath} -// for _, path := range paths { -// if len(path) == 0 { -// continue -// } -// -// path = filepath.Dir(path) -// if _, err := os.Stat(path); os.IsNotExist(err) { -// if err := os.MkdirAll(path, os.ModePerm); err != nil { -// panic(err) -// } -// } -// } -// -// return config, db, dir, logger, skip, err -//} -// -//// GetSimulationLog unmarshals the KVPair's Value to the corresponding type based on the -//// each's module store key and the prefix bytes of the KVPair's key. -//func GetSimulationLog(storeName string, sdr sdk.StoreDecoderRegistry, kvAs, kvBs []kv.Pair) (log string) { -// for i := 0; i < len(kvAs); i++ { -// if len(kvAs[i].Value) == 0 && len(kvBs[i].Value) == 0 { -// // skip if the value doesn't have any bytes -// continue -// } -// -// decoder, ok := sdr[storeName] -// if ok { -// log += decoder(kvAs[i], kvBs[i]) -// } else { -// log += fmt.Sprintf("store A %q => %q\nstore B %q => %q\n", kvAs[i].Key, kvAs[i].Value, kvBs[i].Key, kvBs[i].Value) -// } -// } -// -// return log -//} -// -//// fauxMerkleModeOpt returns a BaseApp option to use a dbStoreAdapter instead of -//// an IAVLStore for faster simulation speed. -//func fauxMerkleModeOpt(bapp *baseapp.BaseApp) { -// bapp.SetFauxMerkleMode() -//} -// -//func TestAppImportExport(t *testing.T) { -// config, db, dir, logger, skip, err := SetupSimulation("leveldb-app-sim", "Simulation") -// if skip { -// t.Skip("skipping application import/export simulation") -// } -// require.NoError(t, err, "simulation setup failed") -// -// defer func() { -// db.Close() -// require.NoError(t, os.RemoveAll(dir)) -// }() -// -// encConf := wasmapp.MakeEncodingConfig() -// app := NewWasmApp(logger, db, nil, true, map[int64]bool{}, dir, simapp.FlagPeriodValue, encConf, wasmplustypes.EnableAllProposals, wasmapp.EmptyBaseAppOptions{}, nil, fauxMerkleModeOpt) -// require.Equal(t, appName, app.Name()) -// -// // Run randomized simulation -// _, simParams, simErr := simulation.SimulateFromSeed( -// t, -// os.Stdout, -// app.BaseApp, -// AppStateFn(app.AppCodec(), app.SimulationManager()), -// simtypes.RandomAccounts, -// simapp.SimulationOperations(app, app.AppCodec(), config), -// app.ModuleAccountAddrs(), -// config, -// app.AppCodec(), -// ) -// -// // export state and simParams before the simulation error is checked -// err = simapp.CheckExportSimulation(app, config, simParams) -// require.NoError(t, err) -// require.NoError(t, simErr) -// -// if config.Commit { -// simapp.PrintStats(db) -// } -// -// t.Log("exporting genesis...") -// -// exported, err := app.ExportAppStateAndValidators(false, []string{}) -// require.NoError(t, err) -// -// t.Log("importing genesis...") -// -// _, newDB, newDir, _, _, err := SetupSimulation("leveldb-app-sim-2", "Simulation-2") -// require.NoError(t, err, "simulation setup failed") -// -// defer func() { -// newDB.Close() -// require.NoError(t, os.RemoveAll(newDir)) -// }() -// newApp := NewWasmApp(logger, newDB, nil, true, map[int64]bool{}, newDir, simapp.FlagPeriodValue, encConf, wasmplustypes.EnableAllProposals, wasmapp.EmptyBaseAppOptions{}, nil, fauxMerkleModeOpt) -// require.Equal(t, appName, newApp.Name()) -// -// var genesisState wasmapp.GenesisState -// err = json.Unmarshal(exported.AppState, &genesisState) -// require.NoError(t, err) -// -// ctxA := app.NewContext(true, ocproto.Header{Height: app.LastBlockHeight()}) -// ctxB := newApp.NewContext(true, ocproto.Header{Height: app.LastBlockHeight()}) -// newApp.mm.InitGenesis(ctxB, app.AppCodec(), genesisState) -// newApp.StoreConsensusParams(ctxB, exported.ConsensusParams) -// -// t.Log("comparing stores...") -// -// storeKeysPrefixes := []StoreKeysPrefixes{ -// {app.keys[authtypes.StoreKey], newApp.keys[authtypes.StoreKey], [][]byte{}}, -// { -// app.keys[stakingtypes.StoreKey], newApp.keys[stakingtypes.StoreKey], -// [][]byte{ -// stakingtypes.UnbondingQueueKey, stakingtypes.RedelegationQueueKey, stakingtypes.ValidatorQueueKey, -// stakingtypes.HistoricalInfoKey, -// }, -// }, -// {app.keys[slashingtypes.StoreKey], newApp.keys[slashingtypes.StoreKey], [][]byte{}}, -// {app.keys[minttypes.StoreKey], newApp.keys[minttypes.StoreKey], [][]byte{}}, -// {app.keys[distrtypes.StoreKey], newApp.keys[distrtypes.StoreKey], [][]byte{}}, -// {app.keys[banktypes.StoreKey], newApp.keys[banktypes.StoreKey], [][]byte{banktypes.BalancesPrefix}}, -// {app.keys[paramstypes.StoreKey], newApp.keys[paramstypes.StoreKey], [][]byte{}}, -// {app.keys[govtypes.StoreKey], newApp.keys[govtypes.StoreKey], [][]byte{}}, -// {app.keys[evidencetypes.StoreKey], newApp.keys[evidencetypes.StoreKey], [][]byte{}}, -// {app.keys[capabilitytypes.StoreKey], newApp.keys[capabilitytypes.StoreKey], [][]byte{}}, -// {app.keys[ibchost.StoreKey], newApp.keys[ibchost.StoreKey], [][]byte{}}, -// {app.keys[ibctransfertypes.StoreKey], newApp.keys[ibctransfertypes.StoreKey], [][]byte{}}, -// {app.keys[authzkeeper.StoreKey], newApp.keys[authzkeeper.StoreKey], [][]byte{}}, -// {app.keys[feegrant.StoreKey], newApp.keys[feegrant.StoreKey], [][]byte{}}, -// {app.keys[wasm.StoreKey], newApp.keys[wasm.StoreKey], [][]byte{}}, -// } -// -// // delete persistent tx counter value -// ctxA.KVStore(app.keys[wasm.StoreKey]).Delete(wasmtypes.TXCounterPrefix) -// -// // reset contract code index in source DB for comparison with dest DB -// dropContractHistory := func(s store.KVStore, keys ...[]byte) { -// for _, key := range keys { -// prefixStore := prefix.NewStore(s, key) -// iter := prefixStore.Iterator(nil, nil) -// for ; iter.Valid(); iter.Next() { -// prefixStore.Delete(iter.Key()) -// } -// iter.Close() -// } -// } -// prefixes := [][]byte{wasmtypes.ContractCodeHistoryElementPrefix, wasmtypes.ContractByCodeIDAndCreatedSecondaryIndexPrefix} -// dropContractHistory(ctxA.KVStore(app.keys[wasm.StoreKey]), prefixes...) -// dropContractHistory(ctxB.KVStore(newApp.keys[wasm.StoreKey]), prefixes...) -// -// normalizeContractInfo := func(ctx sdk.Context, app *WasmPlusApp) { -// var index uint64 -// app.WasmKeeper.IterateContractInfo(ctx, func(address sdk.AccAddress, info wasmtypes.ContractInfo) bool { -// created := &wasmtypes.AbsoluteTxPosition{ -// BlockHeight: uint64(0), -// TxIndex: index, -// } -// info.Created = created -// store := ctx.KVStore(app.keys[wasm.StoreKey]) -// store.Set(wasmtypes.GetContractAddressKey(address), app.appCodec.MustMarshal(&info)) -// index++ -// return false -// }) -// } -// normalizeContractInfo(ctxA, app) -// normalizeContractInfo(ctxB, newApp) -// // diff both stores -// for _, skp := range storeKeysPrefixes { -// storeA := ctxA.KVStore(skp.A) -// storeB := ctxB.KVStore(skp.B) -// -// failedKVAs, failedKVBs := sdk.DiffKVStores(storeA, storeB, skp.Prefixes) -// require.Equal(t, len(failedKVAs), len(failedKVBs), "unequal sets of key-values to compare") -// -// t.Logf("compared %d different key/value pairs between %s and %s\n", len(failedKVAs), skp.A, skp.B) -// require.Len(t, failedKVAs, 0, GetSimulationLog(skp.A.Name(), app.SimulationManager().StoreDecoders, failedKVAs, failedKVBs)) -// } -//} -// -//func TestFullAppSimulation(t *testing.T) { -// config, db, dir, logger, skip, err := SetupSimulation("leveldb-app-sim", "Simulation") -// if skip { -// t.Skip("skipping application simulation") -// } -// require.NoError(t, err, "simulation setup failed") -// -// defer func() { -// db.Close() -// require.NoError(t, os.RemoveAll(dir)) -// }() -// encConf := wasmapp.MakeEncodingConfig() -// app := NewWasmApp(logger, db, nil, true, map[int64]bool{}, t.TempDir(), simapp.FlagPeriodValue, -// encConf, wasm.EnableAllProposals, simapp.EmptyAppOptions{}, nil, fauxMerkleModeOpt) -// require.Equal(t, "WasmApp", app.Name()) -// -// // run randomized simulation -// _, simParams, simErr := simulation.SimulateFromSeed( -// t, -// os.Stdout, -// app.BaseApp, -// AppStateFn(app.appCodec, app.SimulationManager()), -// simtypes.RandomAccounts, // Replace with own random account function if using keys other than secp256k1 -// simapp.SimulationOperations(app, app.AppCodec(), config), -// app.ModuleAccountAddrs(), -// config, -// app.AppCodec(), -// ) -// -// // export state and simParams before the simulation error is checked -// err = simapp.CheckExportSimulation(app, config, simParams) -// require.NoError(t, err) -// require.NoError(t, simErr) -// -// if config.Commit { -// simapp.PrintStats(db) -// } -//} -// -//// AppStateFn returns the initial application state using a genesis or the simulation parameters. -//// It panics if the user provides files for both of them. -//// If a file is not given for the genesis or the sim params, it creates a randomized one. -//func AppStateFn(codec codec.Codec, manager *module.SimulationManager) simtypes.AppStateFn { -// // quick hack to setup app state genesis with our app modules -// simapp.ModuleBasics = ModuleBasics -// if simapp.FlagGenesisTimeValue == 0 { // always set to have a block time -// simapp.FlagGenesisTimeValue = time.Now().Unix() -// } -// return simapp.AppStateFn(codec, manager) -//} diff --git a/go.mod b/go.mod index 5308f09f28..2b107208d7 100644 --- a/go.mod +++ b/go.mod @@ -62,6 +62,7 @@ require ( github.com/dgraph-io/ristretto v0.1.0 // indirect github.com/dgryski/go-farm v0.0.0-20200201041132-a6ae2369ad13 // indirect github.com/dustin/go-humanize v1.0.0 // indirect + github.com/felixge/httpsnoop v1.0.1 // indirect github.com/fsnotify/fsnotify v1.6.0 // indirect github.com/go-kit/log v0.2.1 // indirect github.com/go-logfmt/logfmt v0.5.1 // indirect diff --git a/go.sum b/go.sum index 9af5eb4fa7..ff3e95163a 100644 --- a/go.sum +++ b/go.sum @@ -1,28 +1,16 @@ -4d63.com/gochecknoglobals v0.1.0/go.mod h1:wfdC5ZjKSPr7CybKEcgJhUOgeAQW1+7WcyK8OvUilfo= -bazil.org/fuse v0.0.0-20160811212531-371fbbdaa898/go.mod h1:Xbm+BRKSBEpa4q4hTSxohYNQpsxXPbPry4JJWOB3LB8= -bazil.org/fuse v0.0.0-20180421153158-65cc252bf669/go.mod h1:Xbm+BRKSBEpa4q4hTSxohYNQpsxXPbPry4JJWOB3LB8= -bazil.org/fuse v0.0.0-20200407214033-5883e5a4b512/go.mod h1:FbcW6z/2VytnFDhZfumh8Ss8zxHE6qpMP5sHTRe0EaM= -bitbucket.org/creachadair/shell v0.0.6/go.mod h1:8Qqi/cYk7vPnsOePHroKXDJYmb5x7ENhtiFtfZq8K+M= -cloud.google.com/go v0.25.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= -cloud.google.com/go v0.31.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= -cloud.google.com/go v0.37.2/go.mod h1:H8IAquKe2L30IxoupDgqTaQvKSwF/c8prYHynGIWQbA= cloud.google.com/go v0.38.0/go.mod h1:990N+gfupTy94rShfmMCWGDn0LpTmnzTp2qbd1dvSRU= -cloud.google.com/go v0.39.0/go.mod h1:rVLT6fkc8chs9sfPtFc1SBH6em7n+ZoXaG+87tDISts= -cloud.google.com/go v0.43.0/go.mod h1:BOSR3VbTLkk6FDC/TcffxP4NF/FFBGA5ku+jvKOP7pg= cloud.google.com/go v0.44.1/go.mod h1:iSa0KzasP4Uvy3f1mN/7PiObzGgflwredwwASm/v6AU= cloud.google.com/go v0.44.2/go.mod h1:60680Gw3Yr4ikxnPRS/oxxkBccT6SA1yMk63TGekxKY= cloud.google.com/go v0.44.3/go.mod h1:60680Gw3Yr4ikxnPRS/oxxkBccT6SA1yMk63TGekxKY= cloud.google.com/go v0.45.1/go.mod h1:RpBamKRgapWJb87xiFSdk4g1CME7QZg3uwTez+TSTjc= cloud.google.com/go v0.46.3/go.mod h1:a6bKKbmY7er1mI7TEI4lsAkts/mkhTSZK8w33B4RAg0= cloud.google.com/go v0.50.0/go.mod h1:r9sluTvynVuxRIOHXQEHMFffphuXHOMZMycpNR5e6To= -cloud.google.com/go v0.51.0/go.mod h1:hWtGJ6gnXH+KgDv+V0zFGDvpi07n3z8ZNj3T1RW0Gcw= cloud.google.com/go v0.52.0/go.mod h1:pXajvRH/6o3+F9jDHZWQ5PbGhn+o8w9qiu/CffaVdO4= cloud.google.com/go v0.53.0/go.mod h1:fp/UouUEsRkN6ryDKNW/Upv/JBKnv6WDthjR6+vze6M= cloud.google.com/go v0.54.0/go.mod h1:1rq2OEkV3YMf6n/9ZvGWI3GWw0VoqH/1x2nd8Is/bPc= cloud.google.com/go v0.56.0/go.mod h1:jr7tqZxxKOVYizybht9+26Z/gUq7tiRzu+ACVAMbKVk= cloud.google.com/go v0.57.0/go.mod h1:oXiQ6Rzq3RAkkY7N6t3TcE6jE+CIBBbA36lwQ1JyzZs= -cloud.google.com/go v0.60.0/go.mod h1:yw2G51M9IfRboUH61Us8GqCeF1PzPblB823Mn2q2eAU= cloud.google.com/go v0.62.0/go.mod h1:jmCYTdRCQuc1PHIIJ/maLInMho30T/Y0M4hTdTShOYc= cloud.google.com/go v0.65.0/go.mod h1:O5N8zS7uWy9vkA9vayVHs65eM1ubvY4h553ofrNHObY= cloud.google.com/go v0.72.0/go.mod h1:M+5Vjvlc2wnp6tjzE102Dw08nGShTscUx2nZMufOKPI= @@ -31,470 +19,129 @@ cloud.google.com/go v0.75.0/go.mod h1:VGuuCn7PG0dwsd5XPVm2Mm3wlh3EL55/79EKB6hlPT cloud.google.com/go v0.78.0/go.mod h1:QjdrLG0uq+YwhjoVOLsS1t7TW8fs36kLs4XO5R5ECHg= cloud.google.com/go v0.79.0/go.mod h1:3bzgcEeQlzbuEAYu4mrWhKqWjmpprinYgKJLgKHnbb8= cloud.google.com/go v0.81.0/go.mod h1:mk/AM35KwGk/Nm2YSeZbxXdrNK3KZOYHmLkOqC2V6E0= -cloud.google.com/go v0.83.0/go.mod h1:Z7MJUsANfY0pYPdw0lbnivPx4/vhy/e2FEkSkF7vAVY= -cloud.google.com/go v0.84.0/go.mod h1:RazrYuxIK6Kb7YrzzhPoLmCVzl7Sup4NrbKPg8KHSUM= -cloud.google.com/go v0.87.0/go.mod h1:TpDYlFy7vuLzZMMZ+B6iRiELaY7z/gJPaqbMx6mlWcY= -cloud.google.com/go v0.90.0/go.mod h1:kRX0mNRHe0e2rC6oNakvwQqzyDmg57xJ+SZU1eT2aDQ= -cloud.google.com/go v0.93.3/go.mod h1:8utlLll2EF5XMAV15woO4lSbWQlk8rer9aLOfLh7+YI= -cloud.google.com/go v0.94.1/go.mod h1:qAlAugsXlC+JWO+Bke5vCtc9ONxjQT3drlTTnAplMW4= -cloud.google.com/go v0.97.0/go.mod h1:GF7l59pYBVlXQIBLx3a761cZ41F9bBH3JUlihCt2Udc= -cloud.google.com/go v0.98.0/go.mod h1:ua6Ush4NALrHk5QXDWnjvZHN93OuF0HfuEPq9I1X0cM= -cloud.google.com/go v0.99.0/go.mod h1:w0Xx2nLzqWJPuozYQX+hFfCSI8WioryfRDzkoI/Y2ZA= -cloud.google.com/go v0.100.2/go.mod h1:4Xra9TjzAeYHrl5+oeLlzbM2k3mjVhZh4UqTZ//w99A= -cloud.google.com/go v0.102.0/go.mod h1:oWcCzKlqJ5zgHQt9YsaeTY9KzIvjyy0ArmiBUgpQ+nc= -cloud.google.com/go v0.102.1/go.mod h1:XZ77E9qnTEnrgEOvr4xzfdX5TRo7fB4T2F4O6+34hIU= -cloud.google.com/go v0.104.0/go.mod h1:OO6xxXdJyvuJPcEPBLN9BJPD+jep5G1+2U5B5gkRYtA= -cloud.google.com/go/aiplatform v1.22.0/go.mod h1:ig5Nct50bZlzV6NvKaTwmplLLddFx0YReh9WfTO5jKw= -cloud.google.com/go/aiplatform v1.24.0/go.mod h1:67UUvRBKG6GTayHKV8DBv2RtR1t93YRu5B1P3x99mYY= -cloud.google.com/go/analytics v0.11.0/go.mod h1:DjEWCu41bVbYcKyvlws9Er60YE4a//bK6mnhWvQeFNI= -cloud.google.com/go/analytics v0.12.0/go.mod h1:gkfj9h6XRf9+TS4bmuhPEShsh3hH8PAZzm/41OOhQd4= -cloud.google.com/go/area120 v0.5.0/go.mod h1:DE/n4mp+iqVyvxHN41Vf1CR602GiHQjFPusMFW6bGR4= -cloud.google.com/go/area120 v0.6.0/go.mod h1:39yFJqWVgm0UZqWTOdqkLhjoC7uFfgXRC8g/ZegeAh0= -cloud.google.com/go/artifactregistry v1.6.0/go.mod h1:IYt0oBPSAGYj/kprzsBjZ/4LnG/zOcHyFHjWPCi6SAQ= -cloud.google.com/go/artifactregistry v1.7.0/go.mod h1:mqTOFOnGZx8EtSqK/ZWcsm/4U8B77rbcLP6ruDU2Ixk= -cloud.google.com/go/asset v1.5.0/go.mod h1:5mfs8UvcM5wHhqtSv8J1CtxxaQq3AdBxxQi2jGW/K4o= -cloud.google.com/go/asset v1.7.0/go.mod h1:YbENsRK4+xTiL+Ofoj5Ckf+O17kJtgp3Y3nn4uzZz5s= -cloud.google.com/go/asset v1.8.0/go.mod h1:mUNGKhiqIdbr8X7KNayoYvyc4HbbFO9URsjbytpUaW0= -cloud.google.com/go/assuredworkloads v1.5.0/go.mod h1:n8HOZ6pff6re5KYfBXcFvSViQjDwxFkAkmUFffJRbbY= -cloud.google.com/go/assuredworkloads v1.6.0/go.mod h1:yo2YOk37Yc89Rsd5QMVECvjaMKymF9OP+QXWlKXUkXw= -cloud.google.com/go/assuredworkloads v1.7.0/go.mod h1:z/736/oNmtGAyU47reJgGN+KVoYoxeLBoj4XkKYscNI= -cloud.google.com/go/automl v1.5.0/go.mod h1:34EjfoFGMZ5sgJ9EoLsRtdPSNZLcfflJR39VbVNS2M0= -cloud.google.com/go/automl v1.6.0/go.mod h1:ugf8a6Fx+zP0D59WLhqgTDsQI9w07o64uf/Is3Nh5p8= cloud.google.com/go/bigquery v1.0.1/go.mod h1:i/xbL2UlR5RvWAURpBYZTtm/cXjCha9lbfbpx4poX+o= cloud.google.com/go/bigquery v1.3.0/go.mod h1:PjpwJnslEMmckchkHFfq+HTD2DmtT67aNFKH1/VBDHE= cloud.google.com/go/bigquery v1.4.0/go.mod h1:S8dzgnTigyfTmLBfrtrhyYhwRxG72rYxvftPBK2Dvzc= cloud.google.com/go/bigquery v1.5.0/go.mod h1:snEHRnqQbz117VIFhE8bmtwIDY80NLUZUMb4Nv6dBIg= cloud.google.com/go/bigquery v1.7.0/go.mod h1://okPTzCYNXSlb24MZs83e2Do+h+VXtc4gLoIoXIAPc= cloud.google.com/go/bigquery v1.8.0/go.mod h1:J5hqkt3O0uAFnINi6JXValWIb1v0goeZM77hZzJN/fQ= -cloud.google.com/go/bigquery v1.42.0/go.mod h1:8dRTJxhtG+vwBKzE5OseQn/hiydoQN3EedCaOdYmxRA= -cloud.google.com/go/bigtable v1.2.0/go.mod h1:JcVAOl45lrTmQfLj7T6TxyMzIN/3FGGcFm+2xVAli2o= -cloud.google.com/go/billing v1.4.0/go.mod h1:g9IdKBEFlItS8bTtlrZdVLWSSdSyFUZKXNS02zKMOZY= -cloud.google.com/go/billing v1.5.0/go.mod h1:mztb1tBc3QekhjSgmpf/CV4LzWXLzCArwpLmP2Gm88s= -cloud.google.com/go/binaryauthorization v1.1.0/go.mod h1:xwnoWu3Y84jbuHa0zd526MJYmtnVXn0syOjaJgy4+dM= -cloud.google.com/go/binaryauthorization v1.2.0/go.mod h1:86WKkJHtRcv5ViNABtYMhhNWRrD1Vpi//uKEy7aYEfI= -cloud.google.com/go/cloudtasks v1.5.0/go.mod h1:fD92REy1x5woxkKEkLdvavGnPJGEn8Uic9nWuLzqCpY= -cloud.google.com/go/cloudtasks v1.6.0/go.mod h1:C6Io+sxuke9/KNRkbQpihnW93SWDU3uXt92nu85HkYI= -cloud.google.com/go/compute v0.1.0/go.mod h1:GAesmwr110a34z04OlxYkATPBEfVhkymfTBXtfbBFow= -cloud.google.com/go/compute v1.3.0/go.mod h1:cCZiE1NHEtai4wiufUhW8I8S1JKkAnhnQJWM7YD99wM= -cloud.google.com/go/compute v1.5.0/go.mod h1:9SMHyhJlzhlkJqrPAc839t2BZFTSk6Jdj6mkzQJeu0M= -cloud.google.com/go/compute v1.6.0/go.mod h1:T29tfhtVbq1wvAPo0E3+7vhgmkOYeXjhFvz/FMzPu0s= -cloud.google.com/go/compute v1.6.1/go.mod h1:g85FgpzFvNULZ+S8AYq87axRKuf2Kh7deLqV/jJ3thU= -cloud.google.com/go/compute v1.7.0/go.mod h1:435lt8av5oL9P3fv1OEzSbSUe+ybHXGMPQHHZWZxy9U= -cloud.google.com/go/compute v1.10.0/go.mod h1:ER5CLbMxl90o2jtNbGSbtfOpQKR0t15FOtRsugnLrlU= -cloud.google.com/go/compute v1.12.0/go.mod h1:e8yNOBcBONZU1vJKCvCoDw/4JQsA0dpM4x/6PIIOocU= -cloud.google.com/go/compute v1.12.1/go.mod h1:e8yNOBcBONZU1vJKCvCoDw/4JQsA0dpM4x/6PIIOocU= -cloud.google.com/go/compute/metadata v0.1.0/go.mod h1:Z1VN+bulIf6bt4P/C37K4DyZYZEXYonfTBHHFPO/4UU= -cloud.google.com/go/compute/metadata v0.2.0/go.mod h1:zFmK7XCadkQkj6TtorcaGlCW1hT1fIilQDwofLpJ20k= -cloud.google.com/go/compute/metadata v0.2.1/go.mod h1:jgHgmJd2RKBGzXqF5LR2EZMGxBkeanZ9wwa75XHJgOM= -cloud.google.com/go/containeranalysis v0.5.1/go.mod h1:1D92jd8gRR/c0fGMlymRgxWD3Qw9C1ff6/T7mLgVL8I= -cloud.google.com/go/containeranalysis v0.6.0/go.mod h1:HEJoiEIu+lEXM+k7+qLCci0h33lX3ZqoYFdmPcoO7s4= -cloud.google.com/go/datacatalog v1.3.0/go.mod h1:g9svFY6tuR+j+hrTw3J2dNcmI0dzmSiyOzm8kpLq0a0= -cloud.google.com/go/datacatalog v1.5.0/go.mod h1:M7GPLNQeLfWqeIm3iuiruhPzkt65+Bx8dAKvScX8jvs= -cloud.google.com/go/datacatalog v1.6.0/go.mod h1:+aEyF8JKg+uXcIdAmmaMUmZ3q1b/lKLtXCmXdnc0lbc= -cloud.google.com/go/dataflow v0.6.0/go.mod h1:9QwV89cGoxjjSR9/r7eFDqqjtvbKxAK2BaYU6PVk9UM= -cloud.google.com/go/dataflow v0.7.0/go.mod h1:PX526vb4ijFMesO1o202EaUmouZKBpjHsTlCtB4parQ= -cloud.google.com/go/dataform v0.3.0/go.mod h1:cj8uNliRlHpa6L3yVhDOBrUXH+BPAO1+KFMQQNSThKo= -cloud.google.com/go/dataform v0.4.0/go.mod h1:fwV6Y4Ty2yIFL89huYlEkwUPtS7YZinZbzzj5S9FzCE= -cloud.google.com/go/datalabeling v0.5.0/go.mod h1:TGcJ0G2NzcsXSE/97yWjIZO0bXj0KbVlINXMG9ud42I= -cloud.google.com/go/datalabeling v0.6.0/go.mod h1:WqdISuk/+WIGeMkpw/1q7bK/tFEZxsrFJOJdY2bXvTQ= -cloud.google.com/go/dataqna v0.5.0/go.mod h1:90Hyk596ft3zUQ8NkFfvICSIfHFh1Bc7C4cK3vbhkeo= -cloud.google.com/go/dataqna v0.6.0/go.mod h1:1lqNpM7rqNLVgWBJyk5NF6Uen2PHym0jtVJonplVsDA= cloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7TKLgZqpHYE= cloud.google.com/go/datastore v1.1.0/go.mod h1:umbIZjpQpHh4hmRpGhH4tLFup+FVzqBi1b3c64qFpCk= -cloud.google.com/go/datastream v1.2.0/go.mod h1:i/uTP8/fZwgATHS/XFu0TcNUhuA0twZxxQ3EyCUQMwo= -cloud.google.com/go/datastream v1.3.0/go.mod h1:cqlOX8xlyYF/uxhiKn6Hbv6WjwPPuI9W2M9SAXwaLLQ= -cloud.google.com/go/dialogflow v1.15.0/go.mod h1:HbHDWs33WOGJgn6rfzBW1Kv807BE3O1+xGbn59zZWI4= -cloud.google.com/go/dialogflow v1.16.1/go.mod h1:po6LlzGfK+smoSmTBnbkIZY2w8ffjz/RcGSS+sh1el0= -cloud.google.com/go/dialogflow v1.17.0/go.mod h1:YNP09C/kXA1aZdBgC/VtXX74G/TKn7XVCcVumTflA+8= -cloud.google.com/go/documentai v1.7.0/go.mod h1:lJvftZB5NRiFSX4moiye1SMxHx0Bc3x1+p9e/RfXYiU= -cloud.google.com/go/documentai v1.8.0/go.mod h1:xGHNEB7CtsnySCNrCFdCyyMz44RhFEEX2Q7UD0c5IhU= -cloud.google.com/go/domains v0.6.0/go.mod h1:T9Rz3GasrpYk6mEGHh4rymIhjlnIuB4ofT1wTxDeT4Y= -cloud.google.com/go/domains v0.7.0/go.mod h1:PtZeqS1xjnXuRPKE/88Iru/LdfoRyEHYA9nFQf4UKpg= -cloud.google.com/go/edgecontainer v0.1.0/go.mod h1:WgkZ9tp10bFxqO8BLPqv2LlfmQF1X8lZqwW4r1BTajk= -cloud.google.com/go/edgecontainer v0.2.0/go.mod h1:RTmLijy+lGpQ7BXuTDa4C4ssxyXT34NIuHIgKuP4s5w= cloud.google.com/go/firestore v1.1.0/go.mod h1:ulACoGHTpvq5r8rxGJ4ddJZBZqakUQqClKRT5SZwBmk= -cloud.google.com/go/firestore v1.6.1/go.mod h1:asNXNOzBdyVQmEU+ggO8UPodTkEVFW5Qx+rwHnAz+EY= -cloud.google.com/go/firestore v1.8.0/go.mod h1:r3KB8cAdRIe8znzoPWLw8S6gpDVd9treohhn8b09424= -cloud.google.com/go/functions v1.6.0/go.mod h1:3H1UA3qiIPRWD7PeZKLvHZ9SaQhR26XIJcC0A5GbvAk= -cloud.google.com/go/functions v1.7.0/go.mod h1:+d+QBcWM+RsrgZfV9xo6KfA1GlzJfxcfZcRPEhDDfzg= -cloud.google.com/go/gaming v1.5.0/go.mod h1:ol7rGcxP/qHTRQE/RO4bxkXq+Fix0j6D4LFPzYTIrDM= -cloud.google.com/go/gaming v1.6.0/go.mod h1:YMU1GEvA39Qt3zWGyAVA9bpYz/yAhTvaQ1t2sK4KPUA= -cloud.google.com/go/gkeconnect v0.5.0/go.mod h1:c5lsNAg5EwAy7fkqX/+goqFsU1Da/jQFqArp+wGNr/o= -cloud.google.com/go/gkeconnect v0.6.0/go.mod h1:Mln67KyU/sHJEBY8kFZ0xTeyPtzbq9StAVvEULYK16A= -cloud.google.com/go/gkehub v0.9.0/go.mod h1:WYHN6WG8w9bXU0hqNxt8rm5uxnk8IH+lPY9J2TV7BK0= -cloud.google.com/go/gkehub v0.10.0/go.mod h1:UIPwxI0DsrpsVoWpLB0stwKCP+WFVG9+y977wO+hBH0= -cloud.google.com/go/grafeas v0.2.0/go.mod h1:KhxgtF2hb0P191HlY5besjYm6MqTSTj3LSI+M+ByZHc= -cloud.google.com/go/iam v0.3.0/go.mod h1:XzJPvDayI+9zsASAFO68Hk07u3z+f+JrT2xXNdp4bnY= -cloud.google.com/go/language v1.4.0/go.mod h1:F9dRpNFQmJbkaop6g0JhSBXCNlO90e1KWx5iDdxbWic= -cloud.google.com/go/language v1.6.0/go.mod h1:6dJ8t3B+lUYfStgls25GusK04NLh3eDLQnWM3mdEbhI= -cloud.google.com/go/lifesciences v0.5.0/go.mod h1:3oIKy8ycWGPUyZDR/8RNnTOYevhaMLqh5vLUXs9zvT8= -cloud.google.com/go/lifesciences v0.6.0/go.mod h1:ddj6tSX/7BOnhxCSd3ZcETvtNr8NZ6t/iPhY2Tyfu08= -cloud.google.com/go/mediatranslation v0.5.0/go.mod h1:jGPUhGTybqsPQn91pNXw0xVHfuJ3leR1wj37oU3y1f4= -cloud.google.com/go/mediatranslation v0.6.0/go.mod h1:hHdBCTYNigsBxshbznuIMFNe5QXEowAuNmmC7h8pu5w= -cloud.google.com/go/memcache v1.4.0/go.mod h1:rTOfiGZtJX1AaFUrOgsMHX5kAzaTQ8azHiuDoTPzNsE= -cloud.google.com/go/memcache v1.5.0/go.mod h1:dk3fCK7dVo0cUU2c36jKb4VqKPS22BTkf81Xq617aWM= -cloud.google.com/go/metastore v1.5.0/go.mod h1:2ZNrDcQwghfdtCwJ33nM0+GrBGlVuh8rakL3vdPY3XY= -cloud.google.com/go/metastore v1.6.0/go.mod h1:6cyQTls8CWXzk45G55x57DVQ9gWg7RiH65+YgPsNh9s= -cloud.google.com/go/networkconnectivity v1.4.0/go.mod h1:nOl7YL8odKyAOtzNX73/M5/mGZgqqMeryi6UPZTk/rA= -cloud.google.com/go/networkconnectivity v1.5.0/go.mod h1:3GzqJx7uhtlM3kln0+x5wyFvuVH1pIBJjhCpjzSt75o= -cloud.google.com/go/networksecurity v0.5.0/go.mod h1:xS6fOCoqpVC5zx15Z/MqkfDwH4+m/61A3ODiDV1xmiQ= -cloud.google.com/go/networksecurity v0.6.0/go.mod h1:Q5fjhTr9WMI5mbpRYEbiexTzROf7ZbDzvzCrNl14nyU= -cloud.google.com/go/notebooks v1.2.0/go.mod h1:9+wtppMfVPUeJ8fIWPOq1UnATHISkGXGqTkxeieQ6UY= -cloud.google.com/go/notebooks v1.3.0/go.mod h1:bFR5lj07DtCPC7YAAJ//vHskFBxA5JzYlH68kXVdk34= -cloud.google.com/go/osconfig v1.7.0/go.mod h1:oVHeCeZELfJP7XLxcBGTMBvRO+1nQ5tFG9VQTmYS2Fs= -cloud.google.com/go/osconfig v1.8.0/go.mod h1:EQqZLu5w5XA7eKizepumcvWx+m8mJUhEwiPqWiZeEdg= -cloud.google.com/go/oslogin v1.4.0/go.mod h1:YdgMXWRaElXz/lDk1Na6Fh5orF7gvmJ0FGLIs9LId4E= -cloud.google.com/go/oslogin v1.5.0/go.mod h1:D260Qj11W2qx/HVF29zBg+0fd6YCSjSqLUkY/qEenQU= -cloud.google.com/go/phishingprotection v0.5.0/go.mod h1:Y3HZknsK9bc9dMi+oE8Bim0lczMU6hrX0UpADuMefr0= -cloud.google.com/go/phishingprotection v0.6.0/go.mod h1:9Y3LBLgy0kDTcYET8ZH3bq/7qni15yVUoAxiFxnlSUA= -cloud.google.com/go/privatecatalog v0.5.0/go.mod h1:XgosMUvvPyxDjAVNDYxJ7wBW8//hLDDYmnsNcMGq1K0= -cloud.google.com/go/privatecatalog v0.6.0/go.mod h1:i/fbkZR0hLN29eEWiiwue8Pb+GforiEIBnV9yrRUOKI= cloud.google.com/go/pubsub v1.0.1/go.mod h1:R0Gpsv3s54REJCy4fxDixWD93lHJMoZTyQ2kNxGRt3I= cloud.google.com/go/pubsub v1.1.0/go.mod h1:EwwdRX2sKPjnvnqCa270oGRyludottCI76h+R3AArQw= cloud.google.com/go/pubsub v1.2.0/go.mod h1:jhfEVHT8odbXTkndysNHCcx0awwzvfOlguIAii9o8iA= cloud.google.com/go/pubsub v1.3.1/go.mod h1:i+ucay31+CNRpDW4Lu78I4xXG+O1r/MAHgjpRVR+TSU= -cloud.google.com/go/pubsub v1.5.0/go.mod h1:ZEwJccE3z93Z2HWvstpri00jOg7oO4UZDtKhwDwqF0w= -cloud.google.com/go/recaptchaenterprise v1.3.1/go.mod h1:OdD+q+y4XGeAlxRaMn1Y7/GveP6zmq76byL6tjPE7d4= -cloud.google.com/go/recaptchaenterprise/v2 v2.1.0/go.mod h1:w9yVqajwroDNTfGuhmOjPDN//rZGySaf6PtFVcSCa7o= -cloud.google.com/go/recaptchaenterprise/v2 v2.2.0/go.mod h1:/Zu5jisWGeERrd5HnlS3EUGb/D335f9k51B/FVil0jk= -cloud.google.com/go/recaptchaenterprise/v2 v2.3.0/go.mod h1:O9LwGCjrhGHBQET5CA7dd5NwwNQUErSgEDit1DLNTdo= -cloud.google.com/go/recommendationengine v0.5.0/go.mod h1:E5756pJcVFeVgaQv3WNpImkFP8a+RptV6dDLGPILjvg= -cloud.google.com/go/recommendationengine v0.6.0/go.mod h1:08mq2umu9oIqc7tDy8sx+MNJdLG0fUi3vaSVbztHgJ4= -cloud.google.com/go/recommender v1.5.0/go.mod h1:jdoeiBIVrJe9gQjwd759ecLJbxCDED4A6p+mqoqDvTg= -cloud.google.com/go/recommender v1.6.0/go.mod h1:+yETpm25mcoiECKh9DEScGzIRyDKpZ0cEhWGo+8bo+c= -cloud.google.com/go/redis v1.7.0/go.mod h1:V3x5Jq1jzUcg+UNsRvdmsfuFnit1cfe3Z/PGyq/lm4Y= -cloud.google.com/go/redis v1.8.0/go.mod h1:Fm2szCDavWzBk2cDKxrkmWBqoCiL1+Ctwq7EyqBCA/A= -cloud.google.com/go/retail v1.8.0/go.mod h1:QblKS8waDmNUhghY2TI9O3JLlFk8jybHeV4BF19FrE4= -cloud.google.com/go/retail v1.9.0/go.mod h1:g6jb6mKuCS1QKnH/dpu7isX253absFl6iE92nHwlBUY= -cloud.google.com/go/scheduler v1.4.0/go.mod h1:drcJBmxF3aqZJRhmkHQ9b3uSSpQoltBPGPxGAWROx6s= -cloud.google.com/go/scheduler v1.5.0/go.mod h1:ri073ym49NW3AfT6DZi21vLZrG07GXr5p3H1KxN5QlI= -cloud.google.com/go/secretmanager v1.6.0/go.mod h1:awVa/OXF6IiyaU1wQ34inzQNc4ISIDIrId8qE5QGgKA= -cloud.google.com/go/security v1.5.0/go.mod h1:lgxGdyOKKjHL4YG3/YwIL2zLqMFCKs0UbQwgyZmfJl4= -cloud.google.com/go/security v1.7.0/go.mod h1:mZklORHl6Bg7CNnnjLH//0UlAlaXqiG7Lb9PsPXLfD0= -cloud.google.com/go/security v1.8.0/go.mod h1:hAQOwgmaHhztFhiQ41CjDODdWP0+AE1B3sX4OFlq+GU= -cloud.google.com/go/securitycenter v1.13.0/go.mod h1:cv5qNAqjY84FCN6Y9z28WlkKXyWsgLO832YiWwkCWcU= -cloud.google.com/go/securitycenter v1.14.0/go.mod h1:gZLAhtyKv85n52XYWt6RmeBdydyxfPeTrpToDPw4Auc= -cloud.google.com/go/servicedirectory v1.4.0/go.mod h1:gH1MUaZCgtP7qQiI+F+A+OpeKF/HQWgtAddhTbhL2bs= -cloud.google.com/go/servicedirectory v1.5.0/go.mod h1:QMKFL0NUySbpZJ1UZs3oFAmdvVxhhxB6eJ/Vlp73dfg= -cloud.google.com/go/spanner v1.7.0/go.mod h1:sd3K2gZ9Fd0vMPLXzeCrF6fq4i63Q7aTLW/lBIfBkIk= -cloud.google.com/go/speech v1.6.0/go.mod h1:79tcr4FHCimOp56lwC01xnt/WPJZc4v3gzyT7FoBkCM= -cloud.google.com/go/speech v1.7.0/go.mod h1:KptqL+BAQIhMsj1kOP2la5DSEEerPDuOP/2mmkhHhZQ= cloud.google.com/go/storage v1.0.0/go.mod h1:IhtSnM/ZTZV8YYJWCY8RULGVqBDmpoyjwiyrjsg+URw= cloud.google.com/go/storage v1.5.0/go.mod h1:tpKbwo567HUNpVclU5sGELwQWBDZ8gh0ZeosJ0Rtdos= cloud.google.com/go/storage v1.6.0/go.mod h1:N7U0C8pVQ/+NIKOBQyamJIeKQKkZ+mxpohlUTyfDhBk= cloud.google.com/go/storage v1.8.0/go.mod h1:Wv1Oy7z6Yz3DshWRJFhqM/UCfaWIRTdp0RXyy7KQOVs= cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9ullr3+Kg0= cloud.google.com/go/storage v1.14.0/go.mod h1:GrKmX003DSIwi9o29oFT7YDnHYwZoctc3fOKtUw0Xmo= -cloud.google.com/go/storage v1.22.1/go.mod h1:S8N1cAStu7BOeFfE8KAQzmyyLkK8p/vmRq6kuBTW58Y= -cloud.google.com/go/storage v1.23.0/go.mod h1:vOEEDNFnciUMhBeT6hsJIn3ieU5cFRmzeLgDvXzfIXc= -cloud.google.com/go/talent v1.1.0/go.mod h1:Vl4pt9jiHKvOgF9KoZo6Kob9oV4lwd/ZD5Cto54zDRw= -cloud.google.com/go/talent v1.2.0/go.mod h1:MoNF9bhFQbiJ6eFD3uSsg0uBALw4n4gaCaEjBw9zo8g= -cloud.google.com/go/videointelligence v1.6.0/go.mod h1:w0DIDlVRKtwPCn/C4iwZIJdvC69yInhW0cfi+p546uU= -cloud.google.com/go/videointelligence v1.7.0/go.mod h1:k8pI/1wAhjznARtVT9U1llUaFNPh7muw8QyOUpavru4= -cloud.google.com/go/vision v1.2.0/go.mod h1:SmNwgObm5DpFBme2xpyOyasvBc1aPdjvMk2bBk0tKD0= -cloud.google.com/go/vision/v2 v2.2.0/go.mod h1:uCdV4PpN1S0jyCyq8sIM42v2Y6zOLkZs+4R9LrGYwFo= -cloud.google.com/go/vision/v2 v2.3.0/go.mod h1:UO61abBx9QRMFkNBbf1D8B1LXdS2cGiiCRx0vSpZoUo= -cloud.google.com/go/webrisk v1.4.0/go.mod h1:Hn8X6Zr+ziE2aNd8SliSDWpEnSS1u4R9+xXZmFiHmGE= -cloud.google.com/go/webrisk v1.5.0/go.mod h1:iPG6fr52Tv7sGk0H6qUFzmL3HHZev1htXuWDEEsqMTg= -cloud.google.com/go/workflows v1.6.0/go.mod h1:6t9F5h/unJz41YqfBmqSASJSXccBLtD1Vwf+KmJENM0= -cloud.google.com/go/workflows v1.7.0/go.mod h1:JhSrZuVZWuiDfKEFxU0/F1PQjmpnpcoISEXH2bcHC3M= -code.gitea.io/sdk/gitea v0.12.0/go.mod h1:z3uwDV/b9Ls47NGukYM9XhnHtqPh/J+t40lsUrR6JDY= -collectd.org v0.3.0/go.mod h1:A/8DzQBkF6abtvrT2j/AU/4tiBgJWYyh0y/oB/4MlWE= -contrib.go.opencensus.io/exporter/aws v0.0.0-20181029163544-2befc13012d0/go.mod h1:uu1P0UCM/6RbsMrgPa98ll8ZcHM858i/AD06a9aLRCA= -contrib.go.opencensus.io/exporter/ocagent v0.5.0/go.mod h1:ImxhfLRpxoYiSq891pBrLVhN+qmP8BTVvdH2YLs7Gl0= -contrib.go.opencensus.io/exporter/stackdriver v0.12.1/go.mod h1:iwB6wGarfphGGe/e5CWqyUk/cLzKnWsOKPVW3no6OTw= -contrib.go.opencensus.io/exporter/stackdriver v0.13.4/go.mod h1:aXENhDJ1Y4lIg4EUaVTwzvYETVNZk10Pu26tevFKLUc= -contrib.go.opencensus.io/integrations/ocsql v0.1.4/go.mod h1:8DsSdjz3F+APR+0z0WkU1aRorQCFfRxvqjUUPMbF3fE= -contrib.go.opencensus.io/resource v0.1.1/go.mod h1:F361eGI91LCmW1I/Saf+rX0+OFcigGlFvXwEGEnkRLA= dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= filippo.io/edwards25519 v1.0.0-beta.2/go.mod h1:X+pm78QAUPtFLi1z9PYIlS/bdDnvbCOGKtZ+ACWEf7o= +filippo.io/edwards25519 v1.0.0-rc.1 h1:m0VOOB23frXZvAOK44usCgLWvtsxIoMCTBGJZlpmGfU= filippo.io/edwards25519 v1.0.0-rc.1/go.mod h1:N1IkdkCkiLB6tki+MYJoSx2JTY9NUlxZE7eHn5EwJns= -gioui.org v0.0.0-20210308172011-57750fc8a0a6/go.mod h1:RSH6KIUZ0p2xy5zHDxgAM4zumjgTw83q2ge/PI+yyw8= -git.apache.org/thrift.git v0.0.0-20180902110319-2566ecd5d999/go.mod h1:fPE2ZNJGynbRyZ4dJvy6G277gSllfV2HJqblrnkyeyg= -git.apache.org/thrift.git v0.12.0/go.mod h1:fPE2ZNJGynbRyZ4dJvy6G277gSllfV2HJqblrnkyeyg= -git.sr.ht/~sbinet/gg v0.3.1/go.mod h1:KGYtlADtqsqANL9ueOFkWymvzUvLMQllU5Ixo+8v3pc= -git.sr.ht/~sircmpwn/getopt v0.0.0-20191230200459-23622cc906b3/go.mod h1:wMEGFFFNuPos7vHmWXfszqImLppbc0wEhh6JBfJIUgw= -git.sr.ht/~sircmpwn/go-bare v0.0.0-20210406120253-ab86bc2846d9/go.mod h1:BVJwbDfVjCjoFiKrhkei6NdGcZYpkDkdyCdg1ukytRA= +github.com/99designs/go-keychain v0.0.0-20191008050251-8e49817e8af4 h1:/vQbFIOMbk2FiG/kXiLl8BRyzTWDw7gX/Hz7Dd5eDMs= github.com/99designs/go-keychain v0.0.0-20191008050251-8e49817e8af4/go.mod h1:hN7oaIRCjzsZ2dE+yG5k+rsdt3qcwykqK6HVGcKwsw4= github.com/99designs/keyring v1.1.6/go.mod h1:16e0ds7LGQQcT59QqkTg72Hh5ShM51Byv5PEmW6uoRU= +github.com/99designs/keyring v1.2.1 h1:tYLp1ULvO7i3fI5vE21ReQuj99QFSs7lGm0xWyJo87o= github.com/99designs/keyring v1.2.1/go.mod h1:fc+wB5KTk9wQ9sDx0kFXB3A0MaeGHM9AwRStKOQ5vOA= -github.com/Abirdcfly/dupword v0.0.7/go.mod h1:K/4M1kj+Zh39d2aotRwypvasonOyAMH1c/IZJzE0dmk= -github.com/AdaLogics/go-fuzz-headers v0.0.0-20210715213245-6c3934b029d8/go.mod h1:CzsSbkDixRphAF5hS6wbMKq0eI6ccJRb7/A0M6JBnwg= -github.com/AkihiroSuda/containerd-fuse-overlayfs v1.0.0/go.mod h1:0mMDvQFeLbbn1Wy8P2j3hwFhqBq+FKn8OZPno8WLmp8= -github.com/Antonboom/errname v0.1.6/go.mod h1:7lz79JAnuoMNDAWE9MeeIr1/c/VpSUWatBv2FH9NYpI= -github.com/Antonboom/errname v0.1.7/go.mod h1:g0ONh16msHIPgJSGsecu1G/dcF2hlYR/0SddnIAGavU= -github.com/Antonboom/nilnil v0.1.1/go.mod h1:L1jBqoWM7AOeTD+tSquifKSesRHs4ZdaxvZR+xdJEaI= -github.com/Azure/azure-amqp-common-go/v2 v2.1.0/go.mod h1:R8rea+gJRuJR6QxTir/XuEd+YuKoUiazDC/N96FiDEU= github.com/Azure/azure-pipeline-go v0.2.1/go.mod h1:UGSo8XybXnIGZ3epmeBw7Jdz+HiUVpqIlpz/HKHylF4= github.com/Azure/azure-pipeline-go v0.2.2/go.mod h1:4rQ/NZncSvGqNkkOsNpOU1tgoNuIlp9AfUH5G1tvCHc= -github.com/Azure/azure-sdk-for-go v16.2.1+incompatible/go.mod h1:9XXNKU+eRnpl9moKnB4QOLf1HestfXbmab5FXxiDBjc= -github.com/Azure/azure-sdk-for-go v19.1.1+incompatible/go.mod h1:9XXNKU+eRnpl9moKnB4QOLf1HestfXbmab5FXxiDBjc= -github.com/Azure/azure-sdk-for-go v29.0.0+incompatible/go.mod h1:9XXNKU+eRnpl9moKnB4QOLf1HestfXbmab5FXxiDBjc= -github.com/Azure/azure-sdk-for-go v30.1.0+incompatible/go.mod h1:9XXNKU+eRnpl9moKnB4QOLf1HestfXbmab5FXxiDBjc= -github.com/Azure/azure-sdk-for-go v35.0.0+incompatible/go.mod h1:9XXNKU+eRnpl9moKnB4QOLf1HestfXbmab5FXxiDBjc= -github.com/Azure/azure-sdk-for-go v38.0.0+incompatible/go.mod h1:9XXNKU+eRnpl9moKnB4QOLf1HestfXbmab5FXxiDBjc= -github.com/Azure/azure-sdk-for-go v42.3.0+incompatible/go.mod h1:9XXNKU+eRnpl9moKnB4QOLf1HestfXbmab5FXxiDBjc= -github.com/Azure/azure-sdk-for-go/sdk/azcore v0.19.0/go.mod h1:h6H6c8enJmmocHUbLiiGY6sx7f9i+X3m1CHdd5c6Rdw= -github.com/Azure/azure-sdk-for-go/sdk/azcore v0.21.1/go.mod h1:fBF9PQNqB8scdgpZ3ufzaLntG0AG7C1WjPMsiFOmfHM= -github.com/Azure/azure-sdk-for-go/sdk/azidentity v0.11.0/go.mod h1:HcM1YX14R7CJcghJGOYCgdezslRSVzqwLf/q+4Y2r/0= -github.com/Azure/azure-sdk-for-go/sdk/internal v0.7.0/go.mod h1:yqy467j36fJxcRV2TzfVZ1pCb5vxm4BtZPUdYWe/Xo8= -github.com/Azure/azure-sdk-for-go/sdk/internal v0.8.3/go.mod h1:KLF4gFr6DcKFZwSuH8w8yEK6DpFl3LP5rhdvAb7Yz5I= -github.com/Azure/azure-sdk-for-go/sdk/storage/azblob v0.3.0/go.mod h1:tPaiy8S5bQ+S5sOiDlINkp7+Ef339+Nz5L5XO+cnOHo= -github.com/Azure/azure-service-bus-go v0.9.1/go.mod h1:yzBx6/BUGfjfeqbRZny9AQIbIe3AcV9WZbAdpkoXOa0= github.com/Azure/azure-storage-blob-go v0.7.0/go.mod h1:f9YQKtsG1nMisotuTPpO0tjNuEjKRYAcJU8/ydDI++4= -github.com/Azure/azure-storage-blob-go v0.8.0/go.mod h1:lPI3aLPpuLTeUwh1sViKXFxwl2B6teiRqI0deQUvsw0= github.com/Azure/go-ansiterm v0.0.0-20170929234023-d6e3b3328b78/go.mod h1:LmzpDX56iTiv29bbRTIsUNlaFfuhWRQBWjQdVyAevI8= -github.com/Azure/go-ansiterm v0.0.0-20210608223527-2377c96fe795/go.mod h1:LmzpDX56iTiv29bbRTIsUNlaFfuhWRQBWjQdVyAevI8= +github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1 h1:UQHMgLO+TxOElx5B5HZ4hJQsoJ/PvUvKRhJHDQXO8P8= github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1/go.mod h1:xomTg63KZ2rFqZQzSB4Vz2SUXa1BpHTVz9L5PTmPC4E= -github.com/Azure/go-autorest v10.8.1+incompatible/go.mod h1:r+4oMnoxhatjLLJ6zxSWATqVooLgysK6ZNox3g/xq24= -github.com/Azure/go-autorest v10.15.5+incompatible/go.mod h1:r+4oMnoxhatjLLJ6zxSWATqVooLgysK6ZNox3g/xq24= -github.com/Azure/go-autorest v12.0.0+incompatible/go.mod h1:r+4oMnoxhatjLLJ6zxSWATqVooLgysK6ZNox3g/xq24= -github.com/Azure/go-autorest v14.1.1+incompatible/go.mod h1:r+4oMnoxhatjLLJ6zxSWATqVooLgysK6ZNox3g/xq24= -github.com/Azure/go-autorest v14.2.0+incompatible/go.mod h1:r+4oMnoxhatjLLJ6zxSWATqVooLgysK6ZNox3g/xq24= github.com/Azure/go-autorest/autorest v0.9.0/go.mod h1:xyHB1BMZT0cuDHU7I0+g046+BFDTQ8rEZB0s4Yfa6bI= -github.com/Azure/go-autorest/autorest v0.9.3/go.mod h1:GsRuLYvwzLjjjRoWEIyMUaYq8GNUx2nRB378IPt/1p0= -github.com/Azure/go-autorest/autorest v0.9.6/go.mod h1:/FALq9T/kS7b5J5qsQ+RSTUdAmGFqi0vUdVNNx8q630= -github.com/Azure/go-autorest/autorest v0.10.2/go.mod h1:/FALq9T/kS7b5J5qsQ+RSTUdAmGFqi0vUdVNNx8q630= -github.com/Azure/go-autorest/autorest v0.11.1/go.mod h1:JFgpikqFJ/MleTTxwepExTKnFUKKszPS8UavbQYUMuw= -github.com/Azure/go-autorest/autorest v0.11.18/go.mod h1:dSiJPy22c3u0OtOKDNttNgqpNFY/GeWa7GH/Pz56QRA= github.com/Azure/go-autorest/autorest/adal v0.5.0/go.mod h1:8Z9fGy2MpX0PvDjB1pEgQTmVqjGhiHBW7RJJEciWzS0= github.com/Azure/go-autorest/autorest/adal v0.8.0/go.mod h1:Z6vX6WXXuyieHAXwMj0S6HY6e6wcHn37qQMBQlvY3lc= -github.com/Azure/go-autorest/autorest/adal v0.8.1/go.mod h1:ZjhuQClTqx435SRJ2iMlOxPYt3d2C/T/7TiQCVZSn3Q= -github.com/Azure/go-autorest/autorest/adal v0.8.2/go.mod h1:ZjhuQClTqx435SRJ2iMlOxPYt3d2C/T/7TiQCVZSn3Q= -github.com/Azure/go-autorest/autorest/adal v0.8.3/go.mod h1:ZjhuQClTqx435SRJ2iMlOxPYt3d2C/T/7TiQCVZSn3Q= -github.com/Azure/go-autorest/autorest/adal v0.9.0/go.mod h1:/c022QCutn2P7uY+/oQWWNcK9YU+MH96NgK+jErpbcg= -github.com/Azure/go-autorest/autorest/adal v0.9.5/go.mod h1:B7KF7jKIeC9Mct5spmyCB/A8CG/sEz1vwIRGv/bbw7A= -github.com/Azure/go-autorest/autorest/adal v0.9.13/go.mod h1:W/MM4U6nLxnIskrw4UwWzlHfGjwUS50aOsc/I3yuU8M= -github.com/Azure/go-autorest/autorest/azure/auth v0.4.2/go.mod h1:90gmfKdlmKgfjUpnCEpOJzsUEjrWDSLwHIG73tSXddM= -github.com/Azure/go-autorest/autorest/azure/cli v0.3.1/go.mod h1:ZG5p860J94/0kI9mNJVoIoLgXcirM2gF5i2kWloofxw= github.com/Azure/go-autorest/autorest/date v0.1.0/go.mod h1:plvfp3oPSKwf2DNjlBjWF/7vwR+cUD/ELuzDCXwHUVA= github.com/Azure/go-autorest/autorest/date v0.2.0/go.mod h1:vcORJHLJEh643/Ioh9+vPmf1Ij9AEBM5FuBIXLmIy0g= -github.com/Azure/go-autorest/autorest/date v0.3.0/go.mod h1:BI0uouVdmngYNUzGWeSYnokU+TrmwEsOqdt8Y6sso74= github.com/Azure/go-autorest/autorest/mocks v0.1.0/go.mod h1:OTyCOPRA2IgIlWxVYxBee2F5Gr4kF2zd2J5cFRaIDN0= github.com/Azure/go-autorest/autorest/mocks v0.2.0/go.mod h1:OTyCOPRA2IgIlWxVYxBee2F5Gr4kF2zd2J5cFRaIDN0= github.com/Azure/go-autorest/autorest/mocks v0.3.0/go.mod h1:a8FDP3DYzQ4RYfVAxAN3SVSiiO77gL2j2ronKKP0syM= -github.com/Azure/go-autorest/autorest/mocks v0.4.0/go.mod h1:LTp+uSrOhSkaKrUy935gNZuuIPPVsHlr9DSOxSayd+k= -github.com/Azure/go-autorest/autorest/mocks v0.4.1/go.mod h1:LTp+uSrOhSkaKrUy935gNZuuIPPVsHlr9DSOxSayd+k= -github.com/Azure/go-autorest/autorest/to v0.2.0/go.mod h1:GunWKJp1AEqgMaGLV+iocmRAJWqST1wQYhyyjXJ3SJc= -github.com/Azure/go-autorest/autorest/to v0.3.0/go.mod h1:MgwOyqaIuKdG4TL/2ywSsIWKAfJfgHDo8ObuUk3t5sA= -github.com/Azure/go-autorest/autorest/validation v0.1.0/go.mod h1:Ha3z/SqBeaalWQvokg3NZAlQTalVMtOIAs1aGK7G6u8= -github.com/Azure/go-autorest/autorest/validation v0.2.0/go.mod h1:3EEqHnBxQGHXRYq3HT1WyXAvT7LLY3tl70hw6tQIbjI= github.com/Azure/go-autorest/logger v0.1.0/go.mod h1:oExouG+K6PryycPJfVSxi/koC6LSNgds39diKLz7Vrc= -github.com/Azure/go-autorest/logger v0.2.0/go.mod h1:T9E3cAhj2VqvPOtCYAvby9aBXkZmbF5NWuPV8+WeEW8= -github.com/Azure/go-autorest/logger v0.2.1/go.mod h1:T9E3cAhj2VqvPOtCYAvby9aBXkZmbF5NWuPV8+WeEW8= github.com/Azure/go-autorest/tracing v0.5.0/go.mod h1:r/s2XiOKccPW3HrqB+W0TQzfbtp2fGCgRFtBroKn4Dk= -github.com/Azure/go-autorest/tracing v0.6.0/go.mod h1:+vhtPC754Xsa23ID7GlGsrdKBpUA79WCAKPPZVC2DeU= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= -github.com/BurntSushi/toml v0.4.1/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ= -github.com/BurntSushi/toml v1.1.0/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ= -github.com/BurntSushi/toml v1.2.0/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ= -github.com/BurntSushi/toml v1.2.1/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ= github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= +github.com/ChainSafe/go-schnorrkel v0.0.0-20200405005733-88cbf1b4c40d h1:nalkkPQcITbvhmL4+C4cKA87NW0tfm3Kl9VXRoPywFg= github.com/ChainSafe/go-schnorrkel v0.0.0-20200405005733-88cbf1b4c40d/go.mod h1:URdX5+vg25ts3aCh8H5IFZybJYKWhJHYMTnf+ULtoC4= -github.com/DATA-DOG/go-sqlmock v1.3.3/go.mod h1:f/Ixk793poVmq4qj/V1dPUg2JEAKC73Q5eFN3EC/SaM= -github.com/DATA-DOG/go-sqlmock v1.5.0/go.mod h1:f/Ixk793poVmq4qj/V1dPUg2JEAKC73Q5eFN3EC/SaM= github.com/DataDog/datadog-go v3.2.0+incompatible/go.mod h1:LButxg5PwREeZtORoXG3tL4fMGNddJ+vMq1mwgfaqoQ= github.com/DataDog/zstd v1.4.1/go.mod h1:1jcaCB/ufaK+sKp1NBhlGmpz41jOoPQ35bpF36t7BBo= github.com/DataDog/zstd v1.4.5/go.mod h1:1jcaCB/ufaK+sKp1NBhlGmpz41jOoPQ35bpF36t7BBo= -github.com/DataDog/zstd v1.5.2/go.mod h1:g4AWEaM3yOg3HYfnJ3YIawPnVdXJh9QME85blwSAmyw= -github.com/Djarvur/go-err113 v0.0.0-20200410182137-af658d038157/go.mod h1:4UJr5HIiMZrwgkSPdsjy2uOQExX/WEILpIrO9UPGuXs= -github.com/Djarvur/go-err113 v0.0.0-20210108212216-aea10b59be24/go.mod h1:4UJr5HIiMZrwgkSPdsjy2uOQExX/WEILpIrO9UPGuXs= -github.com/Djarvur/go-err113 v0.1.0/go.mod h1:4UJr5HIiMZrwgkSPdsjy2uOQExX/WEILpIrO9UPGuXs= -github.com/GaijinEntertainment/go-exhaustruct/v2 v2.1.0/go.mod h1:LGOGuvEgCfCQsy3JF2tRmpGDpzA53iZfyGEWSPwQ6/4= -github.com/GaijinEntertainment/go-exhaustruct/v2 v2.3.0/go.mod h1:b3g59n2Y+T5xmcxJL+UEG2f8cQploZm1mR/v6BW0mU0= -github.com/GoogleCloudPlatform/cloudsql-proxy v0.0.0-20191009163259-e802c2cb94ae/go.mod h1:mjwGPas4yKduTyubHvD1Atl9r1rUq8DfVy+gkVvZ+oo= -github.com/GoogleCloudPlatform/k8s-cloud-provider v0.0.0-20190822182118-27a4ced34534/go.mod h1:iroGtC8B3tQiqtds1l+mgk/BBOrxbqjH+eUfFQYRc14= -github.com/HdrHistogram/hdrhistogram-go v1.1.0/go.mod h1:yDgFjdqOqDEKOvasDdhWNXYg9BVp4O+o5f6V/ehm6Oo= -github.com/HdrHistogram/hdrhistogram-go v1.1.2/go.mod h1:yDgFjdqOqDEKOvasDdhWNXYg9BVp4O+o5f6V/ehm6Oo= github.com/Knetic/govaluate v3.0.1-0.20171022003610-9aa49832a739+incompatible/go.mod h1:r7JcOSlj0wfOMncg0iLm8Leh48TZaKVeNIfJntJ2wa0= -github.com/Masterminds/goutils v1.1.0/go.mod h1:8cTjp+g8YejhMuvIA5y2vz3BpJxksy863GQaJW2MFNU= -github.com/Masterminds/semver v1.4.2/go.mod h1:MB6lktGJrhw8PrUyiEoblNEGEQ+RzHPF078ddwwvV3Y= -github.com/Masterminds/semver v1.5.0/go.mod h1:MB6lktGJrhw8PrUyiEoblNEGEQ+RzHPF078ddwwvV3Y= -github.com/Masterminds/semver/v3 v3.0.3/go.mod h1:VPu/7SZ7ePZ3QOrcuXROw5FAcLl4a0cBrbBpGY/8hQs= -github.com/Masterminds/semver/v3 v3.1.0/go.mod h1:VPu/7SZ7ePZ3QOrcuXROw5FAcLl4a0cBrbBpGY/8hQs= -github.com/Masterminds/sprig v2.15.0+incompatible/go.mod h1:y6hNFY5UBTIWBxnzTeuNhlNS5hqE0NB0E6fgfo2Br3o= -github.com/Masterminds/sprig v2.22.0+incompatible/go.mod h1:y6hNFY5UBTIWBxnzTeuNhlNS5hqE0NB0E6fgfo2Br3o= -github.com/Microsoft/go-winio v0.4.11/go.mod h1:VhR8bwka0BXejwEJY73c50VrPtXAaKcyvVC4A4RozmA= github.com/Microsoft/go-winio v0.4.14/go.mod h1:qXqCSQ3Xa7+6tgxaGTIe4Kpcdsi+P8jBhyzoq1bpyYA= -github.com/Microsoft/go-winio v0.4.15-0.20190919025122-fc70bd9a86b5/go.mod h1:tTuCMEN+UleMWgg9dVx4Hu52b1bJo+59jBh3ajtinzw= -github.com/Microsoft/go-winio v0.4.15-0.20200908182639-5b44b70ab3ab/go.mod h1:tTuCMEN+UleMWgg9dVx4Hu52b1bJo+59jBh3ajtinzw= -github.com/Microsoft/go-winio v0.4.15/go.mod h1:tTuCMEN+UleMWgg9dVx4Hu52b1bJo+59jBh3ajtinzw= -github.com/Microsoft/go-winio v0.4.16-0.20201130162521-d1ffc52c7331/go.mod h1:XB6nPKklQyQ7GC9LdcBEcBl8PF76WugXOPRXwdLnMv0= -github.com/Microsoft/go-winio v0.4.16/go.mod h1:XB6nPKklQyQ7GC9LdcBEcBl8PF76WugXOPRXwdLnMv0= -github.com/Microsoft/go-winio v0.4.17-0.20210211115548-6eac466e5fa3/go.mod h1:JPGBdM1cNvN/6ISo+n8V5iA4v8pBzdOpzfwIujj1a84= -github.com/Microsoft/go-winio v0.4.17-0.20210324224401-5516f17a5958/go.mod h1:JPGBdM1cNvN/6ISo+n8V5iA4v8pBzdOpzfwIujj1a84= -github.com/Microsoft/go-winio v0.4.17/go.mod h1:JPGBdM1cNvN/6ISo+n8V5iA4v8pBzdOpzfwIujj1a84= github.com/Microsoft/go-winio v0.5.0/go.mod h1:JPGBdM1cNvN/6ISo+n8V5iA4v8pBzdOpzfwIujj1a84= -github.com/Microsoft/go-winio v0.5.1/go.mod h1:JPGBdM1cNvN/6ISo+n8V5iA4v8pBzdOpzfwIujj1a84= -github.com/Microsoft/go-winio v0.5.2/go.mod h1:WpS1mjBmmwHBEWmogvA2mj8546UReBk4v8QkMxJ6pZY= -github.com/Microsoft/go-winio v0.6.0/go.mod h1:cTAf44im0RAYeL23bpB+fzCyDH2MJiz2BO69KH/soAE= -github.com/Microsoft/hcsshim v0.8.6/go.mod h1:Op3hHsoHPAvb6lceZHDtd9OkTew38wNoXnJs8iY7rUg= -github.com/Microsoft/hcsshim v0.8.7-0.20190325164909-8abdbb8205e4/go.mod h1:Op3hHsoHPAvb6lceZHDtd9OkTew38wNoXnJs8iY7rUg= -github.com/Microsoft/hcsshim v0.8.7/go.mod h1:OHd7sQqRFrYd3RmSgbgji+ctCwkbq2wbEYNSzOYtcBQ= -github.com/Microsoft/hcsshim v0.8.9/go.mod h1:5692vkUqntj1idxauYlpoINNKeqCiG6Sg38RRsjT5y8= -github.com/Microsoft/hcsshim v0.8.10/go.mod h1:g5uw8EV2mAlzqe94tfNBNdr89fnbD/n3HV0OhsddkmM= -github.com/Microsoft/hcsshim v0.8.14/go.mod h1:NtVKoYxQuTLx6gEq0L96c9Ju4JbRJ4nY2ow3VK6a9Lg= -github.com/Microsoft/hcsshim v0.8.15/go.mod h1:x38A4YbHbdxJtc0sF6oIz+RG0npwSCAvn69iY6URG00= -github.com/Microsoft/hcsshim v0.8.16/go.mod h1:o5/SZqmR7x9JNKsW3pu+nqHm0MF8vbA+VxGOoXdC600= -github.com/Microsoft/hcsshim v0.8.20/go.mod h1:+w2gRZ5ReXQhFOrvSQeNfhrYB/dg3oDwTOcER2fw4I4= -github.com/Microsoft/hcsshim v0.8.21/go.mod h1:+w2gRZ5ReXQhFOrvSQeNfhrYB/dg3oDwTOcER2fw4I4= -github.com/Microsoft/hcsshim v0.8.23/go.mod h1:4zegtUJth7lAvFyc6cH2gGQ5B3OFQim01nnU2M8jKDg= -github.com/Microsoft/hcsshim v0.9.2/go.mod h1:7pLA8lDk46WKDWlVsENo92gC0XFa8rbKfyFRBqxEbCc= -github.com/Microsoft/hcsshim v0.9.4/go.mod h1:7pLA8lDk46WKDWlVsENo92gC0XFa8rbKfyFRBqxEbCc= -github.com/Microsoft/hcsshim/test v0.0.0-20200826032352-301c83a30e7c/go.mod h1:30A5igQ91GEmhYJF8TaRP79pMBOYynRsyOByfVV0dU4= -github.com/Microsoft/hcsshim/test v0.0.0-20201218223536-d3e5debf77da/go.mod h1:5hlzMzRKMLyo42nCZ9oml8AdTlq/0cvIaBv6tK1RehU= -github.com/Microsoft/hcsshim/test v0.0.0-20210227013316-43a75bb4edd3/go.mod h1:mw7qgWloBUl75W/gVH3cQszUg1+gUITj7D6NY7ywVnY= -github.com/NYTimes/gziphandler v0.0.0-20170623195520-56545f4a5d46/go.mod h1:3wb06e3pkSAbeQ52E9H9iFoQsEEwGN64994WTCIhntQ= -github.com/NYTimes/gziphandler v1.1.1/go.mod h1:n/CVRwUEOgIxrgPvAQhUUr9oeUtvrhMomdKFjzJNB0c= +github.com/Microsoft/go-winio v0.6.0 h1:slsWYD/zyx7lCXoZVlvQrj0hPTM1HI4+v1sIda2yDvg= +github.com/Nvveen/Gotty v0.0.0-20120604004816-cd527374f1e5 h1:TngWCqHvy9oXAN6lEVMRuU21PR1EtLVZJmdB18Gu3Rw= github.com/Nvveen/Gotty v0.0.0-20120604004816-cd527374f1e5/go.mod h1:lmUJ/7eu/Q8D7ML55dXQrVaamCz2vxCfdQBasLZfHKk= +github.com/OneOfOne/xxhash v1.2.2 h1:KMrpdQIwFcEqXDklaen+P1axHaj9BSKzvpUUfnHldSE= github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= -github.com/OpenPeeDeeP/depguard v1.0.1/go.mod h1:xsIw86fROiiwelg+jB2uM9PiKihMMmUx/1V+TNhjQvM= -github.com/OpenPeeDeeP/depguard v1.1.0/go.mod h1:JtAMzWkmFEzDPyAd+W0NHl1lvpQKTvT9jnRVsohBKpc= -github.com/OpenPeeDeeP/depguard v1.1.1/go.mod h1:JtAMzWkmFEzDPyAd+W0NHl1lvpQKTvT9jnRVsohBKpc= -github.com/PuerkitoBio/purell v1.0.0/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0= -github.com/PuerkitoBio/purell v1.1.1/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0= -github.com/PuerkitoBio/urlesc v0.0.0-20160726150825-5bd2802263f2/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE= -github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE= -github.com/Shopify/logrus-bugsnag v0.0.0-20171204204709-577dee27f20d/go.mod h1:HI8ITrYtUY+O+ZhtlqUnD8+KwNPOyugEhfP9fdUIaEQ= github.com/Shopify/sarama v1.19.0/go.mod h1:FVkBWblsNy7DGZRfXLU0O9RCGt5g3g3yEuWXgklEdEo= github.com/Shopify/toxiproxy v2.1.4+incompatible/go.mod h1:OXgGpZ6Cli1/URJOF1DMxUHB2q5Ap20/P/eIdh4G0pI= github.com/StackExchange/wmi v0.0.0-20180116203802-5d049714c4a6/go.mod h1:3eOhrUMpNV+6aFIbp5/iudMxNCF27Vw2OZgy4xEx0Fg= github.com/VictoriaMetrics/fastcache v1.5.7/go.mod h1:ptDBkNMQI4RtmVo8VS/XwRY6RoTu1dAWCbrk+6WsEM8= -github.com/VictoriaMetrics/fastcache v1.6.0/go.mod h1:0qHz5QP0GMX4pfmMA/zt5RgfNuXJrTP0zS7DqpHGGTw= +github.com/VictoriaMetrics/fastcache v1.12.0 h1:vnVi/y9yKDcD9akmc4NqAoqgQhJrOwUF+j9LTgn4QDE= github.com/VictoriaMetrics/fastcache v1.12.0/go.mod h1:tjiYeEfYXCqacuvYw/7UoDIeJaNxq6132xHICNP77w8= +github.com/VividCortex/gohistogram v1.0.0 h1:6+hBz+qvs0JOrrNhhmR7lFxo5sINxBCGXrdtl/UvroE= github.com/VividCortex/gohistogram v1.0.0/go.mod h1:Pf5mBqqDxYaXu3hDrrU+w6nw50o/4+TcAqDqk/vUH7g= github.com/Workiva/go-datastructures v1.0.52/go.mod h1:Z+F2Rca0qCsVYDS8z7bAGm8f3UkzuWYS/oBZz5a7VVA= +github.com/Workiva/go-datastructures v1.0.53 h1:J6Y/52yX10Xc5JjXmGtWoSSxs3mZnGSaq37xZZh7Yig= github.com/Workiva/go-datastructures v1.0.53/go.mod h1:1yZL+zfsztete+ePzZz/Zb1/t5BnDuE2Ya2MMGhzP6A= github.com/Zilliqa/gozilliqa-sdk v1.2.1-0.20201201074141-dd0ecada1be6/go.mod h1:eSYp2T6f0apnuW8TzhV3f6Aff2SE8Dwio++U4ha4yEM= github.com/adlio/schema v1.1.13/go.mod h1:L5Z7tw+7lRK1Fnpi/LT/ooCP1elkXn0krMWBQHUhEDE= -github.com/adlio/schema v1.3.3/go.mod h1:1EsRssiv9/Ce2CMzq5DoL7RiMshhuigQxrR4DMV9fHg= +github.com/adlio/schema v1.3.3 h1:oBJn8I02PyTB466pZO1UZEn1TV5XLlifBSyMrmHl/1I= github.com/aead/siphash v1.0.1/go.mod h1:Nywa3cDsYNNK3gaciGTWPwHt0wlpNV15vwmswBAUSII= github.com/afex/hystrix-go v0.0.0-20180502004556-fa1af6a1f4f5/go.mod h1:SkGFH1ia65gfNATL8TAiHDNxPzPdmEL5uirI2Uyuz6c= -github.com/agext/levenshtein v1.2.3/go.mod h1:JEDfjyjHDjOF/1e4FlBE/PkbqA9OfWu2ki2W0IB5558= -github.com/ajstarks/deck v0.0.0-20200831202436-30c9fc6549a9/go.mod h1:JynElWSGnm/4RlzPXRlREEwqTHAN3T56Bv2ITsFT3gY= -github.com/ajstarks/deck/generate v0.0.0-20210309230005-c3f852c02e19/go.mod h1:T13YZdzov6OU0A1+RfKZiZN9ca6VeKdBdyDV+BY97Tk= -github.com/ajstarks/svgo v0.0.0-20180226025133-644b8db467af/go.mod h1:K08gAheRH3/J6wwsYMMT4xOr94bZjxIelGM0+d/wbFw= -github.com/ajstarks/svgo v0.0.0-20211024235047-1546f124cd8b/go.mod h1:1KcenG0jGWcpt8ov532z81sp/kMMUG485J2InIOyADM= -github.com/alecthomas/kingpin v2.2.6+incompatible/go.mod h1:59OFYbFVLKQKq+mqrL6Rw5bR0c3ACQaawgXx0QYndlE= github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= github.com/alecthomas/units v0.0.0-20190717042225-c3de453c63f4/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= github.com/alecthomas/units v0.0.0-20190924025748-f65c72e2690d/go.mod h1:rBZYJk541a8SKzHPHnH3zbiI+7dagKZ0cgpgrD7Fyho= -github.com/alexflint/go-filemutex v0.0.0-20171022225611-72bdc8eae2ae/go.mod h1:CgnQgUtFrFz9mxFNtED3jI5tLDjKlOM+oUF/sTk6ps0= -github.com/alexflint/go-filemutex v1.1.0/go.mod h1:7P4iRhttt/nUvUOrYIhcpMzv2G6CY9UnI16Z+UJqRyk= -github.com/alexkohler/prealloc v1.0.0/go.mod h1:VetnK3dIgFBBKmg0YnD9F9x6Icjd+9cvfHR56wJVlKE= -github.com/alingse/asasalint v0.0.11/go.mod h1:nCaoMhw7a9kSJObvQyVzNTPBDbNpdocqrSP7t/cW5+I= +github.com/allegro/bigcache v1.2.1-0.20190218064605-e24eb225f156 h1:eMwmnE/GDgah4HI848JfFxHt+iPb26b4zyfspmqY0/8= github.com/allegro/bigcache v1.2.1-0.20190218064605-e24eb225f156/go.mod h1:Cb/ax3seSYIx7SuZdm2G2xzfwmv3TPSk2ucNfQESPXM= -github.com/andreyvit/diff v0.0.0-20170406064948-c7f18ee00883/go.mod h1:rCTlJbsFo29Kk6CurOXKm700vrz8f0KW0JNfpkRJY/8= -github.com/andybalholm/brotli v1.0.2/go.mod h1:loMXtMfwqflxFJPmdbJO0a3KNoPuLBgiu3qAvBg8x/Y= -github.com/andybalholm/brotli v1.0.3/go.mod h1:fO7iG3H7G2nSZ7m0zPUDn85XEX2GTukHGRSepvi9Eig= -github.com/anmitsu/go-shlex v0.0.0-20161002113705-648efa622239/go.mod h1:2FmKhYUyUczH0OGQWaF5ceTx0UBShxjsH6f8oGKYe2c= -github.com/antihax/optional v0.0.0-20180407024304-ca021399b1a6/go.mod h1:V8iCPQYkqmusNa815XgQio277wI47sdRh1dUOLdyC6Q= github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY= -github.com/aokoli/goutils v1.0.1/go.mod h1:SijmP0QR8LtwsmDs8Yii5Z/S4trXFGFC2oO5g9DP+DQ= -github.com/apache/arrow/go/arrow v0.0.0-20191024131854-af6fa24be0db/go.mod h1:VTxUBvSJ3s3eHAg65PNgrsn5BtqCRPdmyXh6rAfdxN0= github.com/apache/thrift v0.12.0/go.mod h1:cp2SuWMxlEZw2r+iP2GNCdIi4C1qmUzdZFSVb+bacwQ= github.com/apache/thrift v0.13.0/go.mod h1:cp2SuWMxlEZw2r+iP2GNCdIi4C1qmUzdZFSVb+bacwQ= -github.com/apex/log v1.1.4/go.mod h1:AlpoD9aScyQfJDVHmLMEcx4oU6LqzkWp4Mg9GdAcEvQ= -github.com/apex/log v1.3.0/go.mod h1:jd8Vpsr46WAe3EZSQ/IUMs2qQD/GOycT5rPWCO1yGcs= -github.com/apex/logs v0.0.4/go.mod h1:XzxuLZ5myVHDy9SAmYpamKKRNApGj54PfYLcFrXqDwo= -github.com/aphistic/golf v0.0.0-20180712155816-02c07f170c5a/go.mod h1:3NqKYiepwy8kCu4PNA+aP7WUV72eXWJeP9/r3/K9aLE= -github.com/aphistic/sweet v0.2.0/go.mod h1:fWDlIh/isSE9n6EPsRmC0det+whmX6dJid3stzu0Xys= github.com/aristanetworks/goarista v0.0.0-20170210015632-ea17b1a17847/go.mod h1:D/tb0zPVXnP7fmsLZjtdUhSsumbK/ij54UXjjVgMGxQ= github.com/armon/circbuf v0.0.0-20150827004946-bbbad097214e/go.mod h1:3U/XgcO3hCbHZ8TKRvWD2dDTCfh9M9ya+I9JpbB7O8o= -github.com/armon/circbuf v0.0.0-20190214190532-5111143e8da2/go.mod h1:3U/XgcO3hCbHZ8TKRvWD2dDTCfh9M9ya+I9JpbB7O8o= github.com/armon/consul-api v0.0.0-20180202201655-eb2c6b5be1b6/go.mod h1:grANhF5doyWs3UAsr3K4I6qtAmlQcZDesFNEHPZAzj8= github.com/armon/go-metrics v0.0.0-20180917152333-f0300d1749da/go.mod h1:Q73ZrmVTwzkszR9V5SSuryQ31EELlFMUz1kKyl939pY= github.com/armon/go-metrics v0.3.9/go.mod h1:4O98XIr/9W0sxpJ8UaYkvjk10Iff7SnFrb4QAOwNTFc= -github.com/armon/go-metrics v0.3.10/go.mod h1:4O98XIr/9W0sxpJ8UaYkvjk10Iff7SnFrb4QAOwNTFc= -github.com/armon/go-metrics v0.4.0/go.mod h1:E6amYzXo6aW1tqzoZGT755KkbgrJsSdpwZ+3JqfkOG4= +github.com/armon/go-metrics v0.4.1 h1:hR91U9KYmb6bLBYLQjyM+3j+rcd/UhE+G78SFnF8gJA= github.com/armon/go-metrics v0.4.1/go.mod h1:E6amYzXo6aW1tqzoZGT755KkbgrJsSdpwZ+3JqfkOG4= github.com/armon/go-radix v0.0.0-20180808171621-7fddfc383310/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8= -github.com/armon/go-radix v1.0.0/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8= github.com/aryann/difflib v0.0.0-20170710044230-e206f873d14a/go.mod h1:DAHtR1m6lCRdSC2Tm3DSWRPvIPr6xNKyeHdqDQSQT+A= -github.com/asaskevich/govalidator v0.0.0-20190424111038-f61b66f89f4a/go.mod h1:lB+ZfQJz7igIIfQNfa7Ml4HSf2uFQQRzpGGRXenZAgY= -github.com/ashanbrown/forbidigo v1.3.0/go.mod h1:vVW7PEdqEFqapJe95xHkTfB1+XvZXBFg8t0sG2FIxmI= -github.com/ashanbrown/makezero v1.1.1/go.mod h1:i1bJLCRSCHOcOa9Y6MyF2FTfMZMFdHvxKHxgO5Z1axI= github.com/aws/aws-lambda-go v1.13.3/go.mod h1:4UKl9IzQMoD+QF79YdCuzCwp8VbmG4VAQwij/eHl5CU= -github.com/aws/aws-sdk-go v1.15.11/go.mod h1:mFuSZ37Z9YOHbQEwBWztmVzqXrEkub65tZoCYDt7FT0= -github.com/aws/aws-sdk-go v1.15.27/go.mod h1:mFuSZ37Z9YOHbQEwBWztmVzqXrEkub65tZoCYDt7FT0= -github.com/aws/aws-sdk-go v1.15.90/go.mod h1:es1KtYUFs7le0xQ3rOihkuoVD90z7D0fR2Qm4S00/gU= -github.com/aws/aws-sdk-go v1.16.26/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo= -github.com/aws/aws-sdk-go v1.19.18/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo= -github.com/aws/aws-sdk-go v1.19.45/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo= -github.com/aws/aws-sdk-go v1.20.6/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo= -github.com/aws/aws-sdk-go v1.23.20/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo= -github.com/aws/aws-sdk-go v1.25.11/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo= -github.com/aws/aws-sdk-go v1.25.37/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo= github.com/aws/aws-sdk-go v1.25.48/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo= github.com/aws/aws-sdk-go v1.27.0/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo= -github.com/aws/aws-sdk-go v1.27.1/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo= -github.com/aws/aws-sdk-go v1.31.6/go.mod h1:5zCpMtNQVjRREroY7sYe8lOMRSxkhG6MZveU8YkpAk0= -github.com/aws/aws-sdk-go v1.36.30/go.mod h1:hcU610XS61/+aQV88ixoOzUoG7v3b31pl2zKMmprdro= -github.com/aws/aws-sdk-go v1.40.45/go.mod h1:585smgzpB/KqRA+K3y/NL/oYRqQvpNJYvLm+LY1U59Q= github.com/aws/aws-sdk-go-v2 v0.18.0/go.mod h1:JWVYvqSMppoMJC0x5wdwiImzgXTI9FuZwxzkQq9wy+g= -github.com/aws/aws-sdk-go-v2 v1.2.0/go.mod h1:zEQs02YRBw1DjK0PoJv3ygDYOFTre1ejlJWl8FwAuQo= -github.com/aws/aws-sdk-go-v2 v1.9.1/go.mod h1:cK/D0BBs0b/oWPIcX/Z/obahJK1TT7IPVjy53i/mX/4= -github.com/aws/aws-sdk-go-v2/config v1.1.1/go.mod h1:0XsVy9lBI/BCXm+2Tuvt39YmdHwS5unDQmxZOYe8F5Y= -github.com/aws/aws-sdk-go-v2/credentials v1.1.1/go.mod h1:mM2iIjwl7LULWtS6JCACyInboHirisUUdkBPoTHMOUo= -github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.0.2/go.mod h1:3hGg3PpiEjHnrkrlasTfxFqUsZ2GCk/fMUn4CbKgSkM= -github.com/aws/aws-sdk-go-v2/service/cloudwatch v1.8.1/go.mod h1:CM+19rL1+4dFWnOQKwDc7H1KwXTz+h61oUSHyhV0b3o= -github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.0.2/go.mod h1:45MfaXZ0cNbeuT0KQ1XJylq8A6+OpVV2E5kvY/Kq+u8= -github.com/aws/aws-sdk-go-v2/service/route53 v1.1.1/go.mod h1:rLiOUrPLW/Er5kRcQ7NkwbjlijluLsrIbu/iyl35RO4= -github.com/aws/aws-sdk-go-v2/service/sso v1.1.1/go.mod h1:SuZJxklHxLAXgLTc1iFXbEWkXs7QRTQpCLGaKIprQW0= -github.com/aws/aws-sdk-go-v2/service/sts v1.1.1/go.mod h1:Wi0EBZwiz/K44YliU0EKxqTCJGUfYTWXrrBwkq736bM= -github.com/aws/smithy-go v1.1.0/go.mod h1:EzMw8dbp/YJL4A5/sbhGddag+NPT7q084agLbB9LgIw= -github.com/aws/smithy-go v1.8.0/go.mod h1:SObp3lf9smib00L/v3U2eAKG8FyQ7iLrJnQiAmR5n+E= -github.com/aybabtme/rgbterm v0.0.0-20170906152045-cc83f3b3ce59/go.mod h1:q/89r3U2H7sSsE2t6Kca0lfwTK8JdoNGS/yzM/4iH5I= -github.com/benbjohnson/clock v1.0.3/go.mod h1:bGMdMPoPVvcYyt1gHDf4J2KE153Yf9BuiUKYMaxlTDM= -github.com/benbjohnson/clock v1.1.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA= -github.com/benbjohnson/clock v1.3.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA= -github.com/beorn7/perks v0.0.0-20160804104726-4c0e84591b9a/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8= +github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= +github.com/bgentry/speakeasy v0.1.0 h1:ByYyxL9InA1OWqxJqqp2A5pYHUrCiAL6K3J+LKSsQkY= github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= -github.com/bitly/go-simplejson v0.5.0/go.mod h1:cXHtHw4XUPsvGaxgjIAn8PhEWG9NfngEKAMDJEczWVA= github.com/bits-and-blooms/bitset v1.2.0/go.mod h1:gIdJ4wp64HaoK2YrL1Q5/N7Y16edYb8uY+O0FJTyyDA= github.com/bketelsen/crypt v0.0.3-0.20200106085610-5cbc8cc4026c/go.mod h1:MKsuJmJgSg28kpZDP6UIiPt0e0Oz0kqKNGyRaWEPv84= github.com/bketelsen/crypt v0.0.4/go.mod h1:aI6NrJ0pMGgvZKL1iVgXLnfIFJtfV+bKCoqOes/6LfM= -github.com/bkielbasa/cyclop v1.2.0/go.mod h1:qOI0yy6A7dYC4Zgsa72Ppm9kONl0RoIlPbzot9mhmeI= -github.com/blakesmith/ar v0.0.0-20190502131153-809d4375e1fb/go.mod h1:PkYb9DJNAwrSvRx5DYA+gUcOIgTGVMNkfSCbZM8cWpI= -github.com/blang/semver v3.1.0+incompatible/go.mod h1:kRBLl5iJ+tD4TcOOxsy/0fnwebNt5EWlYSAyrTnjyyk= -github.com/blang/semver v3.5.0+incompatible/go.mod h1:kRBLl5iJ+tD4TcOOxsy/0fnwebNt5EWlYSAyrTnjyyk= -github.com/blang/semver v3.5.1+incompatible/go.mod h1:kRBLl5iJ+tD4TcOOxsy/0fnwebNt5EWlYSAyrTnjyyk= -github.com/blizzy78/varnamelen v0.8.0/go.mod h1:V9TzQZ4fLJ1DSrjVDfl89H7aMnTvKkApdHeyESmyR7k= -github.com/bmizerany/assert v0.0.0-20160611221934-b7ed37b82869/go.mod h1:Ekp36dRnpXw/yCqJaO+ZrUyxD+3VXMFFr56k5XYrpB4= -github.com/bmizerany/pat v0.0.0-20170815010413-6226ea591a40/go.mod h1:8rLXio+WjiTceGBHIoTvn60HIbs7Hm7bcHjyrSqYB9c= -github.com/boltdb/bolt v1.3.1/go.mod h1:clJnj/oiGkjum5o1McbSZDSLxVThjynRyGBgiAx27Ps= -github.com/bombsimon/wsl/v2 v2.0.0/go.mod h1:mf25kr/SqFEPhhcxW1+7pxzGlW+hIl/hYTKY95VwV8U= -github.com/bombsimon/wsl/v2 v2.2.0/go.mod h1:Azh8c3XGEJl9LyX0/sFC+CKMc7Ssgua0g+6abzXN4Pg= -github.com/bombsimon/wsl/v3 v3.0.0/go.mod h1:st10JtZYLE4D5sC7b8xV4zTKZwAQjCH/Hy2Pm1FNZIc= -github.com/bombsimon/wsl/v3 v3.1.0/go.mod h1:st10JtZYLE4D5sC7b8xV4zTKZwAQjCH/Hy2Pm1FNZIc= -github.com/bombsimon/wsl/v3 v3.3.0/go.mod h1:st10JtZYLE4D5sC7b8xV4zTKZwAQjCH/Hy2Pm1FNZIc= -github.com/boombuler/barcode v1.0.0/go.mod h1:paBWMcWSl3LHKBqUq+rly7CNSldXjb2rDl3JlRe0mD8= -github.com/boombuler/barcode v1.0.1/go.mod h1:paBWMcWSl3LHKBqUq+rly7CNSldXjb2rDl3JlRe0mD8= -github.com/bradfitz/go-smtpd v0.0.0-20170404230938-deb6d6237625/go.mod h1:HYsPBTaaSFSlLx/70C2HPIMNZpVV8+vt/A+FMnYP11g= -github.com/breml/bidichk v0.2.3/go.mod h1:8u2C6DnAy0g2cEq+k/A2+tr9O1s+vHGxWn0LTc70T2A= -github.com/breml/errchkjson v0.3.0/go.mod h1:9Cogkyv9gcT8HREpzi3TiqBxCqDzo8awa92zSDFcofU= -github.com/bshuster-repo/logrus-logstash-hook v0.4.1/go.mod h1:zsTqEiSzDgAa/8GZR7E1qaXrhYNDKBYy5/dWPTIflbk= github.com/btcsuite/btcd v0.0.0-20171128150713-2e60448ffcc6/go.mod h1:Dmm/EzmjnCiweXmzRIAiUWCInVmPgjkzgv5k4tVyXiQ= github.com/btcsuite/btcd v0.0.0-20190115013929-ed77733ec07d/go.mod h1:d3C0AkH6BRcvO8T0UEPu53cnw4IbV63x1bEjildYhO0= github.com/btcsuite/btcd v0.0.0-20190315201642-aa6e0f35703c/go.mod h1:DrZx5ec/dmnfpw9KyYoQyYo7d0KEvTkk/5M/vbZjAr8= github.com/btcsuite/btcd v0.20.1-beta/go.mod h1:wVuoA8VJLEcwgqHBwHmzLRazpKxTv13Px/pDuV7OomQ= github.com/btcsuite/btcd v0.21.0-beta/go.mod h1:ZSWyehm27aAuS9bvkATT+Xte3hjHZ+MRgMY/8NJ7K94= -github.com/btcsuite/btcd v0.21.0-beta.0.20201114000516-e9c7a5ac6401/go.mod h1:Sv4JPQ3/M+teHz9Bo5jBpkNcP0x6r7rdihlNL/7tTAs= github.com/btcsuite/btcd v0.22.0-beta/go.mod h1:9n5ntfhhHQBIhUvlhDvD3Qg6fRUj4jkN0VB8L8svzOA= +github.com/btcsuite/btcd v0.22.1 h1:CnwP9LM/M9xuRrGSCGeMVs9iv09uMqwsVX7EeIpgV2c= github.com/btcsuite/btcd v0.22.1/go.mod h1:wqgTSL29+50LRkmOVknEdmt8ZojIzhuWvgu/iptuN7Y= -github.com/btcsuite/btcd/btcec/v2 v2.2.0/go.mod h1:U7MHm051Al6XmscBQ0BoNydpOTsFAn707034b5nY8zU= -github.com/btcsuite/btcd/btcec/v2 v2.3.2/go.mod h1:zYzJ8etWJQIv1Ogk7OzpWjowwOdXY1W/17j2MW85J04= -github.com/btcsuite/btcd/chaincfg/chainhash v1.0.1/go.mod h1:7SFka0XMvUgj3hfZtydOrQY2mwhPclbT2snogU7SQQc= +github.com/btcsuite/btcd/btcec/v2 v2.3.2 h1:5n0X6hX0Zk+6omWcihdYvdAlGf2DfasC0GMf7DClJ3U= +github.com/btcsuite/btcd/chaincfg/chainhash v1.0.1 h1:q0rUy8C/TYNBQS1+CGKw68tLOFYSNEs0TFnxxnS9+4U= github.com/btcsuite/btclog v0.0.0-20170628155309-84c8d2346e9f/go.mod h1:TdznJufoqS23FtqVCzL0ZqgP5MqXbb4fg/WgDys70nA= github.com/btcsuite/btcutil v0.0.0-20180706230648-ab6388e0c60a/go.mod h1:+5NJ2+qvTyV9exUAL/rxXi3DcLg2Ts+ymUAY5y4NvMg= github.com/btcsuite/btcutil v0.0.0-20190207003914-4c204d697803/go.mod h1:+5NJ2+qvTyV9exUAL/rxXi3DcLg2Ts+ymUAY5y4NvMg= github.com/btcsuite/btcutil v0.0.0-20190425235716-9e5f4b9a998d/go.mod h1:+5NJ2+qvTyV9exUAL/rxXi3DcLg2Ts+ymUAY5y4NvMg= github.com/btcsuite/btcutil v1.0.2/go.mod h1:j9HUFwoQRsZL3V4n+qG+CUnEGHOarIxfC3Le2Yhbcts= +github.com/btcsuite/btcutil v1.0.3-0.20201208143702-a53e38424cce h1:YtWJF7RHm2pYCvA5t0RPmAaLUhREsKuKd+SLhxFbFeQ= github.com/btcsuite/btcutil v1.0.3-0.20201208143702-a53e38424cce/go.mod h1:0DVlHczLPewLcPGEIeUEzfOJhqGPQ0mJJRDBtD307+o= github.com/btcsuite/go-socks v0.0.0-20170105172521-4720035b7bfd/go.mod h1:HHNXQzUsZCxOoE+CPiyCTO6x34Zs86zZUiwtpXoGdtg= github.com/btcsuite/goleveldb v0.0.0-20160330041536-7834afc9e8cd/go.mod h1:F+uVaaLLH7j4eDXPRvw78tMflu7Ie2bzYOH4Y8rRKBY= @@ -503,537 +150,200 @@ github.com/btcsuite/snappy-go v0.0.0-20151229074030-0bdef8d06723/go.mod h1:8woku github.com/btcsuite/snappy-go v1.0.0/go.mod h1:8woku9dyThutzjeg+3xrA5iCpBRH8XEEg3lh6TiUghc= github.com/btcsuite/websocket v0.0.0-20150119174127-31079b680792/go.mod h1:ghJtEyQwv5/p4Mg4C0fgbePVuGr935/5ddU9Z3TmDRY= github.com/btcsuite/winsvc v1.0.0/go.mod h1:jsenWakMcC0zFBFurPLEAyrnc/teJEM1O46fmI40EZs= -github.com/bufbuild/buf v1.4.0/go.mod h1:mwHG7klTHnX+rM/ym8LXGl7vYpVmnwT96xWoRB4H5QI= -github.com/bufbuild/buf v1.9.0/go.mod h1:1Q+rMHiMVcfgScEF/GOldxmu4o9TrQ2sQQh58K6MscE= -github.com/bufbuild/connect-go v1.0.0/go.mod h1:9iNvh/NOsfhNBUH5CtvXeVUskQO1xsrEviH7ZArwZ3I= -github.com/bufbuild/protocompile v0.1.0/go.mod h1:ix/MMMdsT3fzxfw91dvbfzKW3fRRnuPCP47kpAm5m/4= -github.com/buger/jsonparser v0.0.0-20180808090653-f4dd9f5a6b44/go.mod h1:bbYlZJ7hK1yFx9hf58LP0zeX7UjIGs20ufpu3evjr+s= -github.com/buger/jsonparser v1.1.1/go.mod h1:6RYKKt7H4d4+iWqouImQ9R2FZql3VbhNgx27UK13J/0= -github.com/bugsnag/bugsnag-go v0.0.0-20141110184014-b1d153021fcd/go.mod h1:2oa8nejYd4cQ/b0hMIopN0lCRxU0bueqREvZLWFrtK8= -github.com/bugsnag/osext v0.0.0-20130617224835-0dd3f918b21b/go.mod h1:obH5gd0BsqsP2LwDJ9aOkm/6J86V6lyAXCoQWGw3K50= -github.com/bugsnag/panicwrap v0.0.0-20151223152923-e2c28503fcd0/go.mod h1:D/8v3kj0zr8ZAKg1AQ6crr+5VwKN5eIywRkfhyM/+dE= -github.com/butuzov/ireturn v0.1.1/go.mod h1:Wh6Zl3IMtTpaIKbmwzqi6olnM9ptYQxxVacMsOEFPoc= -github.com/bwesterb/go-ristretto v1.2.0/go.mod h1:fUIoIZaG73pV5biE2Blr2xEzDoMj7NFEuV9ekS419A0= -github.com/c-bata/go-prompt v0.2.2/go.mod h1:VzqtzE2ksDBcdln8G7mk2RX9QyGjH+OVqOCSiVIqS34= -github.com/caarlos0/ctrlc v1.0.0/go.mod h1:CdXpj4rmq0q/1Eb44M9zi2nKB0QraNKuRGYGrrHhcQw= -github.com/campoy/unique v0.0.0-20180121183637-88950e537e7e/go.mod h1:9IOqJGCPMSc6E5ydlp5NIonxObaeu/Iub/X03EKPVYo= github.com/casbin/casbin/v2 v2.1.2/go.mod h1:YcPU1XXisHhLzuxH9coDNf2FbKpjGlbCg3n9yuLkIJQ= -github.com/casbin/casbin/v2 v2.37.0/go.mod h1:vByNa/Fchek0KZUgG5wEsl7iFsiviAYKRtgrQfcJqHg= -github.com/cavaliercoder/go-cpio v0.0.0-20180626203310-925f9528c45e/go.mod h1:oDpT4efm8tSYHXV5tHSdRvBet/b/QzxZ+XyyPehvm3A= +github.com/cenkalti/backoff v2.2.1+incompatible h1:tNowT99t7UNflLxfYYSlKYsBpXdEet03Pg2g16Swow4= github.com/cenkalti/backoff v2.2.1+incompatible/go.mod h1:90ReRw6GdpyfrHakVjL/QHaoyV4aDUVVkXQJJJ3NXXM= github.com/cenkalti/backoff/v4 v4.1.1/go.mod h1:scbssz8iZGpm3xbr14ovlUdkxfGXNInqkPWOWmG2CLw= -github.com/cenkalti/backoff/v4 v4.1.2/go.mod h1:scbssz8iZGpm3xbr14ovlUdkxfGXNInqkPWOWmG2CLw= +github.com/cenkalti/backoff/v4 v4.1.3 h1:cFAlzYUlVYDysBEH2T5hyJZMh3+5+WCBvSnK6Q8UtC4= github.com/cenkalti/backoff/v4 v4.1.3/go.mod h1:scbssz8iZGpm3xbr14ovlUdkxfGXNInqkPWOWmG2CLw= -github.com/census-instrumentation/opencensus-proto v0.2.0/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= -github.com/census-instrumentation/opencensus-proto v0.3.0/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= -github.com/certifi/gocertifi v0.0.0-20191021191039-0944d244cd40/go.mod h1:sGbDF6GwGcLpkNXPUTkMRoywsNa/ol15pxFe6ERfguA= -github.com/certifi/gocertifi v0.0.0-20200922220541-2c3bb06c6054/go.mod h1:sGbDF6GwGcLpkNXPUTkMRoywsNa/ol15pxFe6ERfguA= github.com/cespare/cp v0.1.0/go.mod h1:SOGHArjBr4JWaSDEVpWpo/hNg6RoKrls6Oh40hiwW+s= +github.com/cespare/xxhash v1.1.0 h1:a6HrQnmkObjyL+Gs60czilIUGqrzKutQD6XZog3p+ko= github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= +github.com/cespare/xxhash/v2 v2.1.2 h1:YRXhKfTDauu4ajMg1TPgFO5jnlC2HCbmLXMcTG5cbYE= github.com/cespare/xxhash/v2 v2.1.2/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= -github.com/charithe/durationcheck v0.0.9/go.mod h1:SSbRIBVfMjCi/kEB6K65XEA83D6prSM8ap1UCpNKtgg= -github.com/chavacava/garif v0.0.0-20220316182200-5cad0b5181d4/go.mod h1:W8EnPSQ8Nv4fUjc/v1/8tHFqhuOJXnRub0dTfuAQktU= -github.com/chavacava/garif v0.0.0-20220630083739-93517212f375/go.mod h1:4m1Rv7xfuwWPNKXlThldNuJvutYM6J95wNuuVmn55To= -github.com/checkpoint-restore/go-criu/v4 v4.1.0/go.mod h1:xUQBLp4RLc5zJtWY++yjOoMoB5lihDt7fai+75m+rGw= github.com/checkpoint-restore/go-criu/v5 v5.0.0/go.mod h1:cfwC0EG7HMUenopBsUf9d89JlCLQIfgVcNsNN0t6T2M= -github.com/checkpoint-restore/go-criu/v5 v5.3.0/go.mod h1:E/eQpaFtUKGOOSEBZgmKAcn+zUUwWxqcaKZlF54wK8E= github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI= github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI= github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= -github.com/cilium/ebpf v0.0.0-20200110133405-4032b1d8aae3/go.mod h1:MA5e5Lr8slmEg9bt0VpxxWqJlO4iwu3FBdHUzV7wQVg= -github.com/cilium/ebpf v0.0.0-20200702112145-1c8d4c9ef775/go.mod h1:7cR51M8ViRLIdUjrmSXlK9pkrsDlLHbO8jiB8X8JnOc= -github.com/cilium/ebpf v0.2.0/go.mod h1:To2CFviqOWL/M0gIMsvSMlqe7em/l1ALkX1PyjrX2Qs= -github.com/cilium/ebpf v0.4.0/go.mod h1:4tRaxcgiL706VnOzHOdBlY8IEAIdxINsQBcU4xJJXRs= github.com/cilium/ebpf v0.6.2/go.mod h1:4tRaxcgiL706VnOzHOdBlY8IEAIdxINsQBcU4xJJXRs= -github.com/cilium/ebpf v0.7.0/go.mod h1:/oI2+1shJiTGAMgl6/RgJr36Eo1jzrRcAWbcXO2usCA= github.com/circonus-labs/circonus-gometrics v2.3.1+incompatible/go.mod h1:nmEj6Dob7S7YxXgwXpfOuvO54S+tGdZdw9fuRZt25Ag= github.com/circonus-labs/circonusllhist v0.1.3/go.mod h1:kMXHVDlOchFAehlya5ePtbp5jckzBHf4XRpQvBOLI+I= -github.com/clbanning/mxj v1.8.4/go.mod h1:BVjHeAH+rl9rs6f+QIpeRl0tfu10SXn1pUSa5PVGJng= github.com/clbanning/x2j v0.0.0-20191024224557-825249438eec/go.mod h1:jMjuTZXRI4dUb/I5gc9Hdhagfvm9+RyrPryS/auMzxE= -github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= github.com/cloudflare/cloudflare-go v0.10.2-0.20190916151808-a80f83b9add9/go.mod h1:1MxXX1Ux4x6mqPmjkUgTP1CdXIBXKX7T+Jk9Gxrmx+U= -github.com/cloudflare/cloudflare-go v0.14.0/go.mod h1:EnwdgGMaFOruiPZRFSgn+TsQ3hQ7C/YWzIGLeu5c304= github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= -github.com/cncf/udpa/go v0.0.0-20210930031921-04548b0d99d4/go.mod h1:6pvJx4me5XPnfI9Z40ddWsdw2W/uZgQLFXToKeRcDiI= -github.com/cncf/xds/go v0.0.0-20210922020428-25de7278fc84/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= -github.com/cncf/xds/go v0.0.0-20211001041855-01bcc9b48dfe/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= -github.com/cncf/xds/go v0.0.0-20211130200136-a8f946100490/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/cockroachdb/datadriven v0.0.0-20190809214429-80d97fb3cbaa/go.mod h1:zn76sxSg3SzpJ0PPJaLDCu+Bu0Lg3sKTORVIj19EIF8= -github.com/cockroachdb/datadriven v0.0.0-20200714090401-bf6692d28da5/go.mod h1:h6jFvWxBdQXxjopDMZyH2UVceIRfR84bdzbkoKrsWNo= -github.com/cockroachdb/errors v1.2.4/go.mod h1:rQD95gz6FARkaKkQXUksEje/d9a6wBJoCr5oaCLELYA= -github.com/cockroachdb/logtags v0.0.0-20190617123548-eb05cc24525f/go.mod h1:i/u985jwjWRlyHXQbwatDASoW0RMlZ/3i9yJHE2xLkI= -github.com/codahale/hdrhistogram v0.0.0-20160425231609-f8ad88b59a58/go.mod h1:sE/e/2PUdi/liOCUjSTXgM1o87ZssimdTWN964YiIeI= github.com/codahale/hdrhistogram v0.0.0-20161010025455-3a0bb77429bd/go.mod h1:sE/e/2PUdi/liOCUjSTXgM1o87ZssimdTWN964YiIeI= -github.com/coinbase/kryptology v1.8.0/go.mod h1:RYXOAPdzOGUe3qlSFkMGn58i3xUA8hmxYHksuq+8ciI= github.com/coinbase/rosetta-sdk-go v0.7.0/go.mod h1:7nD3oBPIiHqhRprqvMgPoGxe/nyq3yftRmpsy29coWE= +github.com/coinbase/rosetta-sdk-go v0.8.2 h1:+sNgMUPpntOsYLy5aRsHqBY6I0MTxZkS4JXV1Un3DKc= github.com/coinbase/rosetta-sdk-go v0.8.2/go.mod h1:tXPR6AIW9ogsH4tYIaFOKOgfJNanCvcyl7JKLd4DToc= +github.com/coniks-sys/coniks-go v0.0.0-20180722014011-11acf4819b71 h1:MFLTqgfJclmtaQ1SRUrWwmDX/1UBok3XWUethkJ2swQ= github.com/coniks-sys/coniks-go v0.0.0-20180722014011-11acf4819b71/go.mod h1:TrHYHH4Wze7v7Hkwu1MH1W+mCPQKM+gs+PicdEV14o8= -github.com/consensys/bavard v0.1.8-0.20210406032232-f3452dc9b572/go.mod h1:Bpd0/3mZuaj6Sj+PqrmIquiOKy397AKGThQPaGzNXAQ= -github.com/consensys/bavard v0.1.8-0.20210915155054-088da2f7f54a/go.mod h1:9ItSMtA/dXMAiL7BG6bqW2m3NdSEObYWoH223nGHukI= -github.com/consensys/gnark-crypto v0.4.1-0.20210426202927-39ac3d4b3f1f/go.mod h1:815PAHg3wvysy0SyIqanF8gZ0Y1wjk/hrDHD/iT88+Q= -github.com/consensys/gnark-crypto v0.5.3/go.mod h1:hOdPlWQV1gDLp7faZVeg8Y0iEPFaOUnCc4XeCCk96p0= -github.com/containerd/aufs v0.0.0-20200908144142-dab0cbea06f4/go.mod h1:nukgQABAEopAHvB6j7cnP5zJ+/3aVcE7hCYqvIwAHyE= -github.com/containerd/aufs v0.0.0-20201003224125-76a6863f2989/go.mod h1:AkGGQs9NM2vtYHaUen+NljV0/baGCAPELGm2q9ZXpWU= -github.com/containerd/aufs v0.0.0-20210316121734-20793ff83c97/go.mod h1:kL5kd6KM5TzQjR79jljyi4olc1Vrx6XBlcyj3gNv2PU= -github.com/containerd/aufs v1.0.0/go.mod h1:kL5kd6KM5TzQjR79jljyi4olc1Vrx6XBlcyj3gNv2PU= -github.com/containerd/btrfs v0.0.0-20201111183144-404b9149801e/go.mod h1:jg2QkJcsabfHugurUvvPhS3E08Oxiuh5W/g1ybB4e0E= -github.com/containerd/btrfs v0.0.0-20210316141732-918d888fb676/go.mod h1:zMcX3qkXTAi9GI50+0HOeuV8LU2ryCE/V2vG/ZBiTss= -github.com/containerd/btrfs v1.0.0/go.mod h1:zMcX3qkXTAi9GI50+0HOeuV8LU2ryCE/V2vG/ZBiTss= -github.com/containerd/cgroups v0.0.0-20190717030353-c4b9ac5c7601/go.mod h1:X9rLEHIqSf/wfK8NsPqxJmeZgW4pcfzdXITDrUSJ6uI= -github.com/containerd/cgroups v0.0.0-20190919134610-bf292b21730f/go.mod h1:OApqhQ4XNSNC13gXIwDjhOQxjWa/NxkwZXJ1EvqT0ko= -github.com/containerd/cgroups v0.0.0-20200531161412-0dbf7f05ba59/go.mod h1:pA0z1pT8KYB3TCXK/ocprsh7MAkoW8bZVzPdih9snmM= -github.com/containerd/cgroups v0.0.0-20200710171044-318312a37340/go.mod h1:s5q4SojHctfxANBDvMeIaIovkq29IP48TKAxnhYRxvo= -github.com/containerd/cgroups v0.0.0-20200824123100-0b889c03f102/go.mod h1:s5q4SojHctfxANBDvMeIaIovkq29IP48TKAxnhYRxvo= -github.com/containerd/cgroups v0.0.0-20210114181951-8a68de567b68/go.mod h1:ZJeTFisyysqgcCdecO57Dj79RfL0LNeGiFUqLYQRYLE= -github.com/containerd/cgroups v1.0.1/go.mod h1:0SJrPIenamHDcZhEcJMNBB85rHcUsw4f25ZfBiPYRkU= -github.com/containerd/cgroups v1.0.3/go.mod h1:/ofk34relqNjSGyqPrmEULrO4Sc8LJhvJmWbUCUKqj8= -github.com/containerd/console v0.0.0-20180822173158-c12b1e7919c1/go.mod h1:Tj/on1eG8kiEhd0+fhSDzsPAFESxzBBvdyEgyryXffw= -github.com/containerd/console v0.0.0-20181022165439-0650fd9eeb50/go.mod h1:Tj/on1eG8kiEhd0+fhSDzsPAFESxzBBvdyEgyryXffw= -github.com/containerd/console v0.0.0-20191206165004-02ecf6a7291e/go.mod h1:8Pf4gM6VEbTNRIT26AyyU7hxdQU3MvAvxVI0sc00XBE= -github.com/containerd/console v1.0.0/go.mod h1:8Pf4gM6VEbTNRIT26AyyU7hxdQU3MvAvxVI0sc00XBE= -github.com/containerd/console v1.0.1/go.mod h1:XUsP6YE/mKtz6bxc+I8UiKKTP04qjQL4qcS3XoQ5xkw= github.com/containerd/console v1.0.2/go.mod h1:ytZPjGgY2oeTkAONYafi2kSj0aYggsf8acV1PGKCbzQ= -github.com/containerd/console v1.0.3/go.mod h1:7LqA/THxQ86k76b8c/EMSiaJ3h1eZkMkXar0TQ1gf3U= -github.com/containerd/containerd v1.2.10/go.mod h1:bC6axHOhabU15QhwfG7w5PipXdVtMXFTttgp+kVtyUA= -github.com/containerd/containerd v1.3.0-beta.2.0.20190828155532-0293cbd26c69/go.mod h1:bC6axHOhabU15QhwfG7w5PipXdVtMXFTttgp+kVtyUA= -github.com/containerd/containerd v1.3.0/go.mod h1:bC6axHOhabU15QhwfG7w5PipXdVtMXFTttgp+kVtyUA= -github.com/containerd/containerd v1.3.1-0.20191213020239-082f7e3aed57/go.mod h1:bC6axHOhabU15QhwfG7w5PipXdVtMXFTttgp+kVtyUA= -github.com/containerd/containerd v1.3.2/go.mod h1:bC6axHOhabU15QhwfG7w5PipXdVtMXFTttgp+kVtyUA= -github.com/containerd/containerd v1.4.0-beta.2.0.20200729163537-40b22ef07410/go.mod h1:bC6axHOhabU15QhwfG7w5PipXdVtMXFTttgp+kVtyUA= -github.com/containerd/containerd v1.4.0/go.mod h1:bC6axHOhabU15QhwfG7w5PipXdVtMXFTttgp+kVtyUA= -github.com/containerd/containerd v1.4.1-0.20201117152358-0edc412565dc/go.mod h1:bC6axHOhabU15QhwfG7w5PipXdVtMXFTttgp+kVtyUA= -github.com/containerd/containerd v1.4.1/go.mod h1:bC6axHOhabU15QhwfG7w5PipXdVtMXFTttgp+kVtyUA= -github.com/containerd/containerd v1.4.3/go.mod h1:bC6axHOhabU15QhwfG7w5PipXdVtMXFTttgp+kVtyUA= -github.com/containerd/containerd v1.4.9/go.mod h1:bC6axHOhabU15QhwfG7w5PipXdVtMXFTttgp+kVtyUA= -github.com/containerd/containerd v1.5.0-beta.1/go.mod h1:5HfvG1V2FsKesEGQ17k5/T7V960Tmcumvqn8Mc+pCYQ= -github.com/containerd/containerd v1.5.0-beta.3/go.mod h1:/wr9AVtEM7x9c+n0+stptlo/uBBoBORwEx6ardVcmKU= -github.com/containerd/containerd v1.5.0-beta.4/go.mod h1:GmdgZd2zA2GYIBZ0w09ZvgqEq8EfBp/m3lcVZIvPHhI= -github.com/containerd/containerd v1.5.0-rc.0/go.mod h1:V/IXoMqNGgBlabz3tHD2TWDoTJseu1FGOKuoA4nNb2s= -github.com/containerd/containerd v1.5.1/go.mod h1:0DOxVqwDy2iZvrZp2JUx/E+hS0UNTVn7dJnIOwtYR4g= -github.com/containerd/containerd v1.5.7/go.mod h1:gyvv6+ugqY25TiXxcZC3L5yOeYgEw0QMhscqVp1AR9c= -github.com/containerd/containerd v1.5.8/go.mod h1:YdFSv5bTFLpG2HIYmfqDpSYYTDX+mc5qtSuYx1YUb/s= -github.com/containerd/containerd v1.6.1/go.mod h1:1nJz5xCZPusx6jJU8Frfct988y0NpumIq9ODB0kLtoE= -github.com/containerd/containerd v1.6.3-0.20220401172941-5ff8fce1fcc6/go.mod h1:WSt2SnDLAGWlu+Vl+EWay37seZLKqgRt6XLjIMy8SYM= -github.com/containerd/containerd v1.6.8/go.mod h1:By6p5KqPK0/7/CgO/A6t/Gz+CUYUu2zf1hUaaymVXB0= -github.com/containerd/continuity v0.0.0-20190426062206-aaeac12a7ffc/go.mod h1:GL3xCUCBDV3CZiTSEKksMWbLE66hEyuu9qyDOOqM47Y= -github.com/containerd/continuity v0.0.0-20190815185530-f2a389ac0a02/go.mod h1:GL3xCUCBDV3CZiTSEKksMWbLE66hEyuu9qyDOOqM47Y= github.com/containerd/continuity v0.0.0-20190827140505-75bee3e2ccb6/go.mod h1:GL3xCUCBDV3CZiTSEKksMWbLE66hEyuu9qyDOOqM47Y= -github.com/containerd/continuity v0.0.0-20191127005431-f65d91d395eb/go.mod h1:GL3xCUCBDV3CZiTSEKksMWbLE66hEyuu9qyDOOqM47Y= -github.com/containerd/continuity v0.0.0-20200710164510-efbc4488d8fe/go.mod h1:cECdGN1O8G9bgKTlLhuPJimka6Xb/Gg7vYzCTNVxhvo= -github.com/containerd/continuity v0.0.0-20201208142359-180525291bb7/go.mod h1:kR3BEg7bDFaEddKm54WSmrol1fKWDU1nKYkgrcgZT7Y= -github.com/containerd/continuity v0.0.0-20210208174643-50096c924a4e/go.mod h1:EXlVlkqNba9rJe3j7w3Xa924itAMLgZH4UD/Q4PExuQ= -github.com/containerd/continuity v0.1.0/go.mod h1:ICJu0PwR54nI0yPEnJ6jcS+J7CZAUXrLh8lPo2knzsM= -github.com/containerd/continuity v0.2.2/go.mod h1:pWygW9u7LtS1o4N/Tn0FoCFDIXZ7rxcMX7HX1Dmibvk= -github.com/containerd/continuity v0.2.3-0.20220330195504-d132b287edc8/go.mod h1:pWygW9u7LtS1o4N/Tn0FoCFDIXZ7rxcMX7HX1Dmibvk= -github.com/containerd/continuity v0.3.0/go.mod h1:wJEAIwKOm/pBZuBd0JmeTvnLquTB1Ag8espWhkykbPM= -github.com/containerd/fifo v0.0.0-20180307165137-3d5202aec260/go.mod h1:ODA38xgv3Kuk8dQz2ZQXpnv/UZZUHUCL7pnLehbXgQI= -github.com/containerd/fifo v0.0.0-20190226154929-a9fb20d87448/go.mod h1:ODA38xgv3Kuk8dQz2ZQXpnv/UZZUHUCL7pnLehbXgQI= -github.com/containerd/fifo v0.0.0-20200410184934-f15a3290365b/go.mod h1:jPQ2IAeZRCYxpS/Cm1495vGFww6ecHmMk1YJH2Q5ln0= -github.com/containerd/fifo v0.0.0-20201026212402-0724c46b320c/go.mod h1:jPQ2IAeZRCYxpS/Cm1495vGFww6ecHmMk1YJH2Q5ln0= -github.com/containerd/fifo v0.0.0-20210316144830-115abcc95a1d/go.mod h1:ocF/ME1SX5b1AOlWi9r677YJmCPSwwWnQ9O123vzpE4= -github.com/containerd/fifo v1.0.0/go.mod h1:ocF/ME1SX5b1AOlWi9r677YJmCPSwwWnQ9O123vzpE4= -github.com/containerd/fuse-overlayfs-snapshotter v1.0.2/go.mod h1:nRZceC8a7dRm3Ao6cJAwuJWPFiBPaibHiFntRUnzhwU= -github.com/containerd/go-cni v1.0.1/go.mod h1:+vUpYxKvAF72G9i1WoDOiPGRtQpqsNW/ZHtSlv++smU= -github.com/containerd/go-cni v1.0.2/go.mod h1:nrNABBHzu0ZwCug9Ije8hL2xBCYh/pjfMb1aZGrrohk= -github.com/containerd/go-cni v1.1.0/go.mod h1:Rflh2EJ/++BA2/vY5ao3K6WJRR/bZKsX123aPk+kUtA= -github.com/containerd/go-cni v1.1.3/go.mod h1:Rflh2EJ/++BA2/vY5ao3K6WJRR/bZKsX123aPk+kUtA= -github.com/containerd/go-cni v1.1.4/go.mod h1:Rflh2EJ/++BA2/vY5ao3K6WJRR/bZKsX123aPk+kUtA= -github.com/containerd/go-cni v1.1.6/go.mod h1:BWtoWl5ghVymxu6MBjg79W9NZrCRyHIdUtk4cauMe34= -github.com/containerd/go-runc v0.0.0-20180907222934-5a6d9f37cfa3/go.mod h1:IV7qH3hrUgRmyYrtgEeGWJfWbgcHL9CSRruz2Vqcph0= -github.com/containerd/go-runc v0.0.0-20190911050354-e029b79d8cda/go.mod h1:IV7qH3hrUgRmyYrtgEeGWJfWbgcHL9CSRruz2Vqcph0= -github.com/containerd/go-runc v0.0.0-20200220073739-7016d3ce2328/go.mod h1:PpyHrqVs8FTi9vpyHwPwiNEGaACDxT/N/pLcvMSRA9g= -github.com/containerd/go-runc v0.0.0-20201020171139-16b287bc67d0/go.mod h1:cNU0ZbCgCQVZK4lgG3P+9tn9/PaJNmoDXPpoJhDR+Ok= -github.com/containerd/go-runc v1.0.0/go.mod h1:cNU0ZbCgCQVZK4lgG3P+9tn9/PaJNmoDXPpoJhDR+Ok= -github.com/containerd/imgcrypt v1.0.1/go.mod h1:mdd8cEPW7TPgNG4FpuP3sGBiQ7Yi/zak9TYCG3juvb0= -github.com/containerd/imgcrypt v1.0.4-0.20210301171431-0ae5c75f59ba/go.mod h1:6TNsg0ctmizkrOgXRNQjAPFWpMYRWuiB6dSF4Pfa5SA= -github.com/containerd/imgcrypt v1.1.1-0.20210312161619-7ed62a527887/go.mod h1:5AZJNI6sLHJljKuI9IHnw1pWqo/F0nGDOuR9zgTs7ow= -github.com/containerd/imgcrypt v1.1.1/go.mod h1:xpLnwiQmEUJPvQoAapeb2SNCxz7Xr6PJrXQb0Dpc4ms= -github.com/containerd/imgcrypt v1.1.3/go.mod h1:/TPA1GIDXMzbj01yd8pIbQiLdQxed5ue1wb8bP7PQu4= -github.com/containerd/imgcrypt v1.1.4/go.mod h1:LorQnPtzL/T0IyCeftcsMEO7AqxUDbdO8j/tSUpgxvo= -github.com/containerd/nri v0.0.0-20201007170849-eb1350a75164/go.mod h1:+2wGSDGFYfE5+So4M5syatU0N0f0LbWpuqyMi4/BE8c= -github.com/containerd/nri v0.0.0-20210316161719-dbaa18c31c14/go.mod h1:lmxnXF6oMkbqs39FiCt1s0R2HSMhcLel9vNL3m4AaeY= -github.com/containerd/nri v0.1.0/go.mod h1:lmxnXF6oMkbqs39FiCt1s0R2HSMhcLel9vNL3m4AaeY= -github.com/containerd/stargz-snapshotter v0.0.0-20201027054423-3a04e4c2c116/go.mod h1:o59b3PCKVAf9jjiKtCc/9hLAd+5p/rfhBfm6aBcTEr4= -github.com/containerd/stargz-snapshotter v0.11.3/go.mod h1:2j2EAUyvrLU4D9unYlTIwGhDKQIk74KJ9E71lJsQCVM= -github.com/containerd/stargz-snapshotter/estargz v0.4.1/go.mod h1:x7Q9dg9QYb4+ELgxmo4gBUeJB0tl5dqH1Sdz0nJU1QM= -github.com/containerd/stargz-snapshotter/estargz v0.11.3/go.mod h1:7vRJIcImfY8bpifnMjt+HTJoQxASq7T28MYbP15/Nf0= -github.com/containerd/ttrpc v0.0.0-20190828154514-0e0f228740de/go.mod h1:PvCDdDGpgqzQIzDW1TphrGLssLDZp2GuS+X5DkEJB8o= -github.com/containerd/ttrpc v0.0.0-20190828172938-92c8520ef9f8/go.mod h1:PvCDdDGpgqzQIzDW1TphrGLssLDZp2GuS+X5DkEJB8o= -github.com/containerd/ttrpc v0.0.0-20191028202541-4f1b8fe65a5c/go.mod h1:LPm1u0xBw8r8NOKoOdNMeVHSawSsltak+Ihv+etqsE8= -github.com/containerd/ttrpc v1.0.1/go.mod h1:UAxOpgT9ziI0gJrmKvgcZivgxOp8iFPSk8httJEt98Y= -github.com/containerd/ttrpc v1.0.2/go.mod h1:UAxOpgT9ziI0gJrmKvgcZivgxOp8iFPSk8httJEt98Y= -github.com/containerd/ttrpc v1.1.0/go.mod h1:XX4ZTnoOId4HklF4edwc4DcqskFZuvXB1Evzy5KFQpQ= -github.com/containerd/typeurl v0.0.0-20180627222232-a93fcdb778cd/go.mod h1:Cm3kwCdlkCfMSHURc+r6fwoGH6/F1hH3S4sg0rLFWPc= -github.com/containerd/typeurl v0.0.0-20190911142611-5eb25027c9fd/go.mod h1:GeKYzf2pQcqv7tJ0AoCuuhtnqhva5LNU3U+OyKxxJpk= -github.com/containerd/typeurl v1.0.1/go.mod h1:TB1hUtrpaiO88KEK56ijojHS1+NeF0izUACaJW2mdXg= -github.com/containerd/typeurl v1.0.2/go.mod h1:9trJWW2sRlGub4wZJRTW83VtbOLS6hwcDZXTn6oPz9s= -github.com/containerd/zfs v0.0.0-20200918131355-0a33824f23a2/go.mod h1:8IgZOBdv8fAgXddBT4dBXJPtxyRsejFIpXoklgxgEjw= -github.com/containerd/zfs v0.0.0-20210301145711-11e8f1707f62/go.mod h1:A9zfAbMlQwE+/is6hi0Xw8ktpL+6glmqZYtevJgaB8Y= -github.com/containerd/zfs v0.0.0-20210315114300-dde8f0fda960/go.mod h1:m+m51S1DvAP6r3FcmYCp54bQ34pyOwTieQDNRIRHsFY= -github.com/containerd/zfs v0.0.0-20210324211415-d5c4544f0433/go.mod h1:m+m51S1DvAP6r3FcmYCp54bQ34pyOwTieQDNRIRHsFY= -github.com/containerd/zfs v1.0.0/go.mod h1:m+m51S1DvAP6r3FcmYCp54bQ34pyOwTieQDNRIRHsFY= -github.com/containernetworking/cni v0.7.1/go.mod h1:LGwApLUm2FpoOfxTDEeq8T9ipbpZ61X79hmU3w8FmsY= -github.com/containernetworking/cni v0.8.0/go.mod h1:LGwApLUm2FpoOfxTDEeq8T9ipbpZ61X79hmU3w8FmsY= -github.com/containernetworking/cni v0.8.1/go.mod h1:LGwApLUm2FpoOfxTDEeq8T9ipbpZ61X79hmU3w8FmsY= -github.com/containernetworking/cni v1.0.1/go.mod h1:AKuhXbN5EzmD4yTNtfSsX3tPcmtrBI6QcRV0NiNt15Y= -github.com/containernetworking/cni v1.1.1/go.mod h1:sDpYKmGVENF3s6uvMvGgldDWeG8dMxakj/u+i9ht9vw= -github.com/containernetworking/plugins v0.8.6/go.mod h1:qnw5mN19D8fIwkqW7oHHYDHVlzhJpcY6TQxn/fUyDDM= -github.com/containernetworking/plugins v0.9.1/go.mod h1:xP/idU2ldlzN6m4p5LmGiwRDjeJr6FLK6vuiUwoH7P8= -github.com/containernetworking/plugins v1.0.1/go.mod h1:QHCfGpaTwYTbbH+nZXKVTxNBDZcxSOplJT5ico8/FLE= -github.com/containernetworking/plugins v1.1.1/go.mod h1:Sr5TH/eBsGLXK/h71HeLfX19sZPp3ry5uHSkI4LPxV8= -github.com/containers/ocicrypt v1.0.1/go.mod h1:MeJDzk1RJHv89LjsH0Sp5KTY3ZYkjXO/C+bKAeWFIrc= -github.com/containers/ocicrypt v1.1.0/go.mod h1:b8AOe0YR67uU8OqfVNcznfFpAzu3rdgUV4GP9qXPfu4= -github.com/containers/ocicrypt v1.1.1/go.mod h1:Dm55fwWm1YZAjYRaJ94z2mfZikIyIN4B0oB3dj3jFxY= -github.com/containers/ocicrypt v1.1.2/go.mod h1:Dm55fwWm1YZAjYRaJ94z2mfZikIyIN4B0oB3dj3jFxY= -github.com/containers/ocicrypt v1.1.3/go.mod h1:xpdkbVAuaH3WzbEabUd5yDsl9SwJA5pABH85425Es2g= +github.com/containerd/continuity v0.3.0 h1:nisirsYROK15TAMVukJOUyGJjz4BNQJBVsNvAXZJ/eg= github.com/coreos/bbolt v1.3.2/go.mod h1:iRUV2dpdMOn7Bo10OQBFzIJO9kkE559Wcmn+qkEiiKk= github.com/coreos/etcd v3.3.10+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= github.com/coreos/etcd v3.3.13+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= github.com/coreos/go-etcd v2.0.0+incompatible/go.mod h1:Jez6KQU2B/sWsbdaef3ED8NzMklzPG4d5KIOhIy30Tk= -github.com/coreos/go-iptables v0.4.5/go.mod h1:/mVI274lEDI2ns62jHCDnCyBF9Iwsmekav8Dbxlm1MU= -github.com/coreos/go-iptables v0.5.0/go.mod h1:/mVI274lEDI2ns62jHCDnCyBF9Iwsmekav8Dbxlm1MU= -github.com/coreos/go-iptables v0.6.0/go.mod h1:Qe8Bv2Xik5FyTXwgIbLAnv2sWSBmvWdFETJConOQ//Q= -github.com/coreos/go-oidc v2.1.0+incompatible/go.mod h1:CgnwVTmzoESiwO9qyAFEMiHoZ1nMCKZlZ9V6mm3/LKc= github.com/coreos/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= github.com/coreos/go-semver v0.3.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= -github.com/coreos/go-systemd v0.0.0-20161114122254-48702e0da86b/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= github.com/coreos/go-systemd v0.0.0-20180511133405-39ca1b05acc7/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= -github.com/coreos/go-systemd v0.0.0-20181012123002-c6f51f82210d/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= github.com/coreos/go-systemd v0.0.0-20190321100706-95778dfbb74e/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= -github.com/coreos/go-systemd v0.0.0-20190620071333-e64a0ec8b42a/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= -github.com/coreos/go-systemd/v22 v22.0.0/go.mod h1:xO0FLkIi5MaZafQlIrOotqXZ90ih+1atmu1JpKERPPk= -github.com/coreos/go-systemd/v22 v22.1.0/go.mod h1:xO0FLkIi5MaZafQlIrOotqXZ90ih+1atmu1JpKERPPk= github.com/coreos/go-systemd/v22 v22.3.2/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc= github.com/coreos/go-systemd/v22 v22.3.3-0.20220203105225-a9a7ef127534/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc= github.com/coreos/pkg v0.0.0-20160727233714-3ac0863d7acf/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= -github.com/coreos/pkg v0.0.0-20180108230652-97fdf19511ea/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= github.com/coreos/pkg v0.0.0-20180928190104-399ea9e2e55f/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= github.com/cosmos/btcutil v1.0.4/go.mod h1:Ffqc8Hn6TJUdDgHBwIZLtrLQC1KdJ9jGJl/TvgUaxbU= +github.com/cosmos/btcutil v1.0.5 h1:t+ZFcX77LpKtDBhjucvnOH8C2l2ioGsBNEQ3jef8xFk= github.com/cosmos/btcutil v1.0.5/go.mod h1:IyB7iuqZMJlthe2tkIFL33xPyzbFYP0XVdS8P5lUPis= +github.com/cosmos/cosmos-sdk v0.45.1 h1:PY79YxPea5qlRLExRnzg8/rT1Scc8GGgRs22p7DX99Q= github.com/cosmos/cosmos-sdk v0.45.1/go.mod h1:XXS/asyCqWNWkx2rW6pSuen+EVcpAFxq6khrhnZgHaQ= +github.com/cosmos/cosmos-sdk/ics23/go v0.8.0 h1:iKclrn3YEOwk4jQHT2ulgzuXyxmzmPczUalMwW4XH9k= github.com/cosmos/cosmos-sdk/ics23/go v0.8.0/go.mod h1:2a4dBq88TUoqoWAU5eu0lGvpFP3wWDPgdHPargtyw30= github.com/cosmos/go-bip39 v0.0.0-20180819234021-555e2067c45d/go.mod h1:tSxLoYXyBmiFeKpvmq4dzayMdCjCnu8uqmCysIGBT2Y= +github.com/cosmos/go-bip39 v1.0.0 h1:pcomnQdrdH22njcAatO0yWojsUnCO3y2tNoV1cb6hHY= github.com/cosmos/go-bip39 v1.0.0/go.mod h1:RNJv0H/pOIVgxw6KS7QeX2a0Uo0aKUlfhZ4xuwvCdJw= -github.com/cosmos/gogoproto v1.4.2/go.mod h1:cLxOsn1ljAHSV527CHOtaIP91kK6cCrZETRBrkzItWU= +github.com/cosmos/gorocksdb v1.2.0 h1:d0l3jJG8M4hBouIZq0mDUHZ+zjOx044J3nGRskwTb4Y= github.com/cosmos/gorocksdb v1.2.0/go.mod h1:aaKvKItm514hKfNJpUJXnnOWeBnk2GL4+Qw9NHizILw= github.com/cosmos/iavl v0.17.3/go.mod h1:prJoErZFABYZGDHka1R6Oay4z9PrNeFFiMKHDAMOi4w= +github.com/cosmos/iavl v0.19.4 h1:t82sN+Y0WeqxDLJRSpNd8YFX5URIrT+p8n6oJbJ2Dok= github.com/cosmos/iavl v0.19.4/go.mod h1:X9PKD3J0iFxdmgNLa7b2LYWdsGd90ToV5cAONApkEPw= -github.com/cosmos/ibc-go/v3 v3.0.0/go.mod h1:Mb+1NXiPOLd+CPFlOC6BKeAUaxXlhuWenMmRiUiSmwY= +github.com/cosmos/interchain-accounts v0.1.0 h1:QmuwNsf1Hxl3P5GSGt7Z+JeuHPiZw4Z34R/038P5T6s= github.com/cosmos/interchain-accounts v0.1.0/go.mod h1:Fv6LXDs+0ng4mIDVWwEJMXbAIMxY4kiq+A7Bw1Fb9AY= github.com/cosmos/ledger-cosmos-go v0.11.1/go.mod h1:J8//BsAGTo3OC/vDLjMRFLW6q0WAaXvHnVc7ZmE8iUY= +github.com/cosmos/ledger-cosmos-go v0.12.1 h1:sMBxza5p/rNK/06nBSNmsI/WDqI0pVJFVNihy1Y984w= github.com/cosmos/ledger-cosmos-go v0.12.1/go.mod h1:dhO6kj+Y+AHIOgAe4L9HL/6NDdyyth4q238I9yFpD2g= github.com/cosmos/ledger-go v0.9.2/go.mod h1:oZJ2hHAZROdlHiwTg4t7kP+GKIIkBT+o6c9QWFanOyI= github.com/cpuguy83/go-md2man v1.0.10/go.mod h1:SmD6nW6nTyfqj6ABTjUi3V3JVMnlJmwcJI5acqYI6dE= github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= github.com/cpuguy83/go-md2man/v2 v2.0.0/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= -github.com/cpuguy83/go-md2man/v2 v2.0.1/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= github.com/cpuguy83/go-md2man/v2 v2.0.2/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= -github.com/creachadair/taskgroup v0.3.2/go.mod h1:wieWwecHVzsidg2CsUnFinW1faVN4+kq+TDlRJQ0Wbk= github.com/creack/pty v1.1.7/go.mod h1:lj5s0c3V2DBrqTV7llrYr5NG6My20zk30Fl46Y7DoTY= github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= -github.com/creack/pty v1.1.11/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= -github.com/cristalhq/acmd v0.8.1/go.mod h1:LG5oa43pE/BbxtfMoImHCQN++0Su7dzipdgBjMCBVDQ= -github.com/curioswitch/go-reassign v0.2.0/go.mod h1:x6OpXuWvgfQaMGks2BZybTngWjT84hqJfKoO8Tt/Roc= -github.com/cyberdelia/templates v0.0.0-20141128023046-ca7fffd4298c/go.mod h1:GyV+0YP4qX0UQ7r2MoYZ+AvYDp12OF5yg4q8rGnyNh4= github.com/cyphar/filepath-securejoin v0.2.2/go.mod h1:FpkQEhXnPnOthhzymB7CGsFk2G9VLXONKD9G7QGMM+4= -github.com/cyphar/filepath-securejoin v0.2.3/go.mod h1:aPGpWjXOXUn2NCNjFvBE6aRxGGx79pTxQpKOJNYHHl4= -github.com/d2g/dhcp4 v0.0.0-20170904100407-a1d1b6c41b1c/go.mod h1:Ct2BUK8SB0YC1SMSibvLzxjeJLnrYEVLULFNiHY9YfQ= -github.com/d2g/dhcp4client v1.0.0/go.mod h1:j0hNfjhrt2SxUOw55nL0ATM/z4Yt3t2Kd1mW34z5W5s= -github.com/d2g/dhcp4server v0.0.0-20181031114812-7d4a0a7f59a5/go.mod h1:Eo87+Kg/IX2hfWJfwxMzLyuSZyxSoAug2nGa1G2QAi8= -github.com/d2g/hardwareaddr v0.0.0-20190221164911-e7d9fbe030e4/go.mod h1:bMl4RjIciD2oAxI7DmWRx6gbeqrkoLqv3MV0vzNad+I= -github.com/daixiang0/gci v0.3.3/go.mod h1:1Xr2bxnQbDxCqqulUOv8qpGqkgRw9RSCGGjEC2LjF8o= -github.com/daixiang0/gci v0.8.1/go.mod h1:EpVfrztufwVgQRXjnX4zuNinEpLj5OmMjtu/+MB0V0c= github.com/danieljoos/wincred v1.0.2/go.mod h1:SnuYRW9lp1oJrZX/dXJqr0cPK5gYXqx3EJbmjhLdK9U= -github.com/danieljoos/wincred v1.1.0/go.mod h1:XYlo+eRTsVA9aHGp7NGjFkPla4m+DCL7hqDjlFjiygg= +github.com/danieljoos/wincred v1.1.2 h1:QLdCxFs1/Yl4zduvBdcHB8goaYk9RARS2SgLLRuAyr0= github.com/danieljoos/wincred v1.1.2/go.mod h1:GijpziifJoIBfYh+S7BbkdUTU4LfM+QnGqR5Vl2tAx0= -github.com/dave/jennifer v1.2.0/go.mod h1:fIb+770HOpJ2fmN9EPPKOqm1vMGhB+TwXKMZhrIygKg= -github.com/davecgh/go-spew v0.0.0-20151105211317-5215b55f46b2/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/davecgh/go-spew v0.0.0-20161028175848-04cdfd42973b/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v0.0.0-20171005155431-ecdeabc65495/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/deckarep/golang-set v0.0.0-20180603214616-504e848d77ea/go.mod h1:93vsz/8Wt4joVM7c2AVqh+YRMiUSc14yDtF28KmMOgQ= -github.com/deckarep/golang-set v1.8.0/go.mod h1:5nI87KwE7wgsBU1F4GKAw2Qod7p5kyS383rP6+o6qqo= -github.com/decred/dcrd/crypto/blake256 v1.0.0/go.mod h1:sQl2p6Y26YV+ZOcSTP6thNdn47hh8kt6rqSlvmrXFAc= -github.com/decred/dcrd/dcrec/secp256k1/v4 v4.0.1/go.mod h1:hyedUtir6IdtD/7lIxGeCxkaw7y45JueMRL4DIyJDKs= +github.com/decred/dcrd/dcrec/secp256k1/v4 v4.0.1 h1:YLtO71vCjJRCBcrPMtQ9nqBsqpA1m5sE92cU+pd5Mcc= github.com/decred/dcrd/lru v1.0.0/go.mod h1:mxKOwFd7lFjN2GZYsiz/ecgqR6kkYAl+0pz0tEMk218= -github.com/deepmap/oapi-codegen v1.6.0/go.mod h1:ryDa9AgbELGeB+YEXE1dR53yAjHwFvE9iAUlWl9Al3M= -github.com/deepmap/oapi-codegen v1.8.2/go.mod h1:YLgSKSDv/bZQB7N4ws6luhozi3cEdRktEqrX88CvjIw= -github.com/denis-tingaikin/go-header v0.4.3/go.mod h1:0wOCWuN71D5qIgE2nz9KrKmuYBAC2Mra5RassOIQ2/c= -github.com/denisenkom/go-mssqldb v0.12.0/go.mod h1:iiK0YP1ZeepvmBQk/QpLEhhTNJgfzrpArPY/aFvc9yU= -github.com/denverdino/aliyungo v0.0.0-20190125010748-a747050bb1ba/go.mod h1:dV8lFg6daOBZbT6/BDGIz6Y3WFGn8juu6G+CQ6LHtl0= +github.com/desertbit/timer v0.0.0-20180107155436-c41aec40b27f h1:U5y3Y5UE0w7amNe7Z5G/twsBW0KEalRQXZzf8ufSh9I= github.com/desertbit/timer v0.0.0-20180107155436-c41aec40b27f/go.mod h1:xH/i4TFMt8koVQZ6WFms69WAsDWr2XsYL3Hkl7jkoLE= -github.com/devigned/tab v0.1.1/go.mod h1:XG9mPq0dFghrYvoBF3xdRrJzSTX1b7IQrvaL9mzjeJY= github.com/dgraph-io/badger/v2 v2.2007.2/go.mod h1:26P/7fbL4kUZVEVKLAKXkBXKOydDmM2p1e+NhhnBCAE= +github.com/dgraph-io/badger/v2 v2.2007.4 h1:TRWBQg8UrlUhaFdco01nO2uXwzKS7zd+HVdwV/GHc4o= github.com/dgraph-io/badger/v2 v2.2007.4/go.mod h1:vSw/ax2qojzbN6eXHIx6KPKtCSHJN/Uz0X0VPruTIhk= github.com/dgraph-io/ristretto v0.0.3-0.20200630154024-f66de99634de/go.mod h1:KPxhHT9ZxKefz+PCeOGsrHpl1qZ7i70dGTu2u+Ahh6E= github.com/dgraph-io/ristretto v0.0.3/go.mod h1:KPxhHT9ZxKefz+PCeOGsrHpl1qZ7i70dGTu2u+Ahh6E= +github.com/dgraph-io/ristretto v0.1.0 h1:Jv3CGQHp9OjuMBSne1485aDpUkTKEcUqF+jm/LuerPI= github.com/dgraph-io/ristretto v0.1.0/go.mod h1:fux0lOrBhrVCJd3lcTHsIJhq1T2rokOu6v9Vcb3Q9ug= -github.com/dgrijalva/jwt-go v0.0.0-20170104182250-a601269ab70c/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= -github.com/dgryski/go-bitstream v0.0.0-20180413035011-3522498ce2c8/go.mod h1:VMaSuZ+SZcx/wljOQKvp5srsbCiKDEb6K2wC4+PiBmQ= github.com/dgryski/go-farm v0.0.0-20190423205320-6a90982ecee2/go.mod h1:SqUrOPUnsFjfmXRMNPybcSiG0BgUW2AuFH8PAnS2iTw= +github.com/dgryski/go-farm v0.0.0-20200201041132-a6ae2369ad13 h1:fAjc9m62+UWV/WAFKLNi6ZS0675eEUC9y3AlwSbQu1Y= github.com/dgryski/go-farm v0.0.0-20200201041132-a6ae2369ad13/go.mod h1:SqUrOPUnsFjfmXRMNPybcSiG0BgUW2AuFH8PAnS2iTw= github.com/dgryski/go-sip13 v0.0.0-20181026042036-e10d5fee7954/go.mod h1:vAd38F8PWV+bWy6jNmig1y/TA+kYO4g3RSRF0IAv0no= -github.com/dimchansky/utfbom v1.1.0/go.mod h1:rO41eb7gLfo8SF1jd9F8HplJm1Fewwi4mQvIirEdv+8= -github.com/dimchansky/utfbom v1.1.1/go.mod h1:SxdoEBH5qIqFocHMyGOXVAybYJdr71b1Q/j0mACtrfE= github.com/dlclark/regexp2 v1.2.0/go.mod h1:2pZnwuY/m+8K6iRw6wQdMtk+rH5tNGR1i55kozfMjCc= -github.com/dlclark/regexp2 v1.4.1-0.20201116162257-a2a8dda75c91/go.mod h1:2pZnwuY/m+8K6iRw6wQdMtk+rH5tNGR1i55kozfMjCc= -github.com/dnaeon/go-vcr v1.0.1/go.mod h1:aBB1+wY4s93YsC3HHjMBMrwTj2R9FHDzUr9KyGc8n1E= -github.com/dnaeon/go-vcr v1.1.0/go.mod h1:M7tiix8f0r6mKKJ3Yq/kqU1OYf3MnfmBWVbPx/yU9ko= -github.com/dnaeon/go-vcr v1.2.0/go.mod h1:R4UdLID7HZT3taECzJs4YgbbH6PIGXB6W/sc5OLb6RQ= -github.com/docker/cli v0.0.0-20190925022749-754388324470/go.mod h1:JLrzqnKDaYBop7H2jaqPtU4hHvMKP+vjCwu2uszcLI8= -github.com/docker/cli v0.0.0-20191017083524-a8ff7f821017/go.mod h1:JLrzqnKDaYBop7H2jaqPtU4hHvMKP+vjCwu2uszcLI8= -github.com/docker/cli v20.10.0-beta1.0.20201029214301-1d20b15adc38+incompatible/go.mod h1:JLrzqnKDaYBop7H2jaqPtU4hHvMKP+vjCwu2uszcLI8= -github.com/docker/cli v20.10.13+incompatible/go.mod h1:JLrzqnKDaYBop7H2jaqPtU4hHvMKP+vjCwu2uszcLI8= -github.com/docker/cli v20.10.14+incompatible/go.mod h1:JLrzqnKDaYBop7H2jaqPtU4hHvMKP+vjCwu2uszcLI8= -github.com/docker/cli v20.10.17+incompatible/go.mod h1:JLrzqnKDaYBop7H2jaqPtU4hHvMKP+vjCwu2uszcLI8= -github.com/docker/distribution v0.0.0-20190905152932-14b96e55d84c/go.mod h1:0+TTO4EOBfRPhZXAeF1Vu+W3hHZ8eLp8PgKVZlcvtFY= -github.com/docker/distribution v2.6.0-rc.1.0.20180327202408-83389a148052+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w= -github.com/docker/distribution v2.7.1-0.20190205005809-0d3efadf0154+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w= -github.com/docker/distribution v2.7.1+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w= -github.com/docker/distribution v2.8.1+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w= -github.com/docker/docker v0.0.0-20200511152416-a93e9eb0e95c/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= -github.com/docker/docker v0.7.3-0.20190327010347-be7ac8be2ae0/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= -github.com/docker/docker v1.4.2-0.20180531152204-71cd53e4a197/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= github.com/docker/docker v1.4.2-0.20180625184442-8e610b2b55bf/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= -github.com/docker/docker v1.4.2-0.20190924003213-a8608b5b67c7/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= -github.com/docker/docker v1.6.2/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= -github.com/docker/docker v17.12.0-ce-rc1.0.20200730172259-9f28837c1d93+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= -github.com/docker/docker v20.10.0-beta1.0.20201110211921-af34b94a78a1+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= -github.com/docker/docker v20.10.3-0.20211208011758-87521affb077+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= -github.com/docker/docker v20.10.7+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= -github.com/docker/docker v20.10.17+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= -github.com/docker/docker v20.10.19+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= -github.com/docker/docker-credential-helpers v0.6.3/go.mod h1:WRaJzqw3CTB9bk10avuGsjVBZsD05qeibJ1/TYlvc0Y= -github.com/docker/docker-credential-helpers v0.6.4/go.mod h1:ofX3UI0Gz1TteYBjtgs07O36Pyasyp66D2uKT7H8W1c= +github.com/docker/go-connections v0.4.0 h1:El9xVISelRB7BuFusrZozjnkIM5YnzCViNKohAFqRJQ= github.com/docker/go-connections v0.4.0/go.mod h1:Gbd7IOopHjR8Iph03tsViu4nIes5XhDvyHbTtUxmeec= -github.com/docker/go-events v0.0.0-20170721190031-9461782956ad/go.mod h1:Uw6UezgYA44ePAFQYUehOuCzmy5zmg/+nl2ZfMWGkpA= -github.com/docker/go-events v0.0.0-20190806004212-e31b211e4f1c/go.mod h1:Uw6UezgYA44ePAFQYUehOuCzmy5zmg/+nl2ZfMWGkpA= -github.com/docker/go-metrics v0.0.0-20180209012529-399ea8c73916/go.mod h1:/u0gXw0Gay3ceNrsHubL3BtdOL2fHf93USgMTe0W5dI= -github.com/docker/go-metrics v0.0.1/go.mod h1:cG1hvH2utMXtqgqqYE9plW6lDxS3/5ayHzueweSI3Vw= -github.com/docker/go-units v0.3.3/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk= github.com/docker/go-units v0.4.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk= -github.com/docker/go-units v0.5.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk= -github.com/docker/libnetwork v0.8.0-dev.2.0.20200917202933-d0951081b35f/go.mod h1:93m0aTqz6z+g32wla4l4WxTrdtvBRmVzYRkYvasA5Z8= -github.com/docker/libtrust v0.0.0-20150114040149-fa567046d9b1/go.mod h1:cyGadeNEkKy96OOhEzfZl+yxihPEzKnqJwvfuSUqbZE= -github.com/docker/spdystream v0.0.0-20160310174837-449fdfce4d96/go.mod h1:Qh8CwZgvJUkLughtfhJv5dyTYa91l1fOUCrgjqmcifM= -github.com/docopt/docopt-go v0.0.0-20180111231733-ee0de3bc6815/go.mod h1:WwZ+bS3ebgob9U8Nd0kOddGdZWjyMGR8Wziv+TBNwSE= +github.com/docker/go-units v0.5.0 h1:69rxXcBk27SvSaaxTtLh/8llcHD8vYHT7WSdRZ/jvr4= github.com/dop251/goja v0.0.0-20200721192441-a695b0cdd498/go.mod h1:Mw6PkjjMXWbTj+nnj4s3QPXq1jaT0s5pC0iFD4+BOAA= -github.com/dop251/goja v0.0.0-20220405120441-9037c2b61cbf/go.mod h1:R9ET47fwRVRPZnOGvHxxhuZcbrMCuiqOz3Rlrh4KSnk= -github.com/dop251/goja_nodejs v0.0.0-20210225215109-d91c329300e7/go.mod h1:hn7BA7c8pLvoGndExHudxTDKZ84Pyvv+90pbBjbTz0Y= github.com/dustin/go-humanize v0.0.0-20171111073723-bb3d318650d4/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= +github.com/dustin/go-humanize v1.0.0 h1:VSnTsYCnlFHaM2/igO1h6X3HA71jcobQuxemgkq4zYo= github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= github.com/dvsekhvalnov/jose2go v0.0.0-20200901110807-248326c1351b/go.mod h1:7BvyPhdbLxMXIYTFPLsyJRFMsKmOZnQmzh6Gb+uquuM= +github.com/dvsekhvalnov/jose2go v1.5.0 h1:3j8ya4Z4kMCwT5nXIKFSV84YS+HdqSSO0VsTQxaLAeM= github.com/dvsekhvalnov/jose2go v1.5.0/go.mod h1:QsHjhyTlD/lAVqn/NSbVZmSCGeDehTB/mPZadG+mhXU= github.com/dvyukov/go-fuzz v0.0.0-20200318091601-be3528f3a813/go.mod h1:11Gm+ccJnvAhCNLlf5+cS9KjtbaD5I5zaZpFMsTHWTw= github.com/eapache/go-resiliency v1.1.0/go.mod h1:kFI+JgMyC7bLPUVY133qvEBtVayf5mFgVsvEsIPBvNs= github.com/eapache/go-xerial-snappy v0.0.0-20180814174437-776d5712da21/go.mod h1:+020luEh2TKB4/GOp8oxxtq0Daoen/Cii55CzbTV6DU= github.com/eapache/queue v1.1.0/go.mod h1:6eCeP0CKFpHLu8blIFXhExK/dRa7WDZfr6jVFPTqq+I= -github.com/eclipse/paho.mqtt.golang v1.2.0/go.mod h1:H9keYFcgq3Qr5OUJm/JZI/i6U7joQ8SYLhZwfeOo6Ts= github.com/edsrzf/mmap-go v0.0.0-20160512033002-935e0e8a636c/go.mod h1:YO35OhQPt3KJa3ryjFM5Bs14WD66h8eGKpfaBNrHW5M= github.com/edsrzf/mmap-go v1.0.0/go.mod h1:YO35OhQPt3KJa3ryjFM5Bs14WD66h8eGKpfaBNrHW5M= -github.com/elazarl/goproxy v0.0.0-20170405201442-c4fc26588b6e/go.mod h1:/Zj4wYkgs4iZTTu3o/KG3Itv/qCCa8VVMlb3i9OVuzc= -github.com/elazarl/goproxy v0.0.0-20180725130230-947c36da3153/go.mod h1:/Zj4wYkgs4iZTTu3o/KG3Itv/qCCa8VVMlb3i9OVuzc= -github.com/emicklei/go-restful v0.0.0-20170410110728-ff4f55a20633/go.mod h1:otzb+WCGbkyDHkqmQmT5YD2WR4BBwUdeQoFo8l/7tVs= -github.com/emicklei/go-restful v2.9.5+incompatible/go.mod h1:otzb+WCGbkyDHkqmQmT5YD2WR4BBwUdeQoFo8l/7tVs= github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= -github.com/envoyproxy/go-control-plane v0.10.1/go.mod h1:AY7fTTXNdv/aJ2O5jwpxAPOWUZ7hQAEvzN5Pf27BkQQ= -github.com/envoyproxy/protoc-gen-validate v0.0.14/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= -github.com/envoyproxy/protoc-gen-validate v0.6.2/go.mod h1:2t7qjJNvHPx8IjnBOzl9E9/baC+qXE/TeeyBRzgJDws= -github.com/esimonov/ifshort v1.0.4/go.mod h1:Pe8zjlRrJ80+q2CxHLfEOfTwxCZ4O+MuhcHcfgNWTk0= github.com/ethereum/go-ethereum v1.9.25/go.mod h1:vMkFiYLHI4tgPw4k2j4MHKoovchFE8plZ0M9VMk4/oM= -github.com/ethereum/go-ethereum v1.10.21/go.mod h1:EYFyF19u3ezGLD4RqOkLq+ZCXzYbLoNDdZlMt7kyKFg= -github.com/ettle/strcase v0.1.1/go.mod h1:hzDLsPC7/lwKyBOywSHEP89nt2pDgdy+No1NBA9o9VY= -github.com/evanphx/json-patch v4.2.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk= -github.com/evanphx/json-patch v4.9.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk= -github.com/evanphx/json-patch v4.11.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk= -github.com/evanphx/json-patch v4.12.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk= github.com/facebookgo/ensure v0.0.0-20160127193407-b4ab57deab51/go.mod h1:Yg+htXGokKKdzcwhuNDwVvN+uBxDGXJ7G/VN1d8fa64= -github.com/facebookgo/ensure v0.0.0-20200202191622-63f1cf65ac4c/go.mod h1:Yg+htXGokKKdzcwhuNDwVvN+uBxDGXJ7G/VN1d8fa64= +github.com/facebookgo/ensure v0.0.0-20200202191622-63f1cf65ac4c h1:8ISkoahWXwZR41ois5lSJBSVw4D0OV19Ht/JSTzvSv0= +github.com/facebookgo/stack v0.0.0-20160209184415-751773369052 h1:JWuenKqqX8nojtoVVWjGfOF9635RETekkoH6Cc9SX0A= github.com/facebookgo/stack v0.0.0-20160209184415-751773369052/go.mod h1:UbMTZqLaRiH3MsBH8va0n7s1pQYcu3uTb8G4tygF4Zg= github.com/facebookgo/subset v0.0.0-20150612182917-8dac2c3c4870/go.mod h1:5tD+neXqOorC30/tWg0LCSkrqj/AR6gu8yY8/fpw1q0= -github.com/facebookgo/subset v0.0.0-20200203212716-c811ad88dec4/go.mod h1:5tD+neXqOorC30/tWg0LCSkrqj/AR6gu8yY8/fpw1q0= +github.com/facebookgo/subset v0.0.0-20200203212716-c811ad88dec4 h1:7HZCaLC5+BZpmbhCOZJ293Lz68O7PYrF2EzeiFMwCLk= github.com/fatih/color v1.3.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= -github.com/fatih/color v1.9.0/go.mod h1:eQcE1qtQxscV5RaZvpXrrb8Drkc3/DdQ+uUYCNjL+zU= github.com/fatih/color v1.10.0/go.mod h1:ELkj/draVOlAH/xkhN6mQ50Qd0MPOk5AAr3maGEBuJM= -github.com/fatih/color v1.12.0/go.mod h1:ELkj/draVOlAH/xkhN6mQ50Qd0MPOk5AAr3maGEBuJM= -github.com/fatih/color v1.13.0/go.mod h1:kLAiJbzzSOZDVNGyDpeOxJ47H46qBXwg5ILebYFFOfk= -github.com/fatih/structtag v1.2.0/go.mod h1:mBJUNpUnHmRKrKlQQlmCrh5PuhftFbNv8Ys4/aAZl94= +github.com/felixge/httpsnoop v1.0.1 h1:lvB5Jl89CsZtGIWuTcDM1E/vkVs49/Ml7JJe07l8SPQ= github.com/felixge/httpsnoop v1.0.1/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= -github.com/felixge/httpsnoop v1.0.2/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= -github.com/firefart/nonamedreturns v1.0.1/go.mod h1:D3dpIBojGGNh5UfElmwPu73SwDCm+VKhHYqwlNOk2uQ= -github.com/firefart/nonamedreturns v1.0.4/go.mod h1:TDhe/tjI1BXo48CmYbUduTV7BdIga8MAO/xbKdcVsGI= -github.com/fjl/gencodec v0.0.0-20220412091415-8bb9e558978c/go.mod h1:AzA8Lj6YtixmJWL+wkKoBGsLWy9gFrAzi4g+5bCKwpY= github.com/fjl/memsize v0.0.0-20180418122429-ca190fb6ffbc/go.mod h1:VvhXpOYNQvB+uIk2RvXzuaQtkQJzzIx6lSBe1xv7hi0= -github.com/fjl/memsize v0.0.0-20190710130421-bcb5799ab5e5/go.mod h1:VvhXpOYNQvB+uIk2RvXzuaQtkQJzzIx6lSBe1xv7hi0= -github.com/flynn/go-shlex v0.0.0-20150515145356-3f9db97f8568/go.mod h1:xEzjJPgXI435gkrCt3MPfRiAkVrwSbHsst4LCFVfpJc= -github.com/fogleman/gg v1.2.1-0.20190220221249-0403632d5b90/go.mod h1:R/bRT+9gY/C5z7JzPU0zXsXHKM4/ayA+zqcVNZzPa1k= -github.com/fogleman/gg v1.3.0/go.mod h1:R/bRT+9gY/C5z7JzPU0zXsXHKM4/ayA+zqcVNZzPa1k= -github.com/form3tech-oss/jwt-go v3.2.2+incompatible/go.mod h1:pbq4aXjuKjdthFRnoDwaVPLA+WlJuPGy+QneDUgJi2k= -github.com/form3tech-oss/jwt-go v3.2.3+incompatible/go.mod h1:pbq4aXjuKjdthFRnoDwaVPLA+WlJuPGy+QneDUgJi2k= -github.com/fortytw2/leaktest v1.2.0/go.mod h1:jDsjWgpAGjm2CA7WthBh/CdZYEPF31XHquHwclZch5g= +github.com/fortytw2/leaktest v1.3.0 h1:u8491cBMTQ8ft8aeV+adlcytMZylmA5nnwwkRZjI8vw= github.com/fortytw2/leaktest v1.3.0/go.mod h1:jDsjWgpAGjm2CA7WthBh/CdZYEPF31XHquHwclZch5g= github.com/franela/goblin v0.0.0-20200105215937-c9ffbefa60db/go.mod h1:7dvUGVsVBjqR7JHJk0brhHOZYGmfBYOrK0ZhYMEtBr4= -github.com/franela/goblin v0.0.0-20210519012713-85d372ac71e2/go.mod h1:VzmDKDJVZI3aJmnRI9VjAn9nJ8qPPsN1fqzr9dqInIo= github.com/franela/goreq v0.0.0-20171204163338-bcd34c9993f8/go.mod h1:ZhphrRTfi2rbfLwlschooIH4+wKKDR4Pdxhh+TRoA20= github.com/frankban/quicktest v1.11.3/go.mod h1:wRf/ReqHper53s+kmmSZizM8NamnL3IM0I9ntUbOk+k= -github.com/frankban/quicktest v1.14.2/go.mod h1:mgiwOwqx65TmIk1wJ6Q7wvnVMocbUorkibMOrVTHZps= -github.com/frankban/quicktest v1.14.3/go.mod h1:mgiwOwqx65TmIk1wJ6Q7wvnVMocbUorkibMOrVTHZps= +github.com/frankban/quicktest v1.14.3 h1:FJKSZTDHjyhriyC81FLQ0LY93eSai0ZyR/ZIkd3ZUKE= github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ= -github.com/fsnotify/fsnotify v1.5.1/go.mod h1:T3375wBYaZdLLcVNkcVbzGHY7f1l/uK5T5Ai1i3InKU= -github.com/fsnotify/fsnotify v1.5.4/go.mod h1:OVB6XrOHzAwXMpEM7uPOzcehqUV2UqJxmVXmkdnm1bU= +github.com/fsnotify/fsnotify v1.6.0 h1:n+5WquG0fcWoWp6xPWfHdbskMCQaFnG6PfBrh1Ky4HY= github.com/fsnotify/fsnotify v1.6.0/go.mod h1:sl3t1tCWJFWoRz9R8WJCbQihKKwmorjAbSClcnxKAGw= -github.com/fullsailor/pkcs7 v0.0.0-20190404230743-d7302db945fa/go.mod h1:KnogPXtdwXqoenmZCw6S+25EAm2MkxbG0deNDu4cbSA= -github.com/fullstorydev/grpcurl v1.6.0/go.mod h1:ZQ+ayqbKMJNhzLmbpCiurTVlaK2M/3nqZCxaQ2Ze/sM= -github.com/fzipp/gocyclo v0.5.1/go.mod h1:rXPyn8fnlpa0R2csP/31uerbiVBugk5whMdlyaLkLoA= -github.com/fzipp/gocyclo v0.6.0/go.mod h1:rXPyn8fnlpa0R2csP/31uerbiVBugk5whMdlyaLkLoA= -github.com/garslo/gogen v0.0.0-20170306192744-1d203ffc1f61/go.mod h1:Q0X6pkwTILDlzrGEckF6HKjXe48EgsY/l7K7vhY4MW8= -github.com/garyburd/redigo v0.0.0-20150301180006-535138d7bcd7/go.mod h1:NR3MbYisc3/PwhQ00EMzDiPmrwpPxAn5GI05/YaO1SY= github.com/gballet/go-libpcsclite v0.0.0-20190607065134-2772fd86a8ff/go.mod h1:x7DCsMOv1taUwEWCzT4cmDeAkigA5/QCwUodaVOe8Ww= -github.com/getkin/kin-openapi v0.53.0/go.mod h1:7Yn5whZr5kJi6t+kShccXS8ae1APpYTW6yheSwk8Yi4= -github.com/getkin/kin-openapi v0.61.0/go.mod h1:7Yn5whZr5kJi6t+kShccXS8ae1APpYTW6yheSwk8Yi4= -github.com/getkin/kin-openapi v0.76.0/go.mod h1:660oXbgy5JFMKreazJaQTw7o+X00qeSyhcnluiMv+Xg= -github.com/getsentry/raven-go v0.2.0/go.mod h1:KungGk8q33+aIAZUIVWZDr2OfAEBsO49PX4NzFV5kcQ= -github.com/ghodss/yaml v0.0.0-20150909031657-73d445a93680/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= +github.com/gin-contrib/sse v0.1.0 h1:Y/yl/+YNO8GZSjAhjMsSuLt29uWRFHdHYUb5lYOV9qE= github.com/gin-contrib/sse v0.1.0/go.mod h1:RHrZQHXnP2xjPF+u1gW/2HnVO7nvIa9PG3Gm+fLHvGI= +github.com/gin-gonic/gin v1.7.0 h1:jGB9xAJQ12AIGNB4HguylppmDK1Am9ppF7XnGXXJuoU= github.com/gin-gonic/gin v1.7.0/go.mod h1:jD2toBW3GZUr5UMcdrwQA10I7RuaFOl/SGeDjXkfUtY= -github.com/gliderlabs/ssh v0.1.1/go.mod h1:U7qILu1NlMHj9FlMhZLlkCdDnU1DBEAqr0aevW3Awn0= -github.com/glycerine/go-unsnap-stream v0.0.0-20180323001048-9f0cb55181dd/go.mod h1:/20jfyN9Y5QPEAprSgKAUr+glWDY39ZiUEAYOEv5dsE= -github.com/glycerine/goconvey v0.0.0-20190410193231-58a59202ab31/go.mod h1:Ogl1Tioa0aV7gstGFO7KhffUsb9M4ydbEbbxpcEDc24= -github.com/go-chi/chi/v5 v5.0.0/go.mod h1:BBug9lr0cqtdAhsu6R4AAdvufI0/XBzAQSsUqJpoZOs= -github.com/go-chi/chi/v5 v5.0.7/go.mod h1:DslCQbL2OYiznFReuXYUmQ2hGd1aDpCnlMNITLSKoi8= -github.com/go-critic/go-critic v0.4.1/go.mod h1:7/14rZGnZbY6E38VEGk2kVhoq6itzc1E68facVDK23g= -github.com/go-critic/go-critic v0.4.3/go.mod h1:j4O3D4RoIwRqlZw5jJpx0BNfXWWbpcJoKu5cYSe4YmQ= -github.com/go-critic/go-critic v0.6.3/go.mod h1:c6b3ZP1MQ7o6lPR7Rv3lEf7pYQUmAcx8ABHgdZCQt/k= -github.com/go-critic/go-critic v0.6.5/go.mod h1:ezfP/Lh7MA6dBNn4c6ab5ALv3sKnZVLx37tr00uuaOY= -github.com/go-fonts/dejavu v0.1.0/go.mod h1:4Wt4I4OU2Nq9asgDCteaAaWZOV24E+0/Pwo0gppep4g= -github.com/go-fonts/latin-modern v0.2.0/go.mod h1:rQVLdDMK+mK1xscDwsqM5J8U2jrRa3T0ecnM9pNujks= -github.com/go-fonts/liberation v0.1.1/go.mod h1:K6qoJYypsmfVjWg8KOVDQhLc8UDgIK2HYqyqAO9z7GY= -github.com/go-fonts/liberation v0.2.0/go.mod h1:K6qoJYypsmfVjWg8KOVDQhLc8UDgIK2HYqyqAO9z7GY= -github.com/go-fonts/stix v0.1.0/go.mod h1:w/c1f0ldAUlJmLBvlbkvVXLAD+tAMqobIIQpmnUIzUY= github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU= github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= -github.com/go-ini/ini v1.25.4/go.mod h1:ByCAeIL28uOIIG0E3PJtZPDL8WnHpFKFOtgjp+3Ies8= github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= github.com/go-kit/kit v0.9.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= github.com/go-kit/kit v0.10.0/go.mod h1:xUsJbQ/Fp4kEt7AFgCuvyX4a71u8h9jB8tj/ORgOZ7o= +github.com/go-kit/kit v0.12.0 h1:e4o3o3IsBfAKQh5Qbbiqyfu97Ku7jrO/JbohvztANh4= github.com/go-kit/kit v0.12.0/go.mod h1:lHd+EkCZPIwYItmGDDRdhinkzX2A1sj+M9biaEaizzs= github.com/go-kit/log v0.1.0/go.mod h1:zbhenjAZHb184qTLMA9ZjW7ThYL0H2mk7Q6pNt4vbaY= -github.com/go-kit/log v0.2.0/go.mod h1:NwTd00d/i8cPZ3xOwwiv2PO5MOcx78fFErGNcVmBjv0= +github.com/go-kit/log v0.2.1 h1:MRVx0/zhvdseW+Gza6N9rVzU/IVzaeE1SFI4raAhmBU= github.com/go-kit/log v0.2.1/go.mod h1:NwTd00d/i8cPZ3xOwwiv2PO5MOcx78fFErGNcVmBjv0= -github.com/go-latex/latex v0.0.0-20210118124228-b3d85cf34e07/go.mod h1:CO1AlKB2CSIqUrmQPqA0gdRIlnLEY0gK5JGjh37zN5U= -github.com/go-latex/latex v0.0.0-20210823091927-c0d11ff05a81/go.mod h1:SX0U8uGpxhq9o2S/CELCSUxEWWAuoCUcVCQWv7G2OCk= -github.com/go-lintpack/lintpack v0.5.2/go.mod h1:NwZuYi2nUHho8XEIZ6SIxihrnPoqBTDqfpXvXAN0sXM= github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE= github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk= github.com/go-logfmt/logfmt v0.5.0/go.mod h1:wCYkCAKZfumFQihp8CzCvQ3paCTfi41vtzG1KdI/P7A= +github.com/go-logfmt/logfmt v0.5.1 h1:otpy5pqBCBZ1ng9RQ0dPu4PN7ba75Y/aA+UpowDyNVA= github.com/go-logfmt/logfmt v0.5.1/go.mod h1:WYhtIu8zTZfxdn5+rREduYbwxfcBr/Vr6KEVveWlfTs= -github.com/go-logr/logr v0.1.0/go.mod h1:ixOQHD9gLJUVQQ2ZOR7zLEifBX6tGkNJF4QyIY7sIas= -github.com/go-logr/logr v0.2.0/go.mod h1:z6/tIYblkpsD+a4lm/fGIIU9mZ+XfAiaFtq7xTgseGU= -github.com/go-logr/logr v0.4.0/go.mod h1:z6/tIYblkpsD+a4lm/fGIIU9mZ+XfAiaFtq7xTgseGU= -github.com/go-logr/logr v1.2.0/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= -github.com/go-logr/logr v1.2.1/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= -github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= -github.com/go-logr/logr v1.2.3/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= -github.com/go-logr/stdr v1.2.0/go.mod h1:YkVgnZu1ZjjL7xTxrfm/LLZBfkhTqSR1ydtm6jTKKwI= -github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE= github.com/go-ole/go-ole v1.2.1/go.mod h1:7FAglXiTm7HKlQRDeOQ6ZNUHidzCWXuZWq/1dTyBNF8= -github.com/go-ole/go-ole v1.2.6/go.mod h1:pprOEPIfldk/42T2oK7lQ4v4JSDwmV0As9GaiUsvbm0= -github.com/go-openapi/jsonpointer v0.0.0-20160704185906-46af16f9f7b1/go.mod h1:+35s3my2LFTysnkMfxsJBAMHj/DoqoB9knIWoYG/Vk0= -github.com/go-openapi/jsonpointer v0.19.2/go.mod h1:3akKfEdA7DF1sugOqz1dVQHBcuDBPKZGEoHC/NkiQRg= -github.com/go-openapi/jsonpointer v0.19.3/go.mod h1:Pl9vOtqEWErmShwVjC8pYs9cog34VGT37dQOVbmoatg= -github.com/go-openapi/jsonpointer v0.19.5/go.mod h1:Pl9vOtqEWErmShwVjC8pYs9cog34VGT37dQOVbmoatg= -github.com/go-openapi/jsonreference v0.0.0-20160704190145-13c6e3589ad9/go.mod h1:W3Z9FmVs9qj+KR4zFKmDPGiLdk1D9Rlm7cyMvf57TTg= -github.com/go-openapi/jsonreference v0.19.2/go.mod h1:jMjeRr2HHw6nAVajTXJ4eiUwohSTlpa0o73RUL1owJc= -github.com/go-openapi/jsonreference v0.19.3/go.mod h1:rjx6GuL8TTa9VaixXglHmQmIL98+wF9xc8zWvFonSJ8= -github.com/go-openapi/jsonreference v0.19.5/go.mod h1:RdybgQwPxbL4UEjuAruzK1x3nE69AqPYEJeo/TWfEeg= -github.com/go-openapi/spec v0.0.0-20160808142527-6aced65f8501/go.mod h1:J8+jY1nAiCcj+friV/PDoE1/3eeccG9LYBs0tYvLOWc= -github.com/go-openapi/spec v0.19.3/go.mod h1:FpwSN1ksY1eteniUU7X0N/BgJ7a4WvBFVA8Lj9mJglo= -github.com/go-openapi/swag v0.0.0-20160704191624-1d0bd113de87/go.mod h1:DXUve3Dpr1UfpPtxFw+EFuQ41HhCWZfha5jSVRG7C7I= -github.com/go-openapi/swag v0.19.2/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk= -github.com/go-openapi/swag v0.19.5/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk= -github.com/go-openapi/swag v0.19.14/go.mod h1:QYRuS/SOXUCsnplDa677K7+DxSOj6IPNl/eQntq43wQ= -github.com/go-pdf/fpdf v0.5.0/go.mod h1:HzcnA+A23uwogo0tp9yU+l3V+KXhiESpt1PMayhOh5M= -github.com/go-pdf/fpdf v0.6.0/go.mod h1:HzcnA+A23uwogo0tp9yU+l3V+KXhiESpt1PMayhOh5M= github.com/go-playground/assert/v2 v2.0.1/go.mod h1:VDjEfimB/XKnb+ZQfWdccd7VUvScMdVu0Titje2rxJ4= +github.com/go-playground/locales v0.13.0 h1:HyWk6mgj5qFqCT5fjGBuRArbVDfE4hi8+e8ceBS/t7Q= github.com/go-playground/locales v0.13.0/go.mod h1:taPMhCMXrRLJO55olJkUXHZBHCxTMfnGwq/HNwmWNS8= +github.com/go-playground/universal-translator v0.17.0 h1:icxd5fm+REJzpZx7ZfpaD876Lmtgy7VtROAbHHXk8no= github.com/go-playground/universal-translator v0.17.0/go.mod h1:UkSxE5sNxxRwHyU+Scu5vgOQjsIJAF8j9muTVoKLVtA= +github.com/go-playground/validator/v10 v10.4.1 h1:pH2c5ADXtd66mxoE0Zm9SUhxE20r7aM3F26W0hOn+GE= github.com/go-playground/validator/v10 v10.4.1/go.mod h1:nlOn6nFhuKACm19sB/8EGNn9GlaMV7XkbRSipzJ0Ii4= -github.com/go-redis/redis v6.15.8+incompatible/go.mod h1:NAIEuMOZ/fxfXJIrKDQDz8wamY7mA7PouImQ2Jvg6kA= github.com/go-sourcemap/sourcemap v2.1.2+incompatible/go.mod h1:F8jJfvm2KbVjc5NqelyYJmf/v5J0dwNLS2mL4sNA1Jg= -github.com/go-sourcemap/sourcemap v2.1.3+incompatible/go.mod h1:F8jJfvm2KbVjc5NqelyYJmf/v5J0dwNLS2mL4sNA1Jg= github.com/go-sql-driver/mysql v1.4.0/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w= -github.com/go-sql-driver/mysql v1.4.1/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w= -github.com/go-sql-driver/mysql v1.5.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg= -github.com/go-sql-driver/mysql v1.6.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg= github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= github.com/go-task/slim-sprig v0.0.0-20210107165309-348f09dbbbc0/go.mod h1:fyg7847qk6SyHyPtNmDHnmrv/HOrqktSC+C9fM+CJOE= -github.com/go-toolsmith/astcast v1.0.0/go.mod h1:mt2OdQTeAQcY4DQgPSArJjHCcOwlX+Wl/kwN+LbLGQ4= -github.com/go-toolsmith/astcopy v1.0.0/go.mod h1:vrgyG+5Bxrnz4MZWPF+pI4R8h3qKRjjyvV/DSez4WVQ= -github.com/go-toolsmith/astcopy v1.0.2/go.mod h1:4TcEdbElGc9twQEYpVo/aieIXfHhiuLh4aLAck6dO7Y= -github.com/go-toolsmith/astequal v0.0.0-20180903214952-dcb477bfacd6/go.mod h1:H+xSiq0+LtiDC11+h1G32h7Of5O3CYFJ99GVbS5lDKY= -github.com/go-toolsmith/astequal v1.0.0/go.mod h1:H+xSiq0+LtiDC11+h1G32h7Of5O3CYFJ99GVbS5lDKY= -github.com/go-toolsmith/astequal v1.0.1/go.mod h1:4oGA3EZXTVItV/ipGiOx7NWkY5veFfcsOJVS2YxltLw= -github.com/go-toolsmith/astequal v1.0.2/go.mod h1:9Ai4UglvtR+4up+bAD4+hCj7iTo4m/OXVTSLnCyTAx4= -github.com/go-toolsmith/astequal v1.0.3/go.mod h1:9Ai4UglvtR+4up+bAD4+hCj7iTo4m/OXVTSLnCyTAx4= -github.com/go-toolsmith/astfmt v0.0.0-20180903215011-8f8ee99c3086/go.mod h1:mP93XdblcopXwlyN4X4uodxXQhldPGZbcEJIimQHrkg= -github.com/go-toolsmith/astfmt v1.0.0/go.mod h1:cnWmsOAuq4jJY6Ct5YWlVLmcmLMn1JUPuQIHCY7CJDw= -github.com/go-toolsmith/astinfo v0.0.0-20180906194353-9809ff7efb21/go.mod h1:dDStQCHtmZpYOmjRP/8gHHnCCch3Zz3oEgCdZVdtweU= -github.com/go-toolsmith/astp v0.0.0-20180903215135-0af7e3c24f30/go.mod h1:SV2ur98SGypH1UjcPpCatrV5hPazG6+IfNHbkDXBRrk= -github.com/go-toolsmith/astp v1.0.0/go.mod h1:RSyrtpVlfTFGDYRbrjyWP1pYu//tSFcvdYrA8meBmLI= -github.com/go-toolsmith/pkgload v0.0.0-20181119091011-e9e65178eee8/go.mod h1:WoMrjiy4zvdS+Bg6z9jZH82QXwkcgCBX6nOfnmdaHks= -github.com/go-toolsmith/pkgload v1.0.0/go.mod h1:5eFArkbO80v7Z0kdngIxsRXRMTaX4Ilcwuh3clNrQJc= -github.com/go-toolsmith/pkgload v1.0.2-0.20220101231613-e814995d17c5/go.mod h1:3NAwwmD4uY/yggRxoEjk/S00MIV3A+H7rrE3i87eYxM= -github.com/go-toolsmith/strparse v1.0.0/go.mod h1:YI2nUKP9YGZnL/L1/DLFBfixrcjslWct4wyljWhSRy8= -github.com/go-toolsmith/typep v1.0.0/go.mod h1:JSQCQMUPdRlMZFswiq3TGpNp1GMktqkR2Ns5AIQkATU= -github.com/go-toolsmith/typep v1.0.2/go.mod h1:JSQCQMUPdRlMZFswiq3TGpNp1GMktqkR2Ns5AIQkATU= -github.com/go-xmlfmt/xmlfmt v0.0.0-20191208150333-d5b6f63a941b/go.mod h1:aUCEOzzezBEjDBbFBoSiya/gduyIiWYRP6CnSFIV8AM= -github.com/go-zookeeper/zk v1.0.2/go.mod h1:nOB03cncLtlp4t+UAkGSV+9beXP/akpekBwL+UX1Qcw= -github.com/gobwas/glob v0.2.3/go.mod h1:d3Ez4x06l9bZtSvzIay5+Yzi0fmZzPgnTbPcKjJAkT8= +github.com/gobwas/httphead v0.0.0-20180130184737-2c6c146eadee h1:s+21KNqlpePfkah2I+gwHF8xmJWRjooY+5248k6m4A0= github.com/gobwas/httphead v0.0.0-20180130184737-2c6c146eadee/go.mod h1:L0fX3K22YWvt/FAX9NnzrNzcI4wNYi9Yku4O0LKYflo= +github.com/gobwas/pool v0.2.0 h1:QEmUOlnSjWtnpRGHF3SauEiOsy82Cup83Vf2LcMlnc8= github.com/gobwas/pool v0.2.0/go.mod h1:q8bcK0KcYlCgd9e7WYLm9LpyS+YeLd8JVDW6WezmKEw= +github.com/gobwas/ws v1.0.2 h1:CoAavW/wd/kulfZmSIBt6p24n4j7tHgNVCjsfHVNUbo= github.com/gobwas/ws v1.0.2/go.mod h1:szmBTxLgaFppYjEmNtny/v3w89xOydFnnZMcgRRu/EM= -github.com/godbus/dbus v0.0.0-20151105175453-c7fdd8b5cd55/go.mod h1:/YcGZj5zSblfDWMMoOzV4fas9FZnQYTkDnsGvmh2Grw= -github.com/godbus/dbus v0.0.0-20180201030542-885f9cc04c9c/go.mod h1:/YcGZj5zSblfDWMMoOzV4fas9FZnQYTkDnsGvmh2Grw= -github.com/godbus/dbus v0.0.0-20190422162347-ade71ed3457e/go.mod h1:bBOAhwG1umN6/6ZUMtDFBMQR8jRg9O75tm9K00oMsK4= +github.com/godbus/dbus v0.0.0-20190726142602-4481cbc300e2 h1:ZpnhV/YsD2/4cESfV5+Hoeu/iUR3ruzNvZ+yQfO03a0= github.com/godbus/dbus v0.0.0-20190726142602-4481cbc300e2/go.mod h1:bBOAhwG1umN6/6ZUMtDFBMQR8jRg9O75tm9K00oMsK4= -github.com/godbus/dbus/v5 v5.0.3/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= -github.com/godbus/dbus/v5 v5.0.6/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= -github.com/gofrs/flock v0.0.0-20190320160742-5135e617513b/go.mod h1:F1TvTiK9OcQqauNUHlbJvyl9Qa1QvF/gOUDKA14jxHU= -github.com/gofrs/flock v0.7.3/go.mod h1:F1TvTiK9OcQqauNUHlbJvyl9Qa1QvF/gOUDKA14jxHU= -github.com/gofrs/flock v0.8.1/go.mod h1:F1TvTiK9OcQqauNUHlbJvyl9Qa1QvF/gOUDKA14jxHU= -github.com/gofrs/uuid v3.3.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM= -github.com/gofrs/uuid v4.2.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM= -github.com/gofrs/uuid v4.3.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM= +github.com/gogo/gateway v1.1.0 h1:u0SuhL9+Il+UbjM9VIE3ntfRujKbvVpFvNB4HbjeVQ0= github.com/gogo/gateway v1.1.0/go.mod h1:S7rR8FRQyG3QFESeSv4l2WnsyzlCLG0CzBbUUo/mbic= -github.com/gogo/googleapis v1.2.0/go.mod h1:Njal3psf3qN6dwBtQfUmBZh2ybovJ0tlu3o/AC7HYjU= -github.com/gogo/googleapis v1.3.2/go.mod h1:5YRNX2z1oM5gXdAkurHa942MDgEJyk02w4OecKY87+c= -github.com/gogo/googleapis v1.4.0/go.mod h1:5YRNX2z1oM5gXdAkurHa942MDgEJyk02w4OecKY87+c= -github.com/gogo/googleapis v1.4.1/go.mod h1:2lpHqI5OcWCtVElxXnPt+s8oJvMpySlOyM6xDCrzib4= -github.com/golang-jwt/jwt/v4 v4.0.0/go.mod h1:/xlHOz8bRuivTWchD4jCa+NbatV+wEUSzwAxVc6locg= -github.com/golang-jwt/jwt/v4 v4.1.0/go.mod h1:/xlHOz8bRuivTWchD4jCa+NbatV+wEUSzwAxVc6locg= -github.com/golang-jwt/jwt/v4 v4.3.0/go.mod h1:/xlHOz8bRuivTWchD4jCa+NbatV+wEUSzwAxVc6locg= -github.com/golang-sql/civil v0.0.0-20190719163853-cb61b32ac6fe/go.mod h1:8vg3r2VgvsThLBIFL93Qb5yWzgyZWhEmBwUJWevAkK0= -github.com/golang-sql/sqlexp v0.0.0-20170517235910-f1bb20e5a188/go.mod h1:vXjM/+wXQnTPR4KqTKDgJukSZ6amVRtWMPEjE6sQoK8= -github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0/go.mod h1:E/TSTwGwJL78qG/PmXZO1EjYhfJinVAhrmmHX6Z8B9k= -github.com/golang/geo v0.0.0-20190916061304-5b978397cfec/go.mod h1:QZ0nwyI2jOfgRAoBvP+ab5aRr7c9x7lhGEJrKvBwjWI= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= +github.com/golang/glog v1.0.0 h1:nfP3RFugxnNRyKgeWd4oI1nYvXpxrx8ck8ZrcizshdQ= github.com/golang/glog v1.0.0/go.mod h1:EWib/APOK0SL3dFbYqvxE3UYd8E6s1ouQ7iEp/0LWV4= github.com/golang/groupcache v0.0.0-20160516000752-02826c3e7903/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20190129154638-5b532d6fd5ef/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20191227052852-215e87163ea7/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= -github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/mock v1.2.0/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= github.com/golang/mock v1.3.1/go.mod h1:sBzyDLLjw3U8JLTeZvSv8jJB+tU5PVekmnlKIyFUx0Y= github.com/golang/mock v1.4.0/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= @@ -1041,9 +351,8 @@ github.com/golang/mock v1.4.1/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt github.com/golang/mock v1.4.3/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= github.com/golang/mock v1.4.4/go.mod h1:l3mdAwkq5BuhzHwde/uurv3sEJeZMXNpwsxVWU71h+4= github.com/golang/mock v1.5.0/go.mod h1:CWnOUgYIOo4TcNZ0wHX3YZCqsaM1I1Jvs6v3mP3KVu8= +github.com/golang/mock v1.6.0 h1:ErTB+efbowRARo13NNdxyJji2egdxLGQhRaY+DUumQc= github.com/golang/mock v1.6.0/go.mod h1:p6yTPP+5HYm5mzsMV8JkE6ZKdX+/wYM6Hr+LicevLPs= -github.com/golang/protobuf v0.0.0-20161109072736-4bd1920723d7/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/golang/protobuf v1.1.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.3.0/go.mod h1:Qd/q+1AKNOZr9uGQzbzCmRO6sUih6GTPZv6a1/R87v0= github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= @@ -1061,47 +370,18 @@ github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= github.com/golang/protobuf v1.5.1/go.mod h1:DopwsBzvsk0Fs44TXzsVbJyPhcCPeIwnvohx4u74HPM= +github.com/golang/protobuf v1.5.2 h1:ROPKBNFfQgOUMifHyP+KYbvpjbdoFNs+aK7DXlji0Tw= github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= github.com/golang/snappy v0.0.0-20180518054509-2e65f85255db/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/golang/snappy v0.0.1/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/golang/snappy v0.0.3-0.20201103224600-674baa8c7fc3/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/golang/snappy v0.0.3/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= +github.com/golang/snappy v0.0.4 h1:yAGX7huGHXlcLOEtBnF4w7FQwA26wojNCwOYAEhLjQM= github.com/golang/snappy v0.0.4/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= -github.com/golangci/check v0.0.0-20180506172741-cfe4005ccda2/go.mod h1:k9Qvh+8juN+UKMCS/3jFtGICgW8O96FVaZsaxdzDkR4= -github.com/golangci/dupl v0.0.0-20180902072040-3e9179ac440a/go.mod h1:ryS0uhF+x9jgbj/N71xsEqODy9BN81/GonCZiOzirOk= -github.com/golangci/errcheck v0.0.0-20181223084120-ef45e06d44b6/go.mod h1:DbHgvLiFKX1Sh2T1w8Q/h4NAI8MHIpzCdnBUDTXU3I0= -github.com/golangci/go-misc v0.0.0-20180628070357-927a3d87b613/go.mod h1:SyvUF2NxV+sN8upjjeVYr5W7tyxaT1JVtvhKhOn2ii8= -github.com/golangci/go-misc v0.0.0-20220329215616-d24fe342adfe/go.mod h1:gjqyPShc/m8pEMpk0a3SeagVb0kaqvhscv+i9jI5ZhQ= -github.com/golangci/goconst v0.0.0-20180610141641-041c5f2b40f3/go.mod h1:JXrF4TWy4tXYn62/9x8Wm/K/dm06p8tCKwFRDPZG/1o= -github.com/golangci/gocyclo v0.0.0-20180528134321-2becd97e67ee/go.mod h1:ozx7R9SIwqmqf5pRP90DhR2Oay2UIjGuKheCBCNwAYU= -github.com/golangci/gocyclo v0.0.0-20180528144436-0a533e8fa43d/go.mod h1:ozx7R9SIwqmqf5pRP90DhR2Oay2UIjGuKheCBCNwAYU= -github.com/golangci/gofmt v0.0.0-20190930125516-244bba706f1a/go.mod h1:9qCChq59u/eW8im404Q2WWTrnBUQKjpNYKMbU4M7EFU= -github.com/golangci/gofmt v0.0.0-20220901101216-f2edd75033f2/go.mod h1:9wOXstvyDRshQ9LggQuzBCGysxs3b6Uo/1MvYCR2NMs= -github.com/golangci/golangci-lint v1.23.7/go.mod h1:g/38bxfhp4rI7zeWSxcdIeHTQGS58TCak8FYcyCmavQ= -github.com/golangci/golangci-lint v1.27.0/go.mod h1:+eZALfxIuthdrHPtfM7w/R3POJLjHDfJJw8XZl9xOng= -github.com/golangci/golangci-lint v1.46.2/go.mod h1:3DkdHnxn9eoTTrpT2gB0TEv8KSziuoqe9FitgQLHvAY= -github.com/golangci/golangci-lint v1.50.1/go.mod h1:AQjHBopYS//oB8xs0y0M/dtxdKHkdhl0RvmjUct0/4w= -github.com/golangci/ineffassign v0.0.0-20190609212857-42439a7714cc/go.mod h1:e5tpTHCfVze+7EpLEozzMB3eafxo2KT5veNg1k6byQU= -github.com/golangci/lint-1 v0.0.0-20181222135242-d2cdd8c08219/go.mod h1:/X8TswGSh1pIozq4ZwCfxS0WA5JGXguxk94ar/4c87Y= -github.com/golangci/lint-1 v0.0.0-20191013205115-297bf364a8e0/go.mod h1:66R6K6P6VWk9I95jvqGxkqJxVWGFy9XlDwLwVz1RCFg= -github.com/golangci/maligned v0.0.0-20180506175553-b1d89398deca/go.mod h1:tvlJhZqDe4LMs4ZHD0oMUlt9G2LWuDGoisJTBzLMV9o= -github.com/golangci/misspell v0.0.0-20180809174111-950f5d19e770/go.mod h1:dEbvlSfYbMQDtrpRMQU675gSDLDNa8sCPPChZ7PhiVA= -github.com/golangci/misspell v0.3.5/go.mod h1:dEbvlSfYbMQDtrpRMQU675gSDLDNa8sCPPChZ7PhiVA= -github.com/golangci/prealloc v0.0.0-20180630174525-215b22d4de21/go.mod h1:tf5+bzsHdTM0bsB7+8mt0GUMvjCgwLpTapNZHU8AajI= -github.com/golangci/revgrep v0.0.0-20180526074752-d9c87f5ffaf0/go.mod h1:qOQCunEYvmd/TLamH+7LlVccLvUH5kZNhbCgTHoBbp4= -github.com/golangci/revgrep v0.0.0-20180812185044-276a5c0a1039/go.mod h1:qOQCunEYvmd/TLamH+7LlVccLvUH5kZNhbCgTHoBbp4= -github.com/golangci/revgrep v0.0.0-20210930125155-c22e5001d4f2/go.mod h1:LK+zW4MpyytAWQRz0M4xnzEk50lSvqDQKfx304apFkY= -github.com/golangci/revgrep v0.0.0-20220804021717-745bb2f7c2e6/go.mod h1:0AKcRCkMoKvUvlf89F6O7H2LYdhr1zBh736mBItOdRs= -github.com/golangci/unconvert v0.0.0-20180507085042-28b1c447d1f4/go.mod h1:Izgrg8RkN3rCIMLGE9CyYmU9pY2Jer6DgANEnZ/L/cQ= -github.com/google/btree v0.0.0-20180124185431-e89373fe6b4a/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= -github.com/google/btree v1.0.1/go.mod h1:xXMiIv4Fb/0kKde4SpL7qlzvu5cMJDRkFDxJfI9uaxA= +github.com/google/btree v1.1.2 h1:xf4v41cLI2Z6FxbKm+8Bu+m8ifhj15JuZ9sa0jZCMUU= github.com/google/btree v1.1.2/go.mod h1:qOPhT0dTNdNzV6Z/lhRX0YXUafgPLFUh+gZMl761Gm4= -github.com/google/certificate-transparency-go v1.0.21/go.mod h1:QeJfpSbVSfYc7RgB3gJFj9cbuQMMchQxrWXz8Ruopmg= -github.com/google/certificate-transparency-go v1.1.1/go.mod h1:FDKqPvSXawb2ecErVRrD+nfy23RCzyl7eqVCEmlT1Zs= -github.com/google/crfs v0.0.0-20191108021818-71d77da419c9/go.mod h1:etGhoOqfwPkooV6aqoX3eBGQOJblqdoc9XvWOeuxpPw= -github.com/google/flatbuffers v1.11.0/go.mod h1:1AeVuKshWv4vARoZatz6mlQ0JxURH0Kv5+zNeJKJCa8= github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= @@ -1113,29 +393,16 @@ github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/ github.com/google/go-cmp v0.5.3/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.6/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.7/go.mod h1:n+brtR0CgQNWTVd5ZUFpTBC8YFBDLK/h/bpaJ8/DtOE= -github.com/google/go-cmp v0.5.8/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= -github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= -github.com/google/go-containerregistry v0.0.0-20191010200024-a3d713f9b7f8/go.mod h1:KyKXa9ciM8+lgMXwOVsXi7UxGrsf9mM61Mzs+xKUrKE= -github.com/google/go-containerregistry v0.1.2/go.mod h1:GPivBPgdAyd2SU+vf6EpsgOtWDuPqjW0hJZt4rNdTZ4= -github.com/google/go-containerregistry v0.5.1/go.mod h1:Ct15B4yir3PLOP5jsy0GNeYVaIZs/MK/Jz5any1wFW0= -github.com/google/go-github v17.0.0+incompatible/go.mod h1:zLgOLi98H3fifZn+44m+umXrS52loVEgC2AApnigrVQ= -github.com/google/go-github/v28 v28.1.1/go.mod h1:bsqJWQX05omyWVmc00nEUql9mhQyv38lDZ8kPZcQVoM= -github.com/google/go-querystring v1.0.0/go.mod h1:odCYkC5MyYFN7vkCjXpyrEuKhc/BUO6wN/zVPAxq5ck= -github.com/google/go-replayers/grpcreplay v0.1.0/go.mod h1:8Ig2Idjpr6gifRd6pNVggX6TC1Zw6Jx74AKp7QNH2QE= -github.com/google/go-replayers/httpreplay v0.1.0/go.mod h1:YKZViNhiGgqdBlUbI2MwGpq4pXxNmhJLPHQ7cv2b5no= -github.com/google/gofuzz v0.0.0-20161122191042-44d81051d367/go.mod h1:HP5RmnzzSNb993RKQDq4+1A4ia9nllfqcQFTQJedwGI= +github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38= github.com/google/gofuzz v0.0.0-20170612174753-24818f796faf/go.mod h1:HP5RmnzzSNb993RKQDq4+1A4ia9nllfqcQFTQJedwGI= github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= -github.com/google/gofuzz v1.1.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= github.com/google/gofuzz v1.1.1-0.20200604201612-c04b05f3adfa/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= +github.com/google/gofuzz v1.2.0 h1:xRy4A+RhZaiKjJ1bPfwQ8sedCA+YS2YcCHW6ec7JMi0= github.com/google/gofuzz v1.2.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs= -github.com/google/martian v2.1.1-0.20190517191504-25dcb96d9e51+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs= github.com/google/martian/v3 v3.0.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= github.com/google/martian/v3 v3.1.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= -github.com/google/martian/v3 v3.2.1/go.mod h1:oBOf6HBosgwRXnUGWUB05QECsc6uvmMiJ3+6W4l/CUk= +github.com/google/orderedcode v0.0.1 h1:UzfcAexk9Vhv8+9pNOgRu41f16lHq725vPwnSeiG/Us= github.com/google/orderedcode v0.0.1/go.mod h1:iVyU4/qPKHY5h/wSd6rZZCDcLJNxiWO6dvsYES2Sb20= github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= github.com/google/pprof v0.0.0-20190515194954-54271f7e092f/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= @@ -1143,758 +410,349 @@ github.com/google/pprof v0.0.0-20191218002539-d4f498aebedc/go.mod h1:ZgVRPoUq/hf github.com/google/pprof v0.0.0-20200212024743-f11f1df84d12/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= github.com/google/pprof v0.0.0-20200229191704-1ebb73c60ed3/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= github.com/google/pprof v0.0.0-20200430221834-fc25d7d30c6d/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= -github.com/google/pprof v0.0.0-20200507031123-427632fa3b1c/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= github.com/google/pprof v0.0.0-20200708004538-1a94d8640e99/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= github.com/google/pprof v0.0.0-20201023163331-3e6fc7fc9c4c/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/pprof v0.0.0-20201203190320-1bf35d6f28c2/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/pprof v0.0.0-20201218002935-b9804c9f04c2/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/pprof v0.0.0-20210122040257-d980be63207e/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/pprof v0.0.0-20210226084205-cbba55b83ad5/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= -github.com/google/pprof v0.0.0-20210407192527-94a9f03dee38/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= -github.com/google/pprof v0.0.0-20210601050228-01bbb1931b22/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= -github.com/google/pprof v0.0.0-20210609004039-a478d1d731e9/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= -github.com/google/pprof v0.0.0-20210720184732-4bb14d4b1be1/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= -github.com/google/rpmpack v0.0.0-20191226140753-aa36bfddb3a0/go.mod h1:RaTPr0KUf2K7fnZYLNDrr8rxAamWs3iNywJLtQ2AzBg= -github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510/go.mod h1:pupxD2MaaD3pAXIBCelhxNneeOaAeabZDe5s4K6zSpQ= -github.com/google/subcommands v1.0.1/go.mod h1:ZjhPrFU+Olkh9WazFPsl27BQ4UPiG37m3yTrtFlrHVk= -github.com/google/trillian v1.3.11/go.mod h1:0tPraVHrSDkA3BO6vKX67zgLXs6SsOAbHEivX+9mPgw= -github.com/google/uuid v0.0.0-20161128191214-064e2069ce9c/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.0.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/google/uuid v1.2.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/google/wire v0.3.0/go.mod h1:i1DMg/Lu8Sz5yYl25iOdmc5CT5qusaa+zmRWs16741s= -github.com/google/wire v0.4.0/go.mod h1:ngWDr9Qvq3yZA10YrxfyGELY/AFWGVpy9c1LTRi1EoU= -github.com/googleapis/enterprise-certificate-proxy v0.0.0-20220520183353-fd19c99a87aa/go.mod h1:17drOmN3MwGY7t0e+Ei9b45FFGA3fBs3x36SsCg1hq8= -github.com/googleapis/enterprise-certificate-proxy v0.1.0/go.mod h1:17drOmN3MwGY7t0e+Ei9b45FFGA3fBs3x36SsCg1hq8= -github.com/googleapis/enterprise-certificate-proxy v0.2.0/go.mod h1:8C0jb7/mgJe/9KK8Lm7X9ctZC2t60YyIpYEI16jx0Qg= -github.com/googleapis/gax-go v2.0.0+incompatible/go.mod h1:SFVmujtThgffbyetf+mdk2eWhX2bMyUtNHzFKcPA9HY= -github.com/googleapis/gax-go v2.0.2+incompatible/go.mod h1:SFVmujtThgffbyetf+mdk2eWhX2bMyUtNHzFKcPA9HY= github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg= github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk= -github.com/googleapis/gax-go/v2 v2.1.0/go.mod h1:Q3nei7sK6ybPYH7twZdmQpAd1MKb7pfu6SK+H1/DsU0= -github.com/googleapis/gax-go/v2 v2.1.1/go.mod h1:hddJymUZASv3XPyGkUpKj8pPO47Rmb0eJc8R6ouapiM= -github.com/googleapis/gax-go/v2 v2.2.0/go.mod h1:as02EH8zWkzwUoLbBaFeQ+arQaj/OthfcblKl4IGNaM= -github.com/googleapis/gax-go/v2 v2.3.0/go.mod h1:b8LNqSzNabLiUpXKkY7HAR5jr6bIT99EXz9pXxye9YM= -github.com/googleapis/gax-go/v2 v2.4.0/go.mod h1:XOTVJ59hdnfJLIP/dh8n5CGryZR2LxK9wbMD5+iXC6c= -github.com/googleapis/gax-go/v2 v2.5.1/go.mod h1:h6B0KMMFNtI2ddbGJn3T3ZbwkeT6yqEF02fYlzkUCyo= -github.com/googleapis/gax-go/v2 v2.6.0/go.mod h1:1mjbznJAPHFpesgE5ucqfYEscaz5kMdcIDwU/6+DDoY= -github.com/googleapis/gnostic v0.0.0-20170729233727-0c5108395e2d/go.mod h1:sJBsCZ4ayReDTBIg8b9dl28c5xFWyhBTVRp3pOg5EKY= -github.com/googleapis/gnostic v0.2.2/go.mod h1:sJBsCZ4ayReDTBIg8b9dl28c5xFWyhBTVRp3pOg5EKY= -github.com/googleapis/gnostic v0.4.1/go.mod h1:LRhVm6pbyptWbWbuZ38d1eyptfvIytN3ir6b65WBswg= -github.com/googleapis/gnostic v0.5.1/go.mod h1:6U4PtQXGIEt/Z3h5MAT7FNofLnw9vXk2cUuW7uA/OeU= -github.com/googleapis/gnostic v0.5.5/go.mod h1:7+EbHbldMins07ALC74bsA81Ovc97DwqyJO1AENw9kA= -github.com/googleapis/go-type-adapters v1.0.0/go.mod h1:zHW75FOG2aur7gAO2B+MLby+cLsWGBF62rFAi7WjWO4= github.com/googleapis/google-cloud-go-testing v0.0.0-20200911160855-bcd43fbb19e8/go.mod h1:dvDLG8qkwmyD9a/MJJN3XJcT3xFxOKAvTZGvuZmac9g= -github.com/gookit/color v1.2.4/go.mod h1:AhIE+pS6D4Ql0SQWbBeXPHw7gY0/sjHoA4s/n1KB7xg= -github.com/gookit/color v1.5.0/go.mod h1:43aQb+Zerm/BWh2GnrgOQm7ffz7tvQXEKV6BFMl7wAo= -github.com/gookit/color v1.5.1/go.mod h1:wZFzea4X8qN6vHOSP2apMb4/+w/orMznEzYsIHPaqKM= -github.com/gophercloud/gophercloud v0.1.0/go.mod h1:vxM41WHh5uqHVBMZHzuwNOHh8XEoIEcSTewFxm1c5g8= github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= github.com/gordonklaus/ineffassign v0.0.0-20200309095847-7953dde2c7bf/go.mod h1:cuNKsD1zp2v6XfE/orVX2QE1LC+i254ceGcVeDT3pTU= -github.com/gordonklaus/ineffassign v0.0.0-20210914165742-4cc7213b9bc8/go.mod h1:Qcp2HIAYhR7mNUVSIxZww3Guk4it82ghYcEXIAk+QT0= -github.com/goreleaser/goreleaser v0.136.0/go.mod h1:wiKrPUeSNh6Wu8nUHxZydSOVQ/OZvOaO7DTtFqie904= -github.com/goreleaser/nfpm v1.2.1/go.mod h1:TtWrABZozuLOttX2uDlYyECfQX7x5XYkVxhjYcR6G9w= -github.com/goreleaser/nfpm v1.3.0/go.mod h1:w0p7Kc9TAUgWMyrub63ex3M2Mgw88M4GZXoTq5UCb40= -github.com/gorhill/cronexpr v0.0.0-20180427100037-88b0669f7d75/go.mod h1:g2644b03hfBX9Ov0ZBDgXXens4rxSxmqFBbhvKv2yVA= github.com/gorilla/context v1.1.1/go.mod h1:kBGZzfjB9CEq2AlWe17Uuf7NDRt0dE0s8S51q0aT7Yg= -github.com/gorilla/handlers v0.0.0-20150720190736-60c7bfde3e33/go.mod h1:Qkdc/uu4tH4g6mTK6auzZ766c4CA0Ng8+o/OAirnOIQ= +github.com/gorilla/handlers v1.5.1 h1:9lRY6j8DEeeBT10CvO9hGW0gmky0BprnvDI5vfhUHH4= github.com/gorilla/handlers v1.5.1/go.mod h1:t8XrUpc4KVXb7HGyJ4/cEnwQiaxrX/hz1Zv/4g96P1Q= github.com/gorilla/mux v1.6.2/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs= -github.com/gorilla/mux v1.7.2/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs= github.com/gorilla/mux v1.7.3/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs= +github.com/gorilla/mux v1.8.0 h1:i40aqfkR1h2SlN9hojwV5ZA91wcXFOvkdNIeFDP5koI= github.com/gorilla/mux v1.8.0/go.mod h1:DVbg23sWSpFRCP0SfiEN6jmj59UnW/n46BH5rLB71So= github.com/gorilla/websocket v0.0.0-20170926233335-4201258b820c/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ= -github.com/gorilla/websocket v1.4.0/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ= github.com/gorilla/websocket v1.4.1-0.20190629185528-ae1634f6a989/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ= github.com/gorilla/websocket v1.4.1/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= +github.com/gorilla/websocket v1.5.0 h1:PPwGk2jz7EePpoHN/+ClbZu8SPxiqlu12wZP/3sWmnc= github.com/gorilla/websocket v1.5.0/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= -github.com/gostaticanalysis/analysisutil v0.0.0-20190318220348-4088753ea4d3/go.mod h1:eEOZF4jCKGi+aprrirO9e7WKB3beBRtWgqGunKl6pKE= -github.com/gostaticanalysis/analysisutil v0.0.3/go.mod h1:eEOZF4jCKGi+aprrirO9e7WKB3beBRtWgqGunKl6pKE= -github.com/gostaticanalysis/analysisutil v0.1.0/go.mod h1:dMhHRU9KTiDcuLGdy87/2gTR8WruwYZrKdRq9m1O6uw= -github.com/gostaticanalysis/analysisutil v0.4.1/go.mod h1:18U/DLpRgIUd459wGxVHE0fRgmo1UgHDcbw7F5idXu0= -github.com/gostaticanalysis/analysisutil v0.7.1/go.mod h1:v21E3hY37WKMGSnbsw2S/ojApNWb6C1//mXO48CXbVc= -github.com/gostaticanalysis/comment v1.3.0/go.mod h1:xMicKDx7XRXYdVwY9f9wQpDJVnqWxw9wCauCMKp+IBI= -github.com/gostaticanalysis/comment v1.4.1/go.mod h1:ih6ZxzTHLdadaiSnF5WY3dxUoXfXAlTaRzuaNDlSado= -github.com/gostaticanalysis/comment v1.4.2/go.mod h1:KLUTGDv6HOCotCH8h2erHKmpci2ZoR8VPu34YA2uzdM= -github.com/gostaticanalysis/forcetypeassert v0.1.0/go.mod h1:qZEedyP/sY1lTGV1uJ3VhWZ2mqag3IkWsDHVbplHXak= -github.com/gostaticanalysis/nilerr v0.1.1/go.mod h1:wZYb6YI5YAxxq0i1+VJbY0s2YONW0HU0GPE3+5PWN4A= -github.com/gostaticanalysis/testutil v0.3.1-0.20210208050101-bfb5c8eec0e4/go.mod h1:D+FIZ+7OahH3ePw/izIEeH5I06eKs1IKI4Xr64/Am3M= -github.com/gostaticanalysis/testutil v0.4.0/go.mod h1:bLIoPefWXrRi/ssLFWX1dx7Repi5x3CuviD3dgAZaBU= github.com/gotestyourself/gotestyourself v2.2.0+incompatible/go.mod h1:zZKM6oeNM8k+FRljX1mnzVYeS8wiGgQyvST1/GafPbY= github.com/graph-gophers/graphql-go v0.0.0-20191115155744-f33e81362277/go.mod h1:9CQHMSxwO4MprSdzoIEobiHpoLtHm77vfxsvsIN5Vuc= -github.com/graph-gophers/graphql-go v1.3.0/go.mod h1:9CQHMSxwO4MprSdzoIEobiHpoLtHm77vfxsvsIN5Vuc= -github.com/gregjones/httpcache v0.0.0-20180305231024-9cad4c3443a7/go.mod h1:FecbI9+v66THATjSRHfNgh1IVFe/9kFxbXtjV0ctIMA= -github.com/gregjones/httpcache v0.0.0-20190611155906-901d90724c79/go.mod h1:FecbI9+v66THATjSRHfNgh1IVFe/9kFxbXtjV0ctIMA= github.com/grpc-ecosystem/go-grpc-middleware v1.0.0/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs= github.com/grpc-ecosystem/go-grpc-middleware v1.0.1-0.20190118093823-f849b5445de4/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs= -github.com/grpc-ecosystem/go-grpc-middleware v1.2.0/go.mod h1:mJzapYve32yjrKlk9GbyCZHuPgZsrbyIbyKhSzOpg6s= github.com/grpc-ecosystem/go-grpc-middleware v1.2.2/go.mod h1:EaizFBKfUKtMIF5iaDEhniwNedqGo9FuLFzppDr3uwI= +github.com/grpc-ecosystem/go-grpc-middleware v1.3.0 h1:+9834+KizmvFV7pXQGSXQTsaWhq2GjuNUt0aUU0YBYw= github.com/grpc-ecosystem/go-grpc-middleware v1.3.0/go.mod h1:z0ButlSOZa5vEBq9m2m2hlwIgKw+rp3sdCBRoJY+30Y= github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgfV/d3M/q6VIi02HzZEHgUlZvzk= -github.com/grpc-ecosystem/grpc-gateway v1.5.0/go.mod h1:RSKVYQBd5MCa4OVpNdGskqpgL2+G+NZTnrVHpWWfpdw= -github.com/grpc-ecosystem/grpc-gateway v1.6.2/go.mod h1:RSKVYQBd5MCa4OVpNdGskqpgL2+G+NZTnrVHpWWfpdw= github.com/grpc-ecosystem/grpc-gateway v1.8.5/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= github.com/grpc-ecosystem/grpc-gateway v1.9.0/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= -github.com/grpc-ecosystem/grpc-gateway v1.9.2/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= github.com/grpc-ecosystem/grpc-gateway v1.9.5/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= -github.com/grpc-ecosystem/grpc-gateway v1.12.1/go.mod h1:8XEsbTttt/W+VvjtQhLACqCisSPWTxCZ7sBRjU6iH9c= +github.com/grpc-ecosystem/grpc-gateway v1.16.0 h1:gmcG1KaJ57LophUzW0Hy8NmPhnMZb4M0+kPpLofRdBo= github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw= -github.com/grpc-ecosystem/grpc-opentracing v0.0.0-20180507213350-8e809c8a8645/go.mod h1:6iZfnjpejD4L/4DwD7NryNaJyCQdzwWwH2MWhCA90Kw= +github.com/gsterjov/go-libsecret v0.0.0-20161001094733-a6f4afe4910c h1:6rhixN/i8ZofjG1Y75iExal34USq5p+wiN1tpie8IrU= github.com/gsterjov/go-libsecret v0.0.0-20161001094733-a6f4afe4910c/go.mod h1:NMPJylDgVpX0MLRlPy15sqSwOFv/U1GZ2m21JhFfek0= github.com/gtank/merlin v0.1.1-0.20191105220539-8318aed1a79f/go.mod h1:T86dnYJhcGOh5BjZFCJWTDeTK7XW8uE+E21Cy/bIQ+s= +github.com/gtank/merlin v0.1.1 h1:eQ90iG7K9pOhtereWsmyRJ6RAwcP4tHTDBHXNg+u5is= github.com/gtank/merlin v0.1.1/go.mod h1:T86dnYJhcGOh5BjZFCJWTDeTK7XW8uE+E21Cy/bIQ+s= +github.com/gtank/ristretto255 v0.1.2 h1:JEqUCPA1NvLq5DwYtuzigd7ss8fwbYay9fi4/5uMzcc= github.com/gtank/ristretto255 v0.1.2/go.mod h1:Ph5OpO6c7xKUGROZfWVLiJf9icMDwUeIvY4OmlYW69o= -github.com/hanwen/go-fuse v1.0.0/go.mod h1:unqXarDXqzAk0rt98O2tVndEPIpUgLD9+rwFisZH3Ok= -github.com/hanwen/go-fuse/v2 v2.0.3/go.mod h1:0EQM6aH2ctVpvZ6a+onrQ/vaykxh2GH7hy3e13vzTUY= -github.com/hanwen/go-fuse/v2 v2.1.1-0.20220112183258-f57e95bda82d/go.mod h1:B1nGE/6RBFyBRC1RRnf23UpwCdyJ31eukw34oAKukAc= github.com/hashicorp/consul/api v1.1.0/go.mod h1:VmuI/Lkw1nC05EYQWNKwWGbkg+FbDBtguAZLlVdkD9Q= github.com/hashicorp/consul/api v1.3.0/go.mod h1:MmDNSzIMUjNpY/mQ398R4bk2FnqQLoPndWW5VkKPlCE= -github.com/hashicorp/consul/api v1.10.1/go.mod h1:XjsvQN+RJGWI2TWy1/kqaE16HrR2J/FWgkYjdZQsX9M= -github.com/hashicorp/consul/api v1.11.0/go.mod h1:XjsvQN+RJGWI2TWy1/kqaE16HrR2J/FWgkYjdZQsX9M= -github.com/hashicorp/consul/api v1.12.0/go.mod h1:6pVBMo0ebnYdt2S3H87XhekM/HHrUoTD2XXb/VrZVy0= -github.com/hashicorp/consul/api v1.15.3/go.mod h1:/g/qgcoBcEXALCNZgRRisyTW0nY86++L0KbeAMXYCeY= github.com/hashicorp/consul/sdk v0.1.1/go.mod h1:VKf9jXwCTEY1QZP2MOLRhb5i/I/ssyNV1vwHyQBF0x8= github.com/hashicorp/consul/sdk v0.3.0/go.mod h1:VKf9jXwCTEY1QZP2MOLRhb5i/I/ssyNV1vwHyQBF0x8= -github.com/hashicorp/consul/sdk v0.8.0/go.mod h1:GBvyrGALthsZObzUGsfgHZQDXjg4lOjagTIwIR1vPms= -github.com/hashicorp/consul/sdk v0.11.0/go.mod h1:yPkX5Q6CsxTFMjQQDJwzeNmUUF5NUGGbrDsv9wTb8cw= -github.com/hashicorp/errwrap v0.0.0-20141028054710-7554cd9344ce/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= -github.com/hashicorp/errwrap v1.1.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= -github.com/hashicorp/go-bexpr v0.1.10/go.mod h1:oxlubA2vC/gFVfX1A6JGp7ls7uCDlfJn732ehYYg+g0= github.com/hashicorp/go-cleanhttp v0.5.0/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80= github.com/hashicorp/go-cleanhttp v0.5.1/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80= -github.com/hashicorp/go-cleanhttp v0.5.2/go.mod h1:kO/YDlP8L1346E6Sodw+PrpBSV4/SoxCXGY6BqNFT48= -github.com/hashicorp/go-hclog v0.9.2/go.mod h1:5CU+agLiy3J7N7QjHK5d05KxGsuXiQLrjA0H7acj2lQ= -github.com/hashicorp/go-hclog v0.12.0/go.mod h1:whpDNt7SSdeAju8AWKIWsul05p54N/39EeqMAyrmvFQ= -github.com/hashicorp/go-hclog v0.14.1/go.mod h1:whpDNt7SSdeAju8AWKIWsul05p54N/39EeqMAyrmvFQ= -github.com/hashicorp/go-hclog v0.16.2/go.mod h1:whpDNt7SSdeAju8AWKIWsul05p54N/39EeqMAyrmvFQ= -github.com/hashicorp/go-hclog v1.0.0/go.mod h1:whpDNt7SSdeAju8AWKIWsul05p54N/39EeqMAyrmvFQ= -github.com/hashicorp/go-hclog v1.2.0/go.mod h1:whpDNt7SSdeAju8AWKIWsul05p54N/39EeqMAyrmvFQ= github.com/hashicorp/go-immutable-radix v1.0.0/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60= -github.com/hashicorp/go-immutable-radix v1.3.0/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60= +github.com/hashicorp/go-immutable-radix v1.3.1 h1:DKHmCUm2hRBK510BaiZlwvpD40f8bJFeZnpfm2KLowc= github.com/hashicorp/go-immutable-radix v1.3.1/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60= github.com/hashicorp/go-msgpack v0.5.3/go.mod h1:ahLV/dePpqEmjfWmKiqvPkv/twdG7iPBM1vqhUKIvfM= -github.com/hashicorp/go-msgpack v0.5.5/go.mod h1:ahLV/dePpqEmjfWmKiqvPkv/twdG7iPBM1vqhUKIvfM= -github.com/hashicorp/go-multierror v0.0.0-20161216184304-ed905158d874/go.mod h1:JMRHfdO9jKNzS/+BTlxCjKNQHg/jZAft8U7LloJvN7I= github.com/hashicorp/go-multierror v1.0.0/go.mod h1:dHtQlpGsu+cZNNAkkCN/P3hoUDHhCYQXV3UM06sGGrk= -github.com/hashicorp/go-multierror v1.1.0/go.mod h1:spPvp8C1qA32ftKqdAHm4hHTbPw+vmowP0z+KUhOZdA= -github.com/hashicorp/go-multierror v1.1.1/go.mod h1:iw975J/qwKPdAO1clOe2L8331t/9/fmwbPZ6JB6eMoM= github.com/hashicorp/go-retryablehttp v0.5.3/go.mod h1:9B5zBasrRhHXnJnui7y6sL7es7NDiJgTc6Er0maI1Xs= -github.com/hashicorp/go-retryablehttp v0.6.4/go.mod h1:vAew36LZh98gCBJNLH42IQ1ER/9wtLZZ8meHqQvEYWY= -github.com/hashicorp/go-retryablehttp v0.6.6/go.mod h1:vAew36LZh98gCBJNLH42IQ1ER/9wtLZZ8meHqQvEYWY= -github.com/hashicorp/go-retryablehttp v0.7.0/go.mod h1:vAew36LZh98gCBJNLH42IQ1ER/9wtLZZ8meHqQvEYWY= github.com/hashicorp/go-rootcerts v1.0.0/go.mod h1:K6zTfqpRlCUIjkwsN4Z+hiSfzSTQa6eBIzfwKfwNnHU= -github.com/hashicorp/go-rootcerts v1.0.2/go.mod h1:pqUvnprVnM5bf7AOirdbb01K4ccR319Vf4pU3K5EGc8= github.com/hashicorp/go-sockaddr v1.0.0/go.mod h1:7Xibr9yA9JjQq1JpNB2Vw7kxv8xerXegt+ozgdvDeDU= -github.com/hashicorp/go-sockaddr v1.0.2/go.mod h1:rB4wwRAUzs07qva3c5SdrY/NEtAUjGlgmH/UkBUC97A= github.com/hashicorp/go-syslog v1.0.0/go.mod h1:qPfqrKkXGihmCqbJM2mZgkZGvKG1dFdvsLplgctolz4= github.com/hashicorp/go-uuid v1.0.0/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= +github.com/hashicorp/go-uuid v1.0.1 h1:fv1ep09latC32wFoVwnqcnKJGnMSdBanPczbHAYm1BE= github.com/hashicorp/go-uuid v1.0.1/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= -github.com/hashicorp/go-uuid v1.0.2/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= github.com/hashicorp/go-version v1.2.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= -github.com/hashicorp/go-version v1.2.1/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= -github.com/hashicorp/go-version v1.4.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= -github.com/hashicorp/go-version v1.6.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= github.com/hashicorp/go.net v0.0.1/go.mod h1:hjKkEWcCURg++eb33jQU7oqQcI9XDCnUzHA0oac0k90= github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= -github.com/hashicorp/golang-lru v0.5.3/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4= github.com/hashicorp/golang-lru v0.5.4/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4= +github.com/hashicorp/golang-lru v0.5.5-0.20210104140557-80c98217689d h1:dg1dEPuWpEqDnvIw251EVy4zlP8gWbsGj4BsUKCRpYs= github.com/hashicorp/golang-lru v0.5.5-0.20210104140557-80c98217689d/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4= +github.com/hashicorp/hcl v1.0.0 h1:0Anlzjpi4vEasTeNFn2mLJgTSwt0+6sfsiTG8qcWGx4= github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ= github.com/hashicorp/logutils v1.0.0/go.mod h1:QIAnNjmIWmVIIkWDTG1z5v++HQmx9WQRO+LraFDTW64= github.com/hashicorp/mdns v1.0.0/go.mod h1:tL+uN++7HEJ6SQLQ2/p+z2pH24WQKWjBPkE0mNTz8vQ= -github.com/hashicorp/mdns v1.0.1/go.mod h1:4gW7WsVCke5TE7EPeYliwHlRUyBtfCwuFwuMg2DmyNY= -github.com/hashicorp/mdns v1.0.4/go.mod h1:mtBihi+LeNXGtG8L9dX59gAEa12BDtBQSp4v/YAJqrc= github.com/hashicorp/memberlist v0.1.3/go.mod h1:ajVTdAv/9Im8oMAAj5G31PhhMCZJV2pPBoIllUwCN7I= -github.com/hashicorp/memberlist v0.2.2/go.mod h1:MS2lj3INKhZjWNqd3N0m3J+Jxf3DAOnAH9VT3Sh9MUE= -github.com/hashicorp/memberlist v0.3.0/go.mod h1:MS2lj3INKhZjWNqd3N0m3J+Jxf3DAOnAH9VT3Sh9MUE= -github.com/hashicorp/memberlist v0.3.1/go.mod h1:MS2lj3INKhZjWNqd3N0m3J+Jxf3DAOnAH9VT3Sh9MUE= github.com/hashicorp/serf v0.8.2/go.mod h1:6hOLApaqBFA1NXqRQAsxw9QxuDEvNxSQRwA/JwenrHc= -github.com/hashicorp/serf v0.9.5/go.mod h1:UWDWwZeL5cuWDJdl0C6wrvrUwEqtQ4ZKBKKENpqIUyk= -github.com/hashicorp/serf v0.9.6/go.mod h1:TXZNMjZQijwlDvp+r0b63xZ45H7JmCmgg4gpTwn9UV4= -github.com/hashicorp/serf v0.9.7/go.mod h1:TXZNMjZQijwlDvp+r0b63xZ45H7JmCmgg4gpTwn9UV4= -github.com/hashicorp/serf v0.9.8/go.mod h1:TXZNMjZQijwlDvp+r0b63xZ45H7JmCmgg4gpTwn9UV4= -github.com/hashicorp/uuid v0.0.0-20160311170451-ebb0a03e909c/go.mod h1:fHzc09UnyJyqyW+bFuq864eh+wC7dj65aXmXLRe5to0= -github.com/hdevalence/ed25519consensus v0.0.0-20200813231810-1694d75e712a/go.mod h1:V0zo781scjlo5OzNQb2GI8wMt6CD4vs7y1beXtxZEhM= github.com/hdevalence/ed25519consensus v0.0.0-20210204194344-59a8610d2b87/go.mod h1:XGsKKeXxeRr95aEOgipvluMPlgjr7dGlk9ZTWOjcUcg= +github.com/hdevalence/ed25519consensus v0.0.0-20220222234857-c00d1f31bab3 h1:aSVUgRRRtOrZOC1fYmY9gV0e9z/Iu+xNVSASWjsuyGU= github.com/hdevalence/ed25519consensus v0.0.0-20220222234857-c00d1f31bab3/go.mod h1:5PC6ZNPde8bBqU/ewGZig35+UIZtw9Ytxez8/q5ZyFE= +github.com/herumi/bls-eth-go-binary v0.0.0-20220509081320-2d8ab06de53c h1:ppGSVyhAFh8VAGyDuNeLEGMYRJR5iDI92QgDNrMIqK0= github.com/herumi/bls-eth-go-binary v0.0.0-20220509081320-2d8ab06de53c/go.mod h1:luAnRm3OsMQeokhGzpYmc0ZKwawY7o87PUEP11Z7r7U= -github.com/hexops/gotextdiff v1.0.3/go.mod h1:pSWU5MAI3yDq+fZBTazCSJysOMbxWL1BSow5/V2vxeg= -github.com/holiman/bloomfilter/v2 v2.0.3/go.mod h1:zpoh+gs7qcpqrHr3dB55AMiJwo0iURXE7ZOP9L9hSkA= github.com/holiman/uint256 v1.1.1/go.mod h1:y4ga/t+u+Xwd7CpDgZESaRcWy0I7XMlTMA25ApIH5Jw= -github.com/holiman/uint256 v1.2.0/go.mod h1:y4ga/t+u+Xwd7CpDgZESaRcWy0I7XMlTMA25ApIH5Jw= github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= -github.com/huandu/xstrings v1.0.0/go.mod h1:4qWG/gcEcfX4z/mBDHJ++3ReCw9ibxbsNJbcucJdbSo= -github.com/huandu/xstrings v1.2.0/go.mod h1:DvyZB1rfVYsBIigL8HwpZgxHwXozlTgGqn63UyNX5k4= github.com/hudl/fargo v1.3.0/go.mod h1:y3CKSmjA+wD2gak7sUSXTAoopbhU08POFhmITJgmKTg= -github.com/hudl/fargo v1.4.0/go.mod h1:9Ai6uvFy5fQNq6VPKtg+Ceq1+eTY4nKUlR2JElEOcDo= github.com/huin/goupnp v1.0.0/go.mod h1:n9v9KO1tAxYH82qOn+UTIFQDmx5n1Zxd/ClZDMX7Bnc= -github.com/huin/goupnp v1.0.3/go.mod h1:ZxNlw5WqJj6wSsRK5+YfflQGXYfccj5VgQsMNixHM7Y= github.com/huin/goutil v0.0.0-20170803182201-1ca381bf3150/go.mod h1:PpLOETDnJ0o3iZrZfqZzyLl6l7F3c6L1oWn7OICBi6o= -github.com/iancoleman/strcase v0.2.0/go.mod h1:iwCmte+B7n89clKwxIoIXy/HfoL7AsD47ZCWhYzw7ho= github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= github.com/ianlancetaylor/demangle v0.0.0-20200824232613-28f6c0f3b639/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= -github.com/imdario/mergo v0.3.4/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA= -github.com/imdario/mergo v0.3.5/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA= -github.com/imdario/mergo v0.3.8/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA= -github.com/imdario/mergo v0.3.9/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA= -github.com/imdario/mergo v0.3.10/go.mod h1:jmQim1M+e3UYxmgPu/WyfjB3N3VflVyUjjjwH0dnCYA= -github.com/imdario/mergo v0.3.11/go.mod h1:jmQim1M+e3UYxmgPu/WyfjB3N3VflVyUjjjwH0dnCYA= -github.com/imdario/mergo v0.3.12/go.mod h1:jmQim1M+e3UYxmgPu/WyfjB3N3VflVyUjjjwH0dnCYA= -github.com/imdario/mergo v0.3.13/go.mod h1:4lJ1jqUDcsbIECGy0RUJAXNIhg+6ocWgb1ALK2O4oXg= github.com/improbable-eng/grpc-web v0.14.1/go.mod h1:zEjGHa8DAlkoOXmswrNvhUGEYQA9UI7DhrGeHR1DMGU= +github.com/improbable-eng/grpc-web v0.15.0 h1:BN+7z6uNXZ1tQGcNAuaU1YjsLTApzkjt2tzCixLaUPQ= github.com/improbable-eng/grpc-web v0.15.0/go.mod h1:1sy9HKV4Jt9aEs9JSnkWlRJPuPtwNr0l57L4f878wP8= github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8= +github.com/inconshreveable/mousetrap v1.0.1 h1:U3uMjPSQEBMNp1lFxmllqCPM6P5u/Xq7Pgzkat/bFNc= github.com/inconshreveable/mousetrap v1.0.1/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw= -github.com/influxdata/flux v0.65.1/go.mod h1:J754/zds0vvpfwuq7Gc2wRdVwEodfpCFM7mYlOw2LqY= github.com/influxdata/influxdb v1.2.3-0.20180221223340-01288bdb0883/go.mod h1:qZna6X/4elxqT3yI9iZYdZrWWdeFOOprn86kgg4+IzY= -github.com/influxdata/influxdb v1.8.3/go.mod h1:JugdFhsvvI8gadxOI6noqNeeBHvWNTbfYGtiAn+2jhI= -github.com/influxdata/influxdb-client-go/v2 v2.4.0/go.mod h1:vLNHdxTJkIf2mSLvGrpj8TCcISApPoXkaxP8g9uRlW8= github.com/influxdata/influxdb1-client v0.0.0-20191209144304-8bf82d3c094d/go.mod h1:qj24IKcXYK6Iy9ceXlo3Tc+vtHo9lIhSX5JddghvEPo= -github.com/influxdata/influxdb1-client v0.0.0-20200827194710-b269163b24ab/go.mod h1:qj24IKcXYK6Iy9ceXlo3Tc+vtHo9lIhSX5JddghvEPo= -github.com/influxdata/influxql v1.1.1-0.20200828144457-65d3ef77d385/go.mod h1:gHp9y86a/pxhjJ+zMjNXiQAA197Xk9wLxaz+fGG+kWk= -github.com/influxdata/line-protocol v0.0.0-20180522152040-32c6aa80de5e/go.mod h1:4kt73NQhadE3daL3WhR5EJ/J2ocX0PZzwxQ0gXJ7oFE= -github.com/influxdata/line-protocol v0.0.0-20200327222509-2487e7298839/go.mod h1:xaLFMmpvUxqXtVkUJfg9QmT88cDaCJ3ZKgdZ78oO8Qo= -github.com/influxdata/line-protocol v0.0.0-20210311194329-9aa0e372d097/go.mod h1:xaLFMmpvUxqXtVkUJfg9QmT88cDaCJ3ZKgdZ78oO8Qo= -github.com/influxdata/promql/v2 v2.12.0/go.mod h1:fxOPu+DY0bqCTCECchSRtWfc+0X19ybifQhZoQNF5D8= -github.com/influxdata/roaring v0.4.13-0.20180809181101-fc520f41fab6/go.mod h1:bSgUQ7q5ZLSO+bKBGqJiCBGAl+9DxyW63zLTujjUlOE= -github.com/influxdata/tdigest v0.0.0-20181121200506-bf2b5ad3c0a9/go.mod h1:Js0mqiSBE6Ffsg94weZZ2c+v/ciT8QRHFOap7EKDrR0= -github.com/influxdata/usage-client v0.0.0-20160829180054-6d3895376368/go.mod h1:Wbbw6tYNvwa5dlB6304Sd+82Z3f7PmVZHVKU637d4po= -github.com/informalsystems/tm-load-test v1.0.0/go.mod h1:WVaSKaQdfZK3v0C74EMzn7//+3aeCZF8wkIKBz2/M74= -github.com/intel/goresctrl v0.2.0/go.mod h1:+CZdzouYFn5EsxgqAQTEzMfwKwuc0fVdMrT9FCCAVRQ= -github.com/ishidawataru/sctp v0.0.0-20191218070446-00ab2ac2db07/go.mod h1:co9pwDoBCm1kGxawmb4sPq0cSIOOWNPT4KnHotMP1Zg= -github.com/j-keck/arping v0.0.0-20160618110441-2cf9dc699c56/go.mod h1:ymszkNOg6tORTn+6F6j+Jc8TOr5osrynvN6ivFWZ2GA= -github.com/j-keck/arping v1.0.2/go.mod h1:aJbELhR92bSk7tp79AWM/ftfc90EfEi2bQJrbBFOsPw= github.com/jackpal/go-nat-pmp v1.0.2-0.20160603034137-1fa385a6f458/go.mod h1:QPH045xvCAeXUZOxsnwmrtiCoxIr9eob+4orBN1SBKc= -github.com/jackpal/go-nat-pmp v1.0.2/go.mod h1:QPH045xvCAeXUZOxsnwmrtiCoxIr9eob+4orBN1SBKc= -github.com/jaguilar/vt100 v0.0.0-20150826170717-2703a27b14ea/go.mod h1:QMdK4dGB3YhEW2BmA1wgGpPYI3HZy/5gD705PXKUVSg= -github.com/jarcoal/httpmock v1.0.5/go.mod h1:ATjnClrvW/3tijVmpL/va5Z3aAyGvqU3gCT8nX0Txik= -github.com/jdxcode/netrc v0.0.0-20210204082910-926c7f70242a/go.mod h1:Zi/ZFkEqFHTm7qkjyNJjaWH4LQA9LQhGJyF0lTYGpxw= github.com/jedisct1/go-minisign v0.0.0-20190909160543-45766022959e/go.mod h1:G1CVv03EnqU1wYL2dFwXxW2An0az9JTl/ZsqXQeBlkU= -github.com/jellevandenhooff/dkim v0.0.0-20150330215556-f50fe3d243e1/go.mod h1:E0B/fFc00Y+Rasa88328GlI/XbtyysCtTHZS8h7IrBU= github.com/jessevdk/go-flags v0.0.0-20141203071132-1679536dcc89/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= github.com/jessevdk/go-flags v1.4.0/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= -github.com/jgautheron/goconst v1.5.1/go.mod h1:aAosetZ5zaeC/2EfMeRswtxUFBpe2Hr7HzkgX4fanO4= -github.com/jhump/gopoet v0.0.0-20190322174617-17282ff210b3/go.mod h1:me9yfT6IJSlOL3FCfrg+L6yzUEZ+5jW6WHt4Sk+UPUI= -github.com/jhump/gopoet v0.1.0/go.mod h1:me9yfT6IJSlOL3FCfrg+L6yzUEZ+5jW6WHt4Sk+UPUI= -github.com/jhump/goprotoc v0.5.0/go.mod h1:VrbvcYrQOrTi3i0Vf+m+oqQWk9l72mjkJCYo7UvLHRQ= -github.com/jhump/protocompile v0.0.0-20220216033700-d705409f108f/go.mod h1:qr2b5kx4HbFS7/g4uYO5qv9ei8303JMsC7ESbYiqr2Q= -github.com/jhump/protoreflect v1.6.1/go.mod h1:RZQ/lnuN+zqeRVpQigTwO6o0AJUkxbnSnpuG7toUTG4= github.com/jhump/protoreflect v1.9.0/go.mod h1:7GcYQDdMU/O/BBrl/cX6PNHpXh6cenjd8pneu5yW7Tg= -github.com/jhump/protoreflect v1.11.0/go.mod h1:U7aMIjN0NWq9swDP7xDdoMfRHb35uiuTd3Z9nFXJf5E= -github.com/jhump/protoreflect v1.12.1-0.20220417024638-438db461d753/go.mod h1:JytZfP5d0r8pVNLZvai7U/MCuTWITgrI4tTg7puQFKI= -github.com/jhump/protoreflect v1.12.1-0.20220721211354-060cc04fc18b/go.mod h1:JytZfP5d0r8pVNLZvai7U/MCuTWITgrI4tTg7puQFKI= -github.com/jhump/protoreflect v1.13.1-0.20220928232736-101791cb1b4c/go.mod h1:JytZfP5d0r8pVNLZvai7U/MCuTWITgrI4tTg7puQFKI= -github.com/jingyugao/rowserrcheck v0.0.0-20191204022205-72ab7603b68a/go.mod h1:xRskid8CManxVta/ALEhJha/pweKBaVG6fWgc0yH25s= -github.com/jingyugao/rowserrcheck v1.1.1/go.mod h1:4yvlZSDb3IyDTUZJUmpZfm2Hwok+Dtp+nu2qOq+er9c= -github.com/jirfag/go-printf-func-name v0.0.0-20191110105641-45db9963cdd3/go.mod h1:HEWGJkRDzjJY2sqdDwxccsGicWEf9BQOZsq2tV+xzM0= -github.com/jirfag/go-printf-func-name v0.0.0-20200119135958-7558a9eaa5af/go.mod h1:HEWGJkRDzjJY2sqdDwxccsGicWEf9BQOZsq2tV+xzM0= -github.com/jmespath/go-jmespath v0.0.0-20160202185014-0b12d6b521d8/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k= -github.com/jmespath/go-jmespath v0.0.0-20160803190731-bd40a432e4c7/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k= +github.com/jhump/protoreflect v1.12.1-0.20220721211354-060cc04fc18b h1:izTof8BKh/nE1wrKOrloNA5q4odOarjf+Xpe+4qow98= github.com/jmespath/go-jmespath v0.0.0-20180206201540-c2b33e8439af/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k= -github.com/jmespath/go-jmespath v0.3.0/go.mod h1:9QtRXoHjLGCJ5IBSaohpXITPlowMeeYCZ7fLUTSywik= -github.com/jmespath/go-jmespath v0.4.0/go.mod h1:T8mJZnbsbmF+m6zOOFylbeCJqk5+pHWvzYPziyZiYoo= -github.com/jmespath/go-jmespath/internal/testify v1.5.1/go.mod h1:L3OGu8Wl2/fWfCI6z80xFu9LTZmf1ZRjMHUOPmWr69U= +github.com/jmhodges/levigo v1.0.0 h1:q5EC36kV79HWeTBWsod3mG11EgStG3qArTKcvlksN1U= github.com/jmhodges/levigo v1.0.0/go.mod h1:Q6Qx+uH3RAqyK4rFQroq9RL7mdkABMcfhEI+nNuzMJQ= -github.com/jmoiron/sqlx v1.2.0/go.mod h1:1FEQNm3xlJgrMD+FBdI9+xvCksHtbpVBBw5dYhBSsks= -github.com/jmoiron/sqlx v1.2.1-0.20190826204134-d7d95172beb5/go.mod h1:1FEQNm3xlJgrMD+FBdI9+xvCksHtbpVBBw5dYhBSsks= -github.com/joefitzgerald/rainbow-reporter v0.1.0/go.mod h1:481CNgqmVHQZzdIbN52CupLJyoVwB10FQ/IQlF1pdL8= -github.com/joho/godotenv v1.3.0/go.mod h1:7hK45KPybAkOC6peb+G5yklZfMxEjkZhHbwpqxOKXbg= github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo= -github.com/jonboulle/clockwork v0.2.0/go.mod h1:Pkfl5aHPm1nk2H9h0bjmnJD/BcgbGXUBGnn1kMkgxc8= -github.com/jonboulle/clockwork v0.2.2/go.mod h1:Pkfl5aHPm1nk2H9h0bjmnJD/BcgbGXUBGnn1kMkgxc8= +github.com/josharian/intern v1.0.0 h1:vlS4z54oSdjm0bgjRigI+G1HpF+tI+9rE5LLzOg8HmY= github.com/josharian/intern v1.0.0/go.mod h1:5DoeVV0s6jJacbCEi61lwdGj/aVlrQvzHFFd8Hwg//Y= -github.com/josharian/txtarfs v0.0.0-20210218200122-0702f000015a/go.mod h1:izVPOvVRsHiKkeGCT6tYBNWyDVuzj9wAaBb5R9qamfw= -github.com/jpillora/backoff v0.0.0-20180909062703-3050d21c67d7/go.mod h1:2iMrUgbbvHEiQClaW2NsSzMyGHqN+rDFqY705q49KG0= github.com/jpillora/backoff v1.0.0/go.mod h1:J/6gKK9jxlEcS3zixgDgUAsiuZ7yrSoa/FX5e0EB2j4= github.com/jrick/logrotate v1.0.0/go.mod h1:LNinyqDIJnpAur+b8yyulnQw/wDuN1+BYKlTRt3OuAQ= -github.com/json-iterator/go v0.0.0-20180612202835-f2b4162afba3/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= -github.com/json-iterator/go v0.0.0-20180701071628-ab8a2e0c74be/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= github.com/json-iterator/go v1.1.7/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= github.com/json-iterator/go v1.1.8/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= github.com/json-iterator/go v1.1.9/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= github.com/json-iterator/go v1.1.10/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= github.com/json-iterator/go v1.1.11/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= -github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo= +github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM= github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU= github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/XSXhF0NWZEnDohbsk= -github.com/jsternberg/zap-logfmt v1.0.0/go.mod h1:uvPs/4X51zdkcm5jXl5SYoN+4RK21K8mysFmDaM/h+o= github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU= -github.com/juju/ratelimit v1.0.1/go.mod h1:qapgC/Gy+xNh9UxzV13HGGl/6UXNN+ct+vwSgWNm/qk= github.com/julienschmidt/httprouter v1.1.1-0.20170430222011-975b5c4c7c21/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w= github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w= github.com/julienschmidt/httprouter v1.3.0/go.mod h1:JR6WtHb+2LUe8TCKY3cZOxFyyO8IZAc4RVcycCCAKdM= -github.com/julz/importas v0.1.0/go.mod h1:oSFU2R4XK/P7kNBrnL/FEQlDGN1/6WoxXEjSSXO0DV0= -github.com/jung-kurt/gofpdf v1.0.0/go.mod h1:7Id9E/uU8ce6rXgefFLlgrJj/GYY22cpxn+r32jIOes= -github.com/jung-kurt/gofpdf v1.0.3-0.20190309125859-24315acbbda5/go.mod h1:7Id9E/uU8ce6rXgefFLlgrJj/GYY22cpxn+r32jIOes= -github.com/jwilder/encoding v0.0.0-20170811194829-b4e1701a28ef/go.mod h1:Ct9fl0F6iIOGgxJ5npU/IUOhOhqlVrGjyIZc8/MagT0= -github.com/k0kubun/colorstring v0.0.0-20150214042306-9440f1994b88/go.mod h1:3w7q1U84EfirKl04SVQ/s7nPm1ZPhiXd34z40TNz36k= github.com/karalabe/usb v0.0.0-20190919080040-51dc0efba356/go.mod h1:Od972xHfMJowv7NGVDiWVxk2zxnWgjLlJzE+F4F7AGU= -github.com/karalabe/usb v0.0.2/go.mod h1:Od972xHfMJowv7NGVDiWVxk2zxnWgjLlJzE+F4F7AGU= github.com/keybase/go-keychain v0.0.0-20190712205309-48d3d31d256d/go.mod h1:JJNrCn9otv/2QP4D7SMJBgaleKpOf66PnW6F5WGNRIc= github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= -github.com/kisielk/errcheck v1.6.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= -github.com/kisielk/errcheck v1.6.2/go.mod h1:nXw/i/MfnvRHqXa7XXmQMUB0oNFGuBrNI8d8NLy0LPw= github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= -github.com/kkHAIKE/contextcheck v1.1.3/go.mod h1:PG/cwd6c0705/LM0KTr1acO2gORUxkSVWyLJOFW5qoo= github.com/kkdai/bstream v0.0.0-20161212061736-f391b8402d23/go.mod h1:J+Gs4SYgM6CZQHDETBtE9HaSEkGmuNXF86RwHhHUvq4= -github.com/klauspost/compress v1.4.0/go.mod h1:RyIbtBH6LamlWaDj8nUwkbUhJ87Yi3uG0guNDohfE1A= -github.com/klauspost/compress v1.4.1/go.mod h1:RyIbtBH6LamlWaDj8nUwkbUhJ87Yi3uG0guNDohfE1A= github.com/klauspost/compress v1.10.3/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs= -github.com/klauspost/compress v1.11.3/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs= github.com/klauspost/compress v1.11.7/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs= -github.com/klauspost/compress v1.11.13/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs= github.com/klauspost/compress v1.12.3/go.mod h1:8dP1Hq4DHOhN9w426knH3Rhby4rFm6D8eO+e+Dq5Gzg= -github.com/klauspost/compress v1.13.4/go.mod h1:8dP1Hq4DHOhN9w426knH3Rhby4rFm6D8eO+e+Dq5Gzg= -github.com/klauspost/compress v1.13.5/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk= -github.com/klauspost/compress v1.13.6/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk= -github.com/klauspost/compress v1.15.1/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk= +github.com/klauspost/compress v1.15.11 h1:Lcadnb3RKGin4FYM/orgq0qde+nc15E5Cbqg4B9Sx9c= github.com/klauspost/compress v1.15.11/go.mod h1:QPwzmACJjUTFsnSHH934V6woptycfrDDJnH7hvFVbGM= -github.com/klauspost/cpuid v0.0.0-20170728055534-ae7887de9fa5/go.mod h1:Pj4uuM528wm8OyEC2QMXAi2YiTZ96dNQPGgoMS4s3ek= -github.com/klauspost/cpuid v0.0.0-20180405133222-e7e905edc00e/go.mod h1:Pj4uuM528wm8OyEC2QMXAi2YiTZ96dNQPGgoMS4s3ek= -github.com/klauspost/cpuid v1.2.0/go.mod h1:Pj4uuM528wm8OyEC2QMXAi2YiTZ96dNQPGgoMS4s3ek= -github.com/klauspost/crc32 v0.0.0-20161016154125-cb6bfca970f6/go.mod h1:+ZoRqAPRLkC4NPOvfYeR5KNOrY6TD+/sAC3HXPZgDYg= -github.com/klauspost/pgzip v1.0.2-0.20170402124221-0bf5dcad4ada/go.mod h1:Ch1tH69qFZu15pkjo5kYi6mth2Zzwzt50oCQKQE9RUs= -github.com/klauspost/pgzip v1.2.5/go.mod h1:Ch1tH69qFZu15pkjo5kYi6mth2Zzwzt50oCQKQE9RUs= github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= -github.com/konsorten/go-windows-terminal-sequences v1.0.2/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= github.com/konsorten/go-windows-terminal-sequences v1.0.3/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= github.com/kr/fs v0.1.0/go.mod h1:FFnZGqtBN9Gxj7eW1uZ42v5BccTP0vu6NEaFoC2HwRg= github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc= github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= github.com/kr/pretty v0.2.0/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= -github.com/kr/pretty v0.3.0/go.mod h1:640gp4NfQd8pI5XOwp5fnNeVWj67G7CFk/SaSQn7NBk= +github.com/kr/pretty v0.3.0 h1:WgNl7dwNpEZ6jJ9k1snq4pZsg7DOEN8hP9Xw0Tsjwk0= github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= -github.com/kr/pty v1.1.3/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= -github.com/kr/pty v1.1.5/go.mod h1:9r2w37qlBe7rQ6e1fg1S/9xpWHSnaqNdHD3WcMdbPDA= -github.com/kr/pty v1.1.8/go.mod h1:O1sed60cT9XZ5uDucP5qwvh+TE3NnUj51EiZO/lmSfw= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= +github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= -github.com/kulti/thelper v0.6.2/go.mod h1:DsqKShOvP40epevkFrvIwkCMNYxMeTNjdWL4dqWHZ6I= -github.com/kulti/thelper v0.6.3/go.mod h1:DsqKShOvP40epevkFrvIwkCMNYxMeTNjdWL4dqWHZ6I= -github.com/kunwardeep/paralleltest v1.0.3/go.mod h1:vLydzomDFpk7yu5UX02RmP0H8QfRPOV/oFhWN85Mjb4= -github.com/kunwardeep/paralleltest v1.0.6/go.mod h1:Y0Y0XISdZM5IKm3TREQMZ6iteqn1YuwCsJO/0kL9Zes= -github.com/kylelemons/godebug v0.0.0-20170224010052-a616ab194758/go.mod h1:B69LEHPfb2qLo0BaaOLcbitczOKLWTsrBG9LczfCD4k= -github.com/kylelemons/godebug v0.0.0-20170820004349-d65d576e9348/go.mod h1:B69LEHPfb2qLo0BaaOLcbitczOKLWTsrBG9LczfCD4k= github.com/kylelemons/godebug v1.1.0/go.mod h1:9/0rRGxNHcop5bhtWyNeEfOS8JIWk580+fNqagV/RAw= -github.com/kyoh86/exportloopref v0.1.8/go.mod h1:1tUcJeiioIs7VWe5gcOObrux3lb66+sBqGZrRkMwPgg= -github.com/labstack/echo/v4 v4.2.1/go.mod h1:AA49e0DZ8kk5jTOOCKNuPR6oTnBS0dYiM4FW1e6jwpg= -github.com/labstack/gommon v0.3.0/go.mod h1:MULnywXg0yavhxWKc+lOruYdAhDwPK9wf0OL7NoOu+k= -github.com/ldez/gomoddirectives v0.2.3/go.mod h1:cpgBogWITnCfRq2qGoDkKMEVSaarhdBr6g8G04uz6d0= -github.com/ldez/tagliatelle v0.3.1/go.mod h1:8s6WJQwEYHbKZDsp/LjArytKOG8qaMrKQQ3mFukHs88= -github.com/leanovate/gopter v0.2.9/go.mod h1:U2L/78B+KVFIx2VmW6onHJQzXtFb+p5y3y2Sh+Jxxv8= +github.com/leodido/go-urn v1.2.0 h1:hpXL4XnriNwQ/ABnpepYM/1vCLWNDfUNts8dX3xTG6Y= github.com/leodido/go-urn v1.2.0/go.mod h1:+8+nEpDfqqsY+g338gtMEUOtuK+4dEMhiQEgxpxOKII= -github.com/leonklingele/grouper v1.1.0/go.mod h1:uk3I3uDfi9B6PeUjsCKi6ndcf63Uy7snXgR4yDYQVDY= -github.com/letsencrypt/pkcs11key/v4 v4.0.0/go.mod h1:EFUvBDay26dErnNb70Nd0/VW3tJiIbETBPTl9ATXQag= -github.com/lib/pq v0.0.0-20180327071824-d34b9ff171c2/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= -github.com/lib/pq v1.0.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= -github.com/lib/pq v1.1.1/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= github.com/lib/pq v1.2.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= -github.com/lib/pq v1.8.0/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o= -github.com/lib/pq v1.9.0/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o= github.com/lib/pq v1.10.2/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o= -github.com/lib/pq v1.10.4/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o= -github.com/lib/pq v1.10.6/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o= +github.com/lib/pq v1.10.7 h1:p7ZhMD+KsSRozJr34udlUrhboJwWAgCg34+/ZZNvZZw= github.com/lib/pq v1.10.7/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o= github.com/libp2p/go-buffer-pool v0.0.2/go.mod h1:MvaB6xw5vOrDl8rYZGLFdKAuk/hRoRZd1Vi32+RXyFM= +github.com/libp2p/go-buffer-pool v0.1.0 h1:oK4mSFcQz7cTQIfqbe4MIj9gLW+mnanjyFtc6cdF0Y8= github.com/libp2p/go-buffer-pool v0.1.0/go.mod h1:N+vh8gMqimBzdKkSMVuydVDq+UV5QTWy5HSiZacSbPg= github.com/lightstep/lightstep-tracer-common/golang/gogo v0.0.0-20190605223551-bc2310a04743/go.mod h1:qklhhLq1aX+mtWk9cPHPzaBjWImj5ULL6C7HFJtXQMM= github.com/lightstep/lightstep-tracer-go v0.18.1/go.mod h1:jlF1pusYV4pidLvZ+XD0UBX0ZE6WURAspgAczcDHrL4= +github.com/line/ibc-go/v3 v3.3.1 h1:tcyOlWoPbNnRhASJMdfXVzEOmqPs9kM2c/25siH++cw= github.com/line/ibc-go/v3 v3.3.1/go.mod h1:jqimrnKidXAxySD2axhpuBUSFZEyxHiLhLoLJGOZMss= -github.com/line/lbm-sdk v0.0.0-20230113004822-8fb974447422/go.mod h1:wpkaELNQd8x+DdXC/blxYoEExOaZBKFhby6AujzGTC0= +github.com/line/lbm-sdk v0.46.1-0.20230120095230-1deccf3012a3 h1:umjM0ZtuQfoTOFk+v5XS4E9VJL9UDBzF5zAe9yAMZSo= github.com/line/lbm-sdk v0.46.1-0.20230120095230-1deccf3012a3/go.mod h1:wpkaELNQd8x+DdXC/blxYoEExOaZBKFhby6AujzGTC0= +github.com/line/ostracon v1.0.7 h1:8vh/gsM6Sf6z2s38og8YufIhrWN2TwXpm4I3DqKEVyI= github.com/line/ostracon v1.0.7/go.mod h1:gmEKYdaMaDAl5xJ8sJJo0s6OvzBSZwM01nWRCGA5oDY= +github.com/line/wasmvm v1.1.1-0.11.0.0.20230113085344-89650a7edd05 h1:Gtz45izC5JFrS+H35rEJ/TEgdXJr+3WSpkynRk52M5U= github.com/line/wasmvm v1.1.1-0.11.0.0.20230113085344-89650a7edd05/go.mod h1:Lq3FVvi/rb+OOlTxqtcqcao2GGESQ4hUpuXMcjdJbco= -github.com/linuxkit/virtsock v0.0.0-20201010232012-f8cee7dfc7a3/go.mod h1:3r6x7q95whyfWQpmGZTu3gk3v2YkMi05HEzl7Tf7YEo= -github.com/logrusorgru/aurora v0.0.0-20181002194514-a7b3b318ed4e/go.mod h1:7rIyQOR62GCctdiQpZ/zOJlFyk6y+94wXzv6RNZgaR4= github.com/lucasjones/reggen v0.0.0-20180717132126-cdb49ff09d77/go.mod h1:5ELEyG+X8f+meRWHuqUOewBOhvHkl7M76pdGEansxW4= -github.com/lufeee/execinquery v1.2.1/go.mod h1:EC7DrEKView09ocscGHC+apXMIaorh4xqSxS/dy8SbM= -github.com/lufia/plan9stats v0.0.0-20211012122336-39d0f177ccd0/go.mod h1:zJYVVT2jmtg6P3p1VtQj7WsuWi/y4VnjVBn7F8KPB3I= -github.com/lyft/protoc-gen-star v0.5.3/go.mod h1:V0xaHgaf5oCCqmcxYcWiDfTiKsZsRc87/1qhoTACD8w= -github.com/magefile/mage v1.14.0/go.mod h1:z5UZb/iS3GoOSn0JgWuiw7dxlurVYTu+/jHXqQg881A= github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= github.com/magiconair/properties v1.8.1/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= github.com/magiconair/properties v1.8.5/go.mod h1:y3VJvCyxH9uVvJTWEGAELF3aiYNyPKd5NZ3oSwXrF60= -github.com/magiconair/properties v1.8.6/go.mod h1:y3VJvCyxH9uVvJTWEGAELF3aiYNyPKd5NZ3oSwXrF60= +github.com/magiconair/properties v1.8.7 h1:IeQXZAiQcpL9mgcAe1Nu6cX9LLw6ExEHKjN0VQdvPDY= github.com/magiconair/properties v1.8.7/go.mod h1:Dhd985XPs7jluiymwWYZ0G4Z61jb3vdS329zhj2hYo0= -github.com/mailru/easyjson v0.0.0-20160728113105-d5b7844b561a/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= -github.com/mailru/easyjson v0.0.0-20190614124828-94de47d64c63/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= -github.com/mailru/easyjson v0.0.0-20190626092158-b2ccc519800e/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= -github.com/mailru/easyjson v0.7.0/go.mod h1:KAzv3t3aY1NaHWoQz1+4F1ccyAH66Jk7yos7ldAVICs= -github.com/mailru/easyjson v0.7.6/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc= +github.com/mailru/easyjson v0.7.7 h1:UGYAvKxe3sBsEDzO8ZeWOSlIQfWFlxbzLZe7hwFURr0= github.com/mailru/easyjson v0.7.7/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc= -github.com/maratori/testableexamples v1.0.0/go.mod h1:4rhjL1n20TUTT4vdh3RDqSizKLyXp7K2u6HgraZCGzE= -github.com/maratori/testpackage v1.0.1/go.mod h1:ddKdw+XG0Phzhx8BFDTKgpWP4i7MpApTE5fXSKAqwDU= -github.com/maratori/testpackage v1.1.0/go.mod h1:PeAhzU8qkCwdGEMTEupsHJNlQu2gZopMC6RjbhmHeDc= -github.com/marstr/guid v1.1.0/go.mod h1:74gB1z2wpxxInTG6yaqA7KrtM0NZ+RbrcqDvYHefzho= -github.com/matoous/godox v0.0.0-20190911065817-5d6d842e92eb/go.mod h1:1BELzlh859Sh1c6+90blK8lbYy0kwQf1bYlBhBysy1s= -github.com/matoous/godox v0.0.0-20210227103229-6504466cf951/go.mod h1:1BELzlh859Sh1c6+90blK8lbYy0kwQf1bYlBhBysy1s= -github.com/matryer/is v1.4.0/go.mod h1:8I/i5uYgLzgsgEloJE1U6xx5HkBQpAZvepWuujKwMRU= -github.com/matryer/moq v0.0.0-20190312154309-6cfb0558e1bd/go.mod h1:9ELz6aaclSIGnZBoaSLZ3NAl1VTufbOrXBPvtcy6WiQ= github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= github.com/mattn/go-colorable v0.1.0/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= -github.com/mattn/go-colorable v0.1.1/go.mod h1:FuOcm+DKB9mbwrcAfNl7/TZVBZ6rcnceauSikq3lYCQ= -github.com/mattn/go-colorable v0.1.2/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE= -github.com/mattn/go-colorable v0.1.4/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE= -github.com/mattn/go-colorable v0.1.6/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= -github.com/mattn/go-colorable v0.1.7/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= github.com/mattn/go-colorable v0.1.8/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= -github.com/mattn/go-colorable v0.1.9/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= github.com/mattn/go-colorable v0.1.12/go.mod h1:u5H1YNBxpqRaxsYJYSkiCWKzEfiAb1Gb520KVy5xxl4= +github.com/mattn/go-colorable v0.1.13 h1:fFA4WZxdEF4tXPZVKMLwD8oUnCTTo08duU7wxecdEvA= github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovkB8vQcUbaXHg= github.com/mattn/go-ieproxy v0.0.0-20190610004146-91bb50d98149/go.mod h1:31jz6HNzdxOmlERGGEc4v/dMssOfmp2p5bT/okiKFFc= github.com/mattn/go-ieproxy v0.0.0-20190702010315-6dee0af9227d/go.mod h1:31jz6HNzdxOmlERGGEc4v/dMssOfmp2p5bT/okiKFFc= -github.com/mattn/go-ieproxy v0.0.1/go.mod h1:pYabZ6IHcRpFh7vIaLfK7rdcWgFEb3SFJ6/gNWuh88E= github.com/mattn/go-isatty v0.0.3/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= github.com/mattn/go-isatty v0.0.4/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= github.com/mattn/go-isatty v0.0.5-0.20180830101745-3fb116b82035/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= -github.com/mattn/go-isatty v0.0.5/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= -github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= -github.com/mattn/go-isatty v0.0.9/go.mod h1:YNRxwqDuOph6SZLI9vUUz6OYw3QyUt7WiY2yME+cCiQ= -github.com/mattn/go-isatty v0.0.10/go.mod h1:qgIWMr58cqv1PHHyhnkY9lrL7etaEgOFcMEpPG5Rm84= -github.com/mattn/go-isatty v0.0.11/go.mod h1:PhnuNfih5lzO57/f3n+odYbM4JtupLOxQOAqxQCu2WE= github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU= github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27kJ6hsGG94= github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= +github.com/mattn/go-isatty v0.0.17 h1:BTarxUcIeDqL27Mc+vyvdWYSL28zpIhv3RoTdsLMPng= github.com/mattn/go-isatty v0.0.17/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= github.com/mattn/go-runewidth v0.0.2/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= github.com/mattn/go-runewidth v0.0.3/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= github.com/mattn/go-runewidth v0.0.4/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= -github.com/mattn/go-runewidth v0.0.6/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI= -github.com/mattn/go-runewidth v0.0.9/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI= -github.com/mattn/go-shellwords v1.0.3/go.mod h1:3xCvwCdWdlDJUrvuMn7Wuy9eWs4pE8vqg+NOMyg4B2o= -github.com/mattn/go-shellwords v1.0.6/go.mod h1:3xCvwCdWdlDJUrvuMn7Wuy9eWs4pE8vqg+NOMyg4B2o= -github.com/mattn/go-shellwords v1.0.10/go.mod h1:EZzvwXDESEeg03EKmM+RmDnNOPKG4lLtQsUlTZDWQ8Y= -github.com/mattn/go-shellwords v1.0.12/go.mod h1:EZzvwXDESEeg03EKmM+RmDnNOPKG4lLtQsUlTZDWQ8Y= -github.com/mattn/go-sqlite3 v1.9.0/go.mod h1:FPy6KqzDD04eiIsT53CuJW3U88zkxoIYsOqkbpncsNc= -github.com/mattn/go-sqlite3 v1.11.0/go.mod h1:FPy6KqzDD04eiIsT53CuJW3U88zkxoIYsOqkbpncsNc= -github.com/mattn/go-sqlite3 v1.14.9/go.mod h1:NyWgC/yNuGj7Q9rpYnZvas74GogHl5/Z4A/KQRfk6bU= -github.com/mattn/go-tty v0.0.0-20180907095812-13ff1204f104/go.mod h1:XPvLUNfbS4fJH25nqRHfWLMa1ONC8Amw+mIA639KxkE= -github.com/mattn/go-zglob v0.0.1/go.mod h1:9fxibJccNxU2cnpIKLRRFA7zX7qhkJIQWBb449FYHOo= -github.com/mattn/goveralls v0.0.2/go.mod h1:8d1ZMHsd7fW6IRPKQh46F2WRpyib5/X4FOpevwGNQEw= github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= -github.com/matttproud/golang_protobuf_extensions v1.0.2-0.20181231171920-c182affec369/go.mod h1:BSXmuO+STAnVfrANrmjBb36TMTDstsz7MSK+HVaYKv4= +github.com/matttproud/golang_protobuf_extensions v1.0.4 h1:mmDVorXM7PCGKw94cs5zkfA9PSy5pEvNWRP0ET0TIVo= github.com/matttproud/golang_protobuf_extensions v1.0.4/go.mod h1:BSXmuO+STAnVfrANrmjBb36TMTDstsz7MSK+HVaYKv4= -github.com/maxbrunsfeld/counterfeiter/v6 v6.2.2/go.mod h1:eD9eIE7cdwcMi9rYluz88Jz2VyhSmden33/aXg4oVIY= -github.com/mbilski/exhaustivestruct v1.2.0/go.mod h1:OeTBVxQWoEmB2J2JCHmXWPJ0aksxSUOUy+nvtVEfzXc= -github.com/mgechev/dots v0.0.0-20210922191527-e955255bf517/go.mod h1:KQ7+USdGKfpPjXk4Ga+5XxQM4Lm4e3gAogrreFAYpOg= -github.com/mgechev/revive v1.2.1/go.mod h1:+Ro3wqY4vakcYNtkBWdZC7dBg1xSB6sp054wWwmeFm0= -github.com/mgechev/revive v1.2.4/go.mod h1:iAWlQishqCuj4yhV24FTnKSXGpbAA+0SckXB8GQMX/Q= -github.com/mgutz/ansi v0.0.0-20170206155736-9520e82c474b/go.mod h1:01TrycV0kFyexm33Z7vhZRXopbI8J3TDReVlkTgMUxE= github.com/miekg/dns v1.0.14/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg= -github.com/miekg/dns v1.1.26/go.mod h1:bPDLeHnStXmXAq1m/Ch/hvfNHr14JKNPMBo3VZKjuso= -github.com/miekg/dns v1.1.35/go.mod h1:KNUDUusw/aVsxyTYZM1oqvCicbwhgbNgztCETuNZ7xM= -github.com/miekg/dns v1.1.41/go.mod h1:p6aan82bvRIyn+zDIv9xYNUpwa73JcSh9BKwknJysuI= -github.com/miekg/dns v1.1.43/go.mod h1:+evo5L0630/F6ca/Z9+GAqzhjGyn8/c+TBaOyfEl0V4= -github.com/miekg/pkcs11 v1.0.2/go.mod h1:XsNlhZGX73bx86s2hdc/FuaLm2CPZJemRLMA+WTFxgs= -github.com/miekg/pkcs11 v1.0.3/go.mod h1:XsNlhZGX73bx86s2hdc/FuaLm2CPZJemRLMA+WTFxgs= -github.com/miekg/pkcs11 v1.1.1/go.mod h1:XsNlhZGX73bx86s2hdc/FuaLm2CPZJemRLMA+WTFxgs= github.com/mimoo/StrobeGo v0.0.0-20181016162300-f8f6d4d2b643/go.mod h1:43+3pMjjKimDBf5Kr4ZFNGbLql1zKkbImw+fZbw3geM= +github.com/mimoo/StrobeGo v0.0.0-20210601165009-122bf33a46e0 h1:QRUSJEgZn2Snx0EmT/QLXibWjSUDjKWvXIT19NBVp94= github.com/mimoo/StrobeGo v0.0.0-20210601165009-122bf33a46e0/go.mod h1:43+3pMjjKimDBf5Kr4ZFNGbLql1zKkbImw+fZbw3geM= github.com/minio/highwayhash v1.0.1/go.mod h1:BQskDq+xkJ12lmlUUi7U0M5Swg3EWR+dLTk+kldvVxY= +github.com/minio/highwayhash v1.0.2 h1:Aak5U0nElisjDCfPSG79Tgzkn2gl66NxOMspRrKnA/g= github.com/minio/highwayhash v1.0.2/go.mod h1:BQskDq+xkJ12lmlUUi7U0M5Swg3EWR+dLTk+kldvVxY= -github.com/mistifyio/go-zfs v2.1.2-0.20190413222219-f784269be439+incompatible/go.mod h1:8AuVvqP/mXw1px98n46wfvcGfQ4ci2FwoAjKYxuo3Z4= github.com/mitchellh/cli v1.0.0/go.mod h1:hNIlj7HEI86fIcpObd7a0FcrxTWetlwJDGcceTlRvqc= -github.com/mitchellh/cli v1.1.0/go.mod h1:xcISNoH86gajksDmfB23e/pu+B+GeFRMYmoHXxx3xhI= -github.com/mitchellh/copystructure v1.0.0/go.mod h1:SNtv71yrdKgLRyLFxmLdkAbkKEFWgYaq1OVrnRcwhnw= github.com/mitchellh/go-homedir v1.0.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= -github.com/mitchellh/go-ps v0.0.0-20190716172923-621e5597135b/go.mod h1:r1VsdOzOPt1ZSrGZWFoNhsAedKnEd6r9Np1+5blZCWk= -github.com/mitchellh/go-ps v1.0.0/go.mod h1:J4lOc8z8yJs6vUwklHw2XEIiT4z4C40KtWVN3nvg8Pg= github.com/mitchellh/go-testing-interface v1.0.0/go.mod h1:kRemZodwjscx+RGhAo8eIhFbs2+BFgRtFPeD/KE+zxI= -github.com/mitchellh/go-wordwrap v1.0.0/go.mod h1:ZXFpozHsX6DPmq2I0TCekCxypsnAUbP2oI0UX1GXzOo= github.com/mitchellh/gox v0.4.0/go.mod h1:Sd9lOJ0+aimLBi73mGofS1ycjY8lL3uZM3JPS42BGNg= -github.com/mitchellh/hashstructure v1.0.0/go.mod h1:QjSHrPWS+BGUVBYkbTZWEnOh3G1DutKwClXU/ABz6AQ= -github.com/mitchellh/hashstructure/v2 v2.0.2/go.mod h1:MG3aRVU/N29oo/V/IhBX8GR/zz4kQkprJgF2EVszyDE= github.com/mitchellh/iochan v1.0.0/go.mod h1:JwYml1nuB7xOzsp52dPpHFffvOCDupsG0QubkSMEySY= github.com/mitchellh/mapstructure v0.0.0-20160808181253-ca63d7c062ee/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= -github.com/mitchellh/mapstructure v1.3.1/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= github.com/mitchellh/mapstructure v1.3.3/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= github.com/mitchellh/mapstructure v1.4.1/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= -github.com/mitchellh/mapstructure v1.4.2/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= -github.com/mitchellh/mapstructure v1.4.3/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= +github.com/mitchellh/mapstructure v1.5.0 h1:jeMsZIYE/09sWLaz43PL7Gy6RuMjD2eJVyuac5Z2hdY= github.com/mitchellh/mapstructure v1.5.0/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= -github.com/mitchellh/osext v0.0.0-20151018003038-5e2d6d41470f/go.mod h1:OkQIRizQZAeMln+1tSwduZz7+Af5oFlKirV/MSYes2A= -github.com/mitchellh/pointerstructure v1.2.0/go.mod h1:BRAsLI5zgXmw97Lf6s25bs8ohIXc3tViBH44KcwB2g4= -github.com/mitchellh/reflectwalk v1.0.0/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw= -github.com/mitchellh/reflectwalk v1.0.1/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw= -github.com/moby/buildkit v0.8.1/go.mod h1:/kyU1hKy/aYCuP39GZA9MaKioovHku57N6cqlKZIaiQ= -github.com/moby/buildkit v0.10.4/go.mod h1:Yajz9vt1Zw5q9Pp4pdb3TCSUXJBIroIQGQ3TTs/sLug= -github.com/moby/locker v1.0.1/go.mod h1:S7SDdo5zpBK84bzzVlKr2V0hz+7x9hWbYC/kq7oQppc= -github.com/moby/spdystream v0.2.0/go.mod h1:f7i0iNDQJ059oMTcWxx8MA/zKFIuD/lY+0GqbN2Wy8c= -github.com/moby/sys/mount v0.1.0/go.mod h1:FVQFLDRWwyBjDTBNQXDlWnSFREqOo3OKX9aqhmeoo74= -github.com/moby/sys/mount v0.1.1/go.mod h1:FVQFLDRWwyBjDTBNQXDlWnSFREqOo3OKX9aqhmeoo74= -github.com/moby/sys/mount v0.3.0/go.mod h1:U2Z3ur2rXPFrFmy4q6WMwWrBOAQGYtYTRVM8BIvzbwk= -github.com/moby/sys/mountinfo v0.1.0/go.mod h1:w2t2Avltqx8vE7gX5l+QiBKxODu2TX0+Syr3h52Tw4o= -github.com/moby/sys/mountinfo v0.1.3/go.mod h1:w2t2Avltqx8vE7gX5l+QiBKxODu2TX0+Syr3h52Tw4o= -github.com/moby/sys/mountinfo v0.4.0/go.mod h1:rEr8tzG/lsIZHBtN/JjGG+LMYx9eXgW2JI+6q0qou+A= github.com/moby/sys/mountinfo v0.4.1/go.mod h1:rEr8tzG/lsIZHBtN/JjGG+LMYx9eXgW2JI+6q0qou+A= -github.com/moby/sys/mountinfo v0.5.0/go.mod h1:3bMD3Rg+zkqx8MRYPi7Pyb0Ie97QEBmdxbhnCLlSvSU= -github.com/moby/sys/mountinfo v0.6.0/go.mod h1:3bMD3Rg+zkqx8MRYPi7Pyb0Ie97QEBmdxbhnCLlSvSU= -github.com/moby/sys/signal v0.6.0/go.mod h1:GQ6ObYZfqacOwTtlXvcmh9A26dVRul/hbOZn88Kg8Tg= -github.com/moby/sys/symlink v0.1.0/go.mod h1:GGDODQmbFOjFsXvfLVn3+ZRxkch54RkSiGqsZeMYowQ= -github.com/moby/sys/symlink v0.2.0/go.mod h1:7uZVF2dqJjG/NsClqul95CqKOBRQyYSNnJ6BMgR/gFs= -github.com/moby/term v0.0.0-20200312100748-672ec06f55cd/go.mod h1:DdlQx2hp0Ss5/fLikoLlEeIYiATotOjgB//nb973jeo= -github.com/moby/term v0.0.0-20200915141129-7f0af18e79f2/go.mod h1:TjQg8pa4iejrUrjiz0MCtMV38jdMNW4doKSiBrEvCQQ= -github.com/moby/term v0.0.0-20201216013528-df9cb8a40635/go.mod h1:FBS0z0QWA44HXygs7VXDUOGoN/1TV3RuWkLO04am3wc= -github.com/moby/term v0.0.0-20210610120745-9d4ed1856297/go.mod h1:vgPCkQMyxTZ7IDy8SXRufE172gr8+K/JE/7hHFxHW3A= -github.com/moby/term v0.0.0-20210619224110-3f7ff695adc6/go.mod h1:E2VnQOmVuvZB6UYnnDB0qG5Nq/1tD9acaOpo6xmt0Kw= -github.com/moby/term v0.0.0-20220808134915-39b0c02b01ae/go.mod h1:E2VnQOmVuvZB6UYnnDB0qG5Nq/1tD9acaOpo6xmt0Kw= github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= +github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg= github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= -github.com/modern-go/reflect2 v0.0.0-20180320133207-05fbef0ca5da/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= -github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk= -github.com/modocache/gover v0.0.0-20171022184752-b58185e213c5/go.mod h1:caMODM3PzxT8aQXRPkAt8xlV/e7d7w8GM5g0fa5F0D8= -github.com/mohae/deepcopy v0.0.0-20170929034955-c48cc78d4826/go.mod h1:TaXosZuwdSHYgviHp1DAtfrULt5eUgsSMsZf+YrPgl8= -github.com/moricho/tparallel v0.2.1/go.mod h1:fXEIZxG2vdfl0ZF8b42f5a78EhjjD5mX8qUplsoSU4k= -github.com/morikuni/aec v1.0.0/go.mod h1:BbKIizmSmc5MMPqRYbxO4ZU0S0+P200+tUnFx7PXmsc= -github.com/mozilla/scribe v0.0.0-20180711195314-fb71baf557c1/go.mod h1:FIczTrinKo8VaLxe6PWTPEXRXDIHz2QAwiaBaP5/4a8= -github.com/mozilla/tls-observatory v0.0.0-20190404164649-a3c1b6cfecfd/go.mod h1:SrKMQvPiws7F7iqYp8/TX+IhxCYhzr6N/1yb8cwHsGk= -github.com/mozilla/tls-observatory v0.0.0-20200317151703-4fa42e1c2dee/go.mod h1:SrKMQvPiws7F7iqYp8/TX+IhxCYhzr6N/1yb8cwHsGk= -github.com/mozilla/tls-observatory v0.0.0-20210609171429-7bc42856d2e5/go.mod h1:FUqVoUPHSEdDR0MnFM3Dh8AU0pZHLXUD127SAJGER/s= -github.com/mrunalp/fileutils v0.0.0-20200520151820-abd8a0e76976/go.mod h1:x8F1gnqOkIEiO4rqoeEEEqQbo7HjGMTvyoq3gej4iT0= +github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M= github.com/mrunalp/fileutils v0.5.0/go.mod h1:M1WthSahJixYnrXQl/DFQuteStB1weuxD2QJNHXfbSQ= -github.com/mschoch/smat v0.0.0-20160514031455-90eadee771ae/go.mod h1:qAyveg+e4CE+eKJXWVjKXM4ck2QobLqTDytGJbLLhJg= +github.com/mtibben/percent v0.2.1 h1:5gssi8Nqo8QU/r2pynCm+hBQHpkB/uNK7BJCFogWdzs= github.com/mtibben/percent v0.2.1/go.mod h1:KG9uO+SZkUp+VkRHsCdYQV3XSZrrSpR3O9ibNBTZrns= -github.com/munnerz/goautoneg v0.0.0-20120707110453-a547fc61f48d/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ= -github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ= github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= +github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f h1:KUppIJq7/+SVif2QVs3tOP0zanoHgBEVAwHxUSIzRqU= github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= -github.com/mwitkow/go-proto-validators v0.0.0-20180403085117-0950a7990007/go.mod h1:m2XC9Qq0AlmmVksL6FktJCdTYyLk7V3fKyp0sl1yWQo= -github.com/mwitkow/go-proto-validators v0.2.0/go.mod h1:ZfA1hW+UH/2ZHOWvQ3HnQaU0DtnpXu850MZiy+YUgcc= github.com/mwitkow/grpc-proxy v0.0.0-20181017164139-0f1106ef9c76/go.mod h1:x5OoJHDHqxHS801UIuhqGl6QdSAEJvtausosHSdazIo= -github.com/mxk/go-flowrate v0.0.0-20140419014527-cca7078d478f/go.mod h1:ZdcZmHo+o7JKHSa8/e818NopupXU1YMK5fe1lsApnBw= -github.com/nakabonne/nestif v0.3.0/go.mod h1:dI314BppzXjJ4HsCnbo7XzrJHPszZsjnk5wEBSYHI2c= -github.com/nakabonne/nestif v0.3.1/go.mod h1:9EtoZochLn5iUprVDmDjqGKPofoUEBL8U4Ngq6aY7OE= github.com/naoina/go-stringutil v0.1.0/go.mod h1:XJ2SJL9jCtBh+P9q5btrd/Ylo8XwT/h1USek5+NqSA0= github.com/naoina/toml v0.1.2-0.20170918210437-9fafd6967416/go.mod h1:NBIhNtsFMo3G2szEBne+bO4gS192HuIYRqfvOWb4i1E= github.com/nats-io/jwt v0.3.0/go.mod h1:fRYCDE99xlTsqUzISS1Bi75UBJ6ljOJQOAAu5VglpSg= github.com/nats-io/jwt v0.3.2/go.mod h1:/euKqTS1ZD+zzjYrY7pseZrTtWQSjujC7xjPc8wL6eU= -github.com/nats-io/jwt v1.2.2/go.mod h1:/xX356yQA6LuXI9xWW7mZNpxgF2mBmGecH+Fj34sP5Q= -github.com/nats-io/jwt/v2 v2.0.3/go.mod h1:VRP+deawSXyhNjXmxPCHskrR6Mq50BqpEI5SEcNiGlY= github.com/nats-io/nats-server/v2 v2.1.2/go.mod h1:Afk+wRZqkMQs/p45uXdrVLuab3gwv3Z8C4HTBu8GD/k= -github.com/nats-io/nats-server/v2 v2.5.0/go.mod h1:Kj86UtrXAL6LwYRA6H4RqzkHhK0Vcv2ZnKD5WbQ1t3g= github.com/nats-io/nats.go v1.9.1/go.mod h1:ZjDU1L/7fJ09jvUSRVBR2e7+RnLiiIQyqyzEE/Zbp4w= -github.com/nats-io/nats.go v1.12.1/go.mod h1:BPko4oXsySz4aSWeFgOHLZs3G4Jq4ZAyE6/zMCxRT6w= github.com/nats-io/nkeys v0.1.0/go.mod h1:xpnFELMwJABBLVhffcfd1MZx6VsNRFpEugbxziKVo7w= github.com/nats-io/nkeys v0.1.3/go.mod h1:xpnFELMwJABBLVhffcfd1MZx6VsNRFpEugbxziKVo7w= -github.com/nats-io/nkeys v0.2.0/go.mod h1:XdZpAbhgyyODYqjTawOnIOI7VlbKSarI9Gfy1tqEu/s= -github.com/nats-io/nkeys v0.3.0/go.mod h1:gvUNGjVcM2IPr5rCsRsC6Wb3Hr2CQAm08dsxtV6A5y4= github.com/nats-io/nuid v1.0.1/go.mod h1:19wcPz3Ph3q0Jbyiqsd0kePYG7A95tJPxeL+1OSON2c= -github.com/nbutton23/zxcvbn-go v0.0.0-20180912185939-ae427f1e4c1d/go.mod h1:o96djdrsSGy3AWPyBgZMAGfxZNfgntdJG+11KU4QvbU= -github.com/nbutton23/zxcvbn-go v0.0.0-20210217022336-fa2cb2858354/go.mod h1:KSVJerMDfblTH7p5MZaTt+8zaT2iEk3AkVb9PQdZuE8= -github.com/ncw/swift v1.0.47/go.mod h1:23YIA4yWVnGwv2dQlN4bB7egfYX6YLn0Yo/S6zZO/ZM= github.com/neilotoole/errgroup v0.1.5/go.mod h1:Q2nLGf+594h0CLBs/Mbg6qOr7GtqDK7C2S41udRnToE= -github.com/neilotoole/errgroup v0.1.6/go.mod h1:Q2nLGf+594h0CLBs/Mbg6qOr7GtqDK7C2S41udRnToE= -github.com/networkplumbing/go-nft v0.2.0/go.mod h1:HnnM+tYvlGAsMU7yoYwXEVLLiDW9gdMmb5HoGcwpuQs= github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno= -github.com/nishanths/exhaustive v0.7.11/go.mod h1:gX+MP7DWMKJmNa1HfMozK+u04hQd3na9i0hyqf3/dOI= -github.com/nishanths/exhaustive v0.8.3/go.mod h1:qj+zJJUgJ76tR92+25+03oYUhzF4R7/2Wk7fGTfCHmg= -github.com/nishanths/predeclared v0.0.0-20190419143655-18a43bb90ffc/go.mod h1:62PewwiQTlm/7Rj+cxVYqZvDIUc+JjZq6GHAC1fsObQ= github.com/nishanths/predeclared v0.0.0-20200524104333-86fad755b4d3/go.mod h1:nt3d53pc1VYcphSCIaYAJtnPYnr3Zyn8fMq2wvPGPso= -github.com/nishanths/predeclared v0.2.2/go.mod h1:RROzoN6TnGQupbC+lqggsOlcgysk3LMK/HI84Mp280c= github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A= +github.com/nxadm/tail v1.4.8 h1:nPr65rt6Y5JFSKQO7qToXr7pePgD6Gwiw05lkbyAQTE= github.com/nxadm/tail v1.4.8/go.mod h1:+ncqLTQzXmGhMZNUePPaPqPvBxHAIsmXswZKocGu+AU= github.com/oklog/oklog v0.3.2/go.mod h1:FCV+B7mhrz4o+ueLpx+KqkyXRGMWOYEvfiXtdGtbWGs= github.com/oklog/run v1.0.0/go.mod h1:dlhp/R75TPv97u0XWUtDeV/lRKWPKSdTuV0TZvrmrQA= github.com/oklog/ulid v1.3.1/go.mod h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn4U= -github.com/oklog/ulid/v2 v2.0.2/go.mod h1:mtBL0Qe/0HAx6/a4Z30qxVIAL1eQDweXq5lxOEiwQ68= -github.com/oklog/ulid/v2 v2.1.0/go.mod h1:rcEKHmBBKfef9DhnvX7y1HZBYxjXb0cP5ExxNsTT1QQ= github.com/olekukonko/tablewriter v0.0.0-20170122224234-a0225b3f23b5/go.mod h1:vsDQFd/mU46D+Z4whnwzcISnGGzXWMclvtLoiIKAKIo= github.com/olekukonko/tablewriter v0.0.1/go.mod h1:vsDQFd/mU46D+Z4whnwzcISnGGzXWMclvtLoiIKAKIo= github.com/olekukonko/tablewriter v0.0.2-0.20190409134802-7e037d187b0c/go.mod h1:vsDQFd/mU46D+Z4whnwzcISnGGzXWMclvtLoiIKAKIo= -github.com/olekukonko/tablewriter v0.0.2/go.mod h1:rSAaSIOAGT9odnlyGlUfAJaoc5w2fSBUmeGDbRWPxyQ= -github.com/olekukonko/tablewriter v0.0.5/go.mod h1:hPp6KlRPjbx+hW8ykQs1w3UBbZlj6HuIJcUGPhkA7kY= -github.com/onsi/ginkgo v0.0.0-20151202141238-7f8ab55aaf3b/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= -github.com/onsi/ginkgo v0.0.0-20170829012221-11459a886d9c/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/ginkgo v1.7.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= -github.com/onsi/ginkgo v1.8.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= -github.com/onsi/ginkgo v1.10.1/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= -github.com/onsi/ginkgo v1.10.3/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= -github.com/onsi/ginkgo v1.11.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= -github.com/onsi/ginkgo v1.12.0/go.mod h1:oUhWkIvk5aDxtKvDDuw8gItl8pKl42LzjC9KZE0HfGg= github.com/onsi/ginkgo v1.12.1/go.mod h1:zj2OWP4+oCPe1qIXoGWkgMRwljMUYCdkwsT2108oapk= -github.com/onsi/ginkgo v1.13.0/go.mod h1:+REjRxOmWfHCjfv9TTWB1jD1Frx4XydAD3zm1lskyM0= github.com/onsi/ginkgo v1.14.0/go.mod h1:iSB4RoI2tjJc9BBv4NKIKWKya62Rps+oPG/Lv9klQyY= github.com/onsi/ginkgo v1.16.2/go.mod h1:CObGmKUOKaSC0RjmoAK7tKyn4Azo5P2IWuoMnvwxz1E= +github.com/onsi/ginkgo v1.16.4 h1:29JGrr5oVBm5ulCWet69zQkzWipVXIol6ygQUe/EzNc= github.com/onsi/ginkgo v1.16.4/go.mod h1:dX+/inL/fNMqNlz0e9LfyB9TswhZpCVdJM/Z6Vvnwo0= -github.com/onsi/ginkgo/v2 v2.0.0/go.mod h1:vw5CSIxN1JObi/U8gcbwft7ZxR2dgaR70JSE3/PpL4c= -github.com/onsi/ginkgo/v2 v2.1.3/go.mod h1:vw5CSIxN1JObi/U8gcbwft7ZxR2dgaR70JSE3/PpL4c= -github.com/onsi/ginkgo/v2 v2.1.4/go.mod h1:um6tUpWM/cxCK3/FK8BXqEiUMUwRgSM4JXG47RKZmLU= -github.com/onsi/gomega v0.0.0-20151007035656-2152b45fa28a/go.mod h1:C1qb7wdrVGGVU+Z6iS04AVkA3Q65CEZX59MT0QO5uiA= -github.com/onsi/gomega v0.0.0-20170829124025-dcabb60a477c/go.mod h1:C1qb7wdrVGGVU+Z6iS04AVkA3Q65CEZX59MT0QO5uiA= github.com/onsi/gomega v1.4.1/go.mod h1:C1qb7wdrVGGVU+Z6iS04AVkA3Q65CEZX59MT0QO5uiA= github.com/onsi/gomega v1.4.3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= -github.com/onsi/gomega v1.5.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= -github.com/onsi/gomega v1.7.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY= -github.com/onsi/gomega v1.8.1/go.mod h1:Ho0h+IUsWyvy1OpqCwxlQ/21gkhVunqlU8fDGcoTdcA= -github.com/onsi/gomega v1.9.0/go.mod h1:Ho0h+IUsWyvy1OpqCwxlQ/21gkhVunqlU8fDGcoTdcA= github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo= -github.com/onsi/gomega v1.10.3/go.mod h1:V9xEwhxec5O8UDM77eCW8vLymOMltsqPVYWrpDsH8xc= github.com/onsi/gomega v1.13.0/go.mod h1:lRk9szgn8TxENtWd0Tp4c3wjlRfMTMH27I+3Je41yGY= -github.com/onsi/gomega v1.15.0/go.mod h1:cIuvLEne0aoVhAgh/O6ac0Op8WWw9H6eYCriF+tEHG0= -github.com/onsi/gomega v1.17.0/go.mod h1:HnhC7FXeEQY45zxNK3PPoIUhzk/80Xly9PcubAlGdZY= -github.com/onsi/gomega v1.18.1/go.mod h1:0q+aL8jAiMXy9hbwj2mr5GziHiwhAIQpFmmtT5hitRs= -github.com/onsi/gomega v1.19.0/go.mod h1:LY+I3pBVzYsTBU1AnDwOSxaYi9WoWiqgwooUqq9yPro= -github.com/onsi/gomega v1.20.0/go.mod h1:DtrZpjmvpn2mPm4YWQa0/ALMDj9v4YxLgojwPeREyVo= +github.com/onsi/gomega v1.20.0 h1:8W0cWlwFkflGPLltQvLRB7ZVD5HuP6ng320w2IS245Q= github.com/op/go-logging v0.0.0-20160315200505-970db520ece7/go.mod h1:HzydrMdWErDVzsI23lYNej1Htcns9BCg93Dk0bBINWk= -github.com/opencontainers/go-digest v0.0.0-20170106003457-a6d0ee40d420/go.mod h1:cMLVZDEM3+U2I4VmLI6N8jQYUd2OVphdqWwCJHrFt2s= -github.com/opencontainers/go-digest v0.0.0-20180430190053-c9281466c8b2/go.mod h1:cMLVZDEM3+U2I4VmLI6N8jQYUd2OVphdqWwCJHrFt2s= github.com/opencontainers/go-digest v1.0.0-rc1/go.mod h1:cMLVZDEM3+U2I4VmLI6N8jQYUd2OVphdqWwCJHrFt2s= -github.com/opencontainers/go-digest v1.0.0-rc1.0.20180430190053-c9281466c8b2/go.mod h1:cMLVZDEM3+U2I4VmLI6N8jQYUd2OVphdqWwCJHrFt2s= -github.com/opencontainers/go-digest v1.0.0/go.mod h1:0JzlMkj0TRzQZfJkVvzbP0HBR3IKzErnv2BNG4W4MAM= -github.com/opencontainers/image-spec v1.0.0/go.mod h1:BtxoFyWECRxE4U/7sNtV5W15zMzWCbyJoFRP3s7yZA0= +github.com/opencontainers/go-digest v1.0.0 h1:apOUWs51W5PlhuyGyz9FCeeBIOUDA/6nW8Oi/yOhh5U= github.com/opencontainers/image-spec v1.0.1/go.mod h1:BtxoFyWECRxE4U/7sNtV5W15zMzWCbyJoFRP3s7yZA0= -github.com/opencontainers/image-spec v1.0.2-0.20211117181255-693428a734f5/go.mod h1:BtxoFyWECRxE4U/7sNtV5W15zMzWCbyJoFRP3s7yZA0= -github.com/opencontainers/image-spec v1.0.2/go.mod h1:BtxoFyWECRxE4U/7sNtV5W15zMzWCbyJoFRP3s7yZA0= -github.com/opencontainers/image-spec v1.0.3-0.20211202183452-c5a74bcca799/go.mod h1:BtxoFyWECRxE4U/7sNtV5W15zMzWCbyJoFRP3s7yZA0= -github.com/opencontainers/image-spec v1.1.0-rc2/go.mod h1:3OVijpioIKYWTqjiG0zfF6wvoJ4fAXGbjdZuI2NgsRQ= -github.com/opencontainers/runc v0.0.0-20190115041553-12f6a991201f/go.mod h1:qT5XzbpPznkRYVz/mWwUaVBUv2rmF59PVA73FjuZG0U= +github.com/opencontainers/image-spec v1.1.0-rc2 h1:2zx/Stx4Wc5pIPDvIxHXvXtQFW/7XWJGmnM7r3wg034= github.com/opencontainers/runc v0.1.1/go.mod h1:qT5XzbpPznkRYVz/mWwUaVBUv2rmF59PVA73FjuZG0U= -github.com/opencontainers/runc v1.0.0-rc10/go.mod h1:qT5XzbpPznkRYVz/mWwUaVBUv2rmF59PVA73FjuZG0U= -github.com/opencontainers/runc v1.0.0-rc8.0.20190926000215-3e425f80a8c9/go.mod h1:qT5XzbpPznkRYVz/mWwUaVBUv2rmF59PVA73FjuZG0U= -github.com/opencontainers/runc v1.0.0-rc9/go.mod h1:qT5XzbpPznkRYVz/mWwUaVBUv2rmF59PVA73FjuZG0U= -github.com/opencontainers/runc v1.0.0-rc92/go.mod h1:X1zlU4p7wOlX4+WRCz+hvlRv8phdL7UqbYD+vQwNMmE= -github.com/opencontainers/runc v1.0.0-rc93/go.mod h1:3NOsor4w32B2tC0Zbl8Knk4Wg84SM2ImC1fxBuqJ/H0= github.com/opencontainers/runc v1.0.2/go.mod h1:aTaHFFwQXuA71CiyxOdFFIorAoemI04suvGRQFzWTD0= -github.com/opencontainers/runc v1.0.3/go.mod h1:aTaHFFwQXuA71CiyxOdFFIorAoemI04suvGRQFzWTD0= -github.com/opencontainers/runc v1.1.0/go.mod h1:Tj1hFw6eFWp/o33uxGf5yF2BX5yz2Z6iptFpuvbbKqc= -github.com/opencontainers/runc v1.1.1/go.mod h1:Tj1hFw6eFWp/o33uxGf5yF2BX5yz2Z6iptFpuvbbKqc= -github.com/opencontainers/runc v1.1.2/go.mod h1:Tj1hFw6eFWp/o33uxGf5yF2BX5yz2Z6iptFpuvbbKqc= -github.com/opencontainers/runc v1.1.3/go.mod h1:1J5XiS+vdZ3wCyZybsuxXZWGrgSr8fFJHLXuG2PsnNg= -github.com/opencontainers/runtime-spec v0.1.2-0.20190507144316-5b71a03e2700/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0= -github.com/opencontainers/runtime-spec v1.0.1/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0= -github.com/opencontainers/runtime-spec v1.0.2-0.20190207185410-29686dbc5559/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0= -github.com/opencontainers/runtime-spec v1.0.2/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0= -github.com/opencontainers/runtime-spec v1.0.3-0.20200728170252-4d89ac9fbff6/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0= -github.com/opencontainers/runtime-spec v1.0.3-0.20200929063507-e6143ca7d51d/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0= +github.com/opencontainers/runc v1.1.3 h1:vIXrkId+0/J2Ymu2m7VjGvbSlAId9XNRPhn2p4b+d8w= github.com/opencontainers/runtime-spec v1.0.3-0.20210326190908-1c3f411f0417/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0= -github.com/opencontainers/runtime-tools v0.0.0-20181011054405-1d69bd0f9c39/go.mod h1:r3f7wjNzSs2extwzU3Y+6pKfobzPh+kKFJ3ofN+3nfs= -github.com/opencontainers/selinux v1.6.0/go.mod h1:VVGKuOLlE7v4PJyT6h7mNWvq1rzqiriPsEqVhc+svHE= -github.com/opencontainers/selinux v1.8.0/go.mod h1:RScLhm78qiWa2gbVCcGkC7tCGdgk3ogry1nUQF8Evvo= github.com/opencontainers/selinux v1.8.2/go.mod h1:MUIHuUEvKB1wtJjQdOyYRgOnLD2xAPP8dBsCoU0KuF8= -github.com/opencontainers/selinux v1.10.0/go.mod h1:2i0OySw99QjzBBQByd1Gr9gSjvuho1lHsJxIJ3gGbJI= -github.com/opencontainers/selinux v1.10.1/go.mod h1:2i0OySw99QjzBBQByd1Gr9gSjvuho1lHsJxIJ3gGbJI= github.com/opentracing-contrib/go-observer v0.0.0-20170622124052-a52f23424492/go.mod h1:Ngi6UdF0k5OKD5t5wlmGhe/EDKPoUM3BXZSSfIuJbis= -github.com/opentracing-contrib/go-stdlib v1.0.0/go.mod h1:qtI1ogk+2JhVPIXVc6q+NHziSmy2W5GbdQZFUHADCBU= github.com/opentracing/basictracer-go v1.0.0/go.mod h1:QfBfYuafItcjQuMwinw9GhYKwFXS9KnPs5lxoYwgW74= github.com/opentracing/opentracing-go v1.0.2/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= -github.com/opentracing/opentracing-go v1.0.3-0.20180606204148-bd9c31933947/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= github.com/opentracing/opentracing-go v1.1.0/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= -github.com/opentracing/opentracing-go v1.2.0/go.mod h1:GxEUsuufX4nBwe+T+Wl9TAgYrxe9dPLANfrWvHYVTgc= github.com/openzipkin-contrib/zipkin-go-opentracing v0.4.5/go.mod h1:/wsWhb9smxSfWAKL3wpBW7V8scJMt8N8gnaMCS9E/cA= -github.com/openzipkin/zipkin-go v0.1.1/go.mod h1:NtoC/o8u3JlF1lSlyPNswIbeQH9bJTmOf0Erfk+hxe8= -github.com/openzipkin/zipkin-go v0.1.3/go.mod h1:NtoC/o8u3JlF1lSlyPNswIbeQH9bJTmOf0Erfk+hxe8= github.com/openzipkin/zipkin-go v0.1.6/go.mod h1:QgAqvLzwWbR/WpD4A3cGpPtJrZXNIiJc5AZX7/PBEpw= github.com/openzipkin/zipkin-go v0.2.1/go.mod h1:NaW6tEwdmWMaCDZzg8sh+IBNOxHMPnhQw8ySjnjRyN4= github.com/openzipkin/zipkin-go v0.2.2/go.mod h1:NaW6tEwdmWMaCDZzg8sh+IBNOxHMPnhQw8ySjnjRyN4= -github.com/openzipkin/zipkin-go v0.2.5/go.mod h1:KpXfKdgRDnnhsxw4pNIH9Md5lyFqKUa4YDFlwRYAMyE= +github.com/ory/dockertest v3.3.5+incompatible h1:iLLK6SQwIhcbrG783Dghaaa3WPzGc+4Emza6EbVUUGA= github.com/ory/dockertest v3.3.5+incompatible/go.mod h1:1vX4m9wsvi00u5bseYwXaSnhNrne+V0E6LAcBILJdPs= -github.com/ory/dockertest/v3 v3.9.1/go.mod h1:42Ir9hmvaAPm0Mgibk6mBPi7SFvTXxEcnztDYOJ//uM= -github.com/otiai10/copy v1.2.0/go.mod h1:rrF5dJ5F0t/EWSYODDu4j9/vEeYHMkc8jt0zJChqQWw= github.com/otiai10/copy v1.6.0/go.mod h1:XWfuS3CrI0R6IE0FbgHsEazaXO8G0LpMp9o8tos0x4E= github.com/otiai10/curr v0.0.0-20150429015615-9b4961190c95/go.mod h1:9qAhocn7zKJG+0mI8eUu6xqkFDYS2kb2saOteoSB3cE= github.com/otiai10/curr v1.0.0/go.mod h1:LskTG5wDwr8Rs+nNQ+1LlxRjAtTZZjtJW4rMXl6j4vs= github.com/otiai10/mint v1.3.0/go.mod h1:F5AjcsTsWUqX+Na9fpHb52P8pcRX2CI6A3ctIT91xUo= -github.com/otiai10/mint v1.3.1/go.mod h1:/yxELlJQ0ufhjUwhshSj+wFjZ78CnZ48/1wtmBH1OTc= github.com/otiai10/mint v1.3.2/go.mod h1:/yxELlJQ0ufhjUwhshSj+wFjZ78CnZ48/1wtmBH1OTc= github.com/pact-foundation/pact-go v1.0.4/go.mod h1:uExwJY4kCzNPcHRj+hCR/HBbOOIwwtUjcrb0b5/5kLM= github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= +github.com/pascaldekloe/goe v0.1.0 h1:cBOtyMzM9HTpWjXfbbunk26uA6nG3a8n06Wieeh0MwY= github.com/pascaldekloe/goe v0.1.0/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= -github.com/paulbellamy/ratecounter v0.2.0/go.mod h1:Hfx1hDpSGoqxkVVpBi/IlYD7kChlfo5C6hzIHwPqfFE= -github.com/pborman/getopt v0.0.0-20170112200414-7148bc3a4c30/go.mod h1:85jBQOZwpVEaDAr341tbn15RS4fCAsIst0qp7i8ex1o= github.com/pborman/uuid v0.0.0-20170112150404-1b00554d8222/go.mod h1:VyrYX9gd7irzKovcSS6BIIEwPRkP2Wm2m9ufcdFSJ34= github.com/pborman/uuid v1.2.0/go.mod h1:X/NO0urCmaxf9VXbdlT7C2Yzkj2IKimNn4k+gtPdI/k= github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic= -github.com/pelletier/go-toml v1.8.0/go.mod h1:D6yutnOGMveHEPV7VQOuvI/gXY61bv+9bAOTRnLElKs= -github.com/pelletier/go-toml v1.8.1/go.mod h1:T2/BmBdy8dvIRq1a/8aqjN41wvWlN4lrapLU/GW4pbc= github.com/pelletier/go-toml v1.9.3/go.mod h1:u1nR/EPcESfeI/szUZKdtJ0xRNbUoANCkoOuaOx1Y+c= -github.com/pelletier/go-toml v1.9.4/go.mod h1:u1nR/EPcESfeI/szUZKdtJ0xRNbUoANCkoOuaOx1Y+c= +github.com/pelletier/go-toml v1.9.5 h1:4yBQzkHv+7BHq2PQUZF3Mx0IYxG7LsP222s7Agd3ve8= github.com/pelletier/go-toml v1.9.5/go.mod h1:u1nR/EPcESfeI/szUZKdtJ0xRNbUoANCkoOuaOx1Y+c= -github.com/pelletier/go-toml/v2 v2.0.0-beta.8/go.mod h1:r9LEWfGN8R5k0VXJ+0BkIe7MYkRdwZOjgMj2KwnJFUo= -github.com/pelletier/go-toml/v2 v2.0.0/go.mod h1:r9LEWfGN8R5k0VXJ+0BkIe7MYkRdwZOjgMj2KwnJFUo= -github.com/pelletier/go-toml/v2 v2.0.1/go.mod h1:r9LEWfGN8R5k0VXJ+0BkIe7MYkRdwZOjgMj2KwnJFUo= -github.com/pelletier/go-toml/v2 v2.0.2/go.mod h1:MovirKjgVRESsAvNZlAjtFwV867yGuwRkXbG66OzopI= +github.com/pelletier/go-toml/v2 v2.0.5 h1:ipoSadvV8oGUjnUbMub59IDPPwfxF694nG/jwbMiyQg= github.com/pelletier/go-toml/v2 v2.0.5/go.mod h1:OMHamSCAODeSsVrwwvcJOaoN0LIUIaFVNZzmWyNfXas= github.com/performancecopilot/speed v3.0.0+incompatible/go.mod h1:/CLtqpZ5gBg1M9iaPbIdPPGyKcA8hKdoy6hAWba7Yac= -github.com/performancecopilot/speed/v4 v4.0.0/go.mod h1:qxrSyuDGrTOWfV+uKRFhfxw6h/4HXRGUiZiufxo49BM= -github.com/peterbourgon/diskv v2.0.1+incompatible/go.mod h1:uqqh8zWWbv1HBMNONnaR/tNboyR3/BZd58JJSHlUSCU= -github.com/peterh/liner v1.0.1-0.20180619022028-8c1271fcf47f/go.mod h1:xIteQHvHuaLYG9IFj6mSxM0fCKrs34IrEQUhOYuGPHc= github.com/peterh/liner v1.1.1-0.20190123174540-a2c9a5303de7/go.mod h1:CRroGNssyjTd/qIG2FyxByd2S8JEAZXBl4qUrZf8GS0= +github.com/petermattis/goid v0.0.0-20180202154549-b0b1615b78e5 h1:q2e307iGHPdTGp0hoxKjt1H5pDo6utceo3dQVK3I5XQ= github.com/petermattis/goid v0.0.0-20180202154549-b0b1615b78e5/go.mod h1:jvVRKCrJTQWu0XVbaOlby/2lO20uSCHEMzzplHXte1o= -github.com/phayes/checkstyle v0.0.0-20170904204023-bfd46e6a821d/go.mod h1:3OzsM7FXDQlpCiw2j81fOmAwQLnZnLGXVKUzeKQXIAw= -github.com/philhofer/fwd v1.0.0/go.mod h1:gk3iGcWd9+svBvR0sR+KPcfE+RNWozjowpeBVG3ZVNU= github.com/philhofer/fwd v1.1.1/go.mod h1:gk3iGcWd9+svBvR0sR+KPcfE+RNWozjowpeBVG3ZVNU= -github.com/phpdave11/gofpdf v1.4.2/go.mod h1:zpO6xFn9yxo3YLyMvW8HcKWVdbNqgIfOOp2dXMnm1mY= -github.com/phpdave11/gofpdi v1.0.12/go.mod h1:vBmVV0Do6hSBHC8uKUQ71JGW+ZGQq74llk/7bXwjDoI= -github.com/phpdave11/gofpdi v1.0.13/go.mod h1:vBmVV0Do6hSBHC8uKUQ71JGW+ZGQq74llk/7bXwjDoI= github.com/pierrec/lz4 v1.0.2-0.20190131084431-473cd7ce01a1/go.mod h1:3/3N9NVKO0jef7pBehbT1qWhCMrIgbYNnFAZCqQ5LRc= github.com/pierrec/lz4 v2.0.5+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY= -github.com/pkg/browser v0.0.0-20180916011732-0a3d74bf9ce4/go.mod h1:4OwLy04Bl9Ef3GJJCoec+30X3LQs/0/m4HFRt/2LUSA= -github.com/pkg/browser v0.0.0-20210911075715-681adbf594b8/go.mod h1:HKlIX3XHQyzLZPlr7++PzdhaXEj94dEiJgZDTsxEqUI= -github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e/go.mod h1:pJLUxLENpZxwdsKMEsNbx1VGcRFpLqf3715MtcvvzbA= github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= -github.com/pkg/errors v0.8.1-0.20171018195549-f15c970de5b7/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/profile v1.2.1/go.mod h1:hJw3o1OdXxsrSjjVksARp5W95eeEaEfptyVZyv6JUPA= -github.com/pkg/profile v1.5.0/go.mod h1:qBsxPvzyUincmltOk6iyRVxHYg4adc0OFOv72ZdLa18= -github.com/pkg/profile v1.6.0/go.mod h1:qBsxPvzyUincmltOk6iyRVxHYg4adc0OFOv72ZdLa18= github.com/pkg/sftp v1.10.1/go.mod h1:lYOWFsE0bwd1+KfKJaKeuokY15vzFx25BLbzYYoAxZI= github.com/pkg/sftp v1.13.1/go.mod h1:3HaPG6Dq1ILlpPZRO0HVMrsydcdLt6HRDccSgb87qRg= -github.com/pkg/term v0.0.0-20180730021639-bffc007b7fd5/go.mod h1:eCbImbZ95eXtAUIbLAuAVnBnwf83mjf6QIVH8SHYwqQ= -github.com/pmezard/go-difflib v0.0.0-20151028094244-d8ed2627bdf0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/polyfloyd/go-errorlint v1.0.0/go.mod h1:KZy4xxPJyy88/gldCe5OdW6OQRtNO3EZE7hXzmnebgA= -github.com/polyfloyd/go-errorlint v1.0.5/go.mod h1:APVvOesVSAnne5SClsPxPdfvZTVDojXh1/G3qb5wjGI= github.com/posener/complete v1.1.1/go.mod h1:em0nMJCgc9GFtwrmVmEMR/ZL6WyhyjMBndrE9hABlRI= -github.com/posener/complete v1.2.3/go.mod h1:WZIdtGGp+qx0sLrYKtIRAruyNpv6hFCicSgv7Sy7s/s= -github.com/power-devops/perfstat v0.0.0-20210106213030-5aafc221ea8c/go.mod h1:OmDBASR4679mdNQnz2pUhc2G8CO2JrUAVFDRBDP/hJE= -github.com/pquerna/cachecontrol v0.0.0-20171018203845-0dec1b30a021/go.mod h1:prYjPmNq4d1NPVmpShWobRqXY3q7Vp+80DqgxxUrUIA= -github.com/prometheus/client_golang v0.0.0-20180209125602-c332b6f63c06/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= -github.com/prometheus/client_golang v0.8.0/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= github.com/prometheus/client_golang v0.9.3-0.20190127221311-3c4408c8b829/go.mod h1:p2iRAGwDERtqlqzRXnrOVns+ignqQo//hLXqYxZYVNs= github.com/prometheus/client_golang v0.9.3/go.mod h1:/TN21ttK/J9q6uSwhBd54HahCDft0ttaMvbicHlPoso= github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5FsnadC4Ky3P0J6CfImo= -github.com/prometheus/client_golang v1.1.0/go.mod h1:I1FGZT9+L76gKKOs5djB6ezCbFQP1xR9D75/vuwEF3g= github.com/prometheus/client_golang v1.3.0/go.mod h1:hJaj2vgQTGQmVCsAACORcieXFeDPbaTKGT+JTgUa3og= github.com/prometheus/client_golang v1.4.0/go.mod h1:e9GMxYsXl05ICDXkRhurwBS4Q3OK1iX/F2sw+iXX5zU= github.com/prometheus/client_golang v1.7.1/go.mod h1:PY5Wy2awLA44sXw4AOSfFBetzPP4j5+D6mVACh+pe2M= github.com/prometheus/client_golang v1.8.0/go.mod h1:O9VU6huf47PktckDQfMTX0Y8tY0/7TSWwj+ITvv0TnM= github.com/prometheus/client_golang v1.11.0/go.mod h1:Z6t4BnS23TR94PD6BsDNk8yVqroYurpAkEiz0P2BEV0= -github.com/prometheus/client_golang v1.11.1/go.mod h1:Z6t4BnS23TR94PD6BsDNk8yVqroYurpAkEiz0P2BEV0= -github.com/prometheus/client_golang v1.12.1/go.mod h1:3Z9XVyYiZYEO+YQWt3RD2R3jrbd179Rt297l4aS6nDY= -github.com/prometheus/client_golang v1.12.2/go.mod h1:3Z9XVyYiZYEO+YQWt3RD2R3jrbd179Rt297l4aS6nDY= -github.com/prometheus/client_golang v1.13.1/go.mod h1:vTeo+zgvILHsnnj/39Ou/1fPN5nJFOEMgftOUOmlvYQ= +github.com/prometheus/client_golang v1.14.0 h1:nJdhIvne2eSX/XRAFV9PcvFFRbrjbcTUj0VP62TMhnw= github.com/prometheus/client_golang v1.14.0/go.mod h1:8vpkKitgIVNcqrRBWh1C4TIUQgYNtG/XQE4E/Zae36Y= -github.com/prometheus/client_model v0.0.0-20171117100541-99fa1f4be8e5/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= github.com/prometheus/client_model v0.0.0-20190115171406-56726106282f/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= github.com/prometheus/client_model v0.1.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= github.com/prometheus/client_model v0.2.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= +github.com/prometheus/client_model v0.3.0 h1:UBgGFHqYdG/TPFD1B1ogZywDqEkwp3fBMvqdiQ7Xew4= github.com/prometheus/client_model v0.3.0/go.mod h1:LDGWKZIo7rky3hgvBe+caln+Dr3dPggB5dvjtD7w9+w= -github.com/prometheus/common v0.0.0-20180110214958-89604d197083/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro= -github.com/prometheus/common v0.0.0-20180801064454-c7de2306084e/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro= github.com/prometheus/common v0.0.0-20181113130724-41aa239b4cce/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro= github.com/prometheus/common v0.2.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= github.com/prometheus/common v0.4.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= -github.com/prometheus/common v0.6.0/go.mod h1:eBmuwkDJBwy6iBfxCBob6t6dR6ENT/y+J+Zk0j9GMYc= github.com/prometheus/common v0.7.0/go.mod h1:DjGbpBbp5NYNiECxcL/VnbXCCaQpKd3tt26CguLLsqA= github.com/prometheus/common v0.9.1/go.mod h1:yhUN8i9wzaXS3w1O07YhxHEBxD+W35wd8bs7vj7HSQ4= github.com/prometheus/common v0.10.0/go.mod h1:Tlit/dnDKsSWFlCLTWaA1cyBgKHSMdTB80sz/V91rCo= @@ -1902,229 +760,116 @@ github.com/prometheus/common v0.14.0/go.mod h1:U+gB1OBLb1lF3O42bTCL+FK18tX9Oar16 github.com/prometheus/common v0.15.0/go.mod h1:U+gB1OBLb1lF3O42bTCL+FK18tX9Oar16Clt/msog/s= github.com/prometheus/common v0.26.0/go.mod h1:M7rCNAaPfAosfx8veZJCuw84e35h3Cfd9VFqTh1DIvc= github.com/prometheus/common v0.29.0/go.mod h1:vu+V0TpY+O6vW9J44gczi3Ap/oXXR10b+M/gUGO4Hls= -github.com/prometheus/common v0.30.0/go.mod h1:vu+V0TpY+O6vW9J44gczi3Ap/oXXR10b+M/gUGO4Hls= -github.com/prometheus/common v0.32.1/go.mod h1:vu+V0TpY+O6vW9J44gczi3Ap/oXXR10b+M/gUGO4Hls= -github.com/prometheus/common v0.34.0/go.mod h1:gB3sOl7P0TvJabZpLY5uQMpUqRCPPCyRLCZYc7JZTNE= -github.com/prometheus/common v0.37.0/go.mod h1:phzohg0JFMnBEFGxTDbfu3QyL5GI8gTQJFhYO5B3mfA= +github.com/prometheus/common v0.39.0 h1:oOyhkDq05hPZKItWVBkJ6g6AtGxi+fy7F4JvUV8uhsI= github.com/prometheus/common v0.39.0/go.mod h1:6XBZ7lYdLCbkAVhwRsWTZn+IN5AB9F/NXd5w0BbEX0Y= -github.com/prometheus/procfs v0.0.0-20180125133057-cb4147076ac7/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= -github.com/prometheus/procfs v0.0.0-20180725123919-05ee40e3a273/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= github.com/prometheus/procfs v0.0.0-20190117184657-bf6a532e95b1/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= github.com/prometheus/procfs v0.0.0-20190507164030-5867b95ac084/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= -github.com/prometheus/procfs v0.0.0-20190522114515-bc1a522cf7b1/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= -github.com/prometheus/procfs v0.0.3/go.mod h1:4A/X28fw3Fc593LaREMrKMqOKvUAntwMDaekg4FpcdQ= -github.com/prometheus/procfs v0.0.5/go.mod h1:4A/X28fw3Fc593LaREMrKMqOKvUAntwMDaekg4FpcdQ= github.com/prometheus/procfs v0.0.8/go.mod h1:7Qr8sr6344vo1JqZ6HhLceV9o3AJ1Ff+GxbHq6oeK9A= github.com/prometheus/procfs v0.1.3/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU= github.com/prometheus/procfs v0.2.0/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU= github.com/prometheus/procfs v0.3.0/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU= github.com/prometheus/procfs v0.6.0/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA= -github.com/prometheus/procfs v0.7.3/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA= +github.com/prometheus/procfs v0.8.0 h1:ODq8ZFEaYeCaZOJlZZdJA2AbQR98dSHSM1KW/You5mo= github.com/prometheus/procfs v0.8.0/go.mod h1:z7EfXMXOkbkqb9IINtpCn86r/to3BnA0uaxHdg830/4= github.com/prometheus/tsdb v0.6.2-0.20190402121629-4f204dcbc150/go.mod h1:qhTCs0VvXwvX/y3TZrWD7rabWM+ijKTux40TwIPHuXU= github.com/prometheus/tsdb v0.7.1/go.mod h1:qhTCs0VvXwvX/y3TZrWD7rabWM+ijKTux40TwIPHuXU= -github.com/pseudomuto/protoc-gen-doc v1.3.2/go.mod h1:y5+P6n3iGrbKG+9O04V5ld71in3v/bX88wUwgt+U8EA= -github.com/pseudomuto/protokit v0.2.0/go.mod h1:2PdH30hxVHsup8KpBTOXTBeMVhJZVio3Q8ViKSAXT0Q= -github.com/quasilyte/go-consistent v0.0.0-20190521200055-c6f3937de18c/go.mod h1:5STLWrekHfjyYwxBRVRXNOSewLJ3PWfDJd1VyTS21fI= -github.com/quasilyte/go-ruleguard v0.1.2-0.20200318202121-b00d7a75d3d8/go.mod h1:CGFX09Ci3pq9QZdj86B+VGIdNj4VyCo2iPOGS9esB/k= -github.com/quasilyte/go-ruleguard v0.3.1-0.20210203134552-1b5a410e1cc8/go.mod h1:KsAh3x0e7Fkpgs+Q9pNLS5XpFSvYCEVl5gP9Pp1xp30= -github.com/quasilyte/go-ruleguard v0.3.16-0.20220213074421-6aa060fab41a/go.mod h1:VMX+OnnSw4LicdiEGtRSD/1X8kW7GuEscjYNr4cOIT4= -github.com/quasilyte/go-ruleguard v0.3.18/go.mod h1:lOIzcYlgxrQ2sGJ735EHXmf/e9MJ516j16K/Ifcttvs= -github.com/quasilyte/go-ruleguard/dsl v0.3.0/go.mod h1:KeCP03KrjuSO0H1kTuZQCWlQPulDV6YMIXmpQss17rU= -github.com/quasilyte/go-ruleguard/dsl v0.3.16/go.mod h1:KeCP03KrjuSO0H1kTuZQCWlQPulDV6YMIXmpQss17rU= -github.com/quasilyte/go-ruleguard/dsl v0.3.19/go.mod h1:KeCP03KrjuSO0H1kTuZQCWlQPulDV6YMIXmpQss17rU= -github.com/quasilyte/go-ruleguard/dsl v0.3.21/go.mod h1:KeCP03KrjuSO0H1kTuZQCWlQPulDV6YMIXmpQss17rU= -github.com/quasilyte/go-ruleguard/rules v0.0.0-20201231183845-9e62ed36efe1/go.mod h1:7JTjp89EGyU1d6XfBiXihJNG37wB2VRkd125Q1u7Plc= -github.com/quasilyte/go-ruleguard/rules v0.0.0-20211022131956-028d6511ab71/go.mod h1:4cgAphtvu7Ftv7vOT2ZOYhC6CvBxZixcasr8qIOTA50= -github.com/quasilyte/gogrep v0.0.0-20220120141003-628d8b3623b5/go.mod h1:wSEyW6O61xRV6zb6My3HxrQ5/8ke7NE2OayqCHa3xRM= -github.com/quasilyte/gogrep v0.0.0-20220828223005-86e4605de09f/go.mod h1:Cm9lpz9NZjEoL1tgZ2OgeUKPIxL1meE7eo60Z6Sk+Ng= -github.com/quasilyte/regex/syntax v0.0.0-20200407221936-30656e2c4a95/go.mod h1:rlzQ04UMyJXu/aOvhd8qT+hvDrFpiwqp8MRXDY9szc0= -github.com/quasilyte/stdinfo v0.0.0-20220114132959-f7386bf02567/go.mod h1:DWNGW8A4Y+GyBgPuaQJuWiy0XYftx4Xm/y5Jqk9I6VQ= +github.com/r2ishiguro/vrf v0.0.0-20180716233122-192de52975eb h1:3kW8n+FfBaUoqlHxCa6e90PXWpGCWWkdyTZ6F7c9m2I= github.com/r2ishiguro/vrf v0.0.0-20180716233122-192de52975eb/go.mod h1:2NzHJUkr/ERaPNQ2IUuNbB2jMTWYp2DxhcraWbzZj00= +github.com/rakyll/statik v0.1.7 h1:OF3QCZUuyPxuGEP7B4ypUa7sB/iHtqOTDYZXGM8KOdQ= github.com/rakyll/statik v0.1.7/go.mod h1:AlZONWzMtEnMs7W4e/1LURLiI49pIMmp6V9Unghqrcc= github.com/rcrowley/go-metrics v0.0.0-20181016184325-3113b8401b8a/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4= github.com/rcrowley/go-metrics v0.0.0-20200313005456-10cdbea86bc0/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4= +github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475 h1:N/ElC8H3+5XpJzTSTfLsJV/mx9Q9g7kxmchpfZyxgzM= github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4= github.com/regen-network/cosmos-proto v0.3.1 h1:rV7iM4SSFAagvy8RiyhiACbWEGotmqzywPxOvwMdxcg= github.com/regen-network/cosmos-proto v0.3.1/go.mod h1:jO0sVX6a1B36nmE8C9xBFXpNwWejXC7QqCOnH3O0+YM= github.com/regen-network/protobuf v1.3.3-alpha.regen.1 h1:OHEc+q5iIAXpqiqFKeLpu5NwTIkVXUs48vFMwzqpqY4= github.com/regen-network/protobuf v1.3.3-alpha.regen.1/go.mod h1:2DjTFR1HhMQhiWC5sZ4OhQ3+NtdbZ6oBDKQwq5Ou+FI= -github.com/remyoudompheng/bigfft v0.0.0-20170806203942-52369c62f446/go.mod h1:uYEyJGbgTkfkS4+E/PavXkNJcbFIpEtjt2B0KDQ5+9M= -github.com/remyoudompheng/go-dbus v0.0.0-20121104212943-b7232d34b1d5/go.mod h1:+u151txRmLpwxBmpYn9z3d1sdJdjRPQpsXuYeY9jNls= -github.com/remyoudompheng/go-liblzma v0.0.0-20190506200333-81bf2d431b96/go.mod h1:90HvCY7+oHHUKkbeMCiHt1WuFR2/hPJ9QrljDG+v6ls= -github.com/remyoudompheng/go-misc v0.0.0-20190427085024-2d6ac652a50e/go.mod h1:80FQABjoFzZ2M5uEa6FUaJYEmqU2UOKojlFVak1UAwI= -github.com/retailnext/hllpp v1.0.1-0.20180308014038-101a6d2f8b52/go.mod h1:RDpi1RftBQPUCDRw6SmxeaREsAaRKnOclghuzp/WRzc= github.com/rjeczalik/notify v0.9.1/go.mod h1:rKwnCoCGeuQnwBtTSPL9Dad03Vh2n40ePRrjvIXnJho= github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg= -github.com/rogpeppe/fastuuid v1.1.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= -github.com/rogpeppe/go-internal v1.5.2/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTEfhy4qGm1nDQc= -github.com/rogpeppe/go-internal v1.6.1/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTEfhy4qGm1nDQc= -github.com/rogpeppe/go-internal v1.8.1/go.mod h1:JeRgkft04UBgHMgCIwADu4Pn6Mtm5d4nPKWu0nJ5d+o= -github.com/rogpeppe/go-internal v1.9.0/go.mod h1:WtVeX8xhTBvf0smdhujwtBcq4Qrzq/fJaraNFVN+nFs= +github.com/rogpeppe/go-internal v1.9.0 h1:73kH8U+JUqXU8lRuOHeVHaa/SZPifC7BkcraZVejAe8= github.com/rs/cors v0.0.0-20160617231935-a62a804a8a00/go.mod h1:gFx+x8UowdsKA9AchylcLynDq+nNFfI8FkUZdN/jGCU= github.com/rs/cors v1.7.0/go.mod h1:gFx+x8UowdsKA9AchylcLynDq+nNFfI8FkUZdN/jGCU= +github.com/rs/cors v1.8.2 h1:KCooALfAYGs415Cwu5ABvv9n9509fSiG5SQJn/AQo4U= github.com/rs/cors v1.8.2/go.mod h1:XyqrcTp5zjWr1wsJ8PIRZssZ8b/WMcMf71DJnit4EMU= github.com/rs/xhandler v0.0.0-20160618193221-ed27b6fd6521/go.mod h1:RvLn4FgxWubrpZHtQLnOf6EwhN2hEMusxZOhcW9H3UQ= github.com/rs/xid v1.2.1/go.mod h1:+uKXf+4Djp6Md1KODXJxgGQPKngRmWyn10oCKFzNHOQ= -github.com/rs/xid v1.3.0/go.mod h1:trrq9SKmegXys3aeAKXMUTdJsYXVwGY3RLcfgqegfbg= github.com/rs/xid v1.4.0/go.mod h1:trrq9SKmegXys3aeAKXMUTdJsYXVwGY3RLcfgqegfbg= github.com/rs/zerolog v1.23.0/go.mod h1:6c7hFfxPOy7TacJc4Fcdi24/J0NKYGzjG8FWRI916Qo= -github.com/rs/zerolog v1.27.0/go.mod h1:7frBqO0oezxmnO7GF86FY++uy8I0Tk/If5ni1G9Qc0U= +github.com/rs/zerolog v1.28.0 h1:MirSo27VyNi7RJYP3078AA1+Cyzd2GB66qy3aUHvsWY= github.com/rs/zerolog v1.28.0/go.mod h1:NILgTygv/Uej1ra5XxGf82ZFSLk58MFGAUS2o6usyD0= -github.com/rubiojr/go-vhd v0.0.0-20160810183302-0bfd3b39853c/go.mod h1:DM5xW0nvfNNm2uytzsvhI3OnX8uzaRAg8UX/CnDqbto= github.com/russross/blackfriday v1.5.2/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g= -github.com/russross/blackfriday v1.6.0/go.mod h1:ti0ldHuxg49ri4ksnFxlkCfN+hvslNlmVHqNRXXJNAY= github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= -github.com/ruudk/golang-pdf417 v0.0.0-20181029194003-1af4ab5afa58/go.mod h1:6lfFZQK844Gfx8o5WFuvpxWRwnSoipWe/p622j1v06w= -github.com/ruudk/golang-pdf417 v0.0.0-20201230142125-a7e3863a1245/go.mod h1:pQAZKsJ8yyVxGRWYNEm9oFB8ieLgKFnamEyDmSA0BRk= -github.com/ryancurrah/gomodguard v1.0.4/go.mod h1:9T/Cfuxs5StfsocWr4WzDL36HqnX0fVb9d5fSEaLhoE= -github.com/ryancurrah/gomodguard v1.1.0/go.mod h1:4O8tr7hBODaGE6VIhfJDHcwzh5GUccKSJBU0UMXJFVM= -github.com/ryancurrah/gomodguard v1.2.3/go.mod h1:rYbA/4Tg5c54mV1sv4sQTP5WOPBcoLtnBZ7/TEhXAbg= -github.com/ryancurrah/gomodguard v1.2.4/go.mod h1:+Kem4VjWwvFpUJRJSwa16s1tBJe+vbv02+naTow2f6M= -github.com/ryanrolds/sqlclosecheck v0.3.0/go.mod h1:1gREqxyTGR3lVtpngyFo3hZAgk0KCtEdgEkHwDbigdA= github.com/ryanuber/columnize v0.0.0-20160712163229-9b3edd62028f/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts= -github.com/ryanuber/columnize v2.1.0+incompatible/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts= -github.com/safchain/ethtool v0.0.0-20190326074333-42ed695e3de8/go.mod h1:Z0q5wiBQGYcxhMZ6gUqHn6pYNLypFAvaL3UvgZLR0U4= -github.com/safchain/ethtool v0.0.0-20210803160452-9aa261dae9b1/go.mod h1:Z0q5wiBQGYcxhMZ6gUqHn6pYNLypFAvaL3UvgZLR0U4= -github.com/sagikazarmark/crypt v0.3.0/go.mod h1:uD/D+6UF4SrIR1uGEv7bBNkNqLGqUr43MRiaGWX1Nig= -github.com/sagikazarmark/crypt v0.4.0/go.mod h1:ALv2SRj7GxYV4HO9elxH9nS6M9gW+xDNxqmyJ6RfDFM= -github.com/sagikazarmark/crypt v0.5.0/go.mod h1:l+nzl7KWh51rpzp2h7t4MZWyiEWdhNpOAnclKvg+mdA= -github.com/sagikazarmark/crypt v0.6.0/go.mod h1:U8+INwJo3nBv1m6A/8OBXAq7Jnpspk5AxSgDyEQcea8= -github.com/sagikazarmark/crypt v0.8.0/go.mod h1:TmKwZAo97S4Fy4sfMH/HX/cQP5D+ijra2NyLpNNmttY= github.com/samuel/go-zookeeper v0.0.0-20190923202752-2cc03de413da/go.mod h1:gi+0XIa01GRL2eRQVjQkKGqKF3SF9vZR/HnPullcV2E= -github.com/sanposhiho/wastedassign/v2 v2.0.6/go.mod h1:KyZ0MWTwxxBmfwn33zh3k1dmsbF2ud9pAAGfoLfjhtI= github.com/sasha-s/go-deadlock v0.2.1-0.20190427202633-1595213edefa/go.mod h1:F73l+cr82YSh10GxyRI6qZiCgK64VaZjwesgfQ1/iLM= +github.com/sasha-s/go-deadlock v0.3.1 h1:sqv7fDNShgjcaxkO0JNcOAlr8B9+cV5Ey/OB71efZx0= github.com/sasha-s/go-deadlock v0.3.1/go.mod h1:F73l+cr82YSh10GxyRI6qZiCgK64VaZjwesgfQ1/iLM= -github.com/sashamelentyev/interfacebloat v1.1.0/go.mod h1:+Y9yU5YdTkrNvoX0xHc84dxiN1iBi9+G8zZIhPVoNjQ= -github.com/sashamelentyev/usestdlibvars v1.20.0/go.mod h1:0GaP+ecfZMXShS0A94CJn6aEuPRILv8h/VuWI9n1ygg= -github.com/sassoftware/go-rpmutils v0.0.0-20190420191620-a8f1baeba37b/go.mod h1:am+Fp8Bt506lA3Rk3QCmSqmYmLMnPDhdDUcosQCAx+I= -github.com/satori/go.uuid v1.2.0/go.mod h1:dA0hQrYB0VpLJoorglMZABFdXlWrHn1NEOzdhQKdks0= -github.com/sclevine/agouti v3.0.0+incompatible/go.mod h1:b4WX9W9L1sfQKXeJf1mUTLZKJ48R1S7H23Ji7oFO5Bw= -github.com/sclevine/spec v1.2.0/go.mod h1:W4J29eT/Kzv7/b9IWLB055Z+qvVC9vt0Arko24q7p+U= github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc= github.com/seccomp/libseccomp-golang v0.9.1/go.mod h1:GbW5+tmTXfcxTToHLXlScSlAvWlF4P2Ca7zGrPiEpWo= -github.com/seccomp/libseccomp-golang v0.9.2-0.20210429002308-3879420cc921/go.mod h1:JA8cRccbGaA1s33RQf7Y1+q9gHmZX1yB/z9WDN1C6fg= -github.com/seccomp/libseccomp-golang v0.9.2-0.20220502022130-f33da4d89646/go.mod h1:JA8cRccbGaA1s33RQf7Y1+q9gHmZX1yB/z9WDN1C6fg= -github.com/securego/gosec v0.0.0-20200103095621-79fbf3af8d83/go.mod h1:vvbZ2Ae7AzSq3/kywjUDxSNq2SJ27RxCz2un0H3ePqE= -github.com/securego/gosec v0.0.0-20200401082031-e946c8c39989/go.mod h1:i9l/TNj+yDFh9SZXUTvspXTjbFXgZGP/UvhU1S65A4A= -github.com/securego/gosec/v2 v2.3.0/go.mod h1:UzeVyUXbxukhLeHKV3VVqo7HdoQR9MrRfFmZYotn8ME= -github.com/securego/gosec/v2 v2.11.0/go.mod h1:SX8bptShuG8reGC0XS09+a4H2BoWSJi+fscA+Pulbpo= -github.com/securego/gosec/v2 v2.13.1/go.mod h1:EO1sImBMBWFjOTFzMWfTRrZW6M15gm60ljzrmy/wtHo= github.com/segmentio/fasthash v1.0.3/go.mod h1:waKX8l2N8yckOgmSsXJi7x1ZfdKZ4x7KRMzBtS3oedY= -github.com/segmentio/kafka-go v0.1.0/go.mod h1:X6itGqS9L4jDletMsxZ7Dz+JFWxM6JHfPOCvTvk+EJo= -github.com/segmentio/kafka-go v0.2.0/go.mod h1:X6itGqS9L4jDletMsxZ7Dz+JFWxM6JHfPOCvTvk+EJo= -github.com/sergi/go-diff v1.0.0/go.mod h1:0CfEIISq7TuYL3j771MWULgwwjU+GofnZX9QAmXWZgo= -github.com/sergi/go-diff v1.1.0/go.mod h1:STckp+ISIX8hZLjrqAeVduY0gWCT9IjLuqbuNXdaHfM= -github.com/serialx/hashring v0.0.0-20190422032157-8b2912629002/go.mod h1:/yeG0My1xr/u+HZrFQ1tOQQQQrOawfyMUH13ai5brBc= -github.com/shazow/go-diff v0.0.0-20160112020656-b6b7b6733b8c/go.mod h1:/PevMnwAxekIXwN8qQyfc5gl2NlkB3CQlkizAbOkeBs= -github.com/shirou/gopsutil v0.0.0-20190901111213-e4ec7b275ada/go.mod h1:WWnYX4lzhCH5h/3YBfyVA3VbLYjlMZZAQcW9ojMexNc= github.com/shirou/gopsutil v2.20.5+incompatible/go.mod h1:5b4v6he4MtMOwMlS0TUMTu2PcXUg8+E1lC7eC3UO/RA= -github.com/shirou/gopsutil v3.21.4-0.20210419000835-c7a38de76ee5+incompatible/go.mod h1:5b4v6he4MtMOwMlS0TUMTu2PcXUg8+E1lC7eC3UO/RA= -github.com/shirou/gopsutil/v3 v3.22.4/go.mod h1:D01hZJ4pVHPpCTZ3m3T2+wDF2YAGfd+H4ifUguaQzHM= -github.com/shirou/gopsutil/v3 v3.22.9/go.mod h1:bBYl1kjgEJpWpxeHmLI+dVHWtyAwfcmSBLDsp2TNT8A= -github.com/shirou/w32 v0.0.0-20160930032740-bb4de0191aa4/go.mod h1:qsXQc7+bwAM3Q1u/4XEfrquwF8Lw7D7y5cD8CuHnfIc= -github.com/shurcooL/go v0.0.0-20180423040247-9e1955d9fb6e/go.mod h1:TDJrrUr11Vxrven61rcy3hJMUqaf/CLWYhHNPmT14Lk= -github.com/shurcooL/go-goon v0.0.0-20170922171312-37c2f522c041/go.mod h1:N5mDOmsrJOB+vfqUK+7DmDyjhSLIIBnXo9lvZJj3MWQ= github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc= -github.com/sirupsen/logrus v1.0.4-0.20170822132746-89742aefa4b2/go.mod h1:pMByvHTf9Beacp5x1UXfOR9xyW/9antXMhjMPG0dEzc= -github.com/sirupsen/logrus v1.0.6/go.mod h1:pMByvHTf9Beacp5x1UXfOR9xyW/9antXMhjMPG0dEzc= github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= github.com/sirupsen/logrus v1.4.1/go.mod h1:ni0Sbl8bgC9z8RoU9G6nDWqqs/fq4eDPysMBDgk/93Q= github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= github.com/sirupsen/logrus v1.6.0/go.mod h1:7uNnSEd1DgxDLC74fIahvMZmmYsHGZGEOFrfsX/uA88= github.com/sirupsen/logrus v1.7.0/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= github.com/sirupsen/logrus v1.8.1/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= -github.com/sirupsen/logrus v1.9.0/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ= -github.com/sivchari/containedctx v1.0.2/go.mod h1:PwZOeqm4/DLoJOqMSIJs3aKqXRX4YO+uXww087KZ7Bw= -github.com/sivchari/nosnakecase v1.7.0/go.mod h1:CwDzrzPea40/GB6uynrNLiorAlgFRvRbFSgJx2Gs+QY= -github.com/sivchari/tenv v1.5.0/go.mod h1:64yStXKSOxDfX47NlhVwND4dHwfZDdbp2Lyl018Icvg= -github.com/sivchari/tenv v1.7.0/go.mod h1:64yStXKSOxDfX47NlhVwND4dHwfZDdbp2Lyl018Icvg= +github.com/sirupsen/logrus v1.9.0 h1:trlNQbNUG3OdDrDil03MCb1H2o9nJ1x4/5LYw7byDE0= github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc= -github.com/smartystreets/assertions v1.0.0/go.mod h1:kHHU4qYBaI3q23Pp3VPrmWhuIUrLW/7eUrw0BU5VaoM= -github.com/smartystreets/go-aws-auth v0.0.0-20180515143844-0c1422d1fdb9/go.mod h1:SnhjPscd9TpLiy1LpzGSKh3bXCfxxXuqd9xmQJy3slM= -github.com/smartystreets/goconvey v0.0.0-20190330032615-68dc04aab96a/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA= github.com/smartystreets/goconvey v1.6.4/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA= -github.com/smartystreets/gunit v1.0.0/go.mod h1:qwPWnhz6pn0NnRBP++URONOVyNkPyr4SauJk4cUOwJs= +github.com/snikch/goodman v0.0.0-20171125024755-10e37e294daa h1:YJfZp12Z3AFhSBeXOlv4BO55RMwPn2NoQeDsrdWnBtY= github.com/snikch/goodman v0.0.0-20171125024755-10e37e294daa/go.mod h1:oJyF+mSPHbB5mVY2iO9KV3pTt/QbIkGaO8gQ2WrDbP4= github.com/soheilhy/cmux v0.1.4/go.mod h1:IM3LyeVVIOuxMH7sFAkER9+bJ4dT7Ms6E4xg4kGIyLM= -github.com/soheilhy/cmux v0.1.5/go.mod h1:T7TcVDs9LWfQgPlPsdngu6I6QIoyIFZDDC6sNE1GqG0= -github.com/sonatard/noctx v0.0.1/go.mod h1:9D2D/EoULe8Yy2joDHJj7bv3sZoq9AaSb8B4lqBjiZI= github.com/sony/gobreaker v0.4.1/go.mod h1:ZKptC7FHNvhBz7dN2LGjPVBz2sZJmc0/PkyDJOjmxWY= -github.com/sourcegraph/go-diff v0.5.1/go.mod h1:j2dHj3m8aZgQO8lMTcTnBcXkRRRqi34cd2MNlA9u1mE= -github.com/sourcegraph/go-diff v0.5.3/go.mod h1:v9JDtjCE4HHHCZGId75rg8gkKKa98RVjBcBGsVmMmak= -github.com/sourcegraph/go-diff v0.6.1/go.mod h1:iBszgVvyxdc8SFZ7gm69go2KDdt3ag071iBaWPF6cjs= github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= +github.com/spaolacci/murmur3 v1.1.0 h1:7c1g84S4BPRrfL5Xrdp6fOJ206sU9y293DDHaoy0bLI= github.com/spaolacci/murmur3 v1.1.0/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= github.com/spf13/afero v1.1.2/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B0CQ= -github.com/spf13/afero v1.2.2/go.mod h1:9ZxEEn6pIJ8Rxe320qSDBk6AsU0r9pR7Q4OcevTdifk= -github.com/spf13/afero v1.3.3/go.mod h1:5KUK8ByomD5Ti5Artl0RtHeI5pTF7MIDuXL3yY520V4= github.com/spf13/afero v1.6.0/go.mod h1:Ai8FlHk4v/PARR026UzYexafAt9roJ7LcLMAmO6Z93I= -github.com/spf13/afero v1.8.2/go.mod h1:CtAatgMJh6bJEIs48Ay/FOnkljP3WeGUG0MC1RfAqwo= +github.com/spf13/afero v1.9.2 h1:j49Hj62F0n+DaZ1dDCvhABaPNSGNkt32oRFxI33IEMw= github.com/spf13/afero v1.9.2/go.mod h1:iUV7ddyEEZPO5gA3zD4fJt6iStLlL+Lg4m2cihcDf8Y= github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= github.com/spf13/cast v1.3.1/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= -github.com/spf13/cast v1.4.1/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= +github.com/spf13/cast v1.5.0 h1:rj3WzYc11XZaIZMPKmwP96zkFEnnAmV8s6XbB2aY32w= github.com/spf13/cast v1.5.0/go.mod h1:SpXXQ5YoyJw6s3/6cMTQuxvgRl3PCJiyaX9p6b155UU= -github.com/spf13/cobra v0.0.2-0.20171109065643-2da4a54c5cee/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ= github.com/spf13/cobra v0.0.3/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ= github.com/spf13/cobra v0.0.5/go.mod h1:3K3wKZymM7VvHMDS9+Akkh4K60UwM26emMESw8tLCHU= -github.com/spf13/cobra v1.0.0/go.mod h1:/6GTrnGXV9HjY+aR4k0oJ5tcvakLuG6EuKReYlHNrgE= github.com/spf13/cobra v1.1.1/go.mod h1:WnodtKOvamDL/PwE2M4iKs8aMDBZ5Q5klgD3qfVJQMI= -github.com/spf13/cobra v1.1.3/go.mod h1:pGADOWyqRD/YMrPZigI/zbliZ2wVD/23d+is3pSWzOo= github.com/spf13/cobra v1.2.1/go.mod h1:ExllRjgxM/piMAM+3tAZvg8fsklGAf3tPfi+i8t68Nk= -github.com/spf13/cobra v1.3.0/go.mod h1:BrRVncBjOJa/eUcVVm9CE+oC6as8k+VYr4NY7WCi9V4= -github.com/spf13/cobra v1.4.0/go.mod h1:Wo4iy3BUC+X2Fybo0PDqwJIv3dNRiZLHQymsfxlB84g= -github.com/spf13/cobra v1.5.0/go.mod h1:dWXEIy2H428czQCjInthrTRUg7yKbok+2Qi/yBIJoUM= -github.com/spf13/cobra v1.6.0/go.mod h1:IOw/AERYS7UzyrGinqmz6HLUo219MORXGxhbaJUqzrY= +github.com/spf13/cobra v1.6.1 h1:o94oiPyS4KD1mPy2fmcYYHHfCxLqYjJOhGsCHFZtEzA= github.com/spf13/cobra v1.6.1/go.mod h1:IOw/AERYS7UzyrGinqmz6HLUo219MORXGxhbaJUqzrY= github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo= +github.com/spf13/jwalterweatherman v1.1.0 h1:ue6voC5bR5F8YxI5S67j9i582FU4Qvo2bmqnqMYADFk= github.com/spf13/jwalterweatherman v1.1.0/go.mod h1:aNWZUN0dPAAO/Ljvb5BEdw96iTZ0EXowPYD95IqWIGo= -github.com/spf13/pflag v0.0.0-20170130214245-9ff6c6923cff/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= -github.com/spf13/pflag v1.0.1-0.20171106142849-4c012f6dcd95/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= github.com/spf13/pflag v1.0.1/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= +github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA= github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= github.com/spf13/viper v1.3.2/go.mod h1:ZiWeW+zYFKm7srdB9IoDzzZXaJaI5eL9QjNiN/DMA2s= -github.com/spf13/viper v1.4.0/go.mod h1:PTJ7Z/lr49W6bUbkmS1V3by4uWynFiR9p7+dSq/yZzE= -github.com/spf13/viper v1.6.1/go.mod h1:t3iDnF5Jlj76alVNuyFBk5oUMCvsrkbvZK0WQdfDi5k= github.com/spf13/viper v1.7.0/go.mod h1:8WkrPz2fc9jxqZNCJI/76HCieCp4Q8HaLFoCha5qpdg= github.com/spf13/viper v1.7.1/go.mod h1:8WkrPz2fc9jxqZNCJI/76HCieCp4Q8HaLFoCha5qpdg= github.com/spf13/viper v1.8.1/go.mod h1:o0Pch8wJ9BVSWGQMbra6iw0oQ5oktSIBaujf1rJH9Ns= -github.com/spf13/viper v1.10.0/go.mod h1:SoyBPwAtKDzypXNDFKN5kzH7ppppbGZtls1UpIy5AsM= -github.com/spf13/viper v1.10.1/go.mod h1:IGlFPqhNAPKRxohIzWpI5QEy4kuI7tcl5WvR+8qy1rU= -github.com/spf13/viper v1.11.0/go.mod h1:djo0X/bA5+tYVoCn+C7cAYJGcVn/qYLFTG8gdUsX7Zk= -github.com/spf13/viper v1.12.0/go.mod h1:b6COn30jlNxbm/V2IqWiNWkJ+vZNiMNksliPCiuKtSI= -github.com/spf13/viper v1.13.0/go.mod h1:Icm2xNL3/8uyh/wFuB1jI7TiTNKp8632Nwegu+zgdYw= +github.com/spf13/viper v1.14.0 h1:Rg7d3Lo706X9tHsJMUjdiwMpHB7W8WnSVOssIY+JElU= github.com/spf13/viper v1.14.0/go.mod h1:WT//axPky3FdvXHzGw33dNdXXXfFQqmEalje+egj8As= -github.com/ssgreg/nlreturn/v2 v2.2.1/go.mod h1:E/iiPB78hV7Szg2YfRgyIrk1AD6JVMTRkkxBiELzh2I= github.com/status-im/keycard-go v0.0.0-20190316090335-8537d3370df4/go.mod h1:RZLeN1LMWmRsyYjvAu+I6Dm9QmlDaIIt+Y+4Kd7Tp+Q= -github.com/stbenjam/no-sprintf-host-port v0.1.1/go.mod h1:TLhvtIvONRzdmkFiio4O8LHsN9N74I+PhRquPsxpL0I= github.com/steakknife/bloomfilter v0.0.0-20180922174646-6819c0d2a570/go.mod h1:8OR4w3TdeIHIh1g6EMY5p0gVNOovcWC+1vpc7naMuAw= github.com/steakknife/hamming v0.0.0-20180906055917-c99c65617cd3/go.mod h1:hpGUWaI9xL8pRQCTXQgocU38Qw1g0Us7n5PxxTwTCYU= -github.com/stefanberger/go-pkcs11uri v0.0.0-20201008174630-78d3cae3a980/go.mod h1:AO3tvPzVZ/ayst6UlUKUv6rcPQInYe3IknH3jYhAKu8= -github.com/stoewer/go-strcase v1.2.0/go.mod h1:IBiWB2sKIp3wVVQ3Y035++gc+knqhUQag1KpM8ahLw8= github.com/streadway/amqp v0.0.0-20190404075320-75d898a42a94/go.mod h1:AZpEONHx3DKn8O/DFsRAY58/XVQiIPMTMB1SddzLXVw= github.com/streadway/amqp v0.0.0-20190827072141-edfb9018d271/go.mod h1:AZpEONHx3DKn8O/DFsRAY58/XVQiIPMTMB1SddzLXVw= -github.com/streadway/amqp v1.0.0/go.mod h1:AZpEONHx3DKn8O/DFsRAY58/XVQiIPMTMB1SddzLXVw= github.com/streadway/handy v0.0.0-20190108123426-d5acb3125c2a/go.mod h1:qNTQ5P5JnDBl6z3cMAg/SywNDC5ABu5ApDIw6lUbRmI= -github.com/streadway/handy v0.0.0-20200128134331-0f66f006fb2e/go.mod h1:qNTQ5P5JnDBl6z3cMAg/SywNDC5ABu5ApDIw6lUbRmI= -github.com/stretchr/objx v0.0.0-20180129172003-8a3f7159479f/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.2.0/go.mod h1:qt09Ya8vawLte6SNmTgCsAVtYtaKzEcn8ATUoHMkEqE= -github.com/stretchr/objx v0.3.0/go.mod h1:qt09Ya8vawLte6SNmTgCsAVtYtaKzEcn8ATUoHMkEqE= github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= +github.com/stretchr/objx v0.5.0 h1:1zr/of2m5FGMsad5YfcqgdqdWrIhu+EBEJRhR1U7z/c= github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= -github.com/stretchr/testify v0.0.0-20151208002404-e3a8ff8ce365/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= -github.com/stretchr/testify v0.0.0-20170130113145-4d4bfba8f1d1/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= -github.com/stretchr/testify v0.0.0-20180303142811-b89eecf5ca5d/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= -github.com/stretchr/testify v1.1.4/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= -github.com/stretchr/testify v1.2.0/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= @@ -2132,210 +877,75 @@ github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5 github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= -github.com/stretchr/testify v1.7.2/go.mod h1:R6va5+xMeoiuVRoj+gSkQ7d3FALtqAAGI1FQKckRals= -github.com/stretchr/testify v1.7.5/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= +github.com/stretchr/testify v1.8.1 h1:w7B6lhMri9wdJUVmEZPGGhZzrYTPvgJArz7wNPgYKsk= github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= github.com/subosito/gotenv v1.2.0/go.mod h1:N0PQaV/YGNqwC0u51sEeR/aUtSLEXKX9iv69rRypqCw= -github.com/subosito/gotenv v1.3.0/go.mod h1:YzJjq/33h7nrwdY+iHMhEOEEbW0ovIz0tB6t6PwAXzs= -github.com/subosito/gotenv v1.4.0/go.mod h1:mZd6rFysKEcUhUHXJk0C/08wAgyDBFuwEYL7vWWGaGo= +github.com/subosito/gotenv v1.4.1 h1:jyEFiXpy21Wm81FBN71l9VoMMV8H8jG+qIK3GCpY6Qs= github.com/subosito/gotenv v1.4.1/go.mod h1:ayKnFf/c6rvx/2iiLrJUk1e6plDbT3edrFNGqEflhK0= -github.com/supranational/blst v0.3.8-0.20220526154634-513d2456b344/go.mod h1:jZJtfjgudtNl4en1tzwPIV3KjUnQUvG3/j+w+fVonLw= -github.com/sylvia7788/contextcheck v1.0.4/go.mod h1:vuPKJMQ7MQ91ZTqfdyreNKwZjyUg6KO+IebVyQDedZQ= -github.com/syndtr/gocapability v0.0.0-20170704070218-db04d3cc01c8/go.mod h1:hkRG7XYTFWNJGYcbNJQlaLq0fg1yr4J4t/NcTQtrfww= -github.com/syndtr/gocapability v0.0.0-20180916011248-d98352740cb2/go.mod h1:hkRG7XYTFWNJGYcbNJQlaLq0fg1yr4J4t/NcTQtrfww= github.com/syndtr/gocapability v0.0.0-20200815063812-42c35b437635/go.mod h1:hkRG7XYTFWNJGYcbNJQlaLq0fg1yr4J4t/NcTQtrfww= github.com/syndtr/goleveldb v1.0.1-0.20200815110645-5c35d600f0ca/go.mod h1:u2MKkTVTVJWe5D1rCvame8WqhBd88EuIwODJZ1VHCPM= +github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7 h1:epCh84lMvA70Z7CTTCmYQn2CKbY8j86K7/FAIr141uY= github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7/go.mod h1:q4W45IWZaF22tdD+VEXcAWRA037jwmWEB5VWYORlTpc= -github.com/tarm/serial v0.0.0-20180830185346-98f6abe2eb07/go.mod h1:kDXzergiv9cbyO7IOYJZWg1U88JhDg3PB6klq9Hg2pA= -github.com/tchap/go-patricia v2.2.6+incompatible/go.mod h1:bmLyhP68RS6kStMGxByiQ23RP/odRBOTVjwp2cDyi6I= -github.com/tdakkota/asciicheck v0.0.0-20200416190851-d7f85be797a2/go.mod h1:yHp0ai0Z9gUljN3o0xMhYJnH/IcvkdTBOX2fmJ93JEM= -github.com/tdakkota/asciicheck v0.0.0-20200416200610-e657995f937b/go.mod h1:yHp0ai0Z9gUljN3o0xMhYJnH/IcvkdTBOX2fmJ93JEM= -github.com/tdakkota/asciicheck v0.1.1/go.mod h1:yHp0ai0Z9gUljN3o0xMhYJnH/IcvkdTBOX2fmJ93JEM= github.com/tecbot/gorocksdb v0.0.0-20191217155057-f0fad39f321c/go.mod h1:ahpPrc7HpcfEWDQRZEmnXMzHY03mLDYMCxeDzy46i+8= +github.com/tendermint/btcd v0.1.1 h1:0VcxPfflS2zZ3RiOAHkBiFUcPvbtRj5O7zHmcJWHV7s= github.com/tendermint/btcd v0.1.1/go.mod h1:DC6/m53jtQzr/NFmMNEu0rxf18/ktVoVtMrnDD5pN+U= +github.com/tendermint/crypto v0.0.0-20191022145703-50d29ede1e15 h1:hqAk8riJvK4RMWx1aInLzndwxKalgi5rTqgfXxOxbEI= github.com/tendermint/crypto v0.0.0-20191022145703-50d29ede1e15/go.mod h1:z4YtwM70uOnk8h0pjJYlj3zdYwi9l03By6iAIF5j/Pk= +github.com/tendermint/go-amino v0.16.0 h1:GyhmgQKvqF82e2oZeuMSp9JTN0N09emoSZlb2lyGa2E= github.com/tendermint/go-amino v0.16.0/go.mod h1:TQU0M1i/ImAo+tYpZi73AU3V/dKeCoMC9Sphe2ZwGME= github.com/tendermint/tendermint v0.34.14/go.mod h1:FrwVm3TvsVicI9Z7FlucHV6Znfd5KBc/Lpp69cCwtk0= -github.com/tendermint/tendermint v0.34.20/go.mod h1:KtOwCLYJcsS1ymtAfnjjAtXfXClbqcqjdqzFt2Em1Ac= +github.com/tendermint/tendermint v0.34.24 h1:879MKKJWYYPJEMMKME+DWUTY4V9f/FBpnZDI82ky+4k= github.com/tendermint/tendermint v0.34.24/go.mod h1:rXVrl4OYzmIa1I91av3iLv2HS0fGSiucyW9J4aMTpKI= github.com/tendermint/tm-db v0.6.4/go.mod h1:dptYhIpJ2M5kUuenLr+Yyf3zQOv1SgBZcl8/BmWlMBw= -github.com/tendermint/tm-db v0.6.6/go.mod h1:wP8d49A85B7/erz/r4YbKssKw6ylsO/hKtFk7E1aWZI= +github.com/tendermint/tm-db v0.6.7 h1:fE00Cbl0jayAoqlExN6oyQJ7fR/ZtoVOmvPJ//+shu8= github.com/tendermint/tm-db v0.6.7/go.mod h1:byQDzFkZV1syXr/ReXS808NxA2xvyuuVgXOJ/088L6I= -github.com/tenntenn/modver v1.0.1/go.mod h1:bePIyQPb7UeioSRkw3Q0XeMhYZSMx9B8ePqg6SAMGH0= -github.com/tenntenn/text/transform v0.0.0-20200319021203-7eef512accb3/go.mod h1:ON8b8w4BN/kE1EOhwT0o+d62W65a6aPw1nouo9LMgyY= -github.com/tetafro/godot v0.3.7/go.mod h1:/7NLHhv08H1+8DNj0MElpAACw1ajsCuf3TKNQxA5S+0= -github.com/tetafro/godot v0.4.2/go.mod h1:/7NLHhv08H1+8DNj0MElpAACw1ajsCuf3TKNQxA5S+0= -github.com/tetafro/godot v1.4.11/go.mod h1:LR3CJpxDVGlYOWn3ZZg1PgNZdTUvzsZWu8xaEohUpn8= github.com/tidwall/gjson v1.6.7/go.mod h1:zeFuBCIqD4sN/gmqBzZ4j7Jd6UcA2Fc56x7QFsv+8fI= -github.com/tidwall/gjson v1.12.1/go.mod h1:/wbyibRr2FHMks5tjHJ5F8dMZh3AcwJEMf5vlfC0lxk= -github.com/tidwall/gjson v1.14.1/go.mod h1:/wbyibRr2FHMks5tjHJ5F8dMZh3AcwJEMf5vlfC0lxk= github.com/tidwall/match v1.0.3/go.mod h1:eRSPERbgtNPcGhD8UCthc6PmLEQXEWd3PRB5JTxsfmM= -github.com/tidwall/match v1.1.1/go.mod h1:eRSPERbgtNPcGhD8UCthc6PmLEQXEWd3PRB5JTxsfmM= github.com/tidwall/pretty v1.0.2/go.mod h1:XNkn88O1ChpSDQmQeStsy+sBenx6DDtFZJxhVysOjyk= -github.com/tidwall/pretty v1.2.0/go.mod h1:ITEVvHYasfjBbM0u2Pg8T2nJnzm8xPwvNhhsoaGGjNU= github.com/tidwall/sjson v1.1.4/go.mod h1:wXpKXu8CtDjKAZ+3DrKY5ROCorDFahq8l0tey/Lx1fg= -github.com/tidwall/sjson v1.2.4/go.mod h1:098SZ494YoMWPmMO6ct4dcFnqxwj9r/gF0Etp19pSNM= -github.com/timakin/bodyclose v0.0.0-20190930140734-f7f2e9bca95e/go.mod h1:Qimiffbc6q9tBWlVV6x0P9sat/ao1xEkREYPPj9hphk= -github.com/timakin/bodyclose v0.0.0-20200424151742-cb6215831a94/go.mod h1:Qimiffbc6q9tBWlVV6x0P9sat/ao1xEkREYPPj9hphk= -github.com/timakin/bodyclose v0.0.0-20210704033933-f49887972144/go.mod h1:Qimiffbc6q9tBWlVV6x0P9sat/ao1xEkREYPPj9hphk= -github.com/timonwong/loggercheck v0.9.3/go.mod h1:wUqnk9yAOIKtGA39l1KLE9Iz0QiTocu/YZoOf+OzFdw= -github.com/tinylib/msgp v1.0.2/go.mod h1:+d+yLhGm8mzTaHzB+wgMYrodPfmZrzkirds8fDWklFE= github.com/tinylib/msgp v1.1.5/go.mod h1:eQsjooMTnV42mHu917E26IogZ2930nFyBQdofk10Udg= -github.com/tj/assert v0.0.0-20171129193455-018094318fb0/go.mod h1:mZ9/Rh9oLWpLLDRpvE+3b7gP/C2YyLFYxNmcLnPTMe0= -github.com/tj/go-elastic v0.0.0-20171221160941-36157cbbebc2/go.mod h1:WjeM0Oo1eNAjXGDx2yma7uG2XoyRZTq1uv3M/o7imD0= -github.com/tj/go-kinesis v0.0.0-20171128231115-08b17f58cb1b/go.mod h1:/yhzCV0xPfx6jb1bBgRFjl5lytqVqZXEaeqWP8lTEao= -github.com/tj/go-spin v1.1.0/go.mod h1:Mg1mzmePZm4dva8Qz60H2lHwmJ2loum4VIrLgVnKwh4= -github.com/tklauser/go-sysconf v0.3.5/go.mod h1:MkWzOF4RMCshBAMXuhXJs64Rte09mITnppBXY/rYEFI= -github.com/tklauser/go-sysconf v0.3.10/go.mod h1:C8XykCvCb+Gn0oNCWPIlcb0RuglQTYaQ2hGm7jmxEFk= -github.com/tklauser/numcpus v0.2.2/go.mod h1:x3qojaO3uyYt0i56EW/VUYs7uBvdl2fkfZFu0T9wgjM= -github.com/tklauser/numcpus v0.4.0/go.mod h1:1+UI3pD8NW14VMwdgJNJ1ESk2UnwhAnz5hMwiKKqXCQ= github.com/tmc/grpc-websocket-proxy v0.0.0-20170815181823-89b8d40f7ca8/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= github.com/tmc/grpc-websocket-proxy v0.0.0-20190109142713-0ad062ec5ee5/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= -github.com/tmc/grpc-websocket-proxy v0.0.0-20200427203606-3cfed13b9966/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= -github.com/tmc/grpc-websocket-proxy v0.0.0-20201229170055-e5319fda7802/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= -github.com/tomarrell/wrapcheck/v2 v2.6.1/go.mod h1:Eo+Opt6pyMW1b6cNllOcDSSoHO0aTJ+iF6BfCUbHltA= -github.com/tomarrell/wrapcheck/v2 v2.7.0/go.mod h1:ao7l5p0aOlUNJKI0qVwB4Yjlqutd0IvAB9Rdwyilxvg= -github.com/tomasen/realip v0.0.0-20180522021738-f0c99a92ddce/go.mod h1:o8v6yHRoik09Xen7gje4m9ERNah1d1PPsVq1VEx9vE4= -github.com/tommy-muehle/go-mnd v1.1.1/go.mod h1:dSUh0FtTP8VhvkL1S+gUR1OKd9ZnSaozuI6r3m6wOig= -github.com/tommy-muehle/go-mnd v1.3.1-0.20200224220436-e6f9a994e8fa/go.mod h1:dSUh0FtTP8VhvkL1S+gUR1OKd9ZnSaozuI6r3m6wOig= -github.com/tommy-muehle/go-mnd/v2 v2.5.0/go.mod h1:WsUAkMJMYww6l/ufffCD3m+P7LEvr8TnZn9lwVDlgzw= -github.com/tommy-muehle/go-mnd/v2 v2.5.1/go.mod h1:WsUAkMJMYww6l/ufffCD3m+P7LEvr8TnZn9lwVDlgzw= -github.com/tonistiigi/fsutil v0.0.0-20201103201449-0834f99b7b85/go.mod h1:a7cilN64dG941IOXfhJhlH0qB92hxJ9A1ewrdUmJ6xo= -github.com/tonistiigi/fsutil v0.0.0-20220115021204-b19f7f9cb274/go.mod h1:oPAfvw32vlUJSjyDcQ3Bu0nb2ON2B+G0dtVN/SZNJiA= -github.com/tonistiigi/go-actions-cache v0.0.0-20220404170428-0bdeb6e1eac7/go.mod h1:qqvyZqkfwkoJuPU/bw61bItaoO0SJ8YSW0vSVRRvsRg= -github.com/tonistiigi/go-archvariant v1.0.0/go.mod h1:TxFmO5VS6vMq2kvs3ht04iPXtu2rUT/erOnGFYfk5Ho= -github.com/tonistiigi/units v0.0.0-20180711220420-6950e57a87ea/go.mod h1:WPnis/6cRcDZSUvVmezrxJPkiO87ThFYsoUiMwWNDJk= -github.com/tonistiigi/vt100 v0.0.0-20210615222946-8066bb97264f/go.mod h1:ulncasL3N9uLrVann0m+CDlJKWsIAP34MPcOJF6VRvc= github.com/ttacon/chalk v0.0.0-20160626202418-22c06c80ed31/go.mod h1:onvgF043R+lC5RZ8IT9rBXDaEDnpnw/Cl+HFiw+v/7Q= github.com/tv42/httpunix v0.0.0-20150427012821-b75d8614f926/go.mod h1:9ESjWnEqriFuLhtthL60Sar/7RFoluCcXsuvEwTV5KM= -github.com/tv42/httpunix v0.0.0-20191220191345-2ba4b9c3382c/go.mod h1:hzIxponao9Kjc7aWznkXaL4U4TWaDSs8zcsY4Ka08nM= github.com/tyler-smith/go-bip39 v1.0.1-0.20181017060643-dbb3b84ba2ef/go.mod h1:sJ5fKU0s6JVwZjjcUEX2zFOnvq0ASQ2K9Zr6cf67kNs= github.com/tyler-smith/go-bip39 v1.0.2/go.mod h1:sJ5fKU0s6JVwZjjcUEX2zFOnvq0ASQ2K9Zr6cf67kNs= -github.com/uber/jaeger-client-go v2.25.0+incompatible/go.mod h1:WVhlPFC8FDjOFMMWRy2pZqQJSXxYSwNYOkTr/Z6d3Kk= -github.com/uber/jaeger-lib v2.2.0+incompatible/go.mod h1:ComeNDZlWwrWnDv8aPp0Ba6+uUTzImX/AauajbLI56U= -github.com/ugorji/go v1.1.4/go.mod h1:uQMGLiO92mf5W77hV/PUCpI3pbzQx3CRekS0kk+RGrc= +github.com/ugorji/go v1.1.7 h1:/68gy2h+1mWMrwZFeD1kQialdSzAb432dtpeJ42ovdo= github.com/ugorji/go v1.1.7/go.mod h1:kZn38zHttfInRq0xu/PH0az30d+z6vm202qpg1oXVMw= github.com/ugorji/go/codec v0.0.0-20181204163529-d75b2dcb6bc8/go.mod h1:VFNgLljTbGfSG7qAOspJ7OScBnGdDN/yBr0sguwnwf0= +github.com/ugorji/go/codec v1.1.7 h1:2SvQaVZ1ouYrrKKwoSk2pzd4A9evlKJb9oTL+OaLUSs= github.com/ugorji/go/codec v1.1.7/go.mod h1:Ax+UKWsSmolVDwsd+7N3ZtXu+yMGCf907BLYF3GoBXY= -github.com/ulikunitz/xz v0.5.6/go.mod h1:2bypXElzHzzJZwzH67Y6wb67pO62Rzfn7BSiF4ABRW8= -github.com/ulikunitz/xz v0.5.7/go.mod h1:nbz6k7qbPmH4IRqmfOplQw/tblSgqTqBwxkY0oWt/14= -github.com/ultraware/funlen v0.0.2/go.mod h1:Dp4UiAus7Wdb9KUZsYWZEWiRzGuM2kXM1lPbfaF6xhA= -github.com/ultraware/funlen v0.0.3/go.mod h1:Dp4UiAus7Wdb9KUZsYWZEWiRzGuM2kXM1lPbfaF6xhA= -github.com/ultraware/whitespace v0.0.4/go.mod h1:aVMh/gQve5Maj9hQ/hg+F75lr/X5A89uZnzAmWSineA= -github.com/ultraware/whitespace v0.0.5/go.mod h1:aVMh/gQve5Maj9hQ/hg+F75lr/X5A89uZnzAmWSineA= -github.com/urfave/cli v0.0.0-20171014202726-7bc6a0acffa5/go.mod h1:70zkFmudgCuE/ngEzBv17Jvp/497gISqfk5gWijbERA= github.com/urfave/cli v1.20.0/go.mod h1:70zkFmudgCuE/ngEzBv17Jvp/497gISqfk5gWijbERA= github.com/urfave/cli v1.22.1/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0= -github.com/urfave/cli v1.22.2/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0= -github.com/urfave/cli v1.22.4/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0= -github.com/urfave/cli/v2 v2.3.0/go.mod h1:LJmUH05zAU44vOAcrfzZQKsZbVcdbOG8rtL3/XcUArI= -github.com/urfave/cli/v2 v2.10.2/go.mod h1:f8iq5LtQ/bLxafbdBSLPPNsgaW0l/2fYYEHhAyPlwvo= -github.com/uudashr/gocognit v1.0.1/go.mod h1:j44Ayx2KW4+oB6SWMv8KsmHzZrOInQav7D3cQMJ5JUM= -github.com/uudashr/gocognit v1.0.5/go.mod h1:wgYz0mitoKOTysqxTDMOUXg+Jb5SvtihkfmugIZYpEA= -github.com/uudashr/gocognit v1.0.6/go.mod h1:nAIUuVBnYU7pcninia3BHOvQkpQCeO76Uscky5BOwcY= -github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyCJ6HpOuEn7z0Csc= -github.com/valyala/fasthttp v1.2.0/go.mod h1:4vX61m6KN+xDduDNwXrhIAVZaZaZiQ1luJk8LWSxF3s= -github.com/valyala/fasthttp v1.30.0/go.mod h1:2rsYD01CKFrjjsvFxx75KlEUNpWNBY9JWD3K/7o2Cus= -github.com/valyala/fasttemplate v1.0.1/go.mod h1:UQGH1tvbgY+Nz5t2n7tXsz52dQxojPUpymEIMZ47gx8= -github.com/valyala/fasttemplate v1.2.1/go.mod h1:KHLXt3tVN2HBp8eijSv/kGJopbvo7S+qRAEEKiv+SiQ= -github.com/valyala/quicktemplate v1.2.0/go.mod h1:EH+4AkTd43SvgIbQHYu59/cJyxDoOVRUAfrukLPuGJ4= -github.com/valyala/quicktemplate v1.7.0/go.mod h1:sqKJnoaOF88V07vkO+9FL8fb9uZg/VPSJnLYn+LmLk8= -github.com/valyala/tcplisten v0.0.0-20161114210144-ceec8f93295a/go.mod h1:v3UYOV9WzVtRmSR+PDvWpU/qWl4Wa5LApYYX4ZtKbio= -github.com/valyala/tcplisten v1.0.0/go.mod h1:T0xQ8SeCZGxckz9qRXTfG43PvQ/mcWh7FwZEA7Ioqkc= -github.com/vbatts/tar-split v0.11.2/go.mod h1:vV3ZuO2yWSVsz+pfFzDG/upWH1JhjOiEaWq6kXyQ3VI= -github.com/vdemeester/k8s-pkg-credentialprovider v1.17.4/go.mod h1:inCTmtUdr5KJbreVojo06krnTgaeAz/Z7lynpPk/Q2c= -github.com/vektra/mockery/v2 v2.14.0/go.mod h1:bnD1T8tExSgPD1ripLkDbr60JA9VtQeu12P3wgLZd7M= -github.com/viki-org/dnscache v0.0.0-20130720023526-c70c1f23c5d8/go.mod h1:dniwbG03GafCjFohMDmz6Zc6oCuiqgH6tGNyXTkHzXE= -github.com/vishvananda/netlink v0.0.0-20181108222139-023a6dafdcdf/go.mod h1:+SR5DhBJrl6ZM7CoCKvpw5BKroDKQ+PJqOg65H/2ktk= github.com/vishvananda/netlink v1.1.0/go.mod h1:cTgwzPIzzgDAYoQrMm0EdrjRUBkTqKYppBueQtXaqoE= -github.com/vishvananda/netlink v1.1.1-0.20201029203352-d40f9887b852/go.mod h1:twkDnbuQxJYemMlGd4JFIcuhgX83tXhKS2B/PRMpOho= -github.com/vishvananda/netlink v1.1.1-0.20210330154013-f5de75959ad5/go.mod h1:twkDnbuQxJYemMlGd4JFIcuhgX83tXhKS2B/PRMpOho= -github.com/vishvananda/netns v0.0.0-20180720170159-13995c7128cc/go.mod h1:ZjcWmFBXmLKZu9Nxj3WKYEafiSqer2rnvPr0en9UNpI= github.com/vishvananda/netns v0.0.0-20191106174202-0a2b9b5464df/go.mod h1:JP3t17pCcGlemwknint6hfoeCVQrEMVwxRLRjXpq+BU= -github.com/vishvananda/netns v0.0.0-20200728191858-db3c7e526aae/go.mod h1:DD4vA1DwXk04H54A1oHXtwZmA0grkVMdPxx/VGLCah0= -github.com/vishvananda/netns v0.0.0-20210104183010-2eb08e3e575f/go.mod h1:DD4vA1DwXk04H54A1oHXtwZmA0grkVMdPxx/VGLCah0= github.com/vmihailenco/msgpack/v5 v5.1.4/go.mod h1:C5gboKD0TJPqWDTVTtrQNfRbiBwHZGo8UTqP/9/XvLI= -github.com/vmihailenco/msgpack/v5 v5.3.5/go.mod h1:7xyJ9e+0+9SaZT0Wt1RGleJXzli6Q/V5KbhBonMG9jc= github.com/vmihailenco/tagparser v0.1.2/go.mod h1:OeAg3pn3UbLjkWt+rN9oFYB6u/cQgqMEUPoW2WPyhdI= -github.com/vmihailenco/tagparser/v2 v2.0.0/go.mod h1:Wri+At7QHww0WTrCBeu4J6bNtoV6mEfg5OIWRZA9qds= -github.com/vmware/govmomi v0.20.3/go.mod h1:URlwyTFZX72RmxtxuaFL2Uj3fD1JTvZdx59bHWk6aFU= -github.com/willf/bitset v1.1.3/go.mod h1:RjeCKbqT1RxIR/KWY6phxZiaY1IyutSBfGjNPySAYV4= -github.com/willf/bitset v1.1.11-0.20200630133818-d5bec3311243/go.mod h1:RjeCKbqT1RxIR/KWY6phxZiaY1IyutSBfGjNPySAYV4= -github.com/willf/bitset v1.1.11/go.mod h1:83CECat5yLh5zVOf4P1ErAgKA5UDvKtgyUABdr3+MjI= github.com/wsddn/go-ecdh v0.0.0-20161211032359-48726bab9208/go.mod h1:IotVbo4F+mw0EzQ08zFqg7pK3FebNXpaMsRy2RT+Ees= -github.com/xanzy/go-gitlab v0.31.0/go.mod h1:sPLojNBn68fMUWSxIJtdVVIP8uSBYqesTfDUseX11Ug= -github.com/xanzy/go-gitlab v0.32.0/go.mod h1:sPLojNBn68fMUWSxIJtdVVIP8uSBYqesTfDUseX11Ug= -github.com/xeipuuv/gojsonpointer v0.0.0-20180127040702-4e3ac2762d5f/go.mod h1:N2zxlSyiKSe5eX1tZViRH5QA0qijqEDrYZiPEAiq3wU= -github.com/xeipuuv/gojsonpointer v0.0.0-20190905194746-02993c407bfb/go.mod h1:N2zxlSyiKSe5eX1tZViRH5QA0qijqEDrYZiPEAiq3wU= -github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415/go.mod h1:GwrjFmJcFw6At/Gs6z4yjiIwzuJ1/+UwLxMQDVQXShQ= -github.com/xeipuuv/gojsonschema v0.0.0-20180618132009-1d523034197f/go.mod h1:5yf86TLmAcydyeJq5YvxkGPE2fm/u4myDekKRoLuqhs= -github.com/xeipuuv/gojsonschema v1.2.0/go.mod h1:anYRn/JVcOK2ZgGU+IjEV4nwlhoK5sQluxsYJ78Id3Y= -github.com/xi2/xz v0.0.0-20171230120015-48954b6210f8/go.mod h1:HUYIGzjTL3rfEspMxjDjgmT5uz5wzYJKVo23qUhYTos= github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU= -github.com/xlab/treeprint v0.0.0-20180616005107-d6fb6747feb6/go.mod h1:ce1O1j6UtZfjr22oyGxGLbauSBp2YVXpARAosm7dHBg= -github.com/xo/terminfo v0.0.0-20210125001918-ca9a967f8778/go.mod h1:2MuV+tbUrU1zIOPMxZ5EncGwgmMJsa+9ucAQZXxsObs= github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1:aYKd//L2LvnjZzWKhF00oedf4jCCReLcmhLdhm1A27Q= -github.com/xrash/smetrics v0.0.0-20201216005158-039620a65673/go.mod h1:N3UwUGtsrSj3ccvlPHLoLsHnpR27oXr4ZE984MbSER8= -github.com/yagipy/maintidx v1.0.0/go.mod h1:0qNf/I/CCZXSMhsRsrEPDZ+DkekpKLXAJfsTACwgXLk= -github.com/yahoo/coname v0.0.0-20170609175141-84592ddf8673/go.mod h1:Wq2sZrP++Us4tAw1h58MHS8BGIpC4NmKHfvw2QWBe9U= +github.com/yahoo/coname v0.0.0-20170609175141-84592ddf8673 h1:PSg2cEFd+9Ae/r5x5iO8cJ3VmTbZNQp6X8tHDmVJAbA= github.com/ybbus/jsonrpc v2.1.2+incompatible/go.mod h1:XJrh1eMSzdIYFbM08flv0wp5G35eRniyeGut1z+LSiE= -github.com/yeya24/promlinter v0.2.0/go.mod h1:u54lkmBOZrpEbQQ6gox2zWKKLKu2SGe+2KOiextY+IA= -github.com/yudai/gojsondiff v1.0.0/go.mod h1:AY32+k2cwILAkW1fbgxQ5mUmMiZFgLIV+FBNExI05xg= -github.com/yudai/golcs v0.0.0-20170316035057-ecda9a501e82/go.mod h1:lgjkn3NuSvDfVJdfcVVdX+jpBxNmX4rDAzaS45IcYoM= -github.com/yudai/pp v2.0.1+incompatible/go.mod h1:PuxR/8QJ7cyCkFp/aUDS+JY727OFEZkTdatxwunjIkc= github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= -github.com/yuin/goldmark v1.4.0/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= -github.com/yuin/goldmark v1.4.1/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= -github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= -github.com/yusufpapurcu/wmi v1.2.2/go.mod h1:SBZ9tNy3G9/m5Oi98Zks0QjeHVDvuK0qfxQmPyzfmi0= -github.com/yvasiyarov/go-metrics v0.0.0-20140926110328-57bccd1ccd43/go.mod h1:aX5oPXxHm3bOH+xeAttToC8pqch2ScQN/JoXYupl6xs= -github.com/yvasiyarov/gorelic v0.0.0-20141212073537-a9bba5b9ab50/go.mod h1:NUSPSUX/bi6SeDMUh6brw0nXpxHnc96TguQh0+r/ssA= -github.com/yvasiyarov/newrelic_platform_go v0.0.0-20140908184405-b21fdbd4370f/go.mod h1:GlGEuHIJweS1mbCqG+7vt2nvWLzLLnRHbXz5JKd/Qbg= github.com/zondax/hid v0.9.0/go.mod h1:l5wttcP0jwtdLjqjMMWFVEE7d1zO0jvSPA9OPZxWpEM= +github.com/zondax/hid v0.9.1 h1:gQe66rtmyZ8VeGFcOpbuH3r7erYtNEAezCAYu8LdkJo= github.com/zondax/hid v0.9.1/go.mod h1:l5wttcP0jwtdLjqjMMWFVEE7d1zO0jvSPA9OPZxWpEM= +github.com/zondax/ledger-go v0.14.0 h1:dlMC7aO8Wss1CxBq2I96kZ69Nh1ligzbs8UWOtq/AsA= github.com/zondax/ledger-go v0.14.0/go.mod h1:fZ3Dqg6qcdXWSOJFKMG8GCTnD7slO/RL2feOQv8K320= -gitlab.com/bosi/decorder v0.2.1/go.mod h1:6C/nhLSbF6qZbYD8bRmISBwc6vcWdNsiIBkRvjJFrH0= -gitlab.com/bosi/decorder v0.2.3/go.mod h1:9K1RB5+VPNQYtXtTDAzd2OEftsZb1oV0IrJrzChSdGE= go.etcd.io/bbolt v1.3.2/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= go.etcd.io/bbolt v1.3.3/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= -go.etcd.io/bbolt v1.3.4/go.mod h1:G5EMThwa9y8QZGBClrRx5EY+Yw9kAhnjy3bSjsnlVTQ= go.etcd.io/bbolt v1.3.5/go.mod h1:G5EMThwa9y8QZGBClrRx5EY+Yw9kAhnjy3bSjsnlVTQ= +go.etcd.io/bbolt v1.3.6 h1:/ecaJf0sk1l4l6V4awd65v2C3ILy7MSj+s/x1ADCIMU= go.etcd.io/bbolt v1.3.6/go.mod h1:qXsaaIqmgQH0T+OPdb99Bf+PKfBBQVAdyD6TY9G8XM4= go.etcd.io/etcd v0.0.0-20191023171146-3cf2f69b5738/go.mod h1:dnLIgRNXwCJa5e+c6mIZCrds/GIG4ncV9HhK5PX7jPg= -go.etcd.io/etcd v0.0.0-20200513171258-e048e166ab9c/go.mod h1:xCI7ZzBfRuGgBXyXO6yfWfDmlWd35khcWpUa4L0xI/k= -go.etcd.io/etcd v0.5.0-alpha.5.0.20200910180754-dd1b699fc489/go.mod h1:yVHk9ub3CSBatqGNg7GRmsnfLWtoW60w4eDYfh7vHDg= go.etcd.io/etcd/api/v3 v3.5.0/go.mod h1:cbVKeC6lCfl7j/8jBhAK6aIYO9XOjdptoxU/nLQcPvs= -go.etcd.io/etcd/api/v3 v3.5.1/go.mod h1:cbVKeC6lCfl7j/8jBhAK6aIYO9XOjdptoxU/nLQcPvs= -go.etcd.io/etcd/api/v3 v3.5.2/go.mod h1:5GB2vv4A4AOn3yk7MftYGHkUfGtDHnEraIjym4dYz5A= -go.etcd.io/etcd/api/v3 v3.5.4/go.mod h1:5GB2vv4A4AOn3yk7MftYGHkUfGtDHnEraIjym4dYz5A= -go.etcd.io/etcd/api/v3 v3.5.5/go.mod h1:KFtNaxGDw4Yx/BA4iPPwevUTAuqcsPxzyX8PHydchN8= go.etcd.io/etcd/client/pkg/v3 v3.5.0/go.mod h1:IJHfcCEKxYu1Os13ZdwCwIUTUVGYTSAM3YSwc9/Ac1g= -go.etcd.io/etcd/client/pkg/v3 v3.5.1/go.mod h1:IJHfcCEKxYu1Os13ZdwCwIUTUVGYTSAM3YSwc9/Ac1g= -go.etcd.io/etcd/client/pkg/v3 v3.5.2/go.mod h1:IJHfcCEKxYu1Os13ZdwCwIUTUVGYTSAM3YSwc9/Ac1g= -go.etcd.io/etcd/client/pkg/v3 v3.5.4/go.mod h1:IJHfcCEKxYu1Os13ZdwCwIUTUVGYTSAM3YSwc9/Ac1g= -go.etcd.io/etcd/client/pkg/v3 v3.5.5/go.mod h1:ggrwbk069qxpKPq8/FKkQ3Xq9y39kbFR4LnKszpRXeQ= go.etcd.io/etcd/client/v2 v2.305.0/go.mod h1:h9puh54ZTgAKtEbut2oe9P4L/oqKCVB6xsXlzd7alYQ= -go.etcd.io/etcd/client/v2 v2.305.1/go.mod h1:pMEacxZW7o8pg4CrFE7pquyCJJzZvkvdD2RibOCCCGs= -go.etcd.io/etcd/client/v2 v2.305.2/go.mod h1:2D7ZejHVMIfog1221iLSYlQRzrtECw3kz4I4VAQm3qI= -go.etcd.io/etcd/client/v2 v2.305.4/go.mod h1:Ud+VUwIi9/uQHOMA+4ekToJ12lTxlv0zB/+DHwTGEbU= -go.etcd.io/etcd/client/v2 v2.305.5/go.mod h1:zQjKllfqfBVyVStbt4FaosoX2iYd8fV/GRy/PbowgP4= -go.etcd.io/etcd/client/v3 v3.5.0/go.mod h1:AIKXXVX/DQXtfTEqBryiLTUXwON+GuvO6Z7lLS/oTh0= -go.etcd.io/etcd/client/v3 v3.5.4/go.mod h1:ZaRkVgBZC+L+dLCjTcF1hRXpgZXQPOvnA/Ak/gq3kiY= -go.etcd.io/etcd/client/v3 v3.5.5/go.mod h1:aApjR4WGlSumpnJ2kloS75h6aHUmAyaPLjHMxpc7E7c= -go.etcd.io/etcd/pkg/v3 v3.5.0/go.mod h1:UzJGatBQ1lXChBkQF0AuAtkRQMYnHubxAEYIrC3MSsE= -go.etcd.io/etcd/raft/v3 v3.5.0/go.mod h1:UFOHSIvO/nKwd4lhkwabrTD3cqW5yVyYYf/KlD00Szc= -go.etcd.io/etcd/server/v3 v3.5.0/go.mod h1:3Ah5ruV+M+7RZr0+Y/5mNLwC+eQlni+mQmOVdCRJoS4= -go.mozilla.org/mozlog v0.0.0-20170222151521-4bb13139d403/go.mod h1:jHoPAGnDrCy6kaI2tAze5Prf0Nr0w/oNkROt2lw3n3o= -go.mozilla.org/pkcs7 v0.0.0-20200128120323-432b2356ecb1/go.mod h1:SNgMg+EgDFwmvSmLRTNKC5fegJjB7v23qTQ0XLGUNHk= -go.opencensus.io v0.15.0/go.mod h1:UffZAU+4sDEINUGP/B7UfBBkq4fqLu9zXAX7ke6CHW0= -go.opencensus.io v0.18.0/go.mod h1:vKdFvxhtzZ9onBp9VKHK8z/sRpBMnKAsufL7wlDrCOA= -go.opencensus.io v0.19.1/go.mod h1:gug0GbSHa8Pafr0d2urOSgoXHZ6x/RUlaiT0d9pqb4A= -go.opencensus.io v0.19.2/go.mod h1:NO/8qkisMZLZ1FCsKNqtJPwc8/TaclWyY0B6wcYNg9M= go.opencensus.io v0.20.1/go.mod h1:6WKK9ahsWS3RSO+PY9ZHZUfv2irvY6gN279GOPZjmmk= go.opencensus.io v0.20.2/go.mod h1:6WKK9ahsWS3RSO+PY9ZHZUfv2irvY6gN279GOPZjmmk= go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU= @@ -2345,134 +955,46 @@ go.opencensus.io v0.22.3/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= go.opencensus.io v0.22.4/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= go.opencensus.io v0.22.5/go.mod h1:5pWMHQbX5EPX2/62yrJeAkowc+lfs/XD7Uxpq3pI6kk= go.opencensus.io v0.23.0/go.mod h1:XItmlyltB5F7CS4xOC1DcqMoFqwtC6OG2xF7mCv7P7E= -go.opentelemetry.io/contrib v0.20.0/go.mod h1:G/EtFaa6qaN7+LxqfIAT3GiZa7Wv5DTBUzl5H4LY0Kc= -go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.20.0/go.mod h1:oVGt1LRbBOBq1A5BQLlUg9UaU/54aiHw8cgjV3aWZ/E= -go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.28.0/go.mod h1:vEhqr0m4eTc+DWxfsXoXue2GBgV2uUwVznkGIHW/e5w= -go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.29.0/go.mod h1:LsankqVDx4W+RhZNA5uWarULII/MBhF5qwCYxTuyXjs= -go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.36.3/go.mod h1:Dts42MGkzZne2yCru741+bFiTMWkIj/LLRizad7b9tw= -go.opentelemetry.io/contrib/instrumentation/net/http/httptrace/otelhttptrace v0.29.0/go.mod h1:vHItvsnJtp7ES++nFLLFBzUWny7fJQSvTlxFcqQGUr4= -go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.20.0/go.mod h1:2AboqHi0CiIZU0qwhtUfCYD1GeUzvvIXWNkhDt7ZMG4= -go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.29.0/go.mod h1:tLYsuf2v8fZreBVwp9gVMhefZlLFZaUiNVSq8QxXRII= -go.opentelemetry.io/otel v0.20.0/go.mod h1:Y3ugLH2oa81t5QO+Lty+zXf8zC9L26ax4Nzoxm/dooo= -go.opentelemetry.io/otel v1.3.0/go.mod h1:PWIKzi6JCp7sM0k9yZ43VX+T345uNbAkDKwHVjb2PTs= -go.opentelemetry.io/otel v1.4.0/go.mod h1:jeAqMFKy2uLIxCtKxoFj0FAL5zAPKQagc3+GtBWakzk= -go.opentelemetry.io/otel v1.4.1/go.mod h1:StM6F/0fSwpd8dKWDCdRr7uRvEPYdW0hBSlbdTiUde4= -go.opentelemetry.io/otel v1.11.0/go.mod h1:H2KtuEphyMvlhZ+F7tg9GRhAOe60moNx61Ex+WmiKkk= -go.opentelemetry.io/otel/exporters/jaeger v1.4.1/go.mod h1:ZW7vkOu9nC1CxsD8bHNHCia5JUbwP39vxgd1q4Z5rCI= -go.opentelemetry.io/otel/exporters/otlp v0.20.0/go.mod h1:YIieizyaN77rtLJra0buKiNBOm9XQfkPEKBeuhoMwAM= -go.opentelemetry.io/otel/exporters/otlp/internal/retry v1.3.0/go.mod h1:VpP4/RMn8bv8gNo9uK7/IMY4mtWLELsS+JIP0inH0h4= -go.opentelemetry.io/otel/exporters/otlp/internal/retry v1.4.1/go.mod h1:VpP4/RMn8bv8gNo9uK7/IMY4mtWLELsS+JIP0inH0h4= -go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.3.0/go.mod h1:hO1KLR7jcKaDDKDkvI9dP/FIhpmna5lkqPUQdEjFAM8= -go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.4.1/go.mod h1:o5RW5o2pKpJLD5dNTCmjF1DorYwMeFJmb/rKr5sLaa8= -go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.3.0/go.mod h1:keUU7UfnwWTWpJ+FWnyqmogPa82nuU5VUANFq49hlMY= -go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.4.1/go.mod h1:c6E4V3/U+miqjs/8l950wggHGL1qzlp0Ypj9xoGrPqo= -go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.3.0/go.mod h1:QNX1aly8ehqqX1LEa6YniTU7VY9I6R3X/oPxhGdTceE= -go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.4.1/go.mod h1:VwYo0Hak6Efuy0TXsZs8o1hnV3dHDPNtDbycG0hI8+M= -go.opentelemetry.io/otel/internal/metric v0.27.0/go.mod h1:n1CVxRqKqYZtqyTh9U/onvKapPGv7y/rpyOTI+LFNzw= -go.opentelemetry.io/otel/metric v0.20.0/go.mod h1:598I5tYlH1vzBjn+BTuhzTCSb/9debfNp6R3s7Pr1eU= -go.opentelemetry.io/otel/metric v0.27.0/go.mod h1:raXDJ7uP2/Jc0nVZWQjJtzoyssOYWu/+pjZqRzfvZ7g= -go.opentelemetry.io/otel/metric v0.32.3/go.mod h1:pgiGmKohxHyTPHGOff+vrtIH39/R9fiO/WoenUQ3kcc= -go.opentelemetry.io/otel/oteltest v0.20.0/go.mod h1:L7bgKf9ZB7qCwT9Up7i9/pn0PWIa9FqQ2IQ8LoxiGnw= -go.opentelemetry.io/otel/sdk v0.20.0/go.mod h1:g/IcepuwNsoiX5Byy2nNV0ySUF1em498m7hBWC279Yc= -go.opentelemetry.io/otel/sdk v1.3.0/go.mod h1:rIo4suHNhQwBIPg9axF8V9CA72Wz2mKF1teNrup8yzs= -go.opentelemetry.io/otel/sdk v1.4.1/go.mod h1:NBwHDgDIBYjwK2WNu1OPgsIc2IJzmBXNnvIJxJc8BpE= -go.opentelemetry.io/otel/sdk/export/metric v0.20.0/go.mod h1:h7RBNMsDJ5pmI1zExLi+bJK+Dr8NQCh0qGhm1KDnNlE= -go.opentelemetry.io/otel/sdk/metric v0.20.0/go.mod h1:knxiS8Xd4E/N+ZqKmUPf3gTTZ4/0TjTXukfxjzSTpHE= -go.opentelemetry.io/otel/trace v0.20.0/go.mod h1:6GjCW8zgDjwGHGa6GkyeB8+/5vjT16gUEi0Nf1iBdgw= -go.opentelemetry.io/otel/trace v1.3.0/go.mod h1:c/VDhno8888bvQYmbYLqe41/Ldmr/KKunbvWM4/fEjk= -go.opentelemetry.io/otel/trace v1.4.0/go.mod h1:uc3eRsqDfWs9R7b92xbQbU42/eTNz4N+gLP8qJCi4aE= -go.opentelemetry.io/otel/trace v1.4.1/go.mod h1:iYEVbroFCNut9QkwEczV9vMRPHNKSSwYZjulEtsmhFc= -go.opentelemetry.io/otel/trace v1.11.0/go.mod h1:nyYjis9jy0gytE9LXGU+/m1sHTKbRY0fX0hulNNDP1U= -go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqeYNgFYFoEGnI= -go.opentelemetry.io/proto/otlp v0.11.0/go.mod h1:QpEjXPrNQzrFDZgoTo49dgHR9RYRSrg3NAKnUGl9YpQ= -go.opentelemetry.io/proto/otlp v0.12.0/go.mod h1:TsIjwGWIx5VFYv9KGVlOpxoBl5Dy+63SUguV7GGvlSQ= go.uber.org/atomic v1.3.2/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= go.uber.org/atomic v1.5.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ= go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= -go.uber.org/atomic v1.9.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= -go.uber.org/atomic v1.10.0/go.mod h1:LUxbIzbOniOlMKjJjyPfpl4v+PKK2cNJn91OQbhoJI0= -go.uber.org/goleak v1.1.10/go.mod h1:8a7PlsEVH3e/a/GLqe5IIrQx6GzcnRmZEufDUTk4A7A= -go.uber.org/goleak v1.1.11-0.20210813005559-691160354723/go.mod h1:cwTWslyiVhfpKIDGSZEM2HlOvcqm+tG4zioyIeLoqMQ= -go.uber.org/goleak v1.1.11/go.mod h1:cwTWslyiVhfpKIDGSZEM2HlOvcqm+tG4zioyIeLoqMQ= -go.uber.org/goleak v1.1.12/go.mod h1:cwTWslyiVhfpKIDGSZEM2HlOvcqm+tG4zioyIeLoqMQ= go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0= go.uber.org/multierr v1.3.0/go.mod h1:VgVr7evmIr6uPjLBxg28wmKNXyqE9akIJ5XnfpiKl+4= -go.uber.org/multierr v1.4.0/go.mod h1:VgVr7evmIr6uPjLBxg28wmKNXyqE9akIJ5XnfpiKl+4= go.uber.org/multierr v1.6.0/go.mod h1:cdWPpRnG4AhwMwsgIHip0KRBQjJy5kYEpYjJxpXp9iU= -go.uber.org/multierr v1.7.0/go.mod h1:7EAYxJLBy9rStEaz58O2t4Uvip6FSURkq8/ppBp95ak= -go.uber.org/multierr v1.8.0/go.mod h1:7EAYxJLBy9rStEaz58O2t4Uvip6FSURkq8/ppBp95ak= go.uber.org/tools v0.0.0-20190618225709-2cfd321de3ee/go.mod h1:vJERXedbb3MVM5f9Ejo0C68/HhF8uaILCdgjnY+goOA= -go.uber.org/zap v1.9.1/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= go.uber.org/zap v1.13.0/go.mod h1:zwrFLgMcdUuIBviXEYEH1YKNaOBnKXsx2IPda5bBwHM= go.uber.org/zap v1.17.0/go.mod h1:MXVU+bhUf/A7Xi2HNOnopQOrmycQ5Ih87HtOu4q5SSo= -go.uber.org/zap v1.19.1/go.mod h1:j3DNczoxDZroyBnOT1L/Q79cfUMGZxlv/9dzN7SM1rI= -go.uber.org/zap v1.21.0/go.mod h1:wjWOCqI0f2ZZrJF/UufIOkiC8ii6tm1iqIsLo76RfJw= -go.uber.org/zap v1.23.0/go.mod h1:D+nX8jyLsMHMYrln8A0rJjFt/T/9/bGgIhAqxv5URuY= -go4.org v0.0.0-20180809161055-417644f6feb5/go.mod h1:MkTOUMDaeVYJUOUsaDXIhWPZYa1yOyC1qaOBpL57BhE= -gocloud.dev v0.19.0/go.mod h1:SmKwiR8YwIMMJvQBKLsC3fHNyMwXLw3PMDO+VVteJMI= -golang.org/x/build v0.0.0-20190314133821-5284462c4bec/go.mod h1:atTaCNAy0f16Ah5aV1gMSwgiKVHwu/JncqDpuRr7lS4= golang.org/x/crypto v0.0.0-20170930174604-9419663f5a44/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= -golang.org/x/crypto v0.0.0-20171113213409-9f005a07e0d3/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= -golang.org/x/crypto v0.0.0-20180501155221-613d6eafa307/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= -golang.org/x/crypto v0.0.0-20181009213950-7c1a557ab941/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20181029021203-45a5f77698d3/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= -golang.org/x/crypto v0.0.0-20181030102418-4d3f4d9ffa16/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20181203042331-505ab145d0a9/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= -golang.org/x/crypto v0.0.0-20190211182817-74369b46fc67/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20190426145343-a29dc8fdc734/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20190611184440-5c40567a22f8/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190701094942-4def268fd1a4/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190820162420-60c769a6c586/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190909091759-094676da4a83/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20190923035154-9ee001bba392/go.mod h1:/lpIB1dKB+9EgE3H3cr1v9wB50oz8l4C4h62xy7jSTY= -golang.org/x/crypto v0.0.0-20191002192127-34f69633bfdc/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20191206172530-e9b2fee46413/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200115085410-6d4e4cb37c7d/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.0.0-20200220183623-bac4c82f6975/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.0.0-20200323165209-0ec3e9974c59/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200510223506-06a226fb4e37/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200728195943-123391ffb6de/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200820211705-5c72a883971a/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.0.0-20201002170205-7f63de1d35b0/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.0.0-20201016220609-9e8e0b390897/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20201117144127-c1f2f97bffc9/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I= -golang.org/x/crypto v0.0.0-20201221181555-eec23a3978ad/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I= -golang.org/x/crypto v0.0.0-20210220033148-5ea612d1eb83/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I= -golang.org/x/crypto v0.0.0-20210314154223-e6e6c4f2bb5b/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= -golang.org/x/crypto v0.0.0-20210322153248-0c34fe9e7dc2/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= golang.org/x/crypto v0.0.0-20210421170649-83a5a9bb288b/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= -golang.org/x/crypto v0.0.0-20210513164829-c07d793c2f9a/go.mod h1:P+XmwS30IXTQdn5tA2iutPOUgjI07+tq3H3K9MVA1s8= -golang.org/x/crypto v0.0.0-20210616213533-5ff15b29337e/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= -golang.org/x/crypto v0.0.0-20210711020723-a769d52b0f97/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.0.0-20210817164053-32db794688a5/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= -golang.org/x/crypto v0.0.0-20210915214749-c084706c2272/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= -golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.0.0-20211108221036-ceb1ce70b4fa/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= -golang.org/x/crypto v0.0.0-20211202192323-5770296d904e/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= -golang.org/x/crypto v0.0.0-20220313003712-b769efc7c000/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= -golang.org/x/crypto v0.0.0-20220411220226-7b82a4e95df4/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= -golang.org/x/crypto v0.0.0-20220525230936-793ad666bf5e/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= -golang.org/x/crypto v0.0.0-20220722155217-630584e8d5aa/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= -golang.org/x/crypto v0.1.0/go.mod h1:RecgLatLF4+eUMCP1PoPZQb+cVrJcOPbHkTkbkB9sbw= +golang.org/x/crypto v0.5.0 h1:U/0M97KRkSFvyD/3FSmdP5W5swImpNgle/EHFhOsQPE= golang.org/x/crypto v0.5.0/go.mod h1:NK/OQwhpMQP3MwtdjgLlYHnH9ebylxKWv3e0fK+mkQU= -golang.org/x/exp v0.0.0-20180321215751-8460e604b9de/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= -golang.org/x/exp v0.0.0-20180807140117-3d87b88a115f/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= -golang.org/x/exp v0.0.0-20190125153040-c74c464bbbf2/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= -golang.org/x/exp v0.0.0-20190312203227-4b39c73a6495/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= golang.org/x/exp v0.0.0-20190731235908-ec7cb31e5a56/go.mod h1:JhuoJpWY28nO4Vef9tZUw9qufEGTyX1+7lmHxV5q5G4= golang.org/x/exp v0.0.0-20190829153037-c13cbed26979/go.mod h1:86+5VVa7VpoJ4kLfm080zCjGlMRFzhUhsZKEZO7MGek= -golang.org/x/exp v0.0.0-20191002040644-a1355ae1e2c3/go.mod h1:NOZ3BPKG0ec/BKJQgnvsSFpcKLM5xXVWnvZS97DWHgE= golang.org/x/exp v0.0.0-20191030013958-a1ab85dbe136/go.mod h1:JXzH8nQsPlswgeRAPE3MuO9GYsAcnJvJ4vnMwN/5qkY= golang.org/x/exp v0.0.0-20191129062945-2f5052295587/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= golang.org/x/exp v0.0.0-20191227195350-da58074b4299/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= @@ -2480,26 +1002,10 @@ golang.org/x/exp v0.0.0-20200119233911-0405dc783f0a/go.mod h1:2RIsYlXP63K8oxa1u0 golang.org/x/exp v0.0.0-20200207192155-f17229e696bd/go.mod h1:J/WKrq2StrnmMY6+EHIKF9dgMWnmCNThgcyBT1FY9mM= golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6/go.mod h1:3jZMyOhIsHpP37uCMkUooju7aAi5cS1Q23tOzKc+0MU= golang.org/x/exp v0.0.0-20200331195152-e8c3332aa8e5/go.mod h1:4M0jN8W1tt0AVLNr8HDosyJCDCDuyL9N9+3m7wDWgKw= -golang.org/x/exp v0.0.0-20220426173459-3bcf042a4bf5/go.mod h1:lgLbSvA5ygNOMpwM/9anMpWVlVJ7Z+cHWq/eFuinpGE= +golang.org/x/exp v0.0.0-20220722155223-a9213eeb770e h1:+WEEuIdZHnUeJJmEUjyYC2gfUMj69yZXw17EnHg/otA= golang.org/x/exp v0.0.0-20220722155223-a9213eeb770e/go.mod h1:Kr81I6Kryrl9sr8s2FK3vxD90NdsKWRuOIl2O4CvYbA= -golang.org/x/exp/typeparams v0.0.0-20220218215828-6cf2b201936e/go.mod h1:AbB0pIl9nAr9wVwH+Z2ZpaocVmF5I4GyWCDIsVjR0bk= -golang.org/x/exp/typeparams v0.0.0-20220428152302-39d4317da171/go.mod h1:AbB0pIl9nAr9wVwH+Z2ZpaocVmF5I4GyWCDIsVjR0bk= -golang.org/x/exp/typeparams v0.0.0-20220613132600-b0d781184e0d/go.mod h1:AbB0pIl9nAr9wVwH+Z2ZpaocVmF5I4GyWCDIsVjR0bk= -golang.org/x/exp/typeparams v0.0.0-20220827204233-334a2380cb91/go.mod h1:AbB0pIl9nAr9wVwH+Z2ZpaocVmF5I4GyWCDIsVjR0bk= -golang.org/x/image v0.0.0-20180708004352-c73c2afc3b81/go.mod h1:ux5Hcp/YLpHSI86hEcLt0YII63i6oz57MZXIpbrjZUs= golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= -golang.org/x/image v0.0.0-20190910094157-69e4b8554b2a/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= -golang.org/x/image v0.0.0-20200119044424-58c23975cae1/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= -golang.org/x/image v0.0.0-20200430140353-33d19683fad8/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= -golang.org/x/image v0.0.0-20200618115811-c13761719519/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= -golang.org/x/image v0.0.0-20201208152932-35266b937fa6/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= -golang.org/x/image v0.0.0-20210216034530-4410531fe030/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= -golang.org/x/image v0.0.0-20210607152325-775e3b0c77b9/go.mod h1:023OzeP/+EPmXeapQh35lcL3II3LrY8Ic+EFFKVhULM= -golang.org/x/image v0.0.0-20210628002857-a66eb6448b8d/go.mod h1:023OzeP/+EPmXeapQh35lcL3II3LrY8Ic+EFFKVhULM= -golang.org/x/image v0.0.0-20211028202545-6944b10bf410/go.mod h1:023OzeP/+EPmXeapQh35lcL3II3LrY8Ic+EFFKVhULM= -golang.org/x/image v0.0.0-20220302094943-723b81ca9867/go.mod h1:023OzeP/+EPmXeapQh35lcL3II3LrY8Ic+EFFKVhULM= -golang.org/x/lint v0.0.0-20181217174547-8f45f776aaf1/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= golang.org/x/lint v0.0.0-20190301231843-5614ed5bae6f/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= @@ -2524,22 +1030,12 @@ golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.4.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.4.1/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/mod v0.5.0/go.mod h1:5OXOZSfqPIIbmVBIIKWRFfZjPR0E5r58TLhUjH0a2Ro= -golang.org/x/mod v0.5.1/go.mod h1:5OXOZSfqPIIbmVBIIKWRFfZjPR0E5r58TLhUjH0a2Ro= -golang.org/x/mod v0.6.0-dev.0.20211013180041-c96bc1413d57/go.mod h1:3p9vT2HGsQu2K1YbXdKPJLVgG5VJdoTa1poYQBtP1AY= -golang.org/x/mod v0.6.0-dev.0.20220106191415-9b9b3d81d5e3/go.mod h1:3p9vT2HGsQu2K1YbXdKPJLVgG5VJdoTa1poYQBtP1AY= -golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= -golang.org/x/mod v0.6.0/go.mod h1:4mET923SAdbXp2ki8ey+zGs1SLqsuM2Y0uvdZR/fUNI= -golang.org/x/net v0.0.0-20170114055629-f2499483f923/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/mod v0.6.0 h1:b9gGHsz9/HhJ3HF5DHQytPpuwocVTChQJK3AvoLRD5I= golang.org/x/net v0.0.0-20180719180050-a680a1efc54d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20180911220305-26e67e76b6c3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20181011144130-49bb7cea24b1/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20181023162649-9b4f9f5ad519/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20181029044818-c44066c5c816/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20181106065722-10aee1819953/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20181108082009-03003ca0c849/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20181201002055-351d144fa1fc/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20181220203305-927f97764cc3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -2550,19 +1046,13 @@ golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190501004415-9ce7a6920f09/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190503192946-f4e77d36d62c/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190522155817-f3200d17e092/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= golang.org/x/net v0.0.0-20190613194153-d28f0bde5980/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20190619014844-b5b0513f8c1b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190628185345-da137c7871d7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190724013045-ca1201d0de80/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190813141303-74dc4d7220e7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20190827160401-ba9fcec4b297/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190923162816-aa69164e4478/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20191002035440-2ec189313ef0/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20191004110552-13f9640d40b9/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20191112182307-2180aed22343/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20191209160850-c0dbc17a3553/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200114155413-6afb5195e5aa/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200202094626-16171245cfb2/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= @@ -2581,61 +1071,23 @@ golang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81R golang.org/x/net v0.0.0-20200813134508-3edf25e44fcc/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= golang.org/x/net v0.0.0-20200904194848-62affa334b73/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= -golang.org/x/net v0.0.0-20201006153459-a7d1128ccaa0/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= -golang.org/x/net v0.0.0-20201010224723-4f7140c49acb/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= golang.org/x/net v0.0.0-20201031054903-ff519b6c9102/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= -golang.org/x/net v0.0.0-20201202161906-c7110b5ffcbb/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= golang.org/x/net v0.0.0-20201209123823-ac852fbbde11/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20201224014010-6772e930b67b/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20210119194325-5f4716e94777/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= -golang.org/x/net v0.0.0-20210220033124-5f55cee0dc0d/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20210316092652-d523dce5a7f4/go.mod h1:RBQZq4jEuRlivfhVLdyRGr576XBO4/greRjx4P4O3yc= golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= -golang.org/x/net v0.0.0-20210410081132-afb366fc7cd1/go.mod h1:9tjilg8BloeKEkVJvy7fQ90B1CfIiPueXVOjqfkSzI8= golang.org/x/net v0.0.0-20210428140749-89ef3d95e781/go.mod h1:OJAsFXCWl8Ukc7SiCT/9KSuxbyM7479/AVlXFRxuMCk= -golang.org/x/net v0.0.0-20210503060351-7fd8e65b6420/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/net v0.0.0-20210510120150-4163338589ed/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/net v0.0.0-20210520170846-37e1c6afe023/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20210525063256-abc453219eb5/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/net v0.0.0-20210610132358-84b48f89b13b/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/net v0.0.0-20210614182718-04defd469f4e/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20210805182204-aaa1db679c0d/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/net v0.0.0-20210813160813-60bc85c4be6d/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/net v0.0.0-20210825183410-e898025ed96a/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20210903162142-ad29c8ab022f/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/net v0.0.0-20210917221730-978cfadd31cf/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/net v0.0.0-20211015210444-4f30a5c0130f/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/net v0.0.0-20211029224645-99673261e6eb/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/net v0.0.0-20211209124913-491a49abca63/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/net v0.0.0-20211216030914-fe4d6282115f/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/net v0.0.0-20220127200216-cd36cc0744dd/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= -golang.org/x/net v0.0.0-20220225172249-27dd8689420f/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= -golang.org/x/net v0.0.0-20220325170049-de3da57026de/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= -golang.org/x/net v0.0.0-20220412020605-290c469a71a5/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= -golang.org/x/net v0.0.0-20220425223048-2871e0cb64e4/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= -golang.org/x/net v0.0.0-20220520000938-2e3eb7b945c2/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= -golang.org/x/net v0.0.0-20220607020251-c690dde0001d/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= -golang.org/x/net v0.0.0-20220617184016-355a448f1bc9/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= -golang.org/x/net v0.0.0-20220624214902-1bab6f366d9e/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= -golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= -golang.org/x/net v0.0.0-20220909164309-bea034e7d591/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk= -golang.org/x/net v0.0.0-20221014081412-f15817d10f9b/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk= -golang.org/x/net v0.0.0-20221017152216-f25eb7ecb193/go.mod h1:RpDiru2p0u2F0lLpEoqnP2+7xs0ifAuOcJ442g6GU2s= -golang.org/x/net v0.1.0/go.mod h1:Cx3nUiGt4eDBEyega/BKRp+/AlGL8hYe7U9odMt2Cco= -golang.org/x/net v0.3.0/go.mod h1:MBQ8lrhLObU/6UmLb4fmbmk5OcyYmqtbGd/9yIeKjEE= -golang.org/x/net v0.4.0/go.mod h1:MBQ8lrhLObU/6UmLb4fmbmk5OcyYmqtbGd/9yIeKjEE= +golang.org/x/net v0.5.0 h1:GyT4nK/YDHSqa1c4753ouYCDajOYKTja9Xb/OHtgvSw= golang.org/x/net v0.5.0/go.mod h1:DivGGAXEgPSlEBzxGzZI+ZLohi+xUj054jfeKui00ws= -golang.org/x/oauth2 v0.0.0-20180724155351-3d292e4d0cdc/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= -golang.org/x/oauth2 v0.0.0-20181017192945-9dcd33a902f4/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= -golang.org/x/oauth2 v0.0.0-20181106182150-f42d05182288/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= -golang.org/x/oauth2 v0.0.0-20181203162652-d668ce993890/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= -golang.org/x/oauth2 v0.0.0-20190402181905-9f3314589c9a/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20191202225959-858c2ad4c8b6/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= @@ -2647,26 +1099,10 @@ golang.org/x/oauth2 v0.0.0-20210220000619-9bb904979d93/go.mod h1:KelEdhl1UZF7XfJ golang.org/x/oauth2 v0.0.0-20210313182246-cd4f82c27b84/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= golang.org/x/oauth2 v0.0.0-20210402161424-2e8d93401602/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= golang.org/x/oauth2 v0.0.0-20210514164344-f6687ab2804c/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20210628180205-a41e5a781914/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20210805134026-6f1e6394065a/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20210819190943-2bc19b11175f/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20211005180243-6b3c2da341f1/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20211104180415-d3ed0bb246c8/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20220223155221-ee480838109b/go.mod h1:DAh4E804XQdzx2j+YRIaUnCqCV2RuMz24cGBJ5QYIrc= -golang.org/x/oauth2 v0.0.0-20220309155454-6242fa91716a/go.mod h1:DAh4E804XQdzx2j+YRIaUnCqCV2RuMz24cGBJ5QYIrc= -golang.org/x/oauth2 v0.0.0-20220411215720-9780585627b5/go.mod h1:DAh4E804XQdzx2j+YRIaUnCqCV2RuMz24cGBJ5QYIrc= -golang.org/x/oauth2 v0.0.0-20220608161450-d0670ef3b1eb/go.mod h1:jaDAt6Dkxork7LmZnYtzbRWj0W47D86a3TGe0YHBvmE= -golang.org/x/oauth2 v0.0.0-20220622183110-fd043fe589d2/go.mod h1:jaDAt6Dkxork7LmZnYtzbRWj0W47D86a3TGe0YHBvmE= -golang.org/x/oauth2 v0.0.0-20220822191816-0ebed06d0094/go.mod h1:h4gKUeWbJ4rQPri7E0u6Gs4e9Ri2zaLxzw5DI5XGrYg= -golang.org/x/oauth2 v0.0.0-20220909003341-f21342109be1/go.mod h1:h4gKUeWbJ4rQPri7E0u6Gs4e9Ri2zaLxzw5DI5XGrYg= -golang.org/x/oauth2 v0.0.0-20221014153046-6fdb5e3db783/go.mod h1:h4gKUeWbJ4rQPri7E0u6Gs4e9Ri2zaLxzw5DI5XGrYg= -golang.org/x/oauth2 v0.3.0/go.mod h1:rQrIauxkUhJ6CuwEXwymO2/eh4xz2ZWF1nBkcxS+tGk= -golang.org/x/perf v0.0.0-20180704124530-6e6d33e29852/go.mod h1:JLpeXjPJfIyPr5TlbXLkXWLhP8nz10XfvxElABhCtcw= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20190412183630-56d357773e84/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20200317015054-43a5402ce75a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= @@ -2674,74 +1110,44 @@ golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20220513210516-0976fa681c29/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20220601150217-0de741cfad7f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20220819030929-7fc1605a5dde/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20220929204114-8fcdb60fdcc0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sys v0.0.0-20170830134202-bb24a47a89ea/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20181026203630-95b1ffbd15a5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20181029174526-d69651ed3497/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20181107165924-66b7b1311ac8/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20181122145206-62eef0e2fa9b/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20181205085412-a5c9d58dba9a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20181218192612-074acd46bca6/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190130150945-aca44879d564/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190209173611-3b5209105503/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190502145724-3ef323f4f1fd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190514135907-3a4b5fb9f71f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190522044717-8097e1b27ff5/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190602015325-4c4f7f33c9ed/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190606203320-7fc4e5ec1444/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190616124812-15dcb6c0061f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190620070143-6f217b454f45/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190626221950-04f50cda93cb/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190712062909-fae7ac547cb7/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190801041406-cbf593c0f2f3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190812073006-9eafafc0a87e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190813064441-fde4db37ae7a/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190826190057-c7b8b68b1456/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190904154756-749cb33beabd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190916202348-b4ddaad3f8a3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190922100055-0a153f010e69/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190924154521-2837fb4f24fe/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191001151750-bb3f8db39f24/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191005200804-aed5e4c7ecf9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191008105621-543471e840be/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191022100944-742c48ecaeb7/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191112214154-59a1497f0cea/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191115151921-52ab43148777/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191120155948-bd437916bb0e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191210023423-ac6580df4449/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191220142924-d4481acd189f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191228213918-04cbcbbfeed8/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200106162015-b016eb3dc98e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200107162124-548cf772de50/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200113162924-86b910548bc1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200120151820-655fe14d7479/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200122134326-e047566fdf82/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200124204421-9fbb57f87de9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200202164722-d101bd2416d5/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200212091648-12a6c2dcc1e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200217220822-9197077df867/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200302150141-5c8b2ff67527/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -2753,128 +1159,49 @@ golang.org/x/sys v0.0.0-20200515095857-1151b9dac4a9/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20200519105757-fe76b779f299/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200523222454-059865788121/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200615200032-f1bc736245b1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200622214017-ed371f2e16b4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200625212154-ddb9806d33ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200728102440-3e129f6d46b1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200803210538-64077c9b5642/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200814200057-3d37ad5750ed/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200817155316-9781c653f443/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200824131525-c12d262b63d8/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200826173525-f9321e4c35a6/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200831180312-196b9ba8737a/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200905004654-be1d3432aa8f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200909081042-eff7692f9009/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200916030750-2334cc1a136f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200917073148-efd3b9a0ff20/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200922070232-aee5d888a860/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200923182605-d9f96fdee20d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20201013081832-0aaa2718063a/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201015000850-e3ed0017c211/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20201112073958-5cba982894dd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20201117170446-d9b008d0a637/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201201145000-ef89a241ccb3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20201202213521-69691e467435/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20201204225414-ed752295db88/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210104204734-6f8348627aad/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210112080510-489259a85091/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210220050731-9a76102bfb43/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210225134936-a50acf3fe073/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210303074136-134d130e1a04/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210304124612-50617c2ba197/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210305230114-8fe3ee5dd75b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210313202042-bd2e13477e9c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210315160823-c6e025ad8005/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210316164454-77fc1eacc6aa/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210320140829-1e4c9ba3b0c4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210324051608-47abb6519492/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210403161142-5e06dd20ab57/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210420205809-ac73e9fd8988/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210423185535-09eb48e85fd7/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210426230700-d19ff857e887/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210514084401-e8d321eab015/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210603081109-ebe580a85c40/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210603125802-9665404d3644/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210616045830-e2b7044e8c71/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210616094352-59db8d763f22/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210806184541-e5e7981a1069/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210809222454-d867a43fc93e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210816183151-1e6c022a8912/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210819135213-f52c844e1c1c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210823070655-63515b42dcdf/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210831042530-f4d43177bf5e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210903071746-97244b99971b/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210906170528-6f6e22806c34/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210908233432-aa78b53d3365/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210917161153-d61c044b1678/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210927094055-39ccf1dd6fa6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20211007075335-d3039528d8ac/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20211019181941-9d821ace8654/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20211025201205-69cdffdb9359/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20211031064116-611d5d643895/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20211105183446-c75c47738b0c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20211116061358-0a5406a5449c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20211124211545-fe61309f8881/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20211205182925-97ca703d548d/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20211210111614-af8b64212486/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20211213223007-03aa0b5f6827/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220114195835-da31bd327af9/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220128215802-99c3d69c2c27/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220204135822-1c1b9b1eba6a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220209214540-3681064d5158/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220227234510-4e6760a101f9/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220315194320-039c03cc5b86/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220319134239-a9b59b0215f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220328115105-d36c6a25d886/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220403020550-483a9cbc67c0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220405052023-b1e9470b6e64/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220405210540-1e041c57c461/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220406163625-3f8b81556e12/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220412211240-33da011f77ad/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220422013727-9388b58f7150/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220502124256-b6088ccd6cba/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220503163025-988cb79eb6c6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220610221304-9f5ed59c137d/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220615213510-4f61da869c0c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220624220833-87e55d714810/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220627191245-f75cf1eec38b/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220702020025-31831981b65f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220728004956-3c1f35247d10/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220825204002-c680a09ffe64/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220829200755-d48e67d00261/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220908164124-27713097b956/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220915200043-7b5979e65e41/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20221010170243-090e33056c14/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20221013171732-95e765b1cc43/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.3.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.4.0 h1:Zr2JFtRQNX3BCZ8YtxRE9hNJYC8J6I1MVbMg6owUp18= golang.org/x/sys v0.4.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= -golang.org/x/term v0.0.0-20201210144234-2321bbc49cbf/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= -golang.org/x/term v0.0.0-20210220032956-6a3ed077a48d/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= -golang.org/x/term v0.0.0-20210615171337-6886f2dfbf5b/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= -golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= -golang.org/x/term v0.0.0-20220411215600-e5f449aeb171/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= -golang.org/x/term v0.0.0-20220526004731-065cf7ba2467/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= -golang.org/x/term v0.0.0-20220919170432-7a66f970e087/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= -golang.org/x/term v0.1.0/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= -golang.org/x/term v0.3.0/go.mod h1:q750SLmJuPmVoN1blW3UFBPREJfb1KmY3vwxfr+nFDA= +golang.org/x/term v0.4.0 h1:O7UWfv5+A2qiuulQk30kVinPoMtoIPeVaKLEgLpVkvg= golang.org/x/term v0.4.0/go.mod h1:9P2UbLfCdcvo3p/nzKvsmas4TnlujnuoV9hGgYzW1lQ= -golang.org/x/text v0.0.0-20160726164857-2910a502d2bf/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= @@ -2883,192 +1210,84 @@ golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.4/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= -golang.org/x/text v0.3.8/go.mod h1:E6s5w1FMmriuDzIBO73fBruAKo1PCIq6d2Q6DHfQ8WQ= -golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= -golang.org/x/text v0.5.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= +golang.org/x/text v0.6.0 h1:3XmdazWV+ubf7QgHSTWeykHOci5oeekaGJBLkrkaw4k= golang.org/x/text v0.6.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/time v0.0.0-20180412165947-fbb02b2291d2/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/time v0.0.0-20200416051211-89c76fbcd5d1/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/time v0.0.0-20200630173020-3af7569d3a1e/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/time v0.0.0-20201208040808-7e3f01d25324/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/time v0.0.0-20210220033141-f8bda1e9f3ba/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/time v0.0.0-20210723032227-1f47c861a9ac/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/time v0.0.0-20220609170525-579cf78fd858/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20180525024113-a5b4c53f6e8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20181011042414-1f849cf54d09/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20181117154741-2ddaf7f79a09/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20181219222714-6e267b5cc78e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20190110163146-51295c7ec13a/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20190206041539-40960b6deb8e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20190221204921-83362c3779f5/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= -golang.org/x/tools v0.0.0-20190228203856-589c23e65e65/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= -golang.org/x/tools v0.0.0-20190307163923-6a08e3108db3/go.mod h1:25r3+/G6/xytQM8iWZKq3Hn0kr0rgFKPUNVEL/dr3z4= golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190311215038-5c2858a9cfe5/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190312151545-0bb0c0a6e846/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190312170243-e65039ee4138/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190321232350-e250d351ecad/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190322203728-c1a832b0ad89/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190328211700-ab21143f2384/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190422233926-fe54fb35175b/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190425150028-36563e24a262/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= golang.org/x/tools v0.0.0-20190506145303-2d16b83fe98c/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= -golang.org/x/tools v0.0.0-20190521203540-521d6ed310dd/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= golang.org/x/tools v0.0.0-20190606124116-d0a3d012864b/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= -golang.org/x/tools v0.0.0-20190614205625-5aca471b1d59/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= -golang.org/x/tools v0.0.0-20190624222133-a101b041ded4/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= golang.org/x/tools v0.0.0-20190628153133-6cdbf07be9d0/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= -golang.org/x/tools v0.0.0-20190706070813-72ffa07ba3db/go.mod h1:jcCCGcm9btYwXyDqrUWc6MKQKKGJCWEQ3AfLSRIbEuI= -golang.org/x/tools v0.0.0-20190719005602-e377ae9d6386/go.mod h1:jcCCGcm9btYwXyDqrUWc6MKQKKGJCWEQ3AfLSRIbEuI= golang.org/x/tools v0.0.0-20190816200558-6889da9d5479/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20190907020128-2ca718005c18/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20190910044552-dd2b5c81c578/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20190911174233-4f2ddba30aff/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20190916130336-e45ffcd953cc/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20190920225731-5eefd052ad72/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20190927191325-030b2cf1153e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191010075000-0337d82405ff/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191012152004-8de300cfc20a/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191029041327-9cc4af7d6b2c/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191029190741-b9c20aec41a5/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191108193012-7d206e10da11/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191112195655-aa38f8e97acc/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191113191852-77e3bb0ad9e7/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191113232020-e2727e816f5a/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191115202509-3a792d9c32b2/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191125144606-a911d9008d1f/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191126055441-b0650ceb63d9/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191130070609-6e064ea0cf2d/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191216052735-49a3e744a425/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20191216173652-a0e659d51361/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20191227053925-7b8e75db28f4/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200102140908-9497f49d5709/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20200103221440-774c71fcf114/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200108203644-89082a384178/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20200117012304-6edc0a871e69/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20200117161641-43d50277825c/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200117220505-0cba7a3a9ee9/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20200122220014-bf1340f18c4a/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20200130002326-2f3ba24bd6e7/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20200204074204-1cc6d1ef6c74/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200204192400-7124308813f3/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20200207183749-b753a1ba74fa/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20200212150539-ea181f53ac56/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20200224181240-023911ca70b2/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20200227222343-706bc42d1f0d/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20200304193943-95d2e580d8eb/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw= golang.org/x/tools v0.0.0-20200312045724-11d5b4c81c7d/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw= -golang.org/x/tools v0.0.0-20200324003944-a576cf524670/go.mod h1:Sl4aGygMT6LrqrWclx+PTx3U+LnKx/seiNR+3G19Ar8= -golang.org/x/tools v0.0.0-20200329025819-fd4102a86c65/go.mod h1:Sl4aGygMT6LrqrWclx+PTx3U+LnKx/seiNR+3G19Ar8= golang.org/x/tools v0.0.0-20200331025713-a30bf2db82d4/go.mod h1:Sl4aGygMT6LrqrWclx+PTx3U+LnKx/seiNR+3G19Ar8= -golang.org/x/tools v0.0.0-20200331202046-9d5940d49312/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200414032229-332987a829c3/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200422022333-3d57cf2e726e/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200426102838-f3a5411a4c3b/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200501065659-ab2804fb9c9d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200502202811-ed308ab3e770/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200505023115-26f46d2f7ef8/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200512131952-2bc93b1c0c88/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200515010526-7d3b6ebf133d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200522201501-cb1345f3a375/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200616133436-c1934b75d054/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200618134242-20370b0cb4b2/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200622203043-20e05c1c8ffa/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200624225443-88f3c62a19ff/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200625211823-6506e20df31f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200626171337-aa94e735be7f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200630154851-b2d8b0336632/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200706234117-b22de6825cf7/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= golang.org/x/tools v0.0.0-20200717024301-6ddee64345a6/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= -golang.org/x/tools v0.0.0-20200724022722-7017fd6b1305/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= golang.org/x/tools v0.0.0-20200729194436-6467de6f59a7/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= golang.org/x/tools v0.0.0-20200804011535-6c149bb5ef0d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= -golang.org/x/tools v0.0.0-20200812195022-5ae4c3c160a0/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= -golang.org/x/tools v0.0.0-20200820010801-b793a1359eac/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= golang.org/x/tools v0.0.0-20200825202427-b303f430e36d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= -golang.org/x/tools v0.0.0-20200831203904-5a2aa26beb65/go.mod h1:Cj7w3i3Rnn0Xh82ur9kSqwfTHTeVxaDqrfMjpcNT6bE= golang.org/x/tools v0.0.0-20200904185747-39188db58858/go.mod h1:Cj7w3i3Rnn0Xh82ur9kSqwfTHTeVxaDqrfMjpcNT6bE= -golang.org/x/tools v0.0.0-20200916195026-c9a70fc28ce3/go.mod h1:z6u4i615ZeAfBE4XtMziQW1fSVJXACjjbWkB/mvPzlU= -golang.org/x/tools v0.0.0-20201001104356-43ebab892c4c/go.mod h1:z6u4i615ZeAfBE4XtMziQW1fSVJXACjjbWkB/mvPzlU= -golang.org/x/tools v0.0.0-20201002184944-ecd9fd270d5d/go.mod h1:z6u4i615ZeAfBE4XtMziQW1fSVJXACjjbWkB/mvPzlU= golang.org/x/tools v0.0.0-20201022035929-9cf592e881e9/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.0.0-20201023174141-c8cfbd0f21e6/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.0.0-20201028025901-8cd080b735b3/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20201110124207-079ba7bd75cd/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20201201161351-ac6f37ff4c2a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20201208233053-a543418bbed2/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20201224043029-2b0845dc783e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.0.0-20201230224404-63754364767c/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20210105154028-b0ab187a4818/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20210108195828-e2f9c7f1fc8e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.1.0/go.mod h1:xkSsbof2nBLbhDlRMhhhyNLN/zl3eTqcnHD5viDpcZ0= -golang.org/x/tools v0.1.1-0.20210205202024-ef80cdb6ec6d/go.mod h1:9bzcO0MWcOuT0tm1iBGzDVPshzfwoVvREIui8C+MHqU= -golang.org/x/tools v0.1.1-0.20210302220138-2ac05c832e1a/go.mod h1:9bzcO0MWcOuT0tm1iBGzDVPshzfwoVvREIui8C+MHqU= golang.org/x/tools v0.1.1/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.2/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= -golang.org/x/tools v0.1.3/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= -golang.org/x/tools v0.1.4/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= -golang.org/x/tools v0.1.7/go.mod h1:LGqMHiF4EqQNHR1JncWGqT5BVaXmza+X+BDGol+dOxo= -golang.org/x/tools v0.1.8-0.20211029000441-d6a9af8af023/go.mod h1:nABZi5QlRsZVlzPpHl034qft6wpY4eDcsTt5AaioBiU= -golang.org/x/tools v0.1.8/go.mod h1:nABZi5QlRsZVlzPpHl034qft6wpY4eDcsTt5AaioBiU= -golang.org/x/tools v0.1.9-0.20211228192929-ee1ca4ffc4da/go.mod h1:nABZi5QlRsZVlzPpHl034qft6wpY4eDcsTt5AaioBiU= -golang.org/x/tools v0.1.9/go.mod h1:nABZi5QlRsZVlzPpHl034qft6wpY4eDcsTt5AaioBiU= -golang.org/x/tools v0.1.10/go.mod h1:Uh6Zz+xoGYZom868N8YTex3t7RhtHDBrE8Gzo9bV56E= -golang.org/x/tools v0.1.11-0.20220316014157-77aa08bb151a/go.mod h1:Uh6Zz+xoGYZom868N8YTex3t7RhtHDBrE8Gzo9bV56E= -golang.org/x/tools v0.1.11-0.20220513221640-090b14e8501f/go.mod h1:SgwaegtQh8clINPpECJMqnxLv9I09HLqnW3RMqW0CA4= -golang.org/x/tools v0.1.11/go.mod h1:SgwaegtQh8clINPpECJMqnxLv9I09HLqnW3RMqW0CA4= -golang.org/x/tools v0.1.12-0.20220628192153-7743d1d949f1/go.mod h1:SgwaegtQh8clINPpECJMqnxLv9I09HLqnW3RMqW0CA4= -golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= -golang.org/x/tools v0.2.0/go.mod h1:y4OqIKeOV/fWJetJ8bXPU1sEVniLMIyDAZWeHdV+NTA= +golang.org/x/tools v0.2.0 h1:G6AHpWxTMGY1KyEYoAQ5WTtIekUUvDNjan3ugu60JvE= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.org/x/xerrors v0.0.0-20220411194840-2f41105eb62f/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.org/x/xerrors v0.0.0-20220517211312-f3a8303e98df/go.mod h1:K8+ghG5WaK9qNqU5K3HdILfMLy1f3aNYFI/wnl100a8= -golang.org/x/xerrors v0.0.0-20220609144429-65e65417b02f/go.mod h1:K8+ghG5WaK9qNqU5K3HdILfMLy1f3aNYFI/wnl100a8= -golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2/go.mod h1:K8+ghG5WaK9qNqU5K3HdILfMLy1f3aNYFI/wnl100a8= -gonum.org/v1/gonum v0.0.0-20180816165407-929014505bf4/go.mod h1:Y+Yx5eoAFn32cQvJDxZx5Dpnq+c3wtXuadVZAcxbbBo= -gonum.org/v1/gonum v0.0.0-20181121035319-3f7ecaa7e8ca/go.mod h1:Y+Yx5eoAFn32cQvJDxZx5Dpnq+c3wtXuadVZAcxbbBo= -gonum.org/v1/gonum v0.0.0-20190331200053-3d26580ed485/go.mod h1:2ltnJ7xHfj0zHS40VVPYEAAMTa3ZGguvHGBSJeRWqE0= -gonum.org/v1/gonum v0.6.0/go.mod h1:9mxDZsDKxgMAuccQkewq682L+0eCu4dCN2yonUJTCLU= -gonum.org/v1/gonum v0.8.2/go.mod h1:oe/vMfY3deqTw+1EZJhuvEW2iwGF1bW9wwu7XCu0+v0= -gonum.org/v1/gonum v0.9.3/go.mod h1:TZumC3NeyVQskjXqmyWt4S3bINhy7B4eYwW69EbyX+0= -gonum.org/v1/gonum v0.12.0/go.mod h1:73TDxJfAAHeA8Mk9mf8NlIppyhQNo5GLTcYeqgo2lvY= -gonum.org/v1/netlib v0.0.0-20181029234149-ec6d1f5cefe6/go.mod h1:wa6Ws7BG/ESfp6dHfk7C6KdzKA7wR7u/rKwOGE66zvw= -gonum.org/v1/netlib v0.0.0-20190313105609-8cb42192e0e0/go.mod h1:wa6Ws7BG/ESfp6dHfk7C6KdzKA7wR7u/rKwOGE66zvw= -gonum.org/v1/netlib v0.0.0-20190331212654-76723241ea4e/go.mod h1:kS+toOQn6AQKjmKJ7gzohV1XkqsFehRA2FbsbkopSuQ= -gonum.org/v1/plot v0.0.0-20190515093506-e2840ee46a6b/go.mod h1:Wt8AAjI+ypCyYX3nZBvf6cAIx93T+c/OS2HFAYskSZc= -gonum.org/v1/plot v0.9.0/go.mod h1:3Pcqqmp6RHvJI72kgb8fThyUnav364FOsdDo2aGW5lY= -gonum.org/v1/plot v0.10.1/go.mod h1:VZW5OlhkL1mysU9vaqNHnsy86inf6Ot+jB3r+BczCEo= -google.golang.org/api v0.0.0-20160322025152-9bf6e6e569ff/go.mod h1:4mhQ8q/RsB7i+udVvVy5NUi08OU8ZlA0gRVgrF7VFY0= -google.golang.org/api v0.0.0-20180910000450-7ca32eb868bf/go.mod h1:4mhQ8q/RsB7i+udVvVy5NUi08OU8ZlA0gRVgrF7VFY0= -google.golang.org/api v0.0.0-20181030000543-1d582fd0359e/go.mod h1:4mhQ8q/RsB7i+udVvVy5NUi08OU8ZlA0gRVgrF7VFY0= -google.golang.org/api v0.0.0-20181220000619-583d854617af/go.mod h1:4mhQ8q/RsB7i+udVvVy5NUi08OU8ZlA0gRVgrF7VFY0= -google.golang.org/api v0.2.0/go.mod h1:IfRCZScioGtypHNTlz3gFk67J8uePVW7uDTBzXuIkhU= -google.golang.org/api v0.3.0/go.mod h1:IuvZyQh8jgscv8qWfQ4ABd8m7hEudgBFM/EdhA3BnXw= +gonum.org/v1/gonum v0.12.0 h1:xKuo6hzt+gMav00meVPUlXwSdoEJP46BR+wdxQEFK2o= google.golang.org/api v0.3.1/go.mod h1:6wY9I6uQWHQ8EM57III9mq/AjF+i8G65rmVagqKMtkk= google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE= -google.golang.org/api v0.5.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE= -google.golang.org/api v0.6.0/go.mod h1:btoxGiFvQNVUZQ8W08zLtrVS08CNpINPEfxXxgJL1Q4= -google.golang.org/api v0.6.1-0.20190607001116-5213b8090861/go.mod h1:btoxGiFvQNVUZQ8W08zLtrVS08CNpINPEfxXxgJL1Q4= google.golang.org/api v0.7.0/go.mod h1:WtwebWUNSVBH/HAw79HIFXZNqEvBhG+Ra+ax0hx3E3M= google.golang.org/api v0.8.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= google.golang.org/api v0.9.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= -google.golang.org/api v0.10.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= google.golang.org/api v0.13.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= google.golang.org/api v0.14.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= google.golang.org/api v0.15.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= @@ -3078,7 +1297,6 @@ google.golang.org/api v0.19.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/ google.golang.org/api v0.20.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= google.golang.org/api v0.22.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= google.golang.org/api v0.24.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE= -google.golang.org/api v0.25.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE= google.golang.org/api v0.28.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE= google.golang.org/api v0.29.0/go.mod h1:Lcubydp8VUV7KeIHD9z2Bys/sm/vGKnG1UHuDBSrHWM= google.golang.org/api v0.30.0/go.mod h1:QGmEvQ87FHZNiUVJkT14jQNYJ4ZJjdRF23ZXz5138Fc= @@ -3088,74 +1306,28 @@ google.golang.org/api v0.40.0/go.mod h1:fYKFpnQN0DsDSKRVRcQSDQNtqWPfM9i+zNPxepjR google.golang.org/api v0.41.0/go.mod h1:RkxM5lITDfTzmyKFPt+wGrCJbVfniCr2ool8kTBzRTU= google.golang.org/api v0.43.0/go.mod h1:nQsDGjRXMo4lvh5hP0TKqF244gqhGcr/YSIykhUk/94= google.golang.org/api v0.44.0/go.mod h1:EBOGZqzyhtvMDoxwS97ctnh0zUmYY6CxqXsc1AvkYD8= -google.golang.org/api v0.47.0/go.mod h1:Wbvgpq1HddcWVtzsVLyfLp8lDg6AA241LmgIL59tHXo= -google.golang.org/api v0.48.0/go.mod h1:71Pr1vy+TAZRPkPs/xlCf5SsU8WjuAWv1Pfjbtukyy4= -google.golang.org/api v0.50.0/go.mod h1:4bNT5pAuq5ji4SRZm+5QIkjny9JAyVD/3gaSihNefaw= -google.golang.org/api v0.51.0/go.mod h1:t4HdrdoNgyN5cbEfm7Lum0lcLDLiise1F8qDKX00sOU= -google.golang.org/api v0.54.0/go.mod h1:7C4bFFOvVDGXjfDTAsgGwDgAxRDeQ4X8NvUedIt6z3k= -google.golang.org/api v0.55.0/go.mod h1:38yMfeP1kfjsl8isn0tliTjIb1rJXcQi4UXlbqivdVE= -google.golang.org/api v0.56.0/go.mod h1:38yMfeP1kfjsl8isn0tliTjIb1rJXcQi4UXlbqivdVE= -google.golang.org/api v0.57.0/go.mod h1:dVPlbZyBo2/OjBpmvNdpn2GRm6rPy75jyU7bmhdrMgI= -google.golang.org/api v0.59.0/go.mod h1:sT2boj7M9YJxZzgeZqXogmhfmRWDtPzT31xkieUbuZU= -google.golang.org/api v0.61.0/go.mod h1:xQRti5UdCmoCEqFxcz93fTl338AVqDgyaDRuOZ3hg9I= -google.golang.org/api v0.62.0/go.mod h1:dKmwPCydfsad4qCH08MSdgWjfHOyfpd4VtDGgRFdavw= -google.golang.org/api v0.63.0/go.mod h1:gs4ij2ffTRXwuzzgJl/56BdwJaA194ijkfn++9tDuPo= -google.golang.org/api v0.67.0/go.mod h1:ShHKP8E60yPsKNw/w8w+VYaj9H6buA5UqDp8dhbQZ6g= -google.golang.org/api v0.70.0/go.mod h1:Bs4ZM2HGifEvXwd50TtW70ovgJffJYw2oRCOFU/SkfA= -google.golang.org/api v0.71.0/go.mod h1:4PyU6e6JogV1f9eA4voyrTY2batOLdgZ5qZ5HOCc4j8= -google.golang.org/api v0.74.0/go.mod h1:ZpfMZOVRMywNyvJFeqL9HRWBgAuRfSjJFpe9QtRRyDs= -google.golang.org/api v0.75.0/go.mod h1:pU9QmyHLnzlpar1Mjt4IbapUCy8J+6HD6GeELN69ljA= -google.golang.org/api v0.77.0/go.mod h1:pU9QmyHLnzlpar1Mjt4IbapUCy8J+6HD6GeELN69ljA= -google.golang.org/api v0.78.0/go.mod h1:1Sg78yoMLOhlQTeF+ARBoytAcH1NNyyl390YMy6rKmw= -google.golang.org/api v0.80.0/go.mod h1:xY3nI94gbvBrE0J6NHXhxOmW97HG7Khjkku6AFB3Hyg= -google.golang.org/api v0.81.0/go.mod h1:FA6Mb/bZxj706H2j+j2d6mHEEaHBmbbWnkfvmorOCko= -google.golang.org/api v0.84.0/go.mod h1:NTsGnUFJMYROtiquksZHBWtHfeMC7iYthki7Eq3pa8o= -google.golang.org/api v0.85.0/go.mod h1:AqZf8Ep9uZ2pyTvgL+x0D3Zt0eoT9b5E8fmzfu6FO2g= -google.golang.org/api v0.90.0/go.mod h1:+Sem1dnrKlrXMR/X0bPnMWyluQe4RsNoYfmNLhOIkzw= -google.golang.org/api v0.93.0/go.mod h1:+Sem1dnrKlrXMR/X0bPnMWyluQe4RsNoYfmNLhOIkzw= -google.golang.org/api v0.95.0/go.mod h1:eADj+UBuxkh5zlrSntJghuNeg8HwQ1w5lTKkuqaETEI= -google.golang.org/api v0.96.0/go.mod h1:w7wJQLTM+wvQpNf5JyEcBoxK0RH7EDrh/L4qfsuJ13s= -google.golang.org/api v0.97.0/go.mod h1:w7wJQLTM+wvQpNf5JyEcBoxK0RH7EDrh/L4qfsuJ13s= -google.golang.org/api v0.98.0/go.mod h1:w7wJQLTM+wvQpNf5JyEcBoxK0RH7EDrh/L4qfsuJ13s= -google.golang.org/api v0.100.0/go.mod h1:ZE3Z2+ZOr87Rx7dqFsdRQkRBk36kDtp/h+QpHbB7a70= -google.golang.org/api v0.102.0/go.mod h1:3VFl6/fzoA+qNuS1N1/VfXY4LjoXN/wzeIp7TweWwGo= -google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= google.golang.org/appengine v1.2.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= -google.golang.org/appengine v1.3.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/appengine v1.6.1/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0= -google.golang.org/appengine v1.6.2/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0= google.golang.org/appengine v1.6.5/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= google.golang.org/appengine v1.6.6/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= google.golang.org/appengine v1.6.7/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= -google.golang.org/cloud v0.0.0-20151119220103-975617b05ea8/go.mod h1:0H1ncTHf11KCFhTc/+EFRbzSCOZx+VUbRMk55Yv5MYk= -google.golang.org/genproto v0.0.0-20170818010345-ee236bd376b0/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= google.golang.org/genproto v0.0.0-20180831171423-11092d34479b/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= -google.golang.org/genproto v0.0.0-20181029155118-b69ba1387ce2/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= -google.golang.org/genproto v0.0.0-20181107211654-5fc9ac540362/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= -google.golang.org/genproto v0.0.0-20181219182458-5a97ab628bfb/go.mod h1:7Ep/1NZk928CDR8SjdVbjWNpdIf6nzjE3BTgJDr2Atg= google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= google.golang.org/genproto v0.0.0-20190418145605-e7d98fc518a7/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= google.golang.org/genproto v0.0.0-20190425155659-357c62f0e4bb/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= google.golang.org/genproto v0.0.0-20190502173448-54afdca5d873/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= -google.golang.org/genproto v0.0.0-20190508193815-b515fa19cec8/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= -google.golang.org/genproto v0.0.0-20190522204451-c2c4e71fbf69/go.mod h1:z3L6/3dTEVtUr6QSP8miRzeRqwQOioJ9I66odjN4I7s= google.golang.org/genproto v0.0.0-20190530194941-fb225487d101/go.mod h1:z3L6/3dTEVtUr6QSP8miRzeRqwQOioJ9I66odjN4I7s= -google.golang.org/genproto v0.0.0-20190620144150-6af8c5fc6601/go.mod h1:z3L6/3dTEVtUr6QSP8miRzeRqwQOioJ9I66odjN4I7s= -google.golang.org/genproto v0.0.0-20190716160619-c506a9f90610/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= google.golang.org/genproto v0.0.0-20190801165951-fa694d86fc64/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= google.golang.org/genproto v0.0.0-20190911173649-1774047e7e51/go.mod h1:IbNlFCBrqXvoKpeg0TB2l7cyZUmoaFKYIwrEpbDKLA8= -google.golang.org/genproto v0.0.0-20190927181202-20e1ac93f88c/go.mod h1:IbNlFCBrqXvoKpeg0TB2l7cyZUmoaFKYIwrEpbDKLA8= google.golang.org/genproto v0.0.0-20191108220845-16a3f7862a1a/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= google.golang.org/genproto v0.0.0-20191115194625-c23dd37a84c9/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= google.golang.org/genproto v0.0.0-20191216164720-4f79533eabd1/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= google.golang.org/genproto v0.0.0-20191230161307-f3c370f40bfb/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= -google.golang.org/genproto v0.0.0-20200108215221-bd8f9a0ef82f/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= google.golang.org/genproto v0.0.0-20200115191322-ca5a22157cba/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= -google.golang.org/genproto v0.0.0-20200117163144-32f20d992d24/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= google.golang.org/genproto v0.0.0-20200122232147-0452cf42e150/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= google.golang.org/genproto v0.0.0-20200204135345-fa8e72b47b90/go.mod h1:GmwEX6Z4W5gMy59cAlVYjN9JhxgbQH6Gn+gFDQe2lzA= google.golang.org/genproto v0.0.0-20200212174721-66ed5ce911ce/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= @@ -3171,17 +1343,12 @@ google.golang.org/genproto v0.0.0-20200511104702-f5ebc3bea380/go.mod h1:55QSHmfG google.golang.org/genproto v0.0.0-20200513103714-09dca8ec2884/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= google.golang.org/genproto v0.0.0-20200515170657-fc4c6c6a6587/go.mod h1:YsZOwe1myG/8QRHRsmBRE1LrgQY60beZKjly0O1fX9U= google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo= -google.golang.org/genproto v0.0.0-20200527145253-8367513e4ece/go.mod h1:jDfRM7FcilCzHH/e9qn6dsT145K34l5v+OpcnNgKAAA= google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7FcilCzHH/e9qn6dsT145K34l5v+OpcnNgKAAA= -google.golang.org/genproto v0.0.0-20200626011028-ee7919e894b5/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20200707001353-8e8330bf89df/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200904004341-0bd0a958aa1d/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20201019141844-1ed22bb0c154/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20201109203340-2640f1f9cdfb/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20201110150050-8816d57aaa9a/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20201119123407-9b1e624d6bc4/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20201201144952-b05cb90ed32e/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20201210142538-e3217bee35cc/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= @@ -3193,78 +1360,13 @@ google.golang.org/genproto v0.0.0-20210226172003-ab064af71705/go.mod h1:FWY/as6D google.golang.org/genproto v0.0.0-20210303154014-9728d6b83eeb/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20210310155132-4ce2db91004e/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20210319143718-93e7006c17a6/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210329143202-679c6ae281ee/go.mod h1:9lPAdzaEmUacj36I+k7YKbEc5CXzPIeORRgDAUOu28A= google.golang.org/genproto v0.0.0-20210402141018-6c239bbf2bb1/go.mod h1:9lPAdzaEmUacj36I+k7YKbEc5CXzPIeORRgDAUOu28A= -google.golang.org/genproto v0.0.0-20210513213006-bf773b8c8384/go.mod h1:P3QM42oQyzQSnHPnZ/vqoCdDmzH28fzWByN9asMeM8A= google.golang.org/genproto v0.0.0-20210602131652-f16073e35f0c/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0= -google.golang.org/genproto v0.0.0-20210604141403-392c879c8b08/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0= -google.golang.org/genproto v0.0.0-20210608205507-b6d2f5bf0d7d/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0= -google.golang.org/genproto v0.0.0-20210624195500-8bfb893ecb84/go.mod h1:SzzZ/N+nwJDaO1kznhnlzqS8ocJICar6hYhVyhi++24= -google.golang.org/genproto v0.0.0-20210713002101-d411969a0d9a/go.mod h1:AxrInvYm1dci+enl5hChSFPOmmUF1+uAa/UsgNRWd7k= -google.golang.org/genproto v0.0.0-20210716133855-ce7ef5c701ea/go.mod h1:AxrInvYm1dci+enl5hChSFPOmmUF1+uAa/UsgNRWd7k= -google.golang.org/genproto v0.0.0-20210728212813-7823e685a01f/go.mod h1:ob2IJxKrgPT52GcgX759i1sleT07tiKowYBGbczaW48= -google.golang.org/genproto v0.0.0-20210805201207-89edb61ffb67/go.mod h1:ob2IJxKrgPT52GcgX759i1sleT07tiKowYBGbczaW48= -google.golang.org/genproto v0.0.0-20210813162853-db860fec028c/go.mod h1:cFeNkxwySK631ADgubI+/XFU/xp8FD5KIVV4rj8UC5w= -google.golang.org/genproto v0.0.0-20210821163610-241b8fcbd6c8/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= google.golang.org/genproto v0.0.0-20210828152312-66f60bf46e71/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= -google.golang.org/genproto v0.0.0-20210831024726-fe130286e0e2/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= -google.golang.org/genproto v0.0.0-20210903162649-d08c68adba83/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= -google.golang.org/genproto v0.0.0-20210909211513-a8c4777a87af/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= -google.golang.org/genproto v0.0.0-20210917145530-b395a37504d4/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= -google.golang.org/genproto v0.0.0-20210924002016-3dee208752a0/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= -google.golang.org/genproto v0.0.0-20211008145708-270636b82663/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= -google.golang.org/genproto v0.0.0-20211028162531-8db9c33dc351/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= -google.golang.org/genproto v0.0.0-20211101144312-62acf1d99145/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= -google.golang.org/genproto v0.0.0-20211118181313-81c1377c94b1/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= -google.golang.org/genproto v0.0.0-20211129164237-f09f9a12af12/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= -google.golang.org/genproto v0.0.0-20211203200212-54befc351ae9/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= -google.golang.org/genproto v0.0.0-20211206160659-862468c7d6e0/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= -google.golang.org/genproto v0.0.0-20211208223120-3a66f561d7aa/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= -google.golang.org/genproto v0.0.0-20211221195035-429b39de9b1c/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= -google.golang.org/genproto v0.0.0-20220126215142-9970aeb2e350/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= -google.golang.org/genproto v0.0.0-20220207164111-0872dc986b00/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= -google.golang.org/genproto v0.0.0-20220218161850-94dd64e39d7c/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI= -google.golang.org/genproto v0.0.0-20220222213610-43724f9ea8cf/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI= -google.golang.org/genproto v0.0.0-20220304144024-325a89244dc8/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI= -google.golang.org/genproto v0.0.0-20220310185008-1973136f34c6/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI= -google.golang.org/genproto v0.0.0-20220314164441-57ef72a4c106/go.mod h1:hAL49I2IFola2sVEjAn7MEwsja0xp51I0tlGAf9hz4E= -google.golang.org/genproto v0.0.0-20220324131243-acbaeb5b85eb/go.mod h1:hAL49I2IFola2sVEjAn7MEwsja0xp51I0tlGAf9hz4E= -google.golang.org/genproto v0.0.0-20220407144326-9054f6ed7bac/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= -google.golang.org/genproto v0.0.0-20220413183235-5e96e2839df9/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= -google.golang.org/genproto v0.0.0-20220414192740-2d67ff6cf2b4/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= -google.golang.org/genproto v0.0.0-20220421151946-72621c1f0bd3/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= -google.golang.org/genproto v0.0.0-20220429170224-98d788798c3e/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= -google.golang.org/genproto v0.0.0-20220502173005-c8bf987b8c21/go.mod h1:RAyBrSAP7Fh3Nc84ghnVLDPuV51xc9agzmm4Ph6i0Q4= -google.golang.org/genproto v0.0.0-20220505152158-f39f71e6c8f3/go.mod h1:RAyBrSAP7Fh3Nc84ghnVLDPuV51xc9agzmm4Ph6i0Q4= -google.golang.org/genproto v0.0.0-20220518221133-4f43b3371335/go.mod h1:RAyBrSAP7Fh3Nc84ghnVLDPuV51xc9agzmm4Ph6i0Q4= -google.golang.org/genproto v0.0.0-20220519153652-3a47de7e79bd/go.mod h1:RAyBrSAP7Fh3Nc84ghnVLDPuV51xc9agzmm4Ph6i0Q4= -google.golang.org/genproto v0.0.0-20220523171625-347a074981d8/go.mod h1:RAyBrSAP7Fh3Nc84ghnVLDPuV51xc9agzmm4Ph6i0Q4= -google.golang.org/genproto v0.0.0-20220608133413-ed9918b62aac/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA= -google.golang.org/genproto v0.0.0-20220616135557-88e70c0c3a90/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA= -google.golang.org/genproto v0.0.0-20220617124728-180714bec0ad/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA= -google.golang.org/genproto v0.0.0-20220624142145-8cd45d7dbd1f/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA= -google.golang.org/genproto v0.0.0-20220628213854-d9e0b6570c03/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA= -google.golang.org/genproto v0.0.0-20220722212130-b98a9ff5e252/go.mod h1:GkXuJDJ6aQ7lnJcRF+SJVgFdQhypqgl3LB1C9vabdRE= -google.golang.org/genproto v0.0.0-20220801145646-83ce21fca29f/go.mod h1:iHe1svFLAZg9VWz891+QbRMwUv9O/1Ww+/mngYeThbc= -google.golang.org/genproto v0.0.0-20220815135757-37a418bb8959/go.mod h1:dbqgFATTzChvnt+ujMdZwITVAJHFtfyN1qUhDqEiIlk= -google.golang.org/genproto v0.0.0-20220817144833-d7fd3f11b9b1/go.mod h1:dbqgFATTzChvnt+ujMdZwITVAJHFtfyN1qUhDqEiIlk= -google.golang.org/genproto v0.0.0-20220822174746-9e6da59bd2fc/go.mod h1:dbqgFATTzChvnt+ujMdZwITVAJHFtfyN1qUhDqEiIlk= -google.golang.org/genproto v0.0.0-20220829144015-23454907ede3/go.mod h1:dbqgFATTzChvnt+ujMdZwITVAJHFtfyN1qUhDqEiIlk= -google.golang.org/genproto v0.0.0-20220829175752-36a9c930ecbf/go.mod h1:dbqgFATTzChvnt+ujMdZwITVAJHFtfyN1qUhDqEiIlk= -google.golang.org/genproto v0.0.0-20220913154956-18f8339a66a5/go.mod h1:0Nb8Qy+Sk5eDzHnzlStwW3itdNaWoZA5XeSG+R3JHSo= -google.golang.org/genproto v0.0.0-20220914142337-ca0e39ece12f/go.mod h1:0Nb8Qy+Sk5eDzHnzlStwW3itdNaWoZA5XeSG+R3JHSo= -google.golang.org/genproto v0.0.0-20220915135415-7fd63a7952de/go.mod h1:0Nb8Qy+Sk5eDzHnzlStwW3itdNaWoZA5XeSG+R3JHSo= -google.golang.org/genproto v0.0.0-20220916172020-2692e8806bfa/go.mod h1:0Nb8Qy+Sk5eDzHnzlStwW3itdNaWoZA5XeSG+R3JHSo= -google.golang.org/genproto v0.0.0-20220919141832-68c03719ef51/go.mod h1:0Nb8Qy+Sk5eDzHnzlStwW3itdNaWoZA5XeSG+R3JHSo= -google.golang.org/genproto v0.0.0-20220920201722-2b89144ce006/go.mod h1:ht8XFiar2npT/g4vkk7O0WYS1sHOHbdujxbEp7CJWbw= -google.golang.org/genproto v0.0.0-20220926165614-551eb538f295/go.mod h1:woMGP53BroOrRY3xTxlbr8Y3eB/nzAvvFM83q7kG2OI= -google.golang.org/genproto v0.0.0-20220926220553-6981cbe3cfce/go.mod h1:woMGP53BroOrRY3xTxlbr8Y3eB/nzAvvFM83q7kG2OI= -google.golang.org/genproto v0.0.0-20221010155953-15ba04fc1c0e/go.mod h1:3526vdqwhZAwq4wsRUaVG555sVgsNmIjRtO7t/JH29U= -google.golang.org/genproto v0.0.0-20221014173430-6e2ab493f96b/go.mod h1:1vXfmgAz9N9Jx0QA82PqRVauvCz1SGSz739p0f183jM= -google.golang.org/genproto v0.0.0-20221014213838-99cd37c6964a/go.mod h1:1vXfmgAz9N9Jx0QA82PqRVauvCz1SGSz739p0f183jM= +google.golang.org/genproto v0.0.0-20221024183307-1bc688fe9f3e h1:S9GbmC1iCgvbLyAokVCwiO6tVIrU9Y7c5oMx1V/ki/Y= google.golang.org/genproto v0.0.0-20221024183307-1bc688fe9f3e/go.mod h1:9qHF0xnpdSfF6knlcsnpzUu5y+rpwgbvsyGAZPBMg4s= +google.golang.org/grpc v1.33.2 h1:EQyQC3sa8M+p6Ulc8yy9SWSS2GVwyRc83gAbG8lrl4o= google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc= -google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.1.0/go.mod h1:6Kw0yEErY5E/yWrBtf03jp27GLLJujG4z/JK95pnjjw= google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= @@ -3278,45 +1380,29 @@ google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlba google.golang.org/protobuf v1.25.1-0.20200805231151-a709e31e5d12/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c= google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= -google.golang.org/protobuf v1.27.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= -google.golang.org/protobuf v1.28.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= -google.golang.org/protobuf v1.28.1/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= +google.golang.org/protobuf v1.28.2-0.20220831092852-f930b1dc76e8 h1:KR8+MyP7/qOlV+8Af01LtjL04bu7on42eVsxT4EyBQk= google.golang.org/protobuf v1.28.2-0.20220831092852-f930b1dc76e8/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= -gopkg.in/airbrake/gobrake.v2 v2.0.9/go.mod h1:/h5ZAUhDkGaJfjzjKLSjv6zCL6O0LLBxU4K+aSYdM/U= gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/check.v1 v1.0.0-20141024133853-64131543e789/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20200902074654-038fdea0a05b/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= +gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= gopkg.in/cheggaaa/pb.v1 v1.0.25/go.mod h1:V/YB90LKu/1FcN3WVnfiiE5oMCibMjukxqG/qStrOgw= -gopkg.in/cheggaaa/pb.v1 v1.0.28/go.mod h1:V/YB90LKu/1FcN3WVnfiiE5oMCibMjukxqG/qStrOgw= gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= -gopkg.in/gcfg.v1 v1.2.0/go.mod h1:yesOnuUOFQAhST5vPY4nbZsb/huCgGGXlipJsBn0b3o= gopkg.in/gcfg.v1 v1.2.3/go.mod h1:yesOnuUOFQAhST5vPY4nbZsb/huCgGGXlipJsBn0b3o= -gopkg.in/gemnasium/logrus-airbrake-hook.v2 v2.1.2/go.mod h1:Xk6kEKp8OKb+X14hQBKWaSkCsqBpgog8nAV2xsGOxlo= -gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw= gopkg.in/ini.v1 v1.51.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= -gopkg.in/ini.v1 v1.56.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= gopkg.in/ini.v1 v1.62.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= -gopkg.in/ini.v1 v1.66.2/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= -gopkg.in/ini.v1 v1.66.4/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= -gopkg.in/ini.v1 v1.66.6/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= +gopkg.in/ini.v1 v1.67.0 h1:Dgnx+6+nfE+IfzjUEISNeydPJh9AXNNsWbGP9KzCsOA= gopkg.in/ini.v1 v1.67.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= -gopkg.in/natefinch/lumberjack.v2 v2.0.0/go.mod h1:l0ndWWf7gzL7RNwBG7wST/UCcT4T24xpD6X8LsfU/+k= gopkg.in/natefinch/npipe.v2 v2.0.0-20160621034901-c1b8fa8bdcce/go.mod h1:5AcXVHNjg+BDxry382+8OKon8SEWiKktQR07RKPsv1c= gopkg.in/olebedev/go-duktape.v3 v3.0.0-20200619000410-60c24ae608a6/go.mod h1:uAJfkITjFhyEEuUfm7bsmCZRbW5WRq8s9EY8HZ6hCns= gopkg.in/resty.v1 v1.12.0/go.mod h1:mDo4pnntr5jdWRML875a/NmxYqAlA73dVijT2AXvQQo= -gopkg.in/square/go-jose.v2 v2.2.2/go.mod h1:M9dMgbHiYLoDGQrXy7OpJDJWiKiU//h+vD76mk0e1AI= -gopkg.in/square/go-jose.v2 v2.3.1/go.mod h1:M9dMgbHiYLoDGQrXy7OpJDJWiKiU//h+vD76mk0e1AI= -gopkg.in/square/go-jose.v2 v2.5.1/go.mod h1:M9dMgbHiYLoDGQrXy7OpJDJWiKiU//h+vD76mk0e1AI= +gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ= gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw= gopkg.in/urfave/cli.v1 v1.20.0/go.mod h1:vuBzUtMdQeixQj8LVd+/98pzhxNGQoyuPBlsXHOQNO0= -gopkg.in/warnings.v0 v0.1.1/go.mod h1:jksf8JmL6Qr/oQM2OXTHunEvvTAsrWBLb6OOjuVWRNI= gopkg.in/warnings.v0 v0.1.2/go.mod h1:jksf8JmL6Qr/oQM2OXTHunEvvTAsrWBLb6OOjuVWRNI= gopkg.in/yaml.v2 v2.0.0-20170812160011-eb3733d160e7/go.mod h1:JAlM8MvJe8wmxCU4Bli9HhUf9+ttbYbLASfIpnQbh74= gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= @@ -3324,22 +1410,15 @@ gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.3/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.5/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.6/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.7/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -gopkg.in/yaml.v3 v3.0.0-20200615113413-eeeca48fe776/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -gopkg.in/yaml.v3 v3.0.0/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gotest.tools v2.2.0+incompatible/go.mod h1:DsYFclhRJ6vuDpmuTbkuFWG+y2sxOXAzmJt81HFBacw= -gotest.tools/v3 v3.0.2/go.mod h1:3SzNCllyD9/Y+b5r9JIKQ474KzkZyqLqEfYqMsX94Bk= -gotest.tools/v3 v3.0.3/go.mod h1:Z7Lb0S5l+klDB31fvDQX8ss/FlKDxtlFlw3Oa8Ymbl8= -gotest.tools/v3 v3.2.0/go.mod h1:Mcr9QNxkg0uMvy/YElmo4SpXgJKWgQvYrT7Kw5RzJ1A= -grpc.go4.org v0.0.0-20170609214715-11d0a25b4919/go.mod h1:77eQGdRu53HpSqPFJFmuJdjuHRquDANNeA4x7B8WQ9o= -honnef.co/go/tools v0.0.0-20180920025451-e3ad64cb4ed3/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= @@ -3347,119 +1426,10 @@ honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWh honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= -honnef.co/go/tools v0.0.1-2020.1.5/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= -honnef.co/go/tools v0.1.3/go.mod h1:NgwopIslSNH47DimFoV78dnkksY2EFtX0ajyb3K/las= -honnef.co/go/tools v0.3.1/go.mod h1:vlRD9XErLMGT+mDuofSr0mMMquscM/1nQqtRSsh6m70= -honnef.co/go/tools v0.3.3/go.mod h1:jzwdWgg7Jdq75wlfblQxO4neNaFFSvgc1tD5Wv8U0Yw= -k8s.io/api v0.0.0-20180904230853-4e7be11eab3f/go.mod h1:iuAfoD4hCxJ8Onx9kaTIt30j7jUFS00AXQi6QMi99vA= -k8s.io/api v0.17.4/go.mod h1:5qxx6vjmwUVG2nHQTKGlLts8Tbok8PzHl4vHtVFuZCA= -k8s.io/api v0.19.0/go.mod h1:I1K45XlvTrDjmj5LoM5LuP/KYrhWbjUKT/SoPG0qTjw= -k8s.io/api v0.20.1/go.mod h1:KqwcCVogGxQY3nBlRpwt+wpAMF/KjaCc7RpywacvqUo= -k8s.io/api v0.20.4/go.mod h1:++lNL1AJMkDymriNniQsWRkMDzRaX2Y/POTUi8yvqYQ= -k8s.io/api v0.20.6/go.mod h1:X9e8Qag6JV/bL5G6bU8sdVRltWKmdHsFUGS3eVndqE8= -k8s.io/api v0.22.5/go.mod h1:mEhXyLaSD1qTOf40rRiKXkc+2iCem09rWLlFwhCEiAs= -k8s.io/api v0.23.4/go.mod h1:i77F4JfyNNrhOjZF7OwwNJS5Y1S9dpwvb9iYRYRczfI= -k8s.io/apimachinery v0.0.0-20180904193909-def12e63c512/go.mod h1:ccL7Eh7zubPUSh9A3USN90/OzHNSVN6zxzde07TDCL0= -k8s.io/apimachinery v0.17.4/go.mod h1:gxLnyZcGNdZTCLnq3fgzyg2A5BVCHTNDFrw8AmuJ+0g= -k8s.io/apimachinery v0.19.0/go.mod h1:DnPGDnARWFvYa3pMHgSxtbZb7gpzzAZ1pTfaUNDVlmA= -k8s.io/apimachinery v0.20.1/go.mod h1:WlLqWAHZGg07AeltaI0MV5uk1Omp8xaN0JGLY6gkRpU= -k8s.io/apimachinery v0.20.4/go.mod h1:WlLqWAHZGg07AeltaI0MV5uk1Omp8xaN0JGLY6gkRpU= -k8s.io/apimachinery v0.20.6/go.mod h1:ejZXtW1Ra6V1O5H8xPBGz+T3+4gfkTCeExAHKU57MAc= -k8s.io/apimachinery v0.22.1/go.mod h1:O3oNtNadZdeOMxHFVxOreoznohCpy0z6mocxbZr7oJ0= -k8s.io/apimachinery v0.22.5/go.mod h1:xziclGKwuuJ2RM5/rSFQSYAj0zdbci3DH8kj+WvyN0U= -k8s.io/apimachinery v0.23.4/go.mod h1:BEuFMMBaIbcOqVIJqNZJXGFTP4W6AycEpb5+m/97hrM= -k8s.io/apiserver v0.17.4/go.mod h1:5ZDQ6Xr5MNBxyi3iUZXS84QOhZl+W7Oq2us/29c0j9I= -k8s.io/apiserver v0.20.1/go.mod h1:ro5QHeQkgMS7ZGpvf4tSMx6bBOgPfE+f52KwvXfScaU= -k8s.io/apiserver v0.20.4/go.mod h1:Mc80thBKOyy7tbvFtB4kJv1kbdD0eIH8k8vianJcbFM= -k8s.io/apiserver v0.20.6/go.mod h1:QIJXNt6i6JB+0YQRNcS0hdRHJlMhflFmsBDeSgT1r8Q= -k8s.io/apiserver v0.22.5/go.mod h1:s2WbtgZAkTKt679sYtSudEQrTGWUSQAPe6MupLnlmaQ= -k8s.io/client-go v0.0.0-20180910083459-2cefa64ff137/go.mod h1:7vJpHMYJwNQCWgzmNV+VYUl1zCObLyodBc8nIyt8L5s= -k8s.io/client-go v0.17.4/go.mod h1:ouF6o5pz3is8qU0/qYL2RnoxOPqgfuidYLowytyLJmc= -k8s.io/client-go v0.19.0/go.mod h1:H9E/VT95blcFQnlyShFgnFT9ZnJOAceiUHM3MlRC+mU= -k8s.io/client-go v0.20.1/go.mod h1:/zcHdt1TeWSd5HoUe6elJmHSQ6uLLgp4bIJHVEuy+/Y= -k8s.io/client-go v0.20.4/go.mod h1:LiMv25ND1gLUdBeYxBIwKpkSC5IsozMMmOOeSJboP+k= -k8s.io/client-go v0.20.6/go.mod h1:nNQMnOvEUEsOzRRFIIkdmYOjAZrC8bgq0ExboWSU1I0= -k8s.io/client-go v0.22.5/go.mod h1:cs6yf/61q2T1SdQL5Rdcjg9J1ElXSwbjSrW2vFImM4Y= -k8s.io/client-go v0.23.4/go.mod h1:PKnIL4pqLuvYUK1WU7RLTMYKPiIh7MYShLshtRY9cj0= -k8s.io/cloud-provider v0.17.4/go.mod h1:XEjKDzfD+b9MTLXQFlDGkk6Ho8SGMpaU8Uugx/KNK9U= -k8s.io/code-generator v0.17.2/go.mod h1:DVmfPQgxQENqDIzVR2ddLXMH34qeszkKSdH/N+s+38s= -k8s.io/code-generator v0.19.7/go.mod h1:lwEq3YnLYb/7uVXLorOJfxg+cUu2oihFhHZ0n9NIla0= -k8s.io/component-base v0.17.4/go.mod h1:5BRqHMbbQPm2kKu35v3G+CpVq4K0RJKC7TRioF0I9lE= -k8s.io/component-base v0.20.1/go.mod h1:guxkoJnNoh8LNrbtiQOlyp2Y2XFCZQmrcg2n/DeYNLk= -k8s.io/component-base v0.20.4/go.mod h1:t4p9EdiagbVCJKrQ1RsA5/V4rFQNDfRlevJajlGwgjI= -k8s.io/component-base v0.20.6/go.mod h1:6f1MPBAeI+mvuts3sIdtpjljHWBQ2cIy38oBIWMYnrM= -k8s.io/component-base v0.22.5/go.mod h1:VK3I+TjuF9eaa+Ln67dKxhGar5ynVbwnGrUiNF4MqCI= -k8s.io/cri-api v0.17.3/go.mod h1:X1sbHmuXhwaHs9xxYffLqJogVsnI+f6cPRcgPel7ywM= -k8s.io/cri-api v0.20.1/go.mod h1:2JRbKt+BFLTjtrILYVqQK5jqhI+XNdF6UiGMgczeBCI= -k8s.io/cri-api v0.20.4/go.mod h1:2JRbKt+BFLTjtrILYVqQK5jqhI+XNdF6UiGMgczeBCI= -k8s.io/cri-api v0.20.6/go.mod h1:ew44AjNXwyn1s0U4xCKGodU7J1HzBeZ1MpGrpa5r8Yc= -k8s.io/cri-api v0.23.1/go.mod h1:REJE3PSU0h/LOV1APBrupxrEJqnoxZC8KWzkBUHwrK4= -k8s.io/cri-api v0.24.0-alpha.3/go.mod h1:c/NLI5Zdyup5+oEYqFO2IE32ptofNiZpS1nL2y51gAg= -k8s.io/csi-translation-lib v0.17.4/go.mod h1:CsxmjwxEI0tTNMzffIAcgR9lX4wOh6AKHdxQrT7L0oo= -k8s.io/gengo v0.0.0-20190128074634-0689ccc1d7d6/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0= -k8s.io/gengo v0.0.0-20190822140433-26a664648505/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0= -k8s.io/gengo v0.0.0-20200413195148-3a45101e95ac/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0= -k8s.io/gengo v0.0.0-20200428234225-8167cfdcfc14/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0= -k8s.io/gengo v0.0.0-20201113003025-83324d819ded/go.mod h1:FiNAH4ZV3gBg2Kwh89tzAEV2be7d5xI0vBa/VySYy3E= -k8s.io/gengo v0.0.0-20210813121822-485abfe95c7c/go.mod h1:FiNAH4ZV3gBg2Kwh89tzAEV2be7d5xI0vBa/VySYy3E= -k8s.io/klog v0.0.0-20181102134211-b9b56d5dfc92/go.mod h1:Gq+BEi5rUBO/HRz0bTSXDUcqjScdoY3a9IHpCEIOOfk= -k8s.io/klog v0.3.0/go.mod h1:Gq+BEi5rUBO/HRz0bTSXDUcqjScdoY3a9IHpCEIOOfk= -k8s.io/klog v1.0.0/go.mod h1:4Bi6QPql/J/LkTDqv7R/cd3hPo4k2DG6Ptcz060Ez5I= -k8s.io/klog/v2 v2.0.0/go.mod h1:PBfzABfn139FHAV07az/IF9Wp1bkk3vpT2XSJ76fSDE= -k8s.io/klog/v2 v2.2.0/go.mod h1:Od+F08eJP+W3HUb4pSrPpgp9DGU4GzlpG/TmITuYh/Y= -k8s.io/klog/v2 v2.4.0/go.mod h1:Od+F08eJP+W3HUb4pSrPpgp9DGU4GzlpG/TmITuYh/Y= -k8s.io/klog/v2 v2.9.0/go.mod h1:hy9LJ/NvuK+iVyP4Ehqva4HxZG/oXyIS3n3Jmire4Ec= -k8s.io/klog/v2 v2.30.0/go.mod h1:y1WjHnz7Dj687irZUWR/WLkLc5N1YHtjLdmgWjndZn0= -k8s.io/kube-openapi v0.0.0-20180731170545-e3762e86a74c/go.mod h1:BXM9ceUBTj2QnfH2MK1odQs778ajze1RxcmP6S8RVVc= -k8s.io/kube-openapi v0.0.0-20191107075043-30be4d16710a/go.mod h1:1TqjTSzOxsLGIKfj0lK8EeCP7K1iUG65v09OM0/WG5E= -k8s.io/kube-openapi v0.0.0-20200805222855-6aeccd4b50c6/go.mod h1:UuqjUnNftUyPE5H64/qeyjQoUZhGpeFDVdxjTeEVN2o= -k8s.io/kube-openapi v0.0.0-20201113171705-d219536bb9fd/go.mod h1:WOJ3KddDSol4tAGcJo0Tvi+dK12EcqSLqcWsryKMpfM= -k8s.io/kube-openapi v0.0.0-20210421082810-95288971da7e/go.mod h1:vHXdDvt9+2spS2Rx9ql3I8tycm3H9FDfdUoIuKCefvw= -k8s.io/kube-openapi v0.0.0-20211109043538-20434351676c/go.mod h1:vHXdDvt9+2spS2Rx9ql3I8tycm3H9FDfdUoIuKCefvw= -k8s.io/kube-openapi v0.0.0-20211115234752-e816edb12b65/go.mod h1:sX9MT8g7NVZM5lVL/j8QyCCJe8YSMW30QvGZWaCIDIk= -k8s.io/kubernetes v1.11.10/go.mod h1:ocZa8+6APFNC2tX1DZASIbocyYT5jHzqFVsY5aoB7Jk= -k8s.io/kubernetes v1.13.0/go.mod h1:ocZa8+6APFNC2tX1DZASIbocyYT5jHzqFVsY5aoB7Jk= -k8s.io/legacy-cloud-providers v0.17.4/go.mod h1:FikRNoD64ECjkxO36gkDgJeiQWwyZTuBkhu+yxOc1Js= -k8s.io/utils v0.0.0-20191114184206-e782cd3c129f/go.mod h1:sZAwmy6armz5eXlNoLmJcl4F1QuKu7sr+mFQ0byX7Ew= -k8s.io/utils v0.0.0-20200729134348-d5654de09c73/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA= -k8s.io/utils v0.0.0-20201110183641-67b214c5f920/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA= -k8s.io/utils v0.0.0-20210802155522-efc7438f0176/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA= -k8s.io/utils v0.0.0-20210819203725-bdf08cb9a70a/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA= -k8s.io/utils v0.0.0-20210930125809-cb0fa318a74b/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA= -k8s.io/utils v0.0.0-20211116205334-6203023598ed/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA= -modernc.org/cc v1.0.0/go.mod h1:1Sk4//wdnYJiUIxnW8ddKpaOJCF37yAdqYnkxUpaYxw= -modernc.org/golex v1.0.0/go.mod h1:b/QX9oBD/LhixY6NDh+IdGv17hgB+51fET1i2kPSmvk= -modernc.org/mathutil v1.0.0/go.mod h1:wU0vUrJsVWBZ4P6e7xtFJEhFSNsfRLJ8H458uRjg03k= -modernc.org/strutil v1.0.0/go.mod h1:lstksw84oURvj9y3tn8lGvRxyRC1S2+g5uuIzNfIOBs= -modernc.org/xc v1.0.0/go.mod h1:mRNCo0bvLjGhHO9WsyuKVU4q0ceiDDDoEeWDJHrNx8I= -mvdan.cc/gofumpt v0.3.1/go.mod h1:w3ymliuxvzVx8DAutBnVyDqYb1Niy/yCJt/lk821YCE= -mvdan.cc/gofumpt v0.4.0/go.mod h1:PljLOHDeZqgS8opHRKLzp2It2VBuSdteAgqUfzMTxlQ= -mvdan.cc/interfacer v0.0.0-20180901003855-c20040233aed/go.mod h1:Xkxe497xwlCKkIaQYRfC7CSLworTXY9RMqwhhCm+8Nc= -mvdan.cc/lint v0.0.0-20170908181259-adc824a0674b/go.mod h1:2odslEg/xrtNQqCYg2/jCoyKnw3vv5biOc3JnIcYfL4= -mvdan.cc/unparam v0.0.0-20190720180237-d51796306d8f/go.mod h1:4G1h5nDURzA3bwVMZIVpwbkw+04kSxk3rAtzlimaUJw= -mvdan.cc/unparam v0.0.0-20200501210554-b37ab49443f7/go.mod h1:HGC5lll35J70Y5v7vCGb9oLhHoScFwkHDJm/05RdSTc= -mvdan.cc/unparam v0.0.0-20211214103731-d0ef000c54e5/go.mod h1:b8RRCBm0eeiWR8cfN88xeq2G5SG3VKGO+5UPWi5FSOY= -mvdan.cc/unparam v0.0.0-20220706161116-678bad134442/go.mod h1:F/Cxw/6mVrNKqrR2YjFf5CaW0Bw4RL8RfbEf4GRggJk= +nhooyr.io/websocket v1.8.6 h1:s+C3xAMLwGmlI31Nyn/eAehUlZPwfYZu2JXM621Q5/k= nhooyr.io/websocket v1.8.6/go.mod h1:B70DZP8IakI65RVQ51MsWP/8jndNma26DVA/nFSCgW0= -pack.ag/amqp v0.11.2/go.mod h1:4/cbmt4EJXSKlG6LCfWHoqmN0uFdy5i/+YFz+fTfhV4= rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= -rsc.io/pdf v0.1.1/go.mod h1:n8OzWcQ6Sp37PL01nO98y4iUCRdTGarVfzxY20ICaU4= rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0= rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA= -rsc.io/tmplfunc v0.0.3/go.mod h1:AG3sTPzElb1Io3Yg4voV9AGZJuleGAwaVRxL9M49PhA= -sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.0.14/go.mod h1:LEScyzhFmoF5pso/YSeBstl57mOzx9xlU9n85RGrDQg= -sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.0.15/go.mod h1:LEScyzhFmoF5pso/YSeBstl57mOzx9xlU9n85RGrDQg= -sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.0.22/go.mod h1:LEScyzhFmoF5pso/YSeBstl57mOzx9xlU9n85RGrDQg= -sigs.k8s.io/json v0.0.0-20211020170558-c049b76a60c6/go.mod h1:p4QtZmO4uMYipTQNzagwnNoseA6OxSUutVw05NhYDRs= -sigs.k8s.io/structured-merge-diff v0.0.0-20190525122527-15d366b2352e/go.mod h1:wWxsB5ozmmv/SG7nM11ayaAW51xMvak/t1r0CSlcokI= -sigs.k8s.io/structured-merge-diff v1.0.1-0.20191108220359-b1b620dd3f06/go.mod h1:/ULNhyfzRopfcjskuui0cTITekDduZ7ycKN3oUT9R18= -sigs.k8s.io/structured-merge-diff/v4 v4.0.1/go.mod h1:bJZC9H9iH24zzfZ/41RGcq60oK1F7G282QMXDPYydCw= -sigs.k8s.io/structured-merge-diff/v4 v4.0.2/go.mod h1:bJZC9H9iH24zzfZ/41RGcq60oK1F7G282QMXDPYydCw= -sigs.k8s.io/structured-merge-diff/v4 v4.0.3/go.mod h1:bJZC9H9iH24zzfZ/41RGcq60oK1F7G282QMXDPYydCw= -sigs.k8s.io/structured-merge-diff/v4 v4.1.2/go.mod h1:j/nl6xW8vLS49O8YvXW1ocPhZawJtm+Yrr7PPRQ0Vg4= -sigs.k8s.io/structured-merge-diff/v4 v4.2.1/go.mod h1:j/nl6xW8vLS49O8YvXW1ocPhZawJtm+Yrr7PPRQ0Vg4= sigs.k8s.io/yaml v1.1.0/go.mod h1:UJmg0vDUVViEyp3mgSv9WPwZCDxu4rQW1olrI1uml+o= -sigs.k8s.io/yaml v1.2.0/go.mod h1:yfXDCHCao9+ENCvLSE62v9VSji2MKu5jeNfTrofGhJc= sourcegraph.com/sourcegraph/appdash v0.0.0-20190731080439-ebfcffb1b5c0/go.mod h1:hI742Nqp5OhwiqlzhgfbWU4mW4yO10fP+LoT9WOswdU= -sourcegraph.com/sqs/pbtypes v0.0.0-20180604144634-d3ebe8f20ae4/go.mod h1:ketZ/q3QxT9HOBeFhu6RdvsftgpsbFHBF5Cas6cDKZ0= -sourcegraph.com/sqs/pbtypes v1.0.0/go.mod h1:3AciMUv4qUuRHRHhOG4TZOB+72GdPVz5k+c648qsFS4= diff --git a/x/wasmplus/keeper/test_common.go b/x/wasmplus/keeper/test_common.go index 981a6a2588..c715624ec4 100644 --- a/x/wasmplus/keeper/test_common.go +++ b/x/wasmplus/keeper/test_common.go @@ -12,6 +12,11 @@ import ( "github.com/stretchr/testify/require" dbm "github.com/tendermint/tm-db" + "github.com/line/ibc-go/v3/modules/apps/transfer" + ibctransfertypes "github.com/line/ibc-go/v3/modules/apps/transfer/types" + ibc "github.com/line/ibc-go/v3/modules/core" + ibchost "github.com/line/ibc-go/v3/modules/core/24-host" + ibckeeper "github.com/line/ibc-go/v3/modules/core/keeper" "github.com/line/lbm-sdk/baseapp" "github.com/line/lbm-sdk/codec" "github.com/line/lbm-sdk/std" @@ -45,11 +50,6 @@ import ( "github.com/line/lbm-sdk/x/gov" govkeeper "github.com/line/lbm-sdk/x/gov/keeper" govtypes "github.com/line/lbm-sdk/x/gov/types" - "github.com/line/lbm-sdk/x/ibc/applications/transfer" - ibctransfertypes "github.com/line/lbm-sdk/x/ibc/applications/transfer/types" - ibc "github.com/line/lbm-sdk/x/ibc/core" - ibchost "github.com/line/lbm-sdk/x/ibc/core/24-host" - ibckeeper "github.com/line/lbm-sdk/x/ibc/core/keeper" "github.com/line/lbm-sdk/x/mint" minttypes "github.com/line/lbm-sdk/x/mint/types" "github.com/line/lbm-sdk/x/params" From 1aff888b2ed7cddbc0d7b354bc37b7f758732e9d Mon Sep 17 00:00:00 2001 From: zemyblue Date: Mon, 30 Jan 2023 18:05:02 +0900 Subject: [PATCH 07/17] doc: add readme of `x/wasmplus` --- x/wasmplus/README.md | 27 ++++++++++++++++++++++++++- 1 file changed, 26 insertions(+), 1 deletion(-) diff --git a/x/wasmplus/README.md b/x/wasmplus/README.md index e56386ca51..eea678281b 100644 --- a/x/wasmplus/README.md +++ b/x/wasmplus/README.md @@ -6,6 +6,31 @@ Extended module of [line/wasmd/x/wasm](https://github.com/line/wasmd/tree/cae21e Implements the difference part with cosmwasm/wasmd. +* Add smart contract Inactivate function +* Add `Msg/StoreCodeAndInstantiateContract` tx message + ### Inactivate +Add a function to deactivate or disable a specific smart contract address as a proposal. +Inactive smart contract address are stored and managed as `inactive_contract_addresses` in the genesis state. + +Inactive smart contract address restricts execution of `ExecuteContract`, `MigrateContract`, `UpdateAdmin`, `ClearAdmin`. +Through `ActivateContractProposal`, you can release restrictions on the use of inactive smart contract address. + +#### Proposal +##### DeactivateContractProposal +* If the deactivation succeeds, the [`EventDeactivateContractProposal`](../../docs/proto/proto-docs.md#eventdeactivatecontractproposal) event is emitted. +##### ActivateContractProposal +* Proposals activation of disabled smart contract address. +* If the activation succeeds, the [`EventActivateContractProposal`](../../docs/proto/proto-docs.md#eventactivatecontractproposal) event is emitted. + +#### queries +##### InactiveContracts +* Query API to query a list of all disabled smart contract addresses with pagination +* [Detailed specification](../../docs/proto/proto-docs.md#activatecontractproposal) +##### InactiveContract +* Query API to check if a specific smart contract address is disabled +* [Detailed specification](../../docs/proto/proto-docs.md#deactivatecontractproposal) -### standard gas params \ No newline at end of file +### Msg/StoreCodeAndInstantiateContract +`Msg/StoreCodeAndInstantiateContract` allows `StoreCode` and `InstantiateContract` to be processed as one tx message. +More information can be found [here](../../docs/proto/proto-docs.md#msgstorecodeandinstantiatecontract) From e6ac4c0e01768f3fe1496650bfbca063077ae49a Mon Sep 17 00:00:00 2001 From: zemyblue Date: Mon, 30 Jan 2023 21:46:24 +0900 Subject: [PATCH 08/17] fix: lint error --- x/wasm/client/testutil/tx.go | 1 + x/wasmplus/client/testutil/query.go | 1 - x/wasmplus/client/testutil/suite.go | 2 - x/wasmplus/handler.go | 2 +- x/wasmplus/keeper/keeper.go | 2 +- x/wasmplus/keeper/querier.go | 5 +- x/wasmplus/keeper/test_common.go | 83 ---------------------------- x/wasmplus/module.go | 2 +- x/wasmplus/types/exported_keepers.go | 1 - 9 files changed, 8 insertions(+), 91 deletions(-) diff --git a/x/wasm/client/testutil/tx.go b/x/wasm/client/testutil/tx.go index 7109a95096..952ebdd799 100644 --- a/x/wasm/client/testutil/tx.go +++ b/x/wasm/client/testutil/tx.go @@ -2,6 +2,7 @@ package testutil import ( "fmt" + "github.com/line/lbm-sdk/client/flags" clitestutil "github.com/line/lbm-sdk/testutil/cli" sdk "github.com/line/lbm-sdk/types" diff --git a/x/wasmplus/client/testutil/query.go b/x/wasmplus/client/testutil/query.go index ae1e056e64..d3095a7a78 100644 --- a/x/wasmplus/client/testutil/query.go +++ b/x/wasmplus/client/testutil/query.go @@ -6,7 +6,6 @@ import ( clitestutil "github.com/line/lbm-sdk/testutil/cli" "github.com/line/lbm-sdk/types/query" - _ "github.com/line/wasmd/x/wasm/client/testutil" "github.com/line/wasmd/x/wasmplus/client/cli" "github.com/line/wasmd/x/wasmplus/types" ) diff --git a/x/wasmplus/client/testutil/suite.go b/x/wasmplus/client/testutil/suite.go index e15d07a0f9..7607b19d03 100644 --- a/x/wasmplus/client/testutil/suite.go +++ b/x/wasmplus/client/testutil/suite.go @@ -47,8 +47,6 @@ func NewIntegrationTestSuite(cfg network.Config) *IntegrationTestSuite { } func (s *IntegrationTestSuite) SetupSuite() { - //s.T().Log("Setting up integration test suite.") - if testing.Short() { s.T().Skip("skipping test in unit-tests mode.") } diff --git a/x/wasmplus/handler.go b/x/wasmplus/handler.go index 0a363b6a40..fcfcc0f446 100644 --- a/x/wasmplus/handler.go +++ b/x/wasmplus/handler.go @@ -2,7 +2,7 @@ package wasmplus import ( "strings" - + "github.com/gogo/protobuf/proto" sdk "github.com/line/lbm-sdk/types" diff --git a/x/wasmplus/keeper/keeper.go b/x/wasmplus/keeper/keeper.go index 295a8986a9..92e29a3a78 100644 --- a/x/wasmplus/keeper/keeper.go +++ b/x/wasmplus/keeper/keeper.go @@ -79,7 +79,7 @@ func WasmQuerier(k *Keeper) wasmtypes.QueryServer { } func Querier(k *Keeper) types.QueryServer { - return NewQuerier(k.storeKey, k) + return newGrpcQuerier(k.storeKey, k) } func (Keeper) Logger(ctx sdk.Context) log.Logger { diff --git a/x/wasmplus/keeper/querier.go b/x/wasmplus/keeper/querier.go index f0cfcee70f..72160efc1a 100644 --- a/x/wasmplus/keeper/querier.go +++ b/x/wasmplus/keeper/querier.go @@ -20,12 +20,15 @@ type queryKeeper interface { HasContractInfo(ctx sdk.Context, contractAddress sdk.AccAddress) bool } +var _ types.QueryServer = &grpcQuerier{} + type grpcQuerier struct { keeper queryKeeper storeKey sdk.StoreKey } -func NewQuerier(storeKey sdk.StoreKey, keeper queryKeeper) *grpcQuerier { +// newGrpcQuerier constructor +func newGrpcQuerier(storeKey sdk.StoreKey, keeper queryKeeper) *grpcQuerier { return &grpcQuerier{storeKey: storeKey, keeper: keeper} } diff --git a/x/wasmplus/keeper/test_common.go b/x/wasmplus/keeper/test_common.go index c715624ec4..be8aa7c889 100644 --- a/x/wasmplus/keeper/test_common.go +++ b/x/wasmplus/keeper/test_common.go @@ -127,52 +127,6 @@ var TestingStakeParams = stakingtypes.Params{ BondDenom: "stake", } -//type TestFaucet struct { -// t testing.TB -// bankKeeper bankkeeper.Keeper -// sender sdk.AccAddress -// balance sdk.Coins -// minterModuleName string -//} - -//func NewTestFaucet(t testing.TB, ctx sdk.Context, bankKeeper bankkeeper.Keeper, minterModuleName string, initialAmount ...sdk.Coin) *TestFaucet { -// require.NotEmpty(t, initialAmount) -// r := &TestFaucet{t: t, bankKeeper: bankKeeper, minterModuleName: minterModuleName} -// _, _, addr := keyPubAddr() -// r.sender = addr -// r.Mint(ctx, addr, initialAmount...) -// r.balance = initialAmount -// return r -//} - -//func (f *TestFaucet) Mint(parentCtx sdk.Context, addr sdk.AccAddress, amounts ...sdk.Coin) { -// require.NotEmpty(f.t, amounts) -// ctx := parentCtx.WithEventManager(sdk.NewEventManager()) // discard all faucet related events -// err := f.bankKeeper.MintCoins(ctx, f.minterModuleName, amounts) -// require.NoError(f.t, err) -// err = f.bankKeeper.SendCoinsFromModuleToAccount(ctx, f.minterModuleName, addr, amounts) -// require.NoError(f.t, err) -// f.balance = f.balance.Add(amounts...) -//} -// -//func (f *TestFaucet) Fund(parentCtx sdk.Context, receiver sdk.AccAddress, amounts ...sdk.Coin) { -// require.NotEmpty(f.t, amounts) -// // ensure faucet is always filled -// if !f.balance.IsAllGTE(amounts) { -// f.Mint(parentCtx, f.sender, amounts...) -// } -// ctx := parentCtx.WithEventManager(sdk.NewEventManager()) // discard all faucet related events -// err := f.bankKeeper.SendCoins(ctx, f.sender, receiver, amounts) -// require.NoError(f.t, err) -// f.balance = f.balance.Sub(amounts) -//} -// -//func (f *TestFaucet) NewFundedRandomAccount(ctx sdk.Context, amounts ...sdk.Coin) sdk.AccAddress { -// _, _, addr := keyPubAddr() -// f.Fund(ctx, addr, amounts...) -// return addr -//} - type TestKeepers struct { AccountKeeper authkeeper.AccountKeeper StakingKeeper stakingkeeper.Keeper @@ -584,48 +538,11 @@ func StoreExampleContract(t testing.TB, ctx sdk.Context, keepers TestKeepers, wa return ExampleContract{anyAmount, creator, creatorAddr, codeID, hash} } -//var wasmIdent = []byte("\x00\x61\x73\x6D") - type ExampleContractInstance struct { ExampleContract Contract sdk.AccAddress } -//// SeedNewContractInstance sets the mock wasmerEngine in keeper and calls store + instantiate to init the contract's metadata -//func SeedNewContractInstance(t testing.TB, ctx sdk.Context, keepers TestKeepers, mock wasmtypes.WasmerEngine) ExampleContractInstance { -// t.Helper() -// exampleContract := StoreRandomContract(t, ctx, keepers, mock) -// contractAddr, _, err := keepers.ContractKeeper.Instantiate(ctx, exampleContract.CodeID, exampleContract.CreatorAddr, exampleContract.CreatorAddr, []byte(`{}`), "", nil) -// require.NoError(t, err) -// return ExampleContractInstance{ -// ExampleContract: exampleContract, -// Contract: contractAddr, -// } -//} -// -//// StoreRandomContract sets the mock wasmerEngine in keeper and calls store -//func StoreRandomContract(t testing.TB, ctx sdk.Context, keepers TestKeepers, mock wasmtypes.WasmerEngine) ExampleContract { -// return StoreRandomContractWithAccessConfig(t, ctx, keepers, mock, nil) -//} -// -//func StoreRandomContractWithAccessConfig( -// t testing.TB, ctx sdk.Context, -// keepers TestKeepers, -// mock wasmtypes.WasmerEngine, -// cfg *wasmtypes.AccessConfig, -//) ExampleContract { -// t.Helper() -// anyAmount := sdk.NewCoins(sdk.NewInt64Coin("denom", 1000)) -// creator, _, creatorAddr := keyPubAddr() -// fundAccounts(t, ctx, keepers.AccountKeeper, keepers.BankKeeper, creatorAddr, anyAmount) -// //keepers.WasmKeeper.wasmVM = mock -// wasmCode := append(wasmIdent, rand.Bytes(10)...) //nolint:gocritic -// codeID, checksum, err := keepers.ContractKeeper.Create(ctx, creatorAddr, wasmCode, cfg) -// require.NoError(t, err) -// exampleContract := ExampleContract{InitialAmount: anyAmount, Creator: creator, CreatorAddr: creatorAddr, CodeID: codeID, Checksum: checksum} -// return exampleContract -//} - type HackatomExampleInstance struct { ExampleContract Contract sdk.AccAddress diff --git a/x/wasmplus/module.go b/x/wasmplus/module.go index 02b65329b8..d8ff288105 100644 --- a/x/wasmplus/module.go +++ b/x/wasmplus/module.go @@ -146,7 +146,7 @@ func (am AppModule) RegisterServices(cfg module.Configurator) { // wasmplus service types.RegisterMsgServer(cfg.MsgServer(), keeper.NewMsgServerImpl(wasmkeeper.NewDefaultPermissionKeeper(am.keeper))) types.RegisterQueryServer(cfg.QueryServer(), keeper.Querier(am.keeper)) - //wasm service + // wasm service wasmtypes.RegisterMsgServer(cfg.MsgServer(), wasmkeeper.NewMsgServerImpl(wasmkeeper.NewDefaultPermissionKeeper(am.keeper))) wasmtypes.RegisterQueryServer(cfg.QueryServer(), keeper.WasmQuerier(am.keeper)) } diff --git a/x/wasmplus/types/exported_keepers.go b/x/wasmplus/types/exported_keepers.go index feb9d6b1b3..c4b067b252 100644 --- a/x/wasmplus/types/exported_keepers.go +++ b/x/wasmplus/types/exported_keepers.go @@ -7,7 +7,6 @@ import ( ) type ViewKeeper interface { - //wasmtypes.ViewKeeper IterateInactiveContracts(ctx sdk.Context, fn func(contractAddress sdk.AccAddress) bool) IsInactiveContract(ctx sdk.Context, contractAddress sdk.AccAddress) bool } From e536a0778e1e010be79841386edcafb37036aa35 Mon Sep 17 00:00:00 2001 From: zemyblue Date: Mon, 30 Jan 2023 22:49:59 +0900 Subject: [PATCH 09/17] chore: add more unittest --- appplus/app_test.go | 8 +++++ appplus/test_helpers.go | 43 +++++++++++++++++++++++++++ x/wasmplus/module_integration_test.go | 32 ++++++++++++++++++++ 3 files changed, 83 insertions(+) create mode 100644 appplus/test_helpers.go create mode 100644 x/wasmplus/module_integration_test.go diff --git a/appplus/app_test.go b/appplus/app_test.go index 6ff644e898..8c39b91662 100644 --- a/appplus/app_test.go +++ b/appplus/app_test.go @@ -22,6 +22,7 @@ var emptyWasmOpts []wasmkeeper.Option = nil func TestWasmdExport(t *testing.T) { db := db.NewMemDB() gapp := NewWasmApp(log.NewOCLogger(log.NewSyncWriter(os.Stdout)), db, nil, true, map[int64]bool{}, DefaultNodeHome, 0, MakeEncodingConfig(), wasmplustypes.EnableAllProposals, wasmapp.EmptyBaseAppOptions{}, emptyWasmOpts) + require.Equal(t, appName, gapp.Name()) genesisState := NewDefaultGenesisState() stateBytes, err := json.MarshalIndent(genesisState, "", " ") @@ -97,6 +98,13 @@ func TestGetEnabledProposals(t *testing.T) { } } +func TestGetEnabledProposalsPanic(t *testing.T) { + EnableSpecificProposals = "WrongMsg" + assert.Panics(t, func() { + GetEnabledProposals() + }) +} + func setGenesis(gapp *WasmPlusApp) error { genesisState := NewDefaultGenesisState() stateBytes, err := json.MarshalIndent(genesisState, "", " ") diff --git a/appplus/test_helpers.go b/appplus/test_helpers.go new file mode 100644 index 0000000000..98ce44c197 --- /dev/null +++ b/appplus/test_helpers.go @@ -0,0 +1,43 @@ +package appplus + +import ( + "encoding/json" + + wasmapp "github.com/line/wasmd/app" + + abci "github.com/line/ostracon/abci/types" + "github.com/line/ostracon/libs/log" + "github.com/line/wasmd/x/wasm" + dbm "github.com/tendermint/tm-db" +) + +// Setup initializes a new WasmApp with DefaultNodeHome for integration tests +func Setup(isCheckTx bool, opts ...wasm.Option) *WasmPlusApp { + db := dbm.NewMemDB() + app := NewWasmApp(log.NewNopLogger(), db, nil, true, map[int64]bool{}, DefaultNodeHome, 5, MakeEncodingConfig(), wasm.EnableAllProposals, EmptyBaseAppOptions{}, opts) + + if !isCheckTx { + genesisState := NewDefaultGenesisState() + stateBytes, err := json.MarshalIndent(genesisState, "", " ") + if err != nil { + panic(err) + } + + app.InitChain( + abci.RequestInitChain{ + Validators: []abci.ValidatorUpdate{}, + ConsensusParams: wasmapp.DefaultConsensusParams, + AppStateBytes: stateBytes, + }, + ) + } + return app +} + +// EmptyBaseAppOptions is a stub implementing AppOptions +type EmptyBaseAppOptions struct{} + +// Get implements AppOptions +func (ao EmptyBaseAppOptions) Get(o string) interface{} { + return nil +} diff --git a/x/wasmplus/module_integration_test.go b/x/wasmplus/module_integration_test.go new file mode 100644 index 0000000000..ad46ab9759 --- /dev/null +++ b/x/wasmplus/module_integration_test.go @@ -0,0 +1,32 @@ +package wasmplus_test + +import ( + "testing" + + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" + + sdk "github.com/line/lbm-sdk/types" + "github.com/line/lbm-sdk/types/module" + upgradetypes "github.com/line/lbm-sdk/x/upgrade/types" + ocproto "github.com/line/ostracon/proto/ostracon/types" + + "github.com/line/wasmd/appplus" + "github.com/line/wasmd/x/wasm" +) + +func TestModuleMigrations(t *testing.T) { + wasmApp := appplus.Setup(false) + ctx := wasmApp.BaseApp.NewContext(false, ocproto.Header{}) + upgradeHandler := func(ctx sdk.Context, plan upgradetypes.Plan, fromVM module.VersionMap) (module.VersionMap, error) { + return wasmApp.ModuleManager().RunMigrations(ctx, wasmApp.ModuleConfigurator(), fromVM) + } + fromVM := wasmApp.UpgradeKeeper.GetModuleVersionMap(ctx) + fromVM[wasm.ModuleName] = 1 // start with initial version + upgradeHandler(ctx, upgradetypes.Plan{Name: "testing"}, fromVM) + // when + gotVM, err := wasmApp.ModuleManager().RunMigrations(ctx, wasmApp.ModuleConfigurator(), fromVM) + // then + require.NoError(t, err) + assert.Equal(t, uint64(1), gotVM[wasm.ModuleName]) +} From 1eb87637602b21e9dc9016152777cb066ec72557 Mon Sep 17 00:00:00 2001 From: zemyblue Date: Mon, 30 Jan 2023 23:18:39 +0900 Subject: [PATCH 10/17] chore: add more unittest --- Makefile | 2 +- x/wasmplus/module_integration_test.go | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Makefile b/Makefile index 5e9d3d4f7c..ad7b288e5c 100644 --- a/Makefile +++ b/Makefile @@ -132,7 +132,7 @@ test-race: @VERSION=$(VERSION) go test -mod=readonly -race -tags='ledger test_ledger_mock' ./... test-cover: - @go test -mod=readonly -timeout 30m -race -coverprofile=coverage.txt -covermode=atomic -tags='ledger test_ledger_mock' ./... + @go test -v -mod=readonly -timeout 30m -race -coverprofile=coverage.txt -covermode=atomic -tags='ledger test_ledger_mock' ./... benchmark: @go test -mod=readonly -bench=. ./... diff --git a/x/wasmplus/module_integration_test.go b/x/wasmplus/module_integration_test.go index ad46ab9759..79bf5b061e 100644 --- a/x/wasmplus/module_integration_test.go +++ b/x/wasmplus/module_integration_test.go @@ -15,7 +15,7 @@ import ( "github.com/line/wasmd/x/wasm" ) -func TestModuleMigrations(t *testing.T) { +func TestAppPlusModuleMigrations(t *testing.T) { wasmApp := appplus.Setup(false) ctx := wasmApp.BaseApp.NewContext(false, ocproto.Header{}) upgradeHandler := func(ctx sdk.Context, plan upgradetypes.Plan, fromVM module.VersionMap) (module.VersionMap, error) { From fc2c83343744390b92233f2d0dd610273b1ba5bf Mon Sep 17 00:00:00 2001 From: zemyblue Date: Tue, 31 Jan 2023 11:59:11 +0900 Subject: [PATCH 11/17] chore: add more unittest --- Makefile | 2 +- appplus/app_test.go | 32 ++++++++++++++++++++++++++++++++ 2 files changed, 33 insertions(+), 1 deletion(-) diff --git a/Makefile b/Makefile index ad7b288e5c..5e9d3d4f7c 100644 --- a/Makefile +++ b/Makefile @@ -132,7 +132,7 @@ test-race: @VERSION=$(VERSION) go test -mod=readonly -race -tags='ledger test_ledger_mock' ./... test-cover: - @go test -v -mod=readonly -timeout 30m -race -coverprofile=coverage.txt -covermode=atomic -tags='ledger test_ledger_mock' ./... + @go test -mod=readonly -timeout 30m -race -coverprofile=coverage.txt -covermode=atomic -tags='ledger test_ledger_mock' ./... benchmark: @go test -mod=readonly -bench=. ./... diff --git a/appplus/app_test.go b/appplus/app_test.go index 8c39b91662..3e56b32d9d 100644 --- a/appplus/app_test.go +++ b/appplus/app_test.go @@ -2,6 +2,7 @@ package appplus import ( "encoding/json" + "github.com/line/lbm-sdk/server" wasmapp "github.com/line/wasmd/app" wasmkeeper "github.com/line/wasmd/x/wasm/keeper" wasmtypes "github.com/line/wasmd/x/wasm/types" @@ -62,6 +63,37 @@ func TestBlockedAddrs(t *testing.T) { } } +// EmptyBaseAppOptions is a stub implementing AppOptions +type WrongWasmAppOptions struct{} + +// Get implements AppOptions +func (ao WrongWasmAppOptions) Get(o string) interface{} { + if o == server.FlagTrace { + return "FALse" + } + return nil +} + +func TestWrongWasmAppOptionsNewWasmApp(t *testing.T) { + require.PanicsWithValue(t, + "error while reading wasm config: strconv.ParseBool: parsing \"FALse\": invalid syntax", + func() { + NewWasmApp( + log.NewOCLogger(log.NewSyncWriter(os.Stdout)), + nil, + nil, + true, + map[int64]bool{}, + DefaultNodeHome, + 0, + MakeEncodingConfig(), + wasmplustypes.EnableAllProposals, + WrongWasmAppOptions{}, + emptyWasmOpts, + ) + }) +} + func TestGetMaccPerms(t *testing.T) { dup := GetMaccPerms() require.Equal(t, maccPerms, dup, "duplicated module account permissions differed from actual module account permissions") From 0b09bab2b69620ef5856a84ab26fde3dca4ff8fe Mon Sep 17 00:00:00 2001 From: zemyblue Date: Tue, 31 Jan 2023 14:51:50 +0900 Subject: [PATCH 12/17] chore: add more unittest --- appplus/export_test.go | 38 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 appplus/export_test.go diff --git a/appplus/export_test.go b/appplus/export_test.go new file mode 100644 index 0000000000..77abe40681 --- /dev/null +++ b/appplus/export_test.go @@ -0,0 +1,38 @@ +package appplus + +import ( + "encoding/json" + abci "github.com/line/ostracon/abci/types" + "github.com/stretchr/testify/require" + "os" + "testing" + + db "github.com/tendermint/tm-db" + + "github.com/line/ostracon/libs/log" + + wasmapp "github.com/line/wasmd/app" + wasmplustypes "github.com/line/wasmd/x/wasmplus/types" +) + +func TestZeroHeightGenesis(t *testing.T) { + db := db.NewMemDB() + gapp := NewWasmApp(log.NewOCLogger(log.NewSyncWriter(os.Stdout)), db, nil, true, map[int64]bool{}, DefaultNodeHome, 0, MakeEncodingConfig(), wasmplustypes.EnableAllProposals, wasmapp.EmptyBaseAppOptions{}, emptyWasmOpts) + + genesisState := NewDefaultGenesisState() + stateBytes, err := json.MarshalIndent(genesisState, "", " ") + require.NoError(t, err) + + // Initialize the chain + gapp.InitChain( + abci.RequestInitChain{ + Validators: []abci.ValidatorUpdate{}, + AppStateBytes: stateBytes, + }, + ) + gapp.Commit() + + jailAllowedAddress := []string{"linkvaloper12kr02kew9fl73rqekalavuu0xaxcgwr6pz5vt8"} + _, err = gapp.ExportAppStateAndValidators(true, jailAllowedAddress) + require.NoError(t, err) +} From d2171d0c65aafc9a2143931a54a6048fc3c83bf2 Mon Sep 17 00:00:00 2001 From: zemyblue Date: Tue, 31 Jan 2023 15:03:42 +0900 Subject: [PATCH 13/17] chore: update changelog --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 19a199450f..64d94fbf71 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,7 @@ ### Improvements * [\#1](https://github.com/line/wasmd/pull/1) apply all changes of `x/wasm` in lbm-sdk until [lbm-sdk@3bdcb6ffe01c81615bedb777ca0e039cc46ef00c](https://github.com/line/lbm-sdk/tree/3bdcb6ffe01c81615bedb777ca0e039cc46ef00c) * [\#5](https://github.com/line/wasmd/pull/5) bump up wasmd v0.29.1 +* [\#7](https://github.com/line/wasmd/pull/7) separate custom features in `x/wasm` into `x/wasmplus` module ### Bug Fixes From bad35991d6ae627761aba272d340123bd828b383 Mon Sep 17 00:00:00 2001 From: zemyblue Date: Fri, 3 Feb 2023 12:59:47 +0900 Subject: [PATCH 14/17] chore: remove interchain-accounts --- app/app.go | 27 +--- appplus/app.go | 34 +---- go.mod | 3 +- go.sum | 338 ------------------------------------------------- 4 files changed, 13 insertions(+), 389 deletions(-) diff --git a/app/app.go b/app/app.go index 1975c4852b..82a4e456ab 100644 --- a/app/app.go +++ b/app/app.go @@ -8,7 +8,6 @@ import ( "path/filepath" "strings" - intertxtypes "github.com/cosmos/interchain-accounts/x/inter-tx/types" "github.com/gorilla/mux" "github.com/rakyll/statik/fs" "github.com/spf13/cast" @@ -203,7 +202,6 @@ var ( vesting.AppModuleBasic{}, wasm.AppModuleBasic{}, ica.AppModuleBasic{}, - // intertx.AppModuleBasic{}, // TODO support later ) // module account permissions @@ -262,16 +260,14 @@ type WasmApp struct { IBCKeeper *ibckeeper.Keeper // IBC Keeper must be a pointer in the app, so we can SetRouter on it correctly ICAControllerKeeper icacontrollerkeeper.Keeper ICAHostKeeper icahostkeeper.Keeper - // InterTxKeeper intertxkeeper.Keeper // TODO support later - TransferKeeper ibctransferkeeper.Keeper - FeeGrantKeeper feegrantkeeper.Keeper - AuthzKeeper authzkeeper.Keeper - WasmKeeper wasm.Keeper + TransferKeeper ibctransferkeeper.Keeper + FeeGrantKeeper feegrantkeeper.Keeper + AuthzKeeper authzkeeper.Keeper + WasmKeeper wasm.Keeper ScopedIBCKeeper capabilitykeeper.ScopedKeeper ScopedICAHostKeeper capabilitykeeper.ScopedKeeper ScopedICAControllerKeeper capabilitykeeper.ScopedKeeper - ScopedInterTxKeeper capabilitykeeper.ScopedKeeper ScopedTransferKeeper capabilitykeeper.ScopedKeeper ScopedWasmKeeper capabilitykeeper.ScopedKeeper @@ -316,7 +312,7 @@ func NewWasmApp( minttypes.StoreKey, distrtypes.StoreKey, slashingtypes.StoreKey, govtypes.StoreKey, paramstypes.StoreKey, ibchost.StoreKey, upgradetypes.StoreKey, evidencetypes.StoreKey, ibctransfertypes.StoreKey, capabilitytypes.StoreKey, - feegrant.StoreKey, authzkeeper.StoreKey, wasm.StoreKey, icahosttypes.StoreKey, icacontrollertypes.StoreKey, intertxtypes.StoreKey, + feegrant.StoreKey, authzkeeper.StoreKey, wasm.StoreKey, icahosttypes.StoreKey, icacontrollertypes.StoreKey, ) tkeys := sdk.NewTransientStoreKeys(paramstypes.TStoreKey) memKeys := sdk.NewMemoryStoreKeys(capabilitytypes.MemStoreKey) @@ -351,7 +347,6 @@ func NewWasmApp( scopedIBCKeeper := app.CapabilityKeeper.ScopeToModule(ibchost.ModuleName) scopedICAHostKeeper := app.CapabilityKeeper.ScopeToModule(icahosttypes.SubModuleName) scopedICAControllerKeeper := app.CapabilityKeeper.ScopeToModule(icacontrollertypes.SubModuleName) - scopedInterTxKeeper := app.CapabilityKeeper.ScopeToModule(intertxtypes.ModuleName) scopedTransferKeeper := app.CapabilityKeeper.ScopeToModule(ibctransfertypes.ModuleName) scopedWasmKeeper := app.CapabilityKeeper.ScopeToModule(wasm.ModuleName) app.CapabilityKeeper.Seal() @@ -489,15 +484,6 @@ func NewWasmApp( icaModule := ica.NewAppModule(&app.ICAControllerKeeper, &app.ICAHostKeeper) icaHostIBCModule := icahost.NewIBCModule(app.ICAHostKeeper) - // For wasmd we use the demo controller from https://github.com/cosmos/interchain-accounts but see notes below - // app.InterTxKeeper = intertxkeeper.NewKeeper(appCodec, keys[intertxtypes.StoreKey], app.ICAControllerKeeper, scopedInterTxKeeper) - // Note: please do your research before using this in production app, this is a demo and not an officially - // supported IBC team implementation. Do your own research before using it. - // interTxModule := intertx.NewAppModule(appCodec, app.InterTxKeeper) - // interTxIBCModule := intertx.NewIBCModule(app.InterTxKeeper) - // You will likely want to swap out the second argument with your own reviewed and maintained ica auth module - // icaControllerIBCModule := icacontroller.NewIBCModule(app.ICAControllerKeeper, interTxIBCModule) - // create evidence keeper with router evidenceKeeper := evidencekeeper.NewKeeper( appCodec, @@ -593,7 +579,6 @@ func NewWasmApp( params.NewAppModule(app.ParamsKeeper), transferModule, icaModule, - // interTxModule, crisis.NewAppModule(&app.CrisisKeeper, skipGenesisInvariants), // always be last to make sure that it checks for all invariants and not only part of them ) @@ -679,7 +664,6 @@ func NewWasmApp( ibctransfertypes.ModuleName, ibchost.ModuleName, icatypes.ModuleName, - // intertxtypes.ModuleName, // wasm after ibc transfer wasm.ModuleName, ) @@ -761,7 +745,6 @@ func NewWasmApp( app.ScopedWasmKeeper = scopedWasmKeeper app.ScopedICAHostKeeper = scopedICAHostKeeper app.ScopedICAControllerKeeper = scopedICAControllerKeeper - app.ScopedInterTxKeeper = scopedInterTxKeeper if loadLatest { if err := app.LoadLatestVersion(); err != nil { diff --git a/appplus/app.go b/appplus/app.go index 4c218ef05f..74cb218560 100644 --- a/appplus/app.go +++ b/appplus/app.go @@ -8,7 +8,6 @@ import ( "path/filepath" "strings" - intertxtypes "github.com/cosmos/interchain-accounts/x/inter-tx/types" "github.com/gorilla/mux" "github.com/rakyll/statik/fs" "github.com/spf13/cast" @@ -122,7 +121,7 @@ const appName = "WasmApp" // We pull these out, so we can set them with LDFLAGS in the Makefile var ( - NodeDir = ".wasmd" + NodeDir = ".wasmplusd" Bech32Prefix = "link" ProposalsEnabled = "false" @@ -203,7 +202,6 @@ var ( vesting.AppModuleBasic{}, wasmplus.AppModuleBasic{}, ica.AppModuleBasic{}, - // intertx.AppModuleBasic{}, // TODO support later ) // module account permissions @@ -262,16 +260,14 @@ type WasmPlusApp struct { IBCKeeper *ibckeeper.Keeper // IBC Keeper must be a pointer in the app, so we can SetRouter on it correctly ICAControllerKeeper icacontrollerkeeper.Keeper ICAHostKeeper icahostkeeper.Keeper - // InterTxKeeper intertxkeeper.Keeper // TODO support later - TransferKeeper ibctransferkeeper.Keeper - FeeGrantKeeper feegrantkeeper.Keeper - AuthzKeeper authzkeeper.Keeper - WasmKeeper wasmpluskeeper.Keeper + TransferKeeper ibctransferkeeper.Keeper + FeeGrantKeeper feegrantkeeper.Keeper + AuthzKeeper authzkeeper.Keeper + WasmKeeper wasmpluskeeper.Keeper ScopedIBCKeeper capabilitykeeper.ScopedKeeper ScopedICAHostKeeper capabilitykeeper.ScopedKeeper ScopedICAControllerKeeper capabilitykeeper.ScopedKeeper - ScopedInterTxKeeper capabilitykeeper.ScopedKeeper ScopedTransferKeeper capabilitykeeper.ScopedKeeper ScopedWasmKeeper capabilitykeeper.ScopedKeeper @@ -316,7 +312,7 @@ func NewWasmApp( minttypes.StoreKey, distrtypes.StoreKey, slashingtypes.StoreKey, govtypes.StoreKey, paramstypes.StoreKey, ibchost.StoreKey, upgradetypes.StoreKey, evidencetypes.StoreKey, ibctransfertypes.StoreKey, capabilitytypes.StoreKey, - feegrant.StoreKey, authzkeeper.StoreKey, wasmplustypes.StoreKey, icahosttypes.StoreKey, icacontrollertypes.StoreKey, intertxtypes.StoreKey, + feegrant.StoreKey, authzkeeper.StoreKey, wasmplustypes.StoreKey, icahosttypes.StoreKey, icacontrollertypes.StoreKey, ) tkeys := sdk.NewTransientStoreKeys(paramstypes.TStoreKey) memKeys := sdk.NewMemoryStoreKeys(capabilitytypes.MemStoreKey) @@ -351,7 +347,6 @@ func NewWasmApp( scopedIBCKeeper := app.CapabilityKeeper.ScopeToModule(ibchost.ModuleName) scopedICAHostKeeper := app.CapabilityKeeper.ScopeToModule(icahosttypes.SubModuleName) scopedICAControllerKeeper := app.CapabilityKeeper.ScopeToModule(icacontrollertypes.SubModuleName) - scopedInterTxKeeper := app.CapabilityKeeper.ScopeToModule(intertxtypes.ModuleName) scopedTransferKeeper := app.CapabilityKeeper.ScopeToModule(ibctransfertypes.ModuleName) scopedWasmKeeper := app.CapabilityKeeper.ScopeToModule(wasmplustypes.ModuleName) app.CapabilityKeeper.Seal() @@ -489,15 +484,6 @@ func NewWasmApp( icaModule := ica.NewAppModule(&app.ICAControllerKeeper, &app.ICAHostKeeper) icaHostIBCModule := icahost.NewIBCModule(app.ICAHostKeeper) - // For wasmd we use the demo controller from https://github.com/cosmos/interchain-accounts but see notes below - // app.InterTxKeeper = intertxkeeper.NewKeeper(appCodec, keys[intertxtypes.StoreKey], app.ICAControllerKeeper, scopedInterTxKeeper) - // Note: please do your research before using this in production app, this is a demo and not an officially - // supported IBC team implementation. Do your own research before using it. - // interTxModule := intertx.NewAppModule(appCodec, app.InterTxKeeper) - // interTxIBCModule := intertx.NewIBCModule(app.InterTxKeeper) - // You will likely want to swap out the second argument with your own reviewed and maintained ica auth module - // icaControllerIBCModule := icacontroller.NewIBCModule(app.ICAControllerKeeper, interTxIBCModule) - // create evidence keeper with router evidenceKeeper := evidencekeeper.NewKeeper( appCodec, @@ -546,9 +532,7 @@ func NewWasmApp( ibcRouter. AddRoute(wasmplustypes.ModuleName, wasm.NewIBCHandler(app.WasmKeeper, app.IBCKeeper.ChannelKeeper)). AddRoute(ibctransfertypes.ModuleName, transferIBCModule). - // AddRoute(icacontrollertypes.SubModuleName, icaControllerIBCModule). AddRoute(icahosttypes.SubModuleName, icaHostIBCModule) - // AddRoute(intertxtypes.ModuleName, icaControllerIBCModule) app.IBCKeeper.SetRouter(ibcRouter) app.GovKeeper = govkeeper.NewKeeper( @@ -593,7 +577,6 @@ func NewWasmApp( params.NewAppModule(app.ParamsKeeper), transferModule, icaModule, - // interTxModule, crisis.NewAppModule(&app.CrisisKeeper, skipGenesisInvariants), // always be last to make sure that it checks for all invariants and not only part of them ) @@ -622,7 +605,6 @@ func NewWasmApp( ibctransfertypes.ModuleName, ibchost.ModuleName, icatypes.ModuleName, - // intertxtypes.ModuleName, wasmplustypes.ModuleName, ) @@ -647,7 +629,6 @@ func NewWasmApp( ibctransfertypes.ModuleName, ibchost.ModuleName, icatypes.ModuleName, - // intertxtypes.ModuleName, wasmplustypes.ModuleName, ) @@ -679,7 +660,6 @@ func NewWasmApp( ibctransfertypes.ModuleName, ibchost.ModuleName, icatypes.ModuleName, - // intertxtypes.ModuleName, // wasm after ibc transfer wasmplustypes.ModuleName, ) @@ -761,7 +741,7 @@ func NewWasmApp( app.ScopedWasmKeeper = scopedWasmKeeper app.ScopedICAHostKeeper = scopedICAHostKeeper app.ScopedICAControllerKeeper = scopedICAControllerKeeper - app.ScopedInterTxKeeper = scopedInterTxKeeper + //app.ScopedInterTxKeeper = scopedInterTxKeeper if loadLatest { if err := app.LoadLatestVersion(); err != nil { diff --git a/go.mod b/go.mod index 2b107208d7..e1e80d33f1 100644 --- a/go.mod +++ b/go.mod @@ -4,7 +4,6 @@ go 1.18 require ( github.com/cosmos/iavl v0.19.4 - github.com/cosmos/interchain-accounts v0.1.0 github.com/dvsekhvalnov/jose2go v1.5.0 github.com/go-kit/kit v0.12.0 github.com/gogo/protobuf v1.3.3 @@ -51,7 +50,6 @@ require ( github.com/confio/ics23/go v0.9.0 // indirect github.com/coniks-sys/coniks-go v0.0.0-20180722014011-11acf4819b71 // indirect github.com/cosmos/btcutil v1.0.5 // indirect - github.com/cosmos/cosmos-sdk v0.45.1 // indirect github.com/cosmos/go-bip39 v1.0.0 // indirect github.com/cosmos/gorocksdb v1.2.0 // indirect github.com/cosmos/ledger-cosmos-go v0.12.1 // indirect @@ -99,6 +97,7 @@ require ( github.com/minio/highwayhash v1.0.2 // indirect github.com/mitchellh/mapstructure v1.5.0 // indirect github.com/mtibben/percent v0.2.1 // indirect + github.com/onsi/ginkgo v1.16.4 // indirect github.com/pelletier/go-toml v1.9.5 // indirect github.com/pelletier/go-toml/v2 v2.0.5 // indirect github.com/petermattis/goid v0.0.0-20180202154549-b0b1615b78e5 // indirect diff --git a/go.sum b/go.sum index ff3e95163a..2208d2540e 100644 --- a/go.sum +++ b/go.sum @@ -16,9 +16,6 @@ cloud.google.com/go v0.65.0/go.mod h1:O5N8zS7uWy9vkA9vayVHs65eM1ubvY4h553ofrNHOb cloud.google.com/go v0.72.0/go.mod h1:M+5Vjvlc2wnp6tjzE102Dw08nGShTscUx2nZMufOKPI= cloud.google.com/go v0.74.0/go.mod h1:VV1xSbzvo+9QJOxLDaJfTjx5e+MePCpCWwvftOeQmWk= cloud.google.com/go v0.75.0/go.mod h1:VGuuCn7PG0dwsd5XPVm2Mm3wlh3EL55/79EKB6hlPTY= -cloud.google.com/go v0.78.0/go.mod h1:QjdrLG0uq+YwhjoVOLsS1t7TW8fs36kLs4XO5R5ECHg= -cloud.google.com/go v0.79.0/go.mod h1:3bzgcEeQlzbuEAYu4mrWhKqWjmpprinYgKJLgKHnbb8= -cloud.google.com/go v0.81.0/go.mod h1:mk/AM35KwGk/Nm2YSeZbxXdrNK3KZOYHmLkOqC2V6E0= cloud.google.com/go/bigquery v1.0.1/go.mod h1:i/xbL2UlR5RvWAURpBYZTtm/cXjCha9lbfbpx4poX+o= cloud.google.com/go/bigquery v1.3.0/go.mod h1:PjpwJnslEMmckchkHFfq+HTD2DmtT67aNFKH1/VBDHE= cloud.google.com/go/bigquery v1.4.0/go.mod h1:S8dzgnTigyfTmLBfrtrhyYhwRxG72rYxvftPBK2Dvzc= @@ -27,7 +24,6 @@ cloud.google.com/go/bigquery v1.7.0/go.mod h1://okPTzCYNXSlb24MZs83e2Do+h+VXtc4g cloud.google.com/go/bigquery v1.8.0/go.mod h1:J5hqkt3O0uAFnINi6JXValWIb1v0goeZM77hZzJN/fQ= cloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7TKLgZqpHYE= cloud.google.com/go/datastore v1.1.0/go.mod h1:umbIZjpQpHh4hmRpGhH4tLFup+FVzqBi1b3c64qFpCk= -cloud.google.com/go/firestore v1.1.0/go.mod h1:ulACoGHTpvq5r8rxGJ4ddJZBZqakUQqClKRT5SZwBmk= cloud.google.com/go/pubsub v1.0.1/go.mod h1:R0Gpsv3s54REJCy4fxDixWD93lHJMoZTyQ2kNxGRt3I= cloud.google.com/go/pubsub v1.1.0/go.mod h1:EwwdRX2sKPjnvnqCa270oGRyludottCI76h+R3AArQw= cloud.google.com/go/pubsub v1.2.0/go.mod h1:jhfEVHT8odbXTkndysNHCcx0awwzvfOlguIAii9o8iA= @@ -39,60 +35,32 @@ cloud.google.com/go/storage v1.8.0/go.mod h1:Wv1Oy7z6Yz3DshWRJFhqM/UCfaWIRTdp0RX cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9ullr3+Kg0= cloud.google.com/go/storage v1.14.0/go.mod h1:GrKmX003DSIwi9o29oFT7YDnHYwZoctc3fOKtUw0Xmo= dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= -filippo.io/edwards25519 v1.0.0-beta.2/go.mod h1:X+pm78QAUPtFLi1z9PYIlS/bdDnvbCOGKtZ+ACWEf7o= filippo.io/edwards25519 v1.0.0-rc.1 h1:m0VOOB23frXZvAOK44usCgLWvtsxIoMCTBGJZlpmGfU= filippo.io/edwards25519 v1.0.0-rc.1/go.mod h1:N1IkdkCkiLB6tki+MYJoSx2JTY9NUlxZE7eHn5EwJns= github.com/99designs/go-keychain v0.0.0-20191008050251-8e49817e8af4 h1:/vQbFIOMbk2FiG/kXiLl8BRyzTWDw7gX/Hz7Dd5eDMs= github.com/99designs/go-keychain v0.0.0-20191008050251-8e49817e8af4/go.mod h1:hN7oaIRCjzsZ2dE+yG5k+rsdt3qcwykqK6HVGcKwsw4= -github.com/99designs/keyring v1.1.6/go.mod h1:16e0ds7LGQQcT59QqkTg72Hh5ShM51Byv5PEmW6uoRU= github.com/99designs/keyring v1.2.1 h1:tYLp1ULvO7i3fI5vE21ReQuj99QFSs7lGm0xWyJo87o= github.com/99designs/keyring v1.2.1/go.mod h1:fc+wB5KTk9wQ9sDx0kFXB3A0MaeGHM9AwRStKOQ5vOA= -github.com/Azure/azure-pipeline-go v0.2.1/go.mod h1:UGSo8XybXnIGZ3epmeBw7Jdz+HiUVpqIlpz/HKHylF4= -github.com/Azure/azure-pipeline-go v0.2.2/go.mod h1:4rQ/NZncSvGqNkkOsNpOU1tgoNuIlp9AfUH5G1tvCHc= -github.com/Azure/azure-storage-blob-go v0.7.0/go.mod h1:f9YQKtsG1nMisotuTPpO0tjNuEjKRYAcJU8/ydDI++4= -github.com/Azure/go-ansiterm v0.0.0-20170929234023-d6e3b3328b78/go.mod h1:LmzpDX56iTiv29bbRTIsUNlaFfuhWRQBWjQdVyAevI8= github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1 h1:UQHMgLO+TxOElx5B5HZ4hJQsoJ/PvUvKRhJHDQXO8P8= -github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1/go.mod h1:xomTg63KZ2rFqZQzSB4Vz2SUXa1BpHTVz9L5PTmPC4E= -github.com/Azure/go-autorest/autorest v0.9.0/go.mod h1:xyHB1BMZT0cuDHU7I0+g046+BFDTQ8rEZB0s4Yfa6bI= -github.com/Azure/go-autorest/autorest/adal v0.5.0/go.mod h1:8Z9fGy2MpX0PvDjB1pEgQTmVqjGhiHBW7RJJEciWzS0= -github.com/Azure/go-autorest/autorest/adal v0.8.0/go.mod h1:Z6vX6WXXuyieHAXwMj0S6HY6e6wcHn37qQMBQlvY3lc= -github.com/Azure/go-autorest/autorest/date v0.1.0/go.mod h1:plvfp3oPSKwf2DNjlBjWF/7vwR+cUD/ELuzDCXwHUVA= -github.com/Azure/go-autorest/autorest/date v0.2.0/go.mod h1:vcORJHLJEh643/Ioh9+vPmf1Ij9AEBM5FuBIXLmIy0g= -github.com/Azure/go-autorest/autorest/mocks v0.1.0/go.mod h1:OTyCOPRA2IgIlWxVYxBee2F5Gr4kF2zd2J5cFRaIDN0= -github.com/Azure/go-autorest/autorest/mocks v0.2.0/go.mod h1:OTyCOPRA2IgIlWxVYxBee2F5Gr4kF2zd2J5cFRaIDN0= -github.com/Azure/go-autorest/autorest/mocks v0.3.0/go.mod h1:a8FDP3DYzQ4RYfVAxAN3SVSiiO77gL2j2ronKKP0syM= -github.com/Azure/go-autorest/logger v0.1.0/go.mod h1:oExouG+K6PryycPJfVSxi/koC6LSNgds39diKLz7Vrc= -github.com/Azure/go-autorest/tracing v0.5.0/go.mod h1:r/s2XiOKccPW3HrqB+W0TQzfbtp2fGCgRFtBroKn4Dk= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= github.com/ChainSafe/go-schnorrkel v0.0.0-20200405005733-88cbf1b4c40d h1:nalkkPQcITbvhmL4+C4cKA87NW0tfm3Kl9VXRoPywFg= github.com/ChainSafe/go-schnorrkel v0.0.0-20200405005733-88cbf1b4c40d/go.mod h1:URdX5+vg25ts3aCh8H5IFZybJYKWhJHYMTnf+ULtoC4= github.com/DataDog/datadog-go v3.2.0+incompatible/go.mod h1:LButxg5PwREeZtORoXG3tL4fMGNddJ+vMq1mwgfaqoQ= -github.com/DataDog/zstd v1.4.1/go.mod h1:1jcaCB/ufaK+sKp1NBhlGmpz41jOoPQ35bpF36t7BBo= -github.com/DataDog/zstd v1.4.5/go.mod h1:1jcaCB/ufaK+sKp1NBhlGmpz41jOoPQ35bpF36t7BBo= github.com/Knetic/govaluate v3.0.1-0.20171022003610-9aa49832a739+incompatible/go.mod h1:r7JcOSlj0wfOMncg0iLm8Leh48TZaKVeNIfJntJ2wa0= -github.com/Microsoft/go-winio v0.4.14/go.mod h1:qXqCSQ3Xa7+6tgxaGTIe4Kpcdsi+P8jBhyzoq1bpyYA= -github.com/Microsoft/go-winio v0.5.0/go.mod h1:JPGBdM1cNvN/6ISo+n8V5iA4v8pBzdOpzfwIujj1a84= github.com/Microsoft/go-winio v0.6.0 h1:slsWYD/zyx7lCXoZVlvQrj0hPTM1HI4+v1sIda2yDvg= github.com/Nvveen/Gotty v0.0.0-20120604004816-cd527374f1e5 h1:TngWCqHvy9oXAN6lEVMRuU21PR1EtLVZJmdB18Gu3Rw= -github.com/Nvveen/Gotty v0.0.0-20120604004816-cd527374f1e5/go.mod h1:lmUJ/7eu/Q8D7ML55dXQrVaamCz2vxCfdQBasLZfHKk= github.com/OneOfOne/xxhash v1.2.2 h1:KMrpdQIwFcEqXDklaen+P1axHaj9BSKzvpUUfnHldSE= github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= github.com/Shopify/sarama v1.19.0/go.mod h1:FVkBWblsNy7DGZRfXLU0O9RCGt5g3g3yEuWXgklEdEo= github.com/Shopify/toxiproxy v2.1.4+incompatible/go.mod h1:OXgGpZ6Cli1/URJOF1DMxUHB2q5Ap20/P/eIdh4G0pI= -github.com/StackExchange/wmi v0.0.0-20180116203802-5d049714c4a6/go.mod h1:3eOhrUMpNV+6aFIbp5/iudMxNCF27Vw2OZgy4xEx0Fg= -github.com/VictoriaMetrics/fastcache v1.5.7/go.mod h1:ptDBkNMQI4RtmVo8VS/XwRY6RoTu1dAWCbrk+6WsEM8= github.com/VictoriaMetrics/fastcache v1.12.0 h1:vnVi/y9yKDcD9akmc4NqAoqgQhJrOwUF+j9LTgn4QDE= github.com/VictoriaMetrics/fastcache v1.12.0/go.mod h1:tjiYeEfYXCqacuvYw/7UoDIeJaNxq6132xHICNP77w8= github.com/VividCortex/gohistogram v1.0.0 h1:6+hBz+qvs0JOrrNhhmR7lFxo5sINxBCGXrdtl/UvroE= github.com/VividCortex/gohistogram v1.0.0/go.mod h1:Pf5mBqqDxYaXu3hDrrU+w6nw50o/4+TcAqDqk/vUH7g= -github.com/Workiva/go-datastructures v1.0.52/go.mod h1:Z+F2Rca0qCsVYDS8z7bAGm8f3UkzuWYS/oBZz5a7VVA= github.com/Workiva/go-datastructures v1.0.53 h1:J6Y/52yX10Xc5JjXmGtWoSSxs3mZnGSaq37xZZh7Yig= github.com/Workiva/go-datastructures v1.0.53/go.mod h1:1yZL+zfsztete+ePzZz/Zb1/t5BnDuE2Ya2MMGhzP6A= -github.com/Zilliqa/gozilliqa-sdk v1.2.1-0.20201201074141-dd0ecada1be6/go.mod h1:eSYp2T6f0apnuW8TzhV3f6Aff2SE8Dwio++U4ha4yEM= -github.com/adlio/schema v1.1.13/go.mod h1:L5Z7tw+7lRK1Fnpi/LT/ooCP1elkXn0krMWBQHUhEDE= github.com/adlio/schema v1.3.3 h1:oBJn8I02PyTB466pZO1UZEn1TV5XLlifBSyMrmHl/1I= -github.com/aead/siphash v1.0.1/go.mod h1:Nywa3cDsYNNK3gaciGTWPwHt0wlpNV15vwmswBAUSII= github.com/afex/hystrix-go v0.0.0-20180502004556-fa1af6a1f4f5/go.mod h1:SkGFH1ia65gfNATL8TAiHDNxPzPdmEL5uirI2Uyuz6c= github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= @@ -104,17 +72,14 @@ github.com/allegro/bigcache v1.2.1-0.20190218064605-e24eb225f156/go.mod h1:Cb/ax github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY= github.com/apache/thrift v0.12.0/go.mod h1:cp2SuWMxlEZw2r+iP2GNCdIi4C1qmUzdZFSVb+bacwQ= github.com/apache/thrift v0.13.0/go.mod h1:cp2SuWMxlEZw2r+iP2GNCdIi4C1qmUzdZFSVb+bacwQ= -github.com/aristanetworks/goarista v0.0.0-20170210015632-ea17b1a17847/go.mod h1:D/tb0zPVXnP7fmsLZjtdUhSsumbK/ij54UXjjVgMGxQ= github.com/armon/circbuf v0.0.0-20150827004946-bbbad097214e/go.mod h1:3U/XgcO3hCbHZ8TKRvWD2dDTCfh9M9ya+I9JpbB7O8o= github.com/armon/consul-api v0.0.0-20180202201655-eb2c6b5be1b6/go.mod h1:grANhF5doyWs3UAsr3K4I6qtAmlQcZDesFNEHPZAzj8= github.com/armon/go-metrics v0.0.0-20180917152333-f0300d1749da/go.mod h1:Q73ZrmVTwzkszR9V5SSuryQ31EELlFMUz1kKyl939pY= -github.com/armon/go-metrics v0.3.9/go.mod h1:4O98XIr/9W0sxpJ8UaYkvjk10Iff7SnFrb4QAOwNTFc= github.com/armon/go-metrics v0.4.1 h1:hR91U9KYmb6bLBYLQjyM+3j+rcd/UhE+G78SFnF8gJA= github.com/armon/go-metrics v0.4.1/go.mod h1:E6amYzXo6aW1tqzoZGT755KkbgrJsSdpwZ+3JqfkOG4= github.com/armon/go-radix v0.0.0-20180808171621-7fddfc383310/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8= github.com/aryann/difflib v0.0.0-20170710044230-e206f873d14a/go.mod h1:DAHtR1m6lCRdSC2Tm3DSWRPvIPr6xNKyeHdqDQSQT+A= github.com/aws/aws-lambda-go v1.13.3/go.mod h1:4UKl9IzQMoD+QF79YdCuzCwp8VbmG4VAQwij/eHl5CU= -github.com/aws/aws-sdk-go v1.25.48/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo= github.com/aws/aws-sdk-go v1.27.0/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo= github.com/aws/aws-sdk-go-v2 v0.18.0/go.mod h1:JWVYvqSMppoMJC0x5wdwiImzgXTI9FuZwxzkQq9wy+g= github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= @@ -123,33 +88,11 @@ github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= github.com/bgentry/speakeasy v0.1.0 h1:ByYyxL9InA1OWqxJqqp2A5pYHUrCiAL6K3J+LKSsQkY= github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= -github.com/bits-and-blooms/bitset v1.2.0/go.mod h1:gIdJ4wp64HaoK2YrL1Q5/N7Y16edYb8uY+O0FJTyyDA= -github.com/bketelsen/crypt v0.0.3-0.20200106085610-5cbc8cc4026c/go.mod h1:MKsuJmJgSg28kpZDP6UIiPt0e0Oz0kqKNGyRaWEPv84= -github.com/bketelsen/crypt v0.0.4/go.mod h1:aI6NrJ0pMGgvZKL1iVgXLnfIFJtfV+bKCoqOes/6LfM= -github.com/btcsuite/btcd v0.0.0-20171128150713-2e60448ffcc6/go.mod h1:Dmm/EzmjnCiweXmzRIAiUWCInVmPgjkzgv5k4tVyXiQ= -github.com/btcsuite/btcd v0.0.0-20190115013929-ed77733ec07d/go.mod h1:d3C0AkH6BRcvO8T0UEPu53cnw4IbV63x1bEjildYhO0= -github.com/btcsuite/btcd v0.0.0-20190315201642-aa6e0f35703c/go.mod h1:DrZx5ec/dmnfpw9KyYoQyYo7d0KEvTkk/5M/vbZjAr8= -github.com/btcsuite/btcd v0.20.1-beta/go.mod h1:wVuoA8VJLEcwgqHBwHmzLRazpKxTv13Px/pDuV7OomQ= -github.com/btcsuite/btcd v0.21.0-beta/go.mod h1:ZSWyehm27aAuS9bvkATT+Xte3hjHZ+MRgMY/8NJ7K94= -github.com/btcsuite/btcd v0.22.0-beta/go.mod h1:9n5ntfhhHQBIhUvlhDvD3Qg6fRUj4jkN0VB8L8svzOA= github.com/btcsuite/btcd v0.22.1 h1:CnwP9LM/M9xuRrGSCGeMVs9iv09uMqwsVX7EeIpgV2c= github.com/btcsuite/btcd v0.22.1/go.mod h1:wqgTSL29+50LRkmOVknEdmt8ZojIzhuWvgu/iptuN7Y= github.com/btcsuite/btcd/btcec/v2 v2.3.2 h1:5n0X6hX0Zk+6omWcihdYvdAlGf2DfasC0GMf7DClJ3U= github.com/btcsuite/btcd/chaincfg/chainhash v1.0.1 h1:q0rUy8C/TYNBQS1+CGKw68tLOFYSNEs0TFnxxnS9+4U= -github.com/btcsuite/btclog v0.0.0-20170628155309-84c8d2346e9f/go.mod h1:TdznJufoqS23FtqVCzL0ZqgP5MqXbb4fg/WgDys70nA= -github.com/btcsuite/btcutil v0.0.0-20180706230648-ab6388e0c60a/go.mod h1:+5NJ2+qvTyV9exUAL/rxXi3DcLg2Ts+ymUAY5y4NvMg= -github.com/btcsuite/btcutil v0.0.0-20190207003914-4c204d697803/go.mod h1:+5NJ2+qvTyV9exUAL/rxXi3DcLg2Ts+ymUAY5y4NvMg= -github.com/btcsuite/btcutil v0.0.0-20190425235716-9e5f4b9a998d/go.mod h1:+5NJ2+qvTyV9exUAL/rxXi3DcLg2Ts+ymUAY5y4NvMg= -github.com/btcsuite/btcutil v1.0.2/go.mod h1:j9HUFwoQRsZL3V4n+qG+CUnEGHOarIxfC3Le2Yhbcts= github.com/btcsuite/btcutil v1.0.3-0.20201208143702-a53e38424cce h1:YtWJF7RHm2pYCvA5t0RPmAaLUhREsKuKd+SLhxFbFeQ= -github.com/btcsuite/btcutil v1.0.3-0.20201208143702-a53e38424cce/go.mod h1:0DVlHczLPewLcPGEIeUEzfOJhqGPQ0mJJRDBtD307+o= -github.com/btcsuite/go-socks v0.0.0-20170105172521-4720035b7bfd/go.mod h1:HHNXQzUsZCxOoE+CPiyCTO6x34Zs86zZUiwtpXoGdtg= -github.com/btcsuite/goleveldb v0.0.0-20160330041536-7834afc9e8cd/go.mod h1:F+uVaaLLH7j4eDXPRvw78tMflu7Ie2bzYOH4Y8rRKBY= -github.com/btcsuite/goleveldb v1.0.0/go.mod h1:QiK9vBlgftBg6rWQIj6wFzbPfRjiykIEhBH4obrXJ/I= -github.com/btcsuite/snappy-go v0.0.0-20151229074030-0bdef8d06723/go.mod h1:8woku9dyThutzjeg+3xrA5iCpBRH8XEEg3lh6TiUghc= -github.com/btcsuite/snappy-go v1.0.0/go.mod h1:8woku9dyThutzjeg+3xrA5iCpBRH8XEEg3lh6TiUghc= -github.com/btcsuite/websocket v0.0.0-20150119174127-31079b680792/go.mod h1:ghJtEyQwv5/p4Mg4C0fgbePVuGr935/5ddU9Z3TmDRY= -github.com/btcsuite/winsvc v1.0.0/go.mod h1:jsenWakMcC0zFBFurPLEAyrnc/teJEM1O46fmI40EZs= github.com/casbin/casbin/v2 v2.1.2/go.mod h1:YcPU1XXisHhLzuxH9coDNf2FbKpjGlbCg3n9yuLkIJQ= github.com/cenkalti/backoff v2.2.1+incompatible h1:tNowT99t7UNflLxfYYSlKYsBpXdEet03Pg2g16Swow4= github.com/cenkalti/backoff v2.2.1+incompatible/go.mod h1:90ReRw6GdpyfrHakVjL/QHaoyV4aDUVVkXQJJJ3NXXM= @@ -157,49 +100,33 @@ github.com/cenkalti/backoff/v4 v4.1.1/go.mod h1:scbssz8iZGpm3xbr14ovlUdkxfGXNInq github.com/cenkalti/backoff/v4 v4.1.3 h1:cFAlzYUlVYDysBEH2T5hyJZMh3+5+WCBvSnK6Q8UtC4= github.com/cenkalti/backoff/v4 v4.1.3/go.mod h1:scbssz8iZGpm3xbr14ovlUdkxfGXNInqkPWOWmG2CLw= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= -github.com/cespare/cp v0.1.0/go.mod h1:SOGHArjBr4JWaSDEVpWpo/hNg6RoKrls6Oh40hiwW+s= github.com/cespare/xxhash v1.1.0 h1:a6HrQnmkObjyL+Gs60czilIUGqrzKutQD6XZog3p+ko= github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= github.com/cespare/xxhash/v2 v2.1.2 h1:YRXhKfTDauu4ajMg1TPgFO5jnlC2HCbmLXMcTG5cbYE= github.com/cespare/xxhash/v2 v2.1.2/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= -github.com/checkpoint-restore/go-criu/v5 v5.0.0/go.mod h1:cfwC0EG7HMUenopBsUf9d89JlCLQIfgVcNsNN0t6T2M= github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI= github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI= github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= -github.com/cilium/ebpf v0.6.2/go.mod h1:4tRaxcgiL706VnOzHOdBlY8IEAIdxINsQBcU4xJJXRs= github.com/circonus-labs/circonus-gometrics v2.3.1+incompatible/go.mod h1:nmEj6Dob7S7YxXgwXpfOuvO54S+tGdZdw9fuRZt25Ag= github.com/circonus-labs/circonusllhist v0.1.3/go.mod h1:kMXHVDlOchFAehlya5ePtbp5jckzBHf4XRpQvBOLI+I= github.com/clbanning/x2j v0.0.0-20191024224557-825249438eec/go.mod h1:jMjuTZXRI4dUb/I5gc9Hdhagfvm9+RyrPryS/auMzxE= -github.com/cloudflare/cloudflare-go v0.10.2-0.20190916151808-a80f83b9add9/go.mod h1:1MxXX1Ux4x6mqPmjkUgTP1CdXIBXKX7T+Jk9Gxrmx+U= github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= github.com/cockroachdb/datadriven v0.0.0-20190809214429-80d97fb3cbaa/go.mod h1:zn76sxSg3SzpJ0PPJaLDCu+Bu0Lg3sKTORVIj19EIF8= github.com/codahale/hdrhistogram v0.0.0-20161010025455-3a0bb77429bd/go.mod h1:sE/e/2PUdi/liOCUjSTXgM1o87ZssimdTWN964YiIeI= -github.com/coinbase/rosetta-sdk-go v0.7.0/go.mod h1:7nD3oBPIiHqhRprqvMgPoGxe/nyq3yftRmpsy29coWE= github.com/coinbase/rosetta-sdk-go v0.8.2 h1:+sNgMUPpntOsYLy5aRsHqBY6I0MTxZkS4JXV1Un3DKc= github.com/coinbase/rosetta-sdk-go v0.8.2/go.mod h1:tXPR6AIW9ogsH4tYIaFOKOgfJNanCvcyl7JKLd4DToc= github.com/coniks-sys/coniks-go v0.0.0-20180722014011-11acf4819b71 h1:MFLTqgfJclmtaQ1SRUrWwmDX/1UBok3XWUethkJ2swQ= github.com/coniks-sys/coniks-go v0.0.0-20180722014011-11acf4819b71/go.mod h1:TrHYHH4Wze7v7Hkwu1MH1W+mCPQKM+gs+PicdEV14o8= -github.com/containerd/console v1.0.2/go.mod h1:ytZPjGgY2oeTkAONYafi2kSj0aYggsf8acV1PGKCbzQ= -github.com/containerd/continuity v0.0.0-20190827140505-75bee3e2ccb6/go.mod h1:GL3xCUCBDV3CZiTSEKksMWbLE66hEyuu9qyDOOqM47Y= github.com/containerd/continuity v0.3.0 h1:nisirsYROK15TAMVukJOUyGJjz4BNQJBVsNvAXZJ/eg= -github.com/coreos/bbolt v1.3.2/go.mod h1:iRUV2dpdMOn7Bo10OQBFzIJO9kkE559Wcmn+qkEiiKk= github.com/coreos/etcd v3.3.10+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= -github.com/coreos/etcd v3.3.13+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= github.com/coreos/go-etcd v2.0.0+incompatible/go.mod h1:Jez6KQU2B/sWsbdaef3ED8NzMklzPG4d5KIOhIy30Tk= github.com/coreos/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= -github.com/coreos/go-semver v0.3.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= github.com/coreos/go-systemd v0.0.0-20180511133405-39ca1b05acc7/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= -github.com/coreos/go-systemd v0.0.0-20190321100706-95778dfbb74e/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= -github.com/coreos/go-systemd/v22 v22.3.2/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc= github.com/coreos/go-systemd/v22 v22.3.3-0.20220203105225-a9a7ef127534/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc= github.com/coreos/pkg v0.0.0-20160727233714-3ac0863d7acf/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= -github.com/coreos/pkg v0.0.0-20180928190104-399ea9e2e55f/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= -github.com/cosmos/btcutil v1.0.4/go.mod h1:Ffqc8Hn6TJUdDgHBwIZLtrLQC1KdJ9jGJl/TvgUaxbU= github.com/cosmos/btcutil v1.0.5 h1:t+ZFcX77LpKtDBhjucvnOH8C2l2ioGsBNEQ3jef8xFk= github.com/cosmos/btcutil v1.0.5/go.mod h1:IyB7iuqZMJlthe2tkIFL33xPyzbFYP0XVdS8P5lUPis= -github.com/cosmos/cosmos-sdk v0.45.1 h1:PY79YxPea5qlRLExRnzg8/rT1Scc8GGgRs22p7DX99Q= -github.com/cosmos/cosmos-sdk v0.45.1/go.mod h1:XXS/asyCqWNWkx2rW6pSuen+EVcpAFxq6khrhnZgHaQ= github.com/cosmos/cosmos-sdk/ics23/go v0.8.0 h1:iKclrn3YEOwk4jQHT2ulgzuXyxmzmPczUalMwW4XH9k= github.com/cosmos/cosmos-sdk/ics23/go v0.8.0/go.mod h1:2a4dBq88TUoqoWAU5eu0lGvpFP3wWDPgdHPargtyw30= github.com/cosmos/go-bip39 v0.0.0-20180819234021-555e2067c45d/go.mod h1:tSxLoYXyBmiFeKpvmq4dzayMdCjCnu8uqmCysIGBT2Y= @@ -207,91 +134,58 @@ github.com/cosmos/go-bip39 v1.0.0 h1:pcomnQdrdH22njcAatO0yWojsUnCO3y2tNoV1cb6hHY github.com/cosmos/go-bip39 v1.0.0/go.mod h1:RNJv0H/pOIVgxw6KS7QeX2a0Uo0aKUlfhZ4xuwvCdJw= github.com/cosmos/gorocksdb v1.2.0 h1:d0l3jJG8M4hBouIZq0mDUHZ+zjOx044J3nGRskwTb4Y= github.com/cosmos/gorocksdb v1.2.0/go.mod h1:aaKvKItm514hKfNJpUJXnnOWeBnk2GL4+Qw9NHizILw= -github.com/cosmos/iavl v0.17.3/go.mod h1:prJoErZFABYZGDHka1R6Oay4z9PrNeFFiMKHDAMOi4w= github.com/cosmos/iavl v0.19.4 h1:t82sN+Y0WeqxDLJRSpNd8YFX5URIrT+p8n6oJbJ2Dok= github.com/cosmos/iavl v0.19.4/go.mod h1:X9PKD3J0iFxdmgNLa7b2LYWdsGd90ToV5cAONApkEPw= -github.com/cosmos/interchain-accounts v0.1.0 h1:QmuwNsf1Hxl3P5GSGt7Z+JeuHPiZw4Z34R/038P5T6s= -github.com/cosmos/interchain-accounts v0.1.0/go.mod h1:Fv6LXDs+0ng4mIDVWwEJMXbAIMxY4kiq+A7Bw1Fb9AY= -github.com/cosmos/ledger-cosmos-go v0.11.1/go.mod h1:J8//BsAGTo3OC/vDLjMRFLW6q0WAaXvHnVc7ZmE8iUY= github.com/cosmos/ledger-cosmos-go v0.12.1 h1:sMBxza5p/rNK/06nBSNmsI/WDqI0pVJFVNihy1Y984w= github.com/cosmos/ledger-cosmos-go v0.12.1/go.mod h1:dhO6kj+Y+AHIOgAe4L9HL/6NDdyyth4q238I9yFpD2g= -github.com/cosmos/ledger-go v0.9.2/go.mod h1:oZJ2hHAZROdlHiwTg4t7kP+GKIIkBT+o6c9QWFanOyI= github.com/cpuguy83/go-md2man v1.0.10/go.mod h1:SmD6nW6nTyfqj6ABTjUi3V3JVMnlJmwcJI5acqYI6dE= github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= -github.com/cpuguy83/go-md2man/v2 v2.0.0/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= github.com/cpuguy83/go-md2man/v2 v2.0.2/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= github.com/creack/pty v1.1.7/go.mod h1:lj5s0c3V2DBrqTV7llrYr5NG6My20zk30Fl46Y7DoTY= -github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= -github.com/cyphar/filepath-securejoin v0.2.2/go.mod h1:FpkQEhXnPnOthhzymB7CGsFk2G9VLXONKD9G7QGMM+4= -github.com/danieljoos/wincred v1.0.2/go.mod h1:SnuYRW9lp1oJrZX/dXJqr0cPK5gYXqx3EJbmjhLdK9U= github.com/danieljoos/wincred v1.1.2 h1:QLdCxFs1/Yl4zduvBdcHB8goaYk9RARS2SgLLRuAyr0= github.com/danieljoos/wincred v1.1.2/go.mod h1:GijpziifJoIBfYh+S7BbkdUTU4LfM+QnGqR5Vl2tAx0= -github.com/davecgh/go-spew v0.0.0-20171005155431-ecdeabc65495/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/deckarep/golang-set v0.0.0-20180603214616-504e848d77ea/go.mod h1:93vsz/8Wt4joVM7c2AVqh+YRMiUSc14yDtF28KmMOgQ= github.com/decred/dcrd/dcrec/secp256k1/v4 v4.0.1 h1:YLtO71vCjJRCBcrPMtQ9nqBsqpA1m5sE92cU+pd5Mcc= -github.com/decred/dcrd/lru v1.0.0/go.mod h1:mxKOwFd7lFjN2GZYsiz/ecgqR6kkYAl+0pz0tEMk218= github.com/desertbit/timer v0.0.0-20180107155436-c41aec40b27f h1:U5y3Y5UE0w7amNe7Z5G/twsBW0KEalRQXZzf8ufSh9I= github.com/desertbit/timer v0.0.0-20180107155436-c41aec40b27f/go.mod h1:xH/i4TFMt8koVQZ6WFms69WAsDWr2XsYL3Hkl7jkoLE= -github.com/dgraph-io/badger/v2 v2.2007.2/go.mod h1:26P/7fbL4kUZVEVKLAKXkBXKOydDmM2p1e+NhhnBCAE= github.com/dgraph-io/badger/v2 v2.2007.4 h1:TRWBQg8UrlUhaFdco01nO2uXwzKS7zd+HVdwV/GHc4o= github.com/dgraph-io/badger/v2 v2.2007.4/go.mod h1:vSw/ax2qojzbN6eXHIx6KPKtCSHJN/Uz0X0VPruTIhk= github.com/dgraph-io/ristretto v0.0.3-0.20200630154024-f66de99634de/go.mod h1:KPxhHT9ZxKefz+PCeOGsrHpl1qZ7i70dGTu2u+Ahh6E= -github.com/dgraph-io/ristretto v0.0.3/go.mod h1:KPxhHT9ZxKefz+PCeOGsrHpl1qZ7i70dGTu2u+Ahh6E= github.com/dgraph-io/ristretto v0.1.0 h1:Jv3CGQHp9OjuMBSne1485aDpUkTKEcUqF+jm/LuerPI= github.com/dgraph-io/ristretto v0.1.0/go.mod h1:fux0lOrBhrVCJd3lcTHsIJhq1T2rokOu6v9Vcb3Q9ug= github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= github.com/dgryski/go-farm v0.0.0-20190423205320-6a90982ecee2/go.mod h1:SqUrOPUnsFjfmXRMNPybcSiG0BgUW2AuFH8PAnS2iTw= github.com/dgryski/go-farm v0.0.0-20200201041132-a6ae2369ad13 h1:fAjc9m62+UWV/WAFKLNi6ZS0675eEUC9y3AlwSbQu1Y= github.com/dgryski/go-farm v0.0.0-20200201041132-a6ae2369ad13/go.mod h1:SqUrOPUnsFjfmXRMNPybcSiG0BgUW2AuFH8PAnS2iTw= -github.com/dgryski/go-sip13 v0.0.0-20181026042036-e10d5fee7954/go.mod h1:vAd38F8PWV+bWy6jNmig1y/TA+kYO4g3RSRF0IAv0no= -github.com/dlclark/regexp2 v1.2.0/go.mod h1:2pZnwuY/m+8K6iRw6wQdMtk+rH5tNGR1i55kozfMjCc= -github.com/docker/docker v1.4.2-0.20180625184442-8e610b2b55bf/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= github.com/docker/go-connections v0.4.0 h1:El9xVISelRB7BuFusrZozjnkIM5YnzCViNKohAFqRJQ= -github.com/docker/go-connections v0.4.0/go.mod h1:Gbd7IOopHjR8Iph03tsViu4nIes5XhDvyHbTtUxmeec= -github.com/docker/go-units v0.4.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk= github.com/docker/go-units v0.5.0 h1:69rxXcBk27SvSaaxTtLh/8llcHD8vYHT7WSdRZ/jvr4= -github.com/dop251/goja v0.0.0-20200721192441-a695b0cdd498/go.mod h1:Mw6PkjjMXWbTj+nnj4s3QPXq1jaT0s5pC0iFD4+BOAA= github.com/dustin/go-humanize v0.0.0-20171111073723-bb3d318650d4/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= github.com/dustin/go-humanize v1.0.0 h1:VSnTsYCnlFHaM2/igO1h6X3HA71jcobQuxemgkq4zYo= github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= -github.com/dvsekhvalnov/jose2go v0.0.0-20200901110807-248326c1351b/go.mod h1:7BvyPhdbLxMXIYTFPLsyJRFMsKmOZnQmzh6Gb+uquuM= github.com/dvsekhvalnov/jose2go v1.5.0 h1:3j8ya4Z4kMCwT5nXIKFSV84YS+HdqSSO0VsTQxaLAeM= github.com/dvsekhvalnov/jose2go v1.5.0/go.mod h1:QsHjhyTlD/lAVqn/NSbVZmSCGeDehTB/mPZadG+mhXU= -github.com/dvyukov/go-fuzz v0.0.0-20200318091601-be3528f3a813/go.mod h1:11Gm+ccJnvAhCNLlf5+cS9KjtbaD5I5zaZpFMsTHWTw= github.com/eapache/go-resiliency v1.1.0/go.mod h1:kFI+JgMyC7bLPUVY133qvEBtVayf5mFgVsvEsIPBvNs= github.com/eapache/go-xerial-snappy v0.0.0-20180814174437-776d5712da21/go.mod h1:+020luEh2TKB4/GOp8oxxtq0Daoen/Cii55CzbTV6DU= github.com/eapache/queue v1.1.0/go.mod h1:6eCeP0CKFpHLu8blIFXhExK/dRa7WDZfr6jVFPTqq+I= -github.com/edsrzf/mmap-go v0.0.0-20160512033002-935e0e8a636c/go.mod h1:YO35OhQPt3KJa3ryjFM5Bs14WD66h8eGKpfaBNrHW5M= github.com/edsrzf/mmap-go v1.0.0/go.mod h1:YO35OhQPt3KJa3ryjFM5Bs14WD66h8eGKpfaBNrHW5M= github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= -github.com/ethereum/go-ethereum v1.9.25/go.mod h1:vMkFiYLHI4tgPw4k2j4MHKoovchFE8plZ0M9VMk4/oM= -github.com/facebookgo/ensure v0.0.0-20160127193407-b4ab57deab51/go.mod h1:Yg+htXGokKKdzcwhuNDwVvN+uBxDGXJ7G/VN1d8fa64= github.com/facebookgo/ensure v0.0.0-20200202191622-63f1cf65ac4c h1:8ISkoahWXwZR41ois5lSJBSVw4D0OV19Ht/JSTzvSv0= github.com/facebookgo/stack v0.0.0-20160209184415-751773369052 h1:JWuenKqqX8nojtoVVWjGfOF9635RETekkoH6Cc9SX0A= -github.com/facebookgo/stack v0.0.0-20160209184415-751773369052/go.mod h1:UbMTZqLaRiH3MsBH8va0n7s1pQYcu3uTb8G4tygF4Zg= -github.com/facebookgo/subset v0.0.0-20150612182917-8dac2c3c4870/go.mod h1:5tD+neXqOorC30/tWg0LCSkrqj/AR6gu8yY8/fpw1q0= github.com/facebookgo/subset v0.0.0-20200203212716-c811ad88dec4 h1:7HZCaLC5+BZpmbhCOZJ293Lz68O7PYrF2EzeiFMwCLk= -github.com/fatih/color v1.3.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= -github.com/fatih/color v1.10.0/go.mod h1:ELkj/draVOlAH/xkhN6mQ50Qd0MPOk5AAr3maGEBuJM= github.com/felixge/httpsnoop v1.0.1 h1:lvB5Jl89CsZtGIWuTcDM1E/vkVs49/Ml7JJe07l8SPQ= github.com/felixge/httpsnoop v1.0.1/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= -github.com/fjl/memsize v0.0.0-20180418122429-ca190fb6ffbc/go.mod h1:VvhXpOYNQvB+uIk2RvXzuaQtkQJzzIx6lSBe1xv7hi0= github.com/fortytw2/leaktest v1.3.0 h1:u8491cBMTQ8ft8aeV+adlcytMZylmA5nnwwkRZjI8vw= -github.com/fortytw2/leaktest v1.3.0/go.mod h1:jDsjWgpAGjm2CA7WthBh/CdZYEPF31XHquHwclZch5g= github.com/franela/goblin v0.0.0-20200105215937-c9ffbefa60db/go.mod h1:7dvUGVsVBjqR7JHJk0brhHOZYGmfBYOrK0ZhYMEtBr4= github.com/franela/goreq v0.0.0-20171204163338-bcd34c9993f8/go.mod h1:ZhphrRTfi2rbfLwlschooIH4+wKKDR4Pdxhh+TRoA20= -github.com/frankban/quicktest v1.11.3/go.mod h1:wRf/ReqHper53s+kmmSZizM8NamnL3IM0I9ntUbOk+k= github.com/frankban/quicktest v1.14.3 h1:FJKSZTDHjyhriyC81FLQ0LY93eSai0ZyR/ZIkd3ZUKE= github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ= github.com/fsnotify/fsnotify v1.6.0 h1:n+5WquG0fcWoWp6xPWfHdbskMCQaFnG6PfBrh1Ky4HY= github.com/fsnotify/fsnotify v1.6.0/go.mod h1:sl3t1tCWJFWoRz9R8WJCbQihKKwmorjAbSClcnxKAGw= -github.com/gballet/go-libpcsclite v0.0.0-20190607065134-2772fd86a8ff/go.mod h1:x7DCsMOv1taUwEWCzT4cmDeAkigA5/QCwUodaVOe8Ww= github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= github.com/gin-contrib/sse v0.1.0 h1:Y/yl/+YNO8GZSjAhjMsSuLt29uWRFHdHYUb5lYOV9qE= github.com/gin-contrib/sse v0.1.0/go.mod h1:RHrZQHXnP2xjPF+u1gW/2HnVO7nvIa9PG3Gm+fLHvGI= @@ -305,7 +199,6 @@ github.com/go-kit/kit v0.9.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2 github.com/go-kit/kit v0.10.0/go.mod h1:xUsJbQ/Fp4kEt7AFgCuvyX4a71u8h9jB8tj/ORgOZ7o= github.com/go-kit/kit v0.12.0 h1:e4o3o3IsBfAKQh5Qbbiqyfu97Ku7jrO/JbohvztANh4= github.com/go-kit/kit v0.12.0/go.mod h1:lHd+EkCZPIwYItmGDDRdhinkzX2A1sj+M9biaEaizzs= -github.com/go-kit/log v0.1.0/go.mod h1:zbhenjAZHb184qTLMA9ZjW7ThYL0H2mk7Q6pNt4vbaY= github.com/go-kit/log v0.2.1 h1:MRVx0/zhvdseW+Gza6N9rVzU/IVzaeE1SFI4raAhmBU= github.com/go-kit/log v0.2.1/go.mod h1:NwTd00d/i8cPZ3xOwwiv2PO5MOcx78fFErGNcVmBjv0= github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE= @@ -313,7 +206,6 @@ github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V github.com/go-logfmt/logfmt v0.5.0/go.mod h1:wCYkCAKZfumFQihp8CzCvQ3paCTfi41vtzG1KdI/P7A= github.com/go-logfmt/logfmt v0.5.1 h1:otpy5pqBCBZ1ng9RQ0dPu4PN7ba75Y/aA+UpowDyNVA= github.com/go-logfmt/logfmt v0.5.1/go.mod h1:WYhtIu8zTZfxdn5+rREduYbwxfcBr/Vr6KEVveWlfTs= -github.com/go-ole/go-ole v1.2.1/go.mod h1:7FAglXiTm7HKlQRDeOQ6ZNUHidzCWXuZWq/1dTyBNF8= github.com/go-playground/assert/v2 v2.0.1/go.mod h1:VDjEfimB/XKnb+ZQfWdccd7VUvScMdVu0Titje2rxJ4= github.com/go-playground/locales v0.13.0 h1:HyWk6mgj5qFqCT5fjGBuRArbVDfE4hi8+e8ceBS/t7Q= github.com/go-playground/locales v0.13.0/go.mod h1:taPMhCMXrRLJO55olJkUXHZBHCxTMfnGwq/HNwmWNS8= @@ -321,7 +213,6 @@ github.com/go-playground/universal-translator v0.17.0 h1:icxd5fm+REJzpZx7ZfpaD87 github.com/go-playground/universal-translator v0.17.0/go.mod h1:UkSxE5sNxxRwHyU+Scu5vgOQjsIJAF8j9muTVoKLVtA= github.com/go-playground/validator/v10 v10.4.1 h1:pH2c5ADXtd66mxoE0Zm9SUhxE20r7aM3F26W0hOn+GE= github.com/go-playground/validator/v10 v10.4.1/go.mod h1:nlOn6nFhuKACm19sB/8EGNn9GlaMV7XkbRSipzJ0Ii4= -github.com/go-sourcemap/sourcemap v2.1.2+incompatible/go.mod h1:F8jJfvm2KbVjc5NqelyYJmf/v5J0dwNLS2mL4sNA1Jg= github.com/go-sql-driver/mysql v1.4.0/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w= github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= github.com/go-task/slim-sprig v0.0.0-20210107165309-348f09dbbbc0/go.mod h1:fyg7847qk6SyHyPtNmDHnmrv/HOrqktSC+C9fM+CJOE= @@ -340,7 +231,6 @@ github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfU github.com/golang/glog v1.0.0 h1:nfP3RFugxnNRyKgeWd4oI1nYvXpxrx8ck8ZrcizshdQ= github.com/golang/glog v1.0.0/go.mod h1:EWib/APOK0SL3dFbYqvxE3UYd8E6s1ouQ7iEp/0LWV4= github.com/golang/groupcache v0.0.0-20160516000752-02826c3e7903/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= -github.com/golang/groupcache v0.0.0-20190129154638-5b532d6fd5ef/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20191227052852-215e87163ea7/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= @@ -350,9 +240,7 @@ github.com/golang/mock v1.4.0/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt github.com/golang/mock v1.4.1/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= github.com/golang/mock v1.4.3/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= github.com/golang/mock v1.4.4/go.mod h1:l3mdAwkq5BuhzHwde/uurv3sEJeZMXNpwsxVWU71h+4= -github.com/golang/mock v1.5.0/go.mod h1:CWnOUgYIOo4TcNZ0wHX3YZCqsaM1I1Jvs6v3mP3KVu8= github.com/golang/mock v1.6.0 h1:ErTB+efbowRARo13NNdxyJji2egdxLGQhRaY+DUumQc= -github.com/golang/mock v1.6.0/go.mod h1:p6yTPP+5HYm5mzsMV8JkE6ZKdX+/wYM6Hr+LicevLPs= github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.3.0/go.mod h1:Qd/q+1AKNOZr9uGQzbzCmRO6sUih6GTPZv6a1/R87v0= github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= @@ -369,12 +257,9 @@ github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QD github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= -github.com/golang/protobuf v1.5.1/go.mod h1:DopwsBzvsk0Fs44TXzsVbJyPhcCPeIwnvohx4u74HPM= github.com/golang/protobuf v1.5.2 h1:ROPKBNFfQgOUMifHyP+KYbvpjbdoFNs+aK7DXlji0Tw= github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= github.com/golang/snappy v0.0.0-20180518054509-2e65f85255db/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= -github.com/golang/snappy v0.0.1/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= -github.com/golang/snappy v0.0.3-0.20201103224600-674baa8c7fc3/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/golang/snappy v0.0.3/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/golang/snappy v0.0.4 h1:yAGX7huGHXlcLOEtBnF4w7FQwA26wojNCwOYAEhLjQM= github.com/golang/snappy v0.0.4/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= @@ -390,13 +275,11 @@ github.com/google/go-cmp v0.4.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/ github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.3/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38= github.com/google/gofuzz v0.0.0-20170612174753-24818f796faf/go.mod h1:HP5RmnzzSNb993RKQDq4+1A4ia9nllfqcQFTQJedwGI= github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= -github.com/google/gofuzz v1.1.1-0.20200604201612-c04b05f3adfa/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= github.com/google/gofuzz v1.2.0 h1:xRy4A+RhZaiKjJ1bPfwQ8sedCA+YS2YcCHW6ec7JMi0= github.com/google/gofuzz v1.2.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs= @@ -414,17 +297,13 @@ github.com/google/pprof v0.0.0-20200708004538-1a94d8640e99/go.mod h1:ZgVRPoUq/hf github.com/google/pprof v0.0.0-20201023163331-3e6fc7fc9c4c/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/pprof v0.0.0-20201203190320-1bf35d6f28c2/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/pprof v0.0.0-20201218002935-b9804c9f04c2/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= -github.com/google/pprof v0.0.0-20210122040257-d980be63207e/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= -github.com/google/pprof v0.0.0-20210226084205-cbba55b83ad5/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= github.com/google/uuid v1.0.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg= github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk= github.com/googleapis/google-cloud-go-testing v0.0.0-20200911160855-bcd43fbb19e8/go.mod h1:dvDLG8qkwmyD9a/MJJN3XJcT3xFxOKAvTZGvuZmac9g= github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= -github.com/gordonklaus/ineffassign v0.0.0-20200309095847-7953dde2c7bf/go.mod h1:cuNKsD1zp2v6XfE/orVX2QE1LC+i254ceGcVeDT3pTU= github.com/gorilla/context v1.1.1/go.mod h1:kBGZzfjB9CEq2AlWe17Uuf7NDRt0dE0s8S51q0aT7Yg= github.com/gorilla/handlers v1.5.1 h1:9lRY6j8DEeeBT10CvO9hGW0gmky0BprnvDI5vfhUHH4= github.com/gorilla/handlers v1.5.1/go.mod h1:t8XrUpc4KVXb7HGyJ4/cEnwQiaxrX/hz1Zv/4g96P1Q= @@ -433,21 +312,15 @@ github.com/gorilla/mux v1.7.3/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2z github.com/gorilla/mux v1.8.0 h1:i40aqfkR1h2SlN9hojwV5ZA91wcXFOvkdNIeFDP5koI= github.com/gorilla/mux v1.8.0/go.mod h1:DVbg23sWSpFRCP0SfiEN6jmj59UnW/n46BH5rLB71So= github.com/gorilla/websocket v0.0.0-20170926233335-4201258b820c/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ= -github.com/gorilla/websocket v1.4.1-0.20190629185528-ae1634f6a989/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ= github.com/gorilla/websocket v1.4.1/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= -github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= github.com/gorilla/websocket v1.5.0 h1:PPwGk2jz7EePpoHN/+ClbZu8SPxiqlu12wZP/3sWmnc= github.com/gorilla/websocket v1.5.0/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= -github.com/gotestyourself/gotestyourself v2.2.0+incompatible/go.mod h1:zZKM6oeNM8k+FRljX1mnzVYeS8wiGgQyvST1/GafPbY= -github.com/graph-gophers/graphql-go v0.0.0-20191115155744-f33e81362277/go.mod h1:9CQHMSxwO4MprSdzoIEobiHpoLtHm77vfxsvsIN5Vuc= -github.com/grpc-ecosystem/go-grpc-middleware v1.0.0/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs= github.com/grpc-ecosystem/go-grpc-middleware v1.0.1-0.20190118093823-f849b5445de4/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs= github.com/grpc-ecosystem/go-grpc-middleware v1.2.2/go.mod h1:EaizFBKfUKtMIF5iaDEhniwNedqGo9FuLFzppDr3uwI= github.com/grpc-ecosystem/go-grpc-middleware v1.3.0 h1:+9834+KizmvFV7pXQGSXQTsaWhq2GjuNUt0aUU0YBYw= github.com/grpc-ecosystem/go-grpc-middleware v1.3.0/go.mod h1:z0ButlSOZa5vEBq9m2m2hlwIgKw+rp3sdCBRoJY+30Y= github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgfV/d3M/q6VIi02HzZEHgUlZvzk= github.com/grpc-ecosystem/grpc-gateway v1.8.5/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= -github.com/grpc-ecosystem/grpc-gateway v1.9.0/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= github.com/grpc-ecosystem/grpc-gateway v1.9.5/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= github.com/grpc-ecosystem/grpc-gateway v1.16.0 h1:gmcG1KaJ57LophUzW0Hy8NmPhnMZb4M0+kPpLofRdBo= github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw= @@ -458,9 +331,7 @@ github.com/gtank/merlin v0.1.1 h1:eQ90iG7K9pOhtereWsmyRJ6RAwcP4tHTDBHXNg+u5is= github.com/gtank/merlin v0.1.1/go.mod h1:T86dnYJhcGOh5BjZFCJWTDeTK7XW8uE+E21Cy/bIQ+s= github.com/gtank/ristretto255 v0.1.2 h1:JEqUCPA1NvLq5DwYtuzigd7ss8fwbYay9fi4/5uMzcc= github.com/gtank/ristretto255 v0.1.2/go.mod h1:Ph5OpO6c7xKUGROZfWVLiJf9icMDwUeIvY4OmlYW69o= -github.com/hashicorp/consul/api v1.1.0/go.mod h1:VmuI/Lkw1nC05EYQWNKwWGbkg+FbDBtguAZLlVdkD9Q= github.com/hashicorp/consul/api v1.3.0/go.mod h1:MmDNSzIMUjNpY/mQ398R4bk2FnqQLoPndWW5VkKPlCE= -github.com/hashicorp/consul/sdk v0.1.1/go.mod h1:VKf9jXwCTEY1QZP2MOLRhb5i/I/ssyNV1vwHyQBF0x8= github.com/hashicorp/consul/sdk v0.3.0/go.mod h1:VKf9jXwCTEY1QZP2MOLRhb5i/I/ssyNV1vwHyQBF0x8= github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= github.com/hashicorp/go-cleanhttp v0.5.0/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80= @@ -481,7 +352,6 @@ github.com/hashicorp/go-version v1.2.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09 github.com/hashicorp/go.net v0.0.1/go.mod h1:hjKkEWcCURg++eb33jQU7oqQcI9XDCnUzHA0oac0k90= github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= -github.com/hashicorp/golang-lru v0.5.4/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4= github.com/hashicorp/golang-lru v0.5.5-0.20210104140557-80c98217689d h1:dg1dEPuWpEqDnvIw251EVy4zlP8gWbsGj4BsUKCRpYs= github.com/hashicorp/golang-lru v0.5.5-0.20210104140557-80c98217689d/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4= github.com/hashicorp/hcl v1.0.0 h1:0Anlzjpi4vEasTeNFn2mLJgTSwt0+6sfsiTG8qcWGx4= @@ -490,31 +360,20 @@ github.com/hashicorp/logutils v1.0.0/go.mod h1:QIAnNjmIWmVIIkWDTG1z5v++HQmx9WQRO github.com/hashicorp/mdns v1.0.0/go.mod h1:tL+uN++7HEJ6SQLQ2/p+z2pH24WQKWjBPkE0mNTz8vQ= github.com/hashicorp/memberlist v0.1.3/go.mod h1:ajVTdAv/9Im8oMAAj5G31PhhMCZJV2pPBoIllUwCN7I= github.com/hashicorp/serf v0.8.2/go.mod h1:6hOLApaqBFA1NXqRQAsxw9QxuDEvNxSQRwA/JwenrHc= -github.com/hdevalence/ed25519consensus v0.0.0-20210204194344-59a8610d2b87/go.mod h1:XGsKKeXxeRr95aEOgipvluMPlgjr7dGlk9ZTWOjcUcg= github.com/hdevalence/ed25519consensus v0.0.0-20220222234857-c00d1f31bab3 h1:aSVUgRRRtOrZOC1fYmY9gV0e9z/Iu+xNVSASWjsuyGU= github.com/hdevalence/ed25519consensus v0.0.0-20220222234857-c00d1f31bab3/go.mod h1:5PC6ZNPde8bBqU/ewGZig35+UIZtw9Ytxez8/q5ZyFE= github.com/herumi/bls-eth-go-binary v0.0.0-20220509081320-2d8ab06de53c h1:ppGSVyhAFh8VAGyDuNeLEGMYRJR5iDI92QgDNrMIqK0= github.com/herumi/bls-eth-go-binary v0.0.0-20220509081320-2d8ab06de53c/go.mod h1:luAnRm3OsMQeokhGzpYmc0ZKwawY7o87PUEP11Z7r7U= -github.com/holiman/uint256 v1.1.1/go.mod h1:y4ga/t+u+Xwd7CpDgZESaRcWy0I7XMlTMA25ApIH5Jw= github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= github.com/hudl/fargo v1.3.0/go.mod h1:y3CKSmjA+wD2gak7sUSXTAoopbhU08POFhmITJgmKTg= -github.com/huin/goupnp v1.0.0/go.mod h1:n9v9KO1tAxYH82qOn+UTIFQDmx5n1Zxd/ClZDMX7Bnc= -github.com/huin/goutil v0.0.0-20170803182201-1ca381bf3150/go.mod h1:PpLOETDnJ0o3iZrZfqZzyLl6l7F3c6L1oWn7OICBi6o= github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= github.com/ianlancetaylor/demangle v0.0.0-20200824232613-28f6c0f3b639/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= -github.com/improbable-eng/grpc-web v0.14.1/go.mod h1:zEjGHa8DAlkoOXmswrNvhUGEYQA9UI7DhrGeHR1DMGU= github.com/improbable-eng/grpc-web v0.15.0 h1:BN+7z6uNXZ1tQGcNAuaU1YjsLTApzkjt2tzCixLaUPQ= github.com/improbable-eng/grpc-web v0.15.0/go.mod h1:1sy9HKV4Jt9aEs9JSnkWlRJPuPtwNr0l57L4f878wP8= github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8= github.com/inconshreveable/mousetrap v1.0.1 h1:U3uMjPSQEBMNp1lFxmllqCPM6P5u/Xq7Pgzkat/bFNc= github.com/inconshreveable/mousetrap v1.0.1/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw= -github.com/influxdata/influxdb v1.2.3-0.20180221223340-01288bdb0883/go.mod h1:qZna6X/4elxqT3yI9iZYdZrWWdeFOOprn86kgg4+IzY= github.com/influxdata/influxdb1-client v0.0.0-20191209144304-8bf82d3c094d/go.mod h1:qj24IKcXYK6Iy9ceXlo3Tc+vtHo9lIhSX5JddghvEPo= -github.com/jackpal/go-nat-pmp v1.0.2-0.20160603034137-1fa385a6f458/go.mod h1:QPH045xvCAeXUZOxsnwmrtiCoxIr9eob+4orBN1SBKc= -github.com/jedisct1/go-minisign v0.0.0-20190909160543-45766022959e/go.mod h1:G1CVv03EnqU1wYL2dFwXxW2An0az9JTl/ZsqXQeBlkU= -github.com/jessevdk/go-flags v0.0.0-20141203071132-1679536dcc89/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= -github.com/jessevdk/go-flags v1.4.0/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= -github.com/jhump/protoreflect v1.9.0/go.mod h1:7GcYQDdMU/O/BBrl/cX6PNHpXh6cenjd8pneu5yW7Tg= github.com/jhump/protoreflect v1.12.1-0.20220721211354-060cc04fc18b h1:izTof8BKh/nE1wrKOrloNA5q4odOarjf+Xpe+4qow98= github.com/jmespath/go-jmespath v0.0.0-20180206201540-c2b33e8439af/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k= github.com/jmhodges/levigo v1.0.0 h1:q5EC36kV79HWeTBWsod3mG11EgStG3qArTKcvlksN1U= @@ -523,25 +382,19 @@ github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22 github.com/josharian/intern v1.0.0 h1:vlS4z54oSdjm0bgjRigI+G1HpF+tI+9rE5LLzOg8HmY= github.com/josharian/intern v1.0.0/go.mod h1:5DoeVV0s6jJacbCEi61lwdGj/aVlrQvzHFFd8Hwg//Y= github.com/jpillora/backoff v1.0.0/go.mod h1:J/6gKK9jxlEcS3zixgDgUAsiuZ7yrSoa/FX5e0EB2j4= -github.com/jrick/logrotate v1.0.0/go.mod h1:LNinyqDIJnpAur+b8yyulnQw/wDuN1+BYKlTRt3OuAQ= github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= github.com/json-iterator/go v1.1.7/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= github.com/json-iterator/go v1.1.8/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= github.com/json-iterator/go v1.1.9/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= github.com/json-iterator/go v1.1.10/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= -github.com/json-iterator/go v1.1.11/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM= github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU= github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/XSXhF0NWZEnDohbsk= github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU= -github.com/julienschmidt/httprouter v1.1.1-0.20170430222011-975b5c4c7c21/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w= github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w= github.com/julienschmidt/httprouter v1.3.0/go.mod h1:JR6WtHb+2LUe8TCKY3cZOxFyyO8IZAc4RVcycCCAKdM= -github.com/karalabe/usb v0.0.0-20190919080040-51dc0efba356/go.mod h1:Od972xHfMJowv7NGVDiWVxk2zxnWgjLlJzE+F4F7AGU= -github.com/keybase/go-keychain v0.0.0-20190712205309-48d3d31d256d/go.mod h1:JJNrCn9otv/2QP4D7SMJBgaleKpOf66PnW6F5WGNRIc= github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= -github.com/kkdai/bstream v0.0.0-20161212061736-f391b8402d23/go.mod h1:J+Gs4SYgM6CZQHDETBtE9HaSEkGmuNXF86RwHhHUvq4= github.com/klauspost/compress v1.10.3/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs= github.com/klauspost/compress v1.11.7/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs= github.com/klauspost/compress v1.12.3/go.mod h1:8dP1Hq4DHOhN9w426knH3Rhby4rFm6D8eO+e+Dq5Gzg= @@ -552,21 +405,14 @@ github.com/konsorten/go-windows-terminal-sequences v1.0.3/go.mod h1:T0+1ngSBFLxv github.com/kr/fs v0.1.0/go.mod h1:FFnZGqtBN9Gxj7eW1uZ42v5BccTP0vu6NEaFoC2HwRg= github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc= github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= -github.com/kr/pretty v0.2.0/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= -github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= github.com/kr/pretty v0.3.0 h1:WgNl7dwNpEZ6jJ9k1snq4pZsg7DOEN8hP9Xw0Tsjwk0= github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= -github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= -github.com/kylelemons/godebug v1.1.0/go.mod h1:9/0rRGxNHcop5bhtWyNeEfOS8JIWk580+fNqagV/RAw= github.com/leodido/go-urn v1.2.0 h1:hpXL4XnriNwQ/ABnpepYM/1vCLWNDfUNts8dX3xTG6Y= github.com/leodido/go-urn v1.2.0/go.mod h1:+8+nEpDfqqsY+g338gtMEUOtuK+4dEMhiQEgxpxOKII= -github.com/lib/pq v1.2.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= -github.com/lib/pq v1.10.2/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o= github.com/lib/pq v1.10.7 h1:p7ZhMD+KsSRozJr34udlUrhboJwWAgCg34+/ZZNvZZw= github.com/lib/pq v1.10.7/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o= -github.com/libp2p/go-buffer-pool v0.0.2/go.mod h1:MvaB6xw5vOrDl8rYZGLFdKAuk/hRoRZd1Vi32+RXyFM= github.com/libp2p/go-buffer-pool v0.1.0 h1:oK4mSFcQz7cTQIfqbe4MIj9gLW+mnanjyFtc6cdF0Y8= github.com/libp2p/go-buffer-pool v0.1.0/go.mod h1:N+vh8gMqimBzdKkSMVuydVDq+UV5QTWy5HSiZacSbPg= github.com/lightstep/lightstep-tracer-common/golang/gogo v0.0.0-20190605223551-bc2310a04743/go.mod h1:qklhhLq1aX+mtWk9cPHPzaBjWImj5ULL6C7HFJtXQMM= @@ -579,33 +425,23 @@ github.com/line/ostracon v1.0.7 h1:8vh/gsM6Sf6z2s38og8YufIhrWN2TwXpm4I3DqKEVyI= github.com/line/ostracon v1.0.7/go.mod h1:gmEKYdaMaDAl5xJ8sJJo0s6OvzBSZwM01nWRCGA5oDY= github.com/line/wasmvm v1.1.1-0.11.0.0.20230113085344-89650a7edd05 h1:Gtz45izC5JFrS+H35rEJ/TEgdXJr+3WSpkynRk52M5U= github.com/line/wasmvm v1.1.1-0.11.0.0.20230113085344-89650a7edd05/go.mod h1:Lq3FVvi/rb+OOlTxqtcqcao2GGESQ4hUpuXMcjdJbco= -github.com/lucasjones/reggen v0.0.0-20180717132126-cdb49ff09d77/go.mod h1:5ELEyG+X8f+meRWHuqUOewBOhvHkl7M76pdGEansxW4= github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= -github.com/magiconair/properties v1.8.1/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= -github.com/magiconair/properties v1.8.5/go.mod h1:y3VJvCyxH9uVvJTWEGAELF3aiYNyPKd5NZ3oSwXrF60= github.com/magiconair/properties v1.8.7 h1:IeQXZAiQcpL9mgcAe1Nu6cX9LLw6ExEHKjN0VQdvPDY= github.com/magiconair/properties v1.8.7/go.mod h1:Dhd985XPs7jluiymwWYZ0G4Z61jb3vdS329zhj2hYo0= github.com/mailru/easyjson v0.7.7 h1:UGYAvKxe3sBsEDzO8ZeWOSlIQfWFlxbzLZe7hwFURr0= github.com/mailru/easyjson v0.7.7/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc= github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= -github.com/mattn/go-colorable v0.1.0/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= -github.com/mattn/go-colorable v0.1.8/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= github.com/mattn/go-colorable v0.1.12/go.mod h1:u5H1YNBxpqRaxsYJYSkiCWKzEfiAb1Gb520KVy5xxl4= github.com/mattn/go-colorable v0.1.13 h1:fFA4WZxdEF4tXPZVKMLwD8oUnCTTo08duU7wxecdEvA= github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovkB8vQcUbaXHg= -github.com/mattn/go-ieproxy v0.0.0-20190610004146-91bb50d98149/go.mod h1:31jz6HNzdxOmlERGGEc4v/dMssOfmp2p5bT/okiKFFc= -github.com/mattn/go-ieproxy v0.0.0-20190702010315-6dee0af9227d/go.mod h1:31jz6HNzdxOmlERGGEc4v/dMssOfmp2p5bT/okiKFFc= github.com/mattn/go-isatty v0.0.3/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= github.com/mattn/go-isatty v0.0.4/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= -github.com/mattn/go-isatty v0.0.5-0.20180830101745-3fb116b82035/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU= github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27kJ6hsGG94= github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= github.com/mattn/go-isatty v0.0.17 h1:BTarxUcIeDqL27Mc+vyvdWYSL28zpIhv3RoTdsLMPng= github.com/mattn/go-isatty v0.0.17/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= github.com/mattn/go-runewidth v0.0.2/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= -github.com/mattn/go-runewidth v0.0.3/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= -github.com/mattn/go-runewidth v0.0.4/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= github.com/matttproud/golang_protobuf_extensions v1.0.4 h1:mmDVorXM7PCGKw94cs5zkfA9PSy5pEvNWRP0ET0TIVo= github.com/matttproud/golang_protobuf_extensions v1.0.4/go.mod h1:BSXmuO+STAnVfrANrmjBb36TMTDstsz7MSK+HVaYKv4= @@ -613,7 +449,6 @@ github.com/miekg/dns v1.0.14/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3N github.com/mimoo/StrobeGo v0.0.0-20181016162300-f8f6d4d2b643/go.mod h1:43+3pMjjKimDBf5Kr4ZFNGbLql1zKkbImw+fZbw3geM= github.com/mimoo/StrobeGo v0.0.0-20210601165009-122bf33a46e0 h1:QRUSJEgZn2Snx0EmT/QLXibWjSUDjKWvXIT19NBVp94= github.com/mimoo/StrobeGo v0.0.0-20210601165009-122bf33a46e0/go.mod h1:43+3pMjjKimDBf5Kr4ZFNGbLql1zKkbImw+fZbw3geM= -github.com/minio/highwayhash v1.0.1/go.mod h1:BQskDq+xkJ12lmlUUi7U0M5Swg3EWR+dLTk+kldvVxY= github.com/minio/highwayhash v1.0.2 h1:Aak5U0nElisjDCfPSG79Tgzkn2gl66NxOMspRrKnA/g= github.com/minio/highwayhash v1.0.2/go.mod h1:BQskDq+xkJ12lmlUUi7U0M5Swg3EWR+dLTk+kldvVxY= github.com/mitchellh/cli v1.0.0/go.mod h1:hNIlj7HEI86fIcpObd7a0FcrxTWetlwJDGcceTlRvqc= @@ -624,26 +459,20 @@ github.com/mitchellh/gox v0.4.0/go.mod h1:Sd9lOJ0+aimLBi73mGofS1ycjY8lL3uZM3JPS4 github.com/mitchellh/iochan v1.0.0/go.mod h1:JwYml1nuB7xOzsp52dPpHFffvOCDupsG0QubkSMEySY= github.com/mitchellh/mapstructure v0.0.0-20160808181253-ca63d7c062ee/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= -github.com/mitchellh/mapstructure v1.3.3/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= -github.com/mitchellh/mapstructure v1.4.1/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= github.com/mitchellh/mapstructure v1.5.0 h1:jeMsZIYE/09sWLaz43PL7Gy6RuMjD2eJVyuac5Z2hdY= github.com/mitchellh/mapstructure v1.5.0/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= -github.com/moby/sys/mountinfo v0.4.1/go.mod h1:rEr8tzG/lsIZHBtN/JjGG+LMYx9eXgW2JI+6q0qou+A= github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg= github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M= -github.com/mrunalp/fileutils v0.5.0/go.mod h1:M1WthSahJixYnrXQl/DFQuteStB1weuxD2QJNHXfbSQ= github.com/mtibben/percent v0.2.1 h1:5gssi8Nqo8QU/r2pynCm+hBQHpkB/uNK7BJCFogWdzs= github.com/mtibben/percent v0.2.1/go.mod h1:KG9uO+SZkUp+VkRHsCdYQV3XSZrrSpR3O9ibNBTZrns= github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f h1:KUppIJq7/+SVif2QVs3tOP0zanoHgBEVAwHxUSIzRqU= github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= github.com/mwitkow/grpc-proxy v0.0.0-20181017164139-0f1106ef9c76/go.mod h1:x5OoJHDHqxHS801UIuhqGl6QdSAEJvtausosHSdazIo= -github.com/naoina/go-stringutil v0.1.0/go.mod h1:XJ2SJL9jCtBh+P9q5btrd/Ylo8XwT/h1USek5+NqSA0= -github.com/naoina/toml v0.1.2-0.20170918210437-9fafd6967416/go.mod h1:NBIhNtsFMo3G2szEBne+bO4gS192HuIYRqfvOWb4i1E= github.com/nats-io/jwt v0.3.0/go.mod h1:fRYCDE99xlTsqUzISS1Bi75UBJ6ljOJQOAAu5VglpSg= github.com/nats-io/jwt v0.3.2/go.mod h1:/euKqTS1ZD+zzjYrY7pseZrTtWQSjujC7xjPc8wL6eU= github.com/nats-io/nats-server/v2 v2.1.2/go.mod h1:Afk+wRZqkMQs/p45uXdrVLuab3gwv3Z8C4HTBu8GD/k= @@ -651,41 +480,27 @@ github.com/nats-io/nats.go v1.9.1/go.mod h1:ZjDU1L/7fJ09jvUSRVBR2e7+RnLiiIQyqyzE github.com/nats-io/nkeys v0.1.0/go.mod h1:xpnFELMwJABBLVhffcfd1MZx6VsNRFpEugbxziKVo7w= github.com/nats-io/nkeys v0.1.3/go.mod h1:xpnFELMwJABBLVhffcfd1MZx6VsNRFpEugbxziKVo7w= github.com/nats-io/nuid v1.0.1/go.mod h1:19wcPz3Ph3q0Jbyiqsd0kePYG7A95tJPxeL+1OSON2c= -github.com/neilotoole/errgroup v0.1.5/go.mod h1:Q2nLGf+594h0CLBs/Mbg6qOr7GtqDK7C2S41udRnToE= github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno= -github.com/nishanths/predeclared v0.0.0-20200524104333-86fad755b4d3/go.mod h1:nt3d53pc1VYcphSCIaYAJtnPYnr3Zyn8fMq2wvPGPso= github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A= github.com/nxadm/tail v1.4.8 h1:nPr65rt6Y5JFSKQO7qToXr7pePgD6Gwiw05lkbyAQTE= github.com/nxadm/tail v1.4.8/go.mod h1:+ncqLTQzXmGhMZNUePPaPqPvBxHAIsmXswZKocGu+AU= github.com/oklog/oklog v0.3.2/go.mod h1:FCV+B7mhrz4o+ueLpx+KqkyXRGMWOYEvfiXtdGtbWGs= github.com/oklog/run v1.0.0/go.mod h1:dlhp/R75TPv97u0XWUtDeV/lRKWPKSdTuV0TZvrmrQA= -github.com/oklog/ulid v1.3.1/go.mod h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn4U= github.com/olekukonko/tablewriter v0.0.0-20170122224234-a0225b3f23b5/go.mod h1:vsDQFd/mU46D+Z4whnwzcISnGGzXWMclvtLoiIKAKIo= -github.com/olekukonko/tablewriter v0.0.1/go.mod h1:vsDQFd/mU46D+Z4whnwzcISnGGzXWMclvtLoiIKAKIo= -github.com/olekukonko/tablewriter v0.0.2-0.20190409134802-7e037d187b0c/go.mod h1:vsDQFd/mU46D+Z4whnwzcISnGGzXWMclvtLoiIKAKIo= github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/ginkgo v1.7.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/ginkgo v1.12.1/go.mod h1:zj2OWP4+oCPe1qIXoGWkgMRwljMUYCdkwsT2108oapk= github.com/onsi/ginkgo v1.14.0/go.mod h1:iSB4RoI2tjJc9BBv4NKIKWKya62Rps+oPG/Lv9klQyY= -github.com/onsi/ginkgo v1.16.2/go.mod h1:CObGmKUOKaSC0RjmoAK7tKyn4Azo5P2IWuoMnvwxz1E= github.com/onsi/ginkgo v1.16.4 h1:29JGrr5oVBm5ulCWet69zQkzWipVXIol6ygQUe/EzNc= github.com/onsi/ginkgo v1.16.4/go.mod h1:dX+/inL/fNMqNlz0e9LfyB9TswhZpCVdJM/Z6Vvnwo0= -github.com/onsi/gomega v1.4.1/go.mod h1:C1qb7wdrVGGVU+Z6iS04AVkA3Q65CEZX59MT0QO5uiA= github.com/onsi/gomega v1.4.3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY= github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo= -github.com/onsi/gomega v1.13.0/go.mod h1:lRk9szgn8TxENtWd0Tp4c3wjlRfMTMH27I+3Je41yGY= github.com/onsi/gomega v1.20.0 h1:8W0cWlwFkflGPLltQvLRB7ZVD5HuP6ng320w2IS245Q= github.com/op/go-logging v0.0.0-20160315200505-970db520ece7/go.mod h1:HzydrMdWErDVzsI23lYNej1Htcns9BCg93Dk0bBINWk= -github.com/opencontainers/go-digest v1.0.0-rc1/go.mod h1:cMLVZDEM3+U2I4VmLI6N8jQYUd2OVphdqWwCJHrFt2s= github.com/opencontainers/go-digest v1.0.0 h1:apOUWs51W5PlhuyGyz9FCeeBIOUDA/6nW8Oi/yOhh5U= -github.com/opencontainers/image-spec v1.0.1/go.mod h1:BtxoFyWECRxE4U/7sNtV5W15zMzWCbyJoFRP3s7yZA0= github.com/opencontainers/image-spec v1.1.0-rc2 h1:2zx/Stx4Wc5pIPDvIxHXvXtQFW/7XWJGmnM7r3wg034= -github.com/opencontainers/runc v0.1.1/go.mod h1:qT5XzbpPznkRYVz/mWwUaVBUv2rmF59PVA73FjuZG0U= -github.com/opencontainers/runc v1.0.2/go.mod h1:aTaHFFwQXuA71CiyxOdFFIorAoemI04suvGRQFzWTD0= github.com/opencontainers/runc v1.1.3 h1:vIXrkId+0/J2Ymu2m7VjGvbSlAId9XNRPhn2p4b+d8w= -github.com/opencontainers/runtime-spec v1.0.3-0.20210326190908-1c3f411f0417/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0= -github.com/opencontainers/selinux v1.8.2/go.mod h1:MUIHuUEvKB1wtJjQdOyYRgOnLD2xAPP8dBsCoU0KuF8= github.com/opentracing-contrib/go-observer v0.0.0-20170622124052-a52f23424492/go.mod h1:Ngi6UdF0k5OKD5t5wlmGhe/EDKPoUM3BXZSSfIuJbis= github.com/opentracing/basictracer-go v1.0.0/go.mod h1:QfBfYuafItcjQuMwinw9GhYKwFXS9KnPs5lxoYwgW74= github.com/opentracing/opentracing-go v1.0.2/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= @@ -695,26 +510,17 @@ github.com/openzipkin/zipkin-go v0.1.6/go.mod h1:QgAqvLzwWbR/WpD4A3cGpPtJrZXNIiJ github.com/openzipkin/zipkin-go v0.2.1/go.mod h1:NaW6tEwdmWMaCDZzg8sh+IBNOxHMPnhQw8ySjnjRyN4= github.com/openzipkin/zipkin-go v0.2.2/go.mod h1:NaW6tEwdmWMaCDZzg8sh+IBNOxHMPnhQw8ySjnjRyN4= github.com/ory/dockertest v3.3.5+incompatible h1:iLLK6SQwIhcbrG783Dghaaa3WPzGc+4Emza6EbVUUGA= -github.com/ory/dockertest v3.3.5+incompatible/go.mod h1:1vX4m9wsvi00u5bseYwXaSnhNrne+V0E6LAcBILJdPs= -github.com/otiai10/copy v1.6.0/go.mod h1:XWfuS3CrI0R6IE0FbgHsEazaXO8G0LpMp9o8tos0x4E= -github.com/otiai10/curr v0.0.0-20150429015615-9b4961190c95/go.mod h1:9qAhocn7zKJG+0mI8eUu6xqkFDYS2kb2saOteoSB3cE= -github.com/otiai10/curr v1.0.0/go.mod h1:LskTG5wDwr8Rs+nNQ+1LlxRjAtTZZjtJW4rMXl6j4vs= -github.com/otiai10/mint v1.3.0/go.mod h1:F5AjcsTsWUqX+Na9fpHb52P8pcRX2CI6A3ctIT91xUo= -github.com/otiai10/mint v1.3.2/go.mod h1:/yxELlJQ0ufhjUwhshSj+wFjZ78CnZ48/1wtmBH1OTc= github.com/pact-foundation/pact-go v1.0.4/go.mod h1:uExwJY4kCzNPcHRj+hCR/HBbOOIwwtUjcrb0b5/5kLM= github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= github.com/pascaldekloe/goe v0.1.0 h1:cBOtyMzM9HTpWjXfbbunk26uA6nG3a8n06Wieeh0MwY= github.com/pascaldekloe/goe v0.1.0/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= -github.com/pborman/uuid v0.0.0-20170112150404-1b00554d8222/go.mod h1:VyrYX9gd7irzKovcSS6BIIEwPRkP2Wm2m9ufcdFSJ34= github.com/pborman/uuid v1.2.0/go.mod h1:X/NO0urCmaxf9VXbdlT7C2Yzkj2IKimNn4k+gtPdI/k= github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic= -github.com/pelletier/go-toml v1.9.3/go.mod h1:u1nR/EPcESfeI/szUZKdtJ0xRNbUoANCkoOuaOx1Y+c= github.com/pelletier/go-toml v1.9.5 h1:4yBQzkHv+7BHq2PQUZF3Mx0IYxG7LsP222s7Agd3ve8= github.com/pelletier/go-toml v1.9.5/go.mod h1:u1nR/EPcESfeI/szUZKdtJ0xRNbUoANCkoOuaOx1Y+c= github.com/pelletier/go-toml/v2 v2.0.5 h1:ipoSadvV8oGUjnUbMub59IDPPwfxF694nG/jwbMiyQg= github.com/pelletier/go-toml/v2 v2.0.5/go.mod h1:OMHamSCAODeSsVrwwvcJOaoN0LIUIaFVNZzmWyNfXas= github.com/performancecopilot/speed v3.0.0+incompatible/go.mod h1:/CLtqpZ5gBg1M9iaPbIdPPGyKcA8hKdoy6hAWba7Yac= -github.com/peterh/liner v1.1.1-0.20190123174540-a2c9a5303de7/go.mod h1:CRroGNssyjTd/qIG2FyxByd2S8JEAZXBl4qUrZf8GS0= github.com/petermattis/goid v0.0.0-20180202154549-b0b1615b78e5 h1:q2e307iGHPdTGp0hoxKjt1H5pDo6utceo3dQVK3I5XQ= github.com/petermattis/goid v0.0.0-20180202154549-b0b1615b78e5/go.mod h1:jvVRKCrJTQWu0XVbaOlby/2lO20uSCHEMzzplHXte1o= github.com/philhofer/fwd v1.1.1/go.mod h1:gk3iGcWd9+svBvR0sR+KPcfE+RNWozjowpeBVG3ZVNU= @@ -725,20 +531,16 @@ github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINE github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/profile v1.2.1/go.mod h1:hJw3o1OdXxsrSjjVksARp5W95eeEaEfptyVZyv6JUPA= -github.com/pkg/sftp v1.10.1/go.mod h1:lYOWFsE0bwd1+KfKJaKeuokY15vzFx25BLbzYYoAxZI= github.com/pkg/sftp v1.13.1/go.mod h1:3HaPG6Dq1ILlpPZRO0HVMrsydcdLt6HRDccSgb87qRg= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/posener/complete v1.1.1/go.mod h1:em0nMJCgc9GFtwrmVmEMR/ZL6WyhyjMBndrE9hABlRI= github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= github.com/prometheus/client_golang v0.9.3-0.20190127221311-3c4408c8b829/go.mod h1:p2iRAGwDERtqlqzRXnrOVns+ignqQo//hLXqYxZYVNs= -github.com/prometheus/client_golang v0.9.3/go.mod h1:/TN21ttK/J9q6uSwhBd54HahCDft0ttaMvbicHlPoso= github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5FsnadC4Ky3P0J6CfImo= github.com/prometheus/client_golang v1.3.0/go.mod h1:hJaj2vgQTGQmVCsAACORcieXFeDPbaTKGT+JTgUa3og= github.com/prometheus/client_golang v1.4.0/go.mod h1:e9GMxYsXl05ICDXkRhurwBS4Q3OK1iX/F2sw+iXX5zU= github.com/prometheus/client_golang v1.7.1/go.mod h1:PY5Wy2awLA44sXw4AOSfFBetzPP4j5+D6mVACh+pe2M= -github.com/prometheus/client_golang v1.8.0/go.mod h1:O9VU6huf47PktckDQfMTX0Y8tY0/7TSWwj+ITvv0TnM= -github.com/prometheus/client_golang v1.11.0/go.mod h1:Z6t4BnS23TR94PD6BsDNk8yVqroYurpAkEiz0P2BEV0= github.com/prometheus/client_golang v1.14.0 h1:nJdhIvne2eSX/XRAFV9PcvFFRbrjbcTUj0VP62TMhnw= github.com/prometheus/client_golang v1.14.0/go.mod h1:8vpkKitgIVNcqrRBWh1C4TIUQgYNtG/XQE4E/Zae36Y= github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= @@ -749,57 +551,41 @@ github.com/prometheus/client_model v0.1.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6T github.com/prometheus/client_model v0.2.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= github.com/prometheus/client_model v0.3.0 h1:UBgGFHqYdG/TPFD1B1ogZywDqEkwp3fBMvqdiQ7Xew4= github.com/prometheus/client_model v0.3.0/go.mod h1:LDGWKZIo7rky3hgvBe+caln+Dr3dPggB5dvjtD7w9+w= -github.com/prometheus/common v0.0.0-20181113130724-41aa239b4cce/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro= github.com/prometheus/common v0.2.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= -github.com/prometheus/common v0.4.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= github.com/prometheus/common v0.7.0/go.mod h1:DjGbpBbp5NYNiECxcL/VnbXCCaQpKd3tt26CguLLsqA= github.com/prometheus/common v0.9.1/go.mod h1:yhUN8i9wzaXS3w1O07YhxHEBxD+W35wd8bs7vj7HSQ4= github.com/prometheus/common v0.10.0/go.mod h1:Tlit/dnDKsSWFlCLTWaA1cyBgKHSMdTB80sz/V91rCo= -github.com/prometheus/common v0.14.0/go.mod h1:U+gB1OBLb1lF3O42bTCL+FK18tX9Oar16Clt/msog/s= github.com/prometheus/common v0.15.0/go.mod h1:U+gB1OBLb1lF3O42bTCL+FK18tX9Oar16Clt/msog/s= -github.com/prometheus/common v0.26.0/go.mod h1:M7rCNAaPfAosfx8veZJCuw84e35h3Cfd9VFqTh1DIvc= -github.com/prometheus/common v0.29.0/go.mod h1:vu+V0TpY+O6vW9J44gczi3Ap/oXXR10b+M/gUGO4Hls= github.com/prometheus/common v0.39.0 h1:oOyhkDq05hPZKItWVBkJ6g6AtGxi+fy7F4JvUV8uhsI= github.com/prometheus/common v0.39.0/go.mod h1:6XBZ7lYdLCbkAVhwRsWTZn+IN5AB9F/NXd5w0BbEX0Y= github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= github.com/prometheus/procfs v0.0.0-20190117184657-bf6a532e95b1/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= -github.com/prometheus/procfs v0.0.0-20190507164030-5867b95ac084/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= github.com/prometheus/procfs v0.0.8/go.mod h1:7Qr8sr6344vo1JqZ6HhLceV9o3AJ1Ff+GxbHq6oeK9A= github.com/prometheus/procfs v0.1.3/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU= -github.com/prometheus/procfs v0.2.0/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU= github.com/prometheus/procfs v0.3.0/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU= -github.com/prometheus/procfs v0.6.0/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA= github.com/prometheus/procfs v0.8.0 h1:ODq8ZFEaYeCaZOJlZZdJA2AbQR98dSHSM1KW/You5mo= github.com/prometheus/procfs v0.8.0/go.mod h1:z7EfXMXOkbkqb9IINtpCn86r/to3BnA0uaxHdg830/4= -github.com/prometheus/tsdb v0.6.2-0.20190402121629-4f204dcbc150/go.mod h1:qhTCs0VvXwvX/y3TZrWD7rabWM+ijKTux40TwIPHuXU= -github.com/prometheus/tsdb v0.7.1/go.mod h1:qhTCs0VvXwvX/y3TZrWD7rabWM+ijKTux40TwIPHuXU= github.com/r2ishiguro/vrf v0.0.0-20180716233122-192de52975eb h1:3kW8n+FfBaUoqlHxCa6e90PXWpGCWWkdyTZ6F7c9m2I= github.com/r2ishiguro/vrf v0.0.0-20180716233122-192de52975eb/go.mod h1:2NzHJUkr/ERaPNQ2IUuNbB2jMTWYp2DxhcraWbzZj00= github.com/rakyll/statik v0.1.7 h1:OF3QCZUuyPxuGEP7B4ypUa7sB/iHtqOTDYZXGM8KOdQ= github.com/rakyll/statik v0.1.7/go.mod h1:AlZONWzMtEnMs7W4e/1LURLiI49pIMmp6V9Unghqrcc= github.com/rcrowley/go-metrics v0.0.0-20181016184325-3113b8401b8a/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4= -github.com/rcrowley/go-metrics v0.0.0-20200313005456-10cdbea86bc0/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4= github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475 h1:N/ElC8H3+5XpJzTSTfLsJV/mx9Q9g7kxmchpfZyxgzM= github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4= github.com/regen-network/cosmos-proto v0.3.1 h1:rV7iM4SSFAagvy8RiyhiACbWEGotmqzywPxOvwMdxcg= github.com/regen-network/cosmos-proto v0.3.1/go.mod h1:jO0sVX6a1B36nmE8C9xBFXpNwWejXC7QqCOnH3O0+YM= github.com/regen-network/protobuf v1.3.3-alpha.regen.1 h1:OHEc+q5iIAXpqiqFKeLpu5NwTIkVXUs48vFMwzqpqY4= github.com/regen-network/protobuf v1.3.3-alpha.regen.1/go.mod h1:2DjTFR1HhMQhiWC5sZ4OhQ3+NtdbZ6oBDKQwq5Ou+FI= -github.com/rjeczalik/notify v0.9.1/go.mod h1:rKwnCoCGeuQnwBtTSPL9Dad03Vh2n40ePRrjvIXnJho= github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg= github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= github.com/rogpeppe/go-internal v1.9.0 h1:73kH8U+JUqXU8lRuOHeVHaa/SZPifC7BkcraZVejAe8= -github.com/rs/cors v0.0.0-20160617231935-a62a804a8a00/go.mod h1:gFx+x8UowdsKA9AchylcLynDq+nNFfI8FkUZdN/jGCU= github.com/rs/cors v1.7.0/go.mod h1:gFx+x8UowdsKA9AchylcLynDq+nNFfI8FkUZdN/jGCU= github.com/rs/cors v1.8.2 h1:KCooALfAYGs415Cwu5ABvv9n9509fSiG5SQJn/AQo4U= github.com/rs/cors v1.8.2/go.mod h1:XyqrcTp5zjWr1wsJ8PIRZssZ8b/WMcMf71DJnit4EMU= -github.com/rs/xhandler v0.0.0-20160618193221-ed27b6fd6521/go.mod h1:RvLn4FgxWubrpZHtQLnOf6EwhN2hEMusxZOhcW9H3UQ= -github.com/rs/xid v1.2.1/go.mod h1:+uKXf+4Djp6Md1KODXJxgGQPKngRmWyn10oCKFzNHOQ= github.com/rs/xid v1.4.0/go.mod h1:trrq9SKmegXys3aeAKXMUTdJsYXVwGY3RLcfgqegfbg= -github.com/rs/zerolog v1.23.0/go.mod h1:6c7hFfxPOy7TacJc4Fcdi24/J0NKYGzjG8FWRI916Qo= github.com/rs/zerolog v1.28.0 h1:MirSo27VyNi7RJYP3078AA1+Cyzd2GB66qy3aUHvsWY= github.com/rs/zerolog v1.28.0/go.mod h1:NILgTygv/Uej1ra5XxGf82ZFSLk58MFGAUS2o6usyD0= github.com/russross/blackfriday v1.5.2/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g= @@ -807,20 +593,14 @@ github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQD github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= github.com/ryanuber/columnize v0.0.0-20160712163229-9b3edd62028f/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts= github.com/samuel/go-zookeeper v0.0.0-20190923202752-2cc03de413da/go.mod h1:gi+0XIa01GRL2eRQVjQkKGqKF3SF9vZR/HnPullcV2E= -github.com/sasha-s/go-deadlock v0.2.1-0.20190427202633-1595213edefa/go.mod h1:F73l+cr82YSh10GxyRI6qZiCgK64VaZjwesgfQ1/iLM= github.com/sasha-s/go-deadlock v0.3.1 h1:sqv7fDNShgjcaxkO0JNcOAlr8B9+cV5Ey/OB71efZx0= github.com/sasha-s/go-deadlock v0.3.1/go.mod h1:F73l+cr82YSh10GxyRI6qZiCgK64VaZjwesgfQ1/iLM= github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc= -github.com/seccomp/libseccomp-golang v0.9.1/go.mod h1:GbW5+tmTXfcxTToHLXlScSlAvWlF4P2Ca7zGrPiEpWo= -github.com/segmentio/fasthash v1.0.3/go.mod h1:waKX8l2N8yckOgmSsXJi7x1ZfdKZ4x7KRMzBtS3oedY= -github.com/shirou/gopsutil v2.20.5+incompatible/go.mod h1:5b4v6he4MtMOwMlS0TUMTu2PcXUg8+E1lC7eC3UO/RA= github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc= github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= -github.com/sirupsen/logrus v1.4.1/go.mod h1:ni0Sbl8bgC9z8RoU9G6nDWqqs/fq4eDPysMBDgk/93Q= github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= github.com/sirupsen/logrus v1.6.0/go.mod h1:7uNnSEd1DgxDLC74fIahvMZmmYsHGZGEOFrfsX/uA88= github.com/sirupsen/logrus v1.7.0/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= -github.com/sirupsen/logrus v1.8.1/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= github.com/sirupsen/logrus v1.9.0 h1:trlNQbNUG3OdDrDil03MCb1H2o9nJ1x4/5LYw7byDE0= github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc= github.com/smartystreets/goconvey v1.6.4/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA= @@ -832,17 +612,13 @@ github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasO github.com/spaolacci/murmur3 v1.1.0 h1:7c1g84S4BPRrfL5Xrdp6fOJ206sU9y293DDHaoy0bLI= github.com/spaolacci/murmur3 v1.1.0/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= github.com/spf13/afero v1.1.2/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B0CQ= -github.com/spf13/afero v1.6.0/go.mod h1:Ai8FlHk4v/PARR026UzYexafAt9roJ7LcLMAmO6Z93I= github.com/spf13/afero v1.9.2 h1:j49Hj62F0n+DaZ1dDCvhABaPNSGNkt32oRFxI33IEMw= github.com/spf13/afero v1.9.2/go.mod h1:iUV7ddyEEZPO5gA3zD4fJt6iStLlL+Lg4m2cihcDf8Y= github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= -github.com/spf13/cast v1.3.1/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= github.com/spf13/cast v1.5.0 h1:rj3WzYc11XZaIZMPKmwP96zkFEnnAmV8s6XbB2aY32w= github.com/spf13/cast v1.5.0/go.mod h1:SpXXQ5YoyJw6s3/6cMTQuxvgRl3PCJiyaX9p6b155UU= github.com/spf13/cobra v0.0.3/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ= github.com/spf13/cobra v0.0.5/go.mod h1:3K3wKZymM7VvHMDS9+Akkh4K60UwM26emMESw8tLCHU= -github.com/spf13/cobra v1.1.1/go.mod h1:WnodtKOvamDL/PwE2M4iKs8aMDBZ5Q5klgD3qfVJQMI= -github.com/spf13/cobra v1.2.1/go.mod h1:ExllRjgxM/piMAM+3tAZvg8fsklGAf3tPfi+i8t68Nk= github.com/spf13/cobra v1.6.1 h1:o94oiPyS4KD1mPy2fmcYYHHfCxLqYjJOhGsCHFZtEzA= github.com/spf13/cobra v1.6.1/go.mod h1:IOw/AERYS7UzyrGinqmz6HLUo219MORXGxhbaJUqzrY= github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo= @@ -853,20 +629,13 @@ github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnIn github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA= github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= github.com/spf13/viper v1.3.2/go.mod h1:ZiWeW+zYFKm7srdB9IoDzzZXaJaI5eL9QjNiN/DMA2s= -github.com/spf13/viper v1.7.0/go.mod h1:8WkrPz2fc9jxqZNCJI/76HCieCp4Q8HaLFoCha5qpdg= -github.com/spf13/viper v1.7.1/go.mod h1:8WkrPz2fc9jxqZNCJI/76HCieCp4Q8HaLFoCha5qpdg= -github.com/spf13/viper v1.8.1/go.mod h1:o0Pch8wJ9BVSWGQMbra6iw0oQ5oktSIBaujf1rJH9Ns= github.com/spf13/viper v1.14.0 h1:Rg7d3Lo706X9tHsJMUjdiwMpHB7W8WnSVOssIY+JElU= github.com/spf13/viper v1.14.0/go.mod h1:WT//axPky3FdvXHzGw33dNdXXXfFQqmEalje+egj8As= -github.com/status-im/keycard-go v0.0.0-20190316090335-8537d3370df4/go.mod h1:RZLeN1LMWmRsyYjvAu+I6Dm9QmlDaIIt+Y+4Kd7Tp+Q= -github.com/steakknife/bloomfilter v0.0.0-20180922174646-6819c0d2a570/go.mod h1:8OR4w3TdeIHIh1g6EMY5p0gVNOovcWC+1vpc7naMuAw= -github.com/steakknife/hamming v0.0.0-20180906055917-c99c65617cd3/go.mod h1:hpGUWaI9xL8pRQCTXQgocU38Qw1g0Us7n5PxxTwTCYU= github.com/streadway/amqp v0.0.0-20190404075320-75d898a42a94/go.mod h1:AZpEONHx3DKn8O/DFsRAY58/XVQiIPMTMB1SddzLXVw= github.com/streadway/amqp v0.0.0-20190827072141-edfb9018d271/go.mod h1:AZpEONHx3DKn8O/DFsRAY58/XVQiIPMTMB1SddzLXVw= github.com/streadway/handy v0.0.0-20190108123426-d5acb3125c2a/go.mod h1:qNTQ5P5JnDBl6z3cMAg/SywNDC5ABu5ApDIw6lUbRmI= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= -github.com/stretchr/objx v0.2.0/go.mod h1:qt09Ya8vawLte6SNmTgCsAVtYtaKzEcn8ATUoHMkEqE= github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= github.com/stretchr/objx v0.5.0 h1:1zr/of2m5FGMsad5YfcqgdqdWrIhu+EBEJRhR1U7z/c= github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= @@ -880,37 +649,24 @@ github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/ github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= github.com/stretchr/testify v1.8.1 h1:w7B6lhMri9wdJUVmEZPGGhZzrYTPvgJArz7wNPgYKsk= github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= -github.com/subosito/gotenv v1.2.0/go.mod h1:N0PQaV/YGNqwC0u51sEeR/aUtSLEXKX9iv69rRypqCw= github.com/subosito/gotenv v1.4.1 h1:jyEFiXpy21Wm81FBN71l9VoMMV8H8jG+qIK3GCpY6Qs= github.com/subosito/gotenv v1.4.1/go.mod h1:ayKnFf/c6rvx/2iiLrJUk1e6plDbT3edrFNGqEflhK0= -github.com/syndtr/gocapability v0.0.0-20200815063812-42c35b437635/go.mod h1:hkRG7XYTFWNJGYcbNJQlaLq0fg1yr4J4t/NcTQtrfww= -github.com/syndtr/goleveldb v1.0.1-0.20200815110645-5c35d600f0ca/go.mod h1:u2MKkTVTVJWe5D1rCvame8WqhBd88EuIwODJZ1VHCPM= github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7 h1:epCh84lMvA70Z7CTTCmYQn2CKbY8j86K7/FAIr141uY= github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7/go.mod h1:q4W45IWZaF22tdD+VEXcAWRA037jwmWEB5VWYORlTpc= -github.com/tecbot/gorocksdb v0.0.0-20191217155057-f0fad39f321c/go.mod h1:ahpPrc7HpcfEWDQRZEmnXMzHY03mLDYMCxeDzy46i+8= github.com/tendermint/btcd v0.1.1 h1:0VcxPfflS2zZ3RiOAHkBiFUcPvbtRj5O7zHmcJWHV7s= github.com/tendermint/btcd v0.1.1/go.mod h1:DC6/m53jtQzr/NFmMNEu0rxf18/ktVoVtMrnDD5pN+U= github.com/tendermint/crypto v0.0.0-20191022145703-50d29ede1e15 h1:hqAk8riJvK4RMWx1aInLzndwxKalgi5rTqgfXxOxbEI= github.com/tendermint/crypto v0.0.0-20191022145703-50d29ede1e15/go.mod h1:z4YtwM70uOnk8h0pjJYlj3zdYwi9l03By6iAIF5j/Pk= github.com/tendermint/go-amino v0.16.0 h1:GyhmgQKvqF82e2oZeuMSp9JTN0N09emoSZlb2lyGa2E= github.com/tendermint/go-amino v0.16.0/go.mod h1:TQU0M1i/ImAo+tYpZi73AU3V/dKeCoMC9Sphe2ZwGME= -github.com/tendermint/tendermint v0.34.14/go.mod h1:FrwVm3TvsVicI9Z7FlucHV6Znfd5KBc/Lpp69cCwtk0= github.com/tendermint/tendermint v0.34.24 h1:879MKKJWYYPJEMMKME+DWUTY4V9f/FBpnZDI82ky+4k= github.com/tendermint/tendermint v0.34.24/go.mod h1:rXVrl4OYzmIa1I91av3iLv2HS0fGSiucyW9J4aMTpKI= -github.com/tendermint/tm-db v0.6.4/go.mod h1:dptYhIpJ2M5kUuenLr+Yyf3zQOv1SgBZcl8/BmWlMBw= github.com/tendermint/tm-db v0.6.7 h1:fE00Cbl0jayAoqlExN6oyQJ7fR/ZtoVOmvPJ//+shu8= github.com/tendermint/tm-db v0.6.7/go.mod h1:byQDzFkZV1syXr/ReXS808NxA2xvyuuVgXOJ/088L6I= -github.com/tidwall/gjson v1.6.7/go.mod h1:zeFuBCIqD4sN/gmqBzZ4j7Jd6UcA2Fc56x7QFsv+8fI= -github.com/tidwall/match v1.0.3/go.mod h1:eRSPERbgtNPcGhD8UCthc6PmLEQXEWd3PRB5JTxsfmM= -github.com/tidwall/pretty v1.0.2/go.mod h1:XNkn88O1ChpSDQmQeStsy+sBenx6DDtFZJxhVysOjyk= -github.com/tidwall/sjson v1.1.4/go.mod h1:wXpKXu8CtDjKAZ+3DrKY5ROCorDFahq8l0tey/Lx1fg= github.com/tinylib/msgp v1.1.5/go.mod h1:eQsjooMTnV42mHu917E26IogZ2930nFyBQdofk10Udg= github.com/tmc/grpc-websocket-proxy v0.0.0-20170815181823-89b8d40f7ca8/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= -github.com/tmc/grpc-websocket-proxy v0.0.0-20190109142713-0ad062ec5ee5/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= github.com/ttacon/chalk v0.0.0-20160626202418-22c06c80ed31/go.mod h1:onvgF043R+lC5RZ8IT9rBXDaEDnpnw/Cl+HFiw+v/7Q= github.com/tv42/httpunix v0.0.0-20150427012821-b75d8614f926/go.mod h1:9ESjWnEqriFuLhtthL60Sar/7RFoluCcXsuvEwTV5KM= -github.com/tyler-smith/go-bip39 v1.0.1-0.20181017060643-dbb3b84ba2ef/go.mod h1:sJ5fKU0s6JVwZjjcUEX2zFOnvq0ASQ2K9Zr6cf67kNs= -github.com/tyler-smith/go-bip39 v1.0.2/go.mod h1:sJ5fKU0s6JVwZjjcUEX2zFOnvq0ASQ2K9Zr6cf67kNs= github.com/ugorji/go v1.1.7 h1:/68gy2h+1mWMrwZFeD1kQialdSzAb432dtpeJ42ovdo= github.com/ugorji/go v1.1.7/go.mod h1:kZn38zHttfInRq0xu/PH0az30d+z6vm202qpg1oXVMw= github.com/ugorji/go/codec v0.0.0-20181204163529-d75b2dcb6bc8/go.mod h1:VFNgLljTbGfSG7qAOspJ7OScBnGdDN/yBr0sguwnwf0= @@ -918,34 +674,21 @@ github.com/ugorji/go/codec v1.1.7 h1:2SvQaVZ1ouYrrKKwoSk2pzd4A9evlKJb9oTL+OaLUSs github.com/ugorji/go/codec v1.1.7/go.mod h1:Ax+UKWsSmolVDwsd+7N3ZtXu+yMGCf907BLYF3GoBXY= github.com/urfave/cli v1.20.0/go.mod h1:70zkFmudgCuE/ngEzBv17Jvp/497gISqfk5gWijbERA= github.com/urfave/cli v1.22.1/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0= -github.com/vishvananda/netlink v1.1.0/go.mod h1:cTgwzPIzzgDAYoQrMm0EdrjRUBkTqKYppBueQtXaqoE= -github.com/vishvananda/netns v0.0.0-20191106174202-0a2b9b5464df/go.mod h1:JP3t17pCcGlemwknint6hfoeCVQrEMVwxRLRjXpq+BU= -github.com/vmihailenco/msgpack/v5 v5.1.4/go.mod h1:C5gboKD0TJPqWDTVTtrQNfRbiBwHZGo8UTqP/9/XvLI= -github.com/vmihailenco/tagparser v0.1.2/go.mod h1:OeAg3pn3UbLjkWt+rN9oFYB6u/cQgqMEUPoW2WPyhdI= -github.com/wsddn/go-ecdh v0.0.0-20161211032359-48726bab9208/go.mod h1:IotVbo4F+mw0EzQ08zFqg7pK3FebNXpaMsRy2RT+Ees= github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU= github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1:aYKd//L2LvnjZzWKhF00oedf4jCCReLcmhLdhm1A27Q= github.com/yahoo/coname v0.0.0-20170609175141-84592ddf8673 h1:PSg2cEFd+9Ae/r5x5iO8cJ3VmTbZNQp6X8tHDmVJAbA= -github.com/ybbus/jsonrpc v2.1.2+incompatible/go.mod h1:XJrh1eMSzdIYFbM08flv0wp5G35eRniyeGut1z+LSiE= github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= -github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= -github.com/zondax/hid v0.9.0/go.mod h1:l5wttcP0jwtdLjqjMMWFVEE7d1zO0jvSPA9OPZxWpEM= github.com/zondax/hid v0.9.1 h1:gQe66rtmyZ8VeGFcOpbuH3r7erYtNEAezCAYu8LdkJo= github.com/zondax/hid v0.9.1/go.mod h1:l5wttcP0jwtdLjqjMMWFVEE7d1zO0jvSPA9OPZxWpEM= github.com/zondax/ledger-go v0.14.0 h1:dlMC7aO8Wss1CxBq2I96kZ69Nh1ligzbs8UWOtq/AsA= github.com/zondax/ledger-go v0.14.0/go.mod h1:fZ3Dqg6qcdXWSOJFKMG8GCTnD7slO/RL2feOQv8K320= -go.etcd.io/bbolt v1.3.2/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= go.etcd.io/bbolt v1.3.3/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= -go.etcd.io/bbolt v1.3.5/go.mod h1:G5EMThwa9y8QZGBClrRx5EY+Yw9kAhnjy3bSjsnlVTQ= go.etcd.io/bbolt v1.3.6 h1:/ecaJf0sk1l4l6V4awd65v2C3ILy7MSj+s/x1ADCIMU= go.etcd.io/bbolt v1.3.6/go.mod h1:qXsaaIqmgQH0T+OPdb99Bf+PKfBBQVAdyD6TY9G8XM4= go.etcd.io/etcd v0.0.0-20191023171146-3cf2f69b5738/go.mod h1:dnLIgRNXwCJa5e+c6mIZCrds/GIG4ncV9HhK5PX7jPg= -go.etcd.io/etcd/api/v3 v3.5.0/go.mod h1:cbVKeC6lCfl7j/8jBhAK6aIYO9XOjdptoxU/nLQcPvs= -go.etcd.io/etcd/client/pkg/v3 v3.5.0/go.mod h1:IJHfcCEKxYu1Os13ZdwCwIUTUVGYTSAM3YSwc9/Ac1g= -go.etcd.io/etcd/client/v2 v2.305.0/go.mod h1:h9puh54ZTgAKtEbut2oe9P4L/oqKCVB6xsXlzd7alYQ= go.opencensus.io v0.20.1/go.mod h1:6WKK9ahsWS3RSO+PY9ZHZUfv2irvY6gN279GOPZjmmk= go.opencensus.io v0.20.2/go.mod h1:6WKK9ahsWS3RSO+PY9ZHZUfv2irvY6gN279GOPZjmmk= go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU= @@ -954,46 +697,32 @@ go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= go.opencensus.io v0.22.3/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= go.opencensus.io v0.22.4/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= go.opencensus.io v0.22.5/go.mod h1:5pWMHQbX5EPX2/62yrJeAkowc+lfs/XD7Uxpq3pI6kk= -go.opencensus.io v0.23.0/go.mod h1:XItmlyltB5F7CS4xOC1DcqMoFqwtC6OG2xF7mCv7P7E= go.uber.org/atomic v1.3.2/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= go.uber.org/atomic v1.5.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ= -go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0= go.uber.org/multierr v1.3.0/go.mod h1:VgVr7evmIr6uPjLBxg28wmKNXyqE9akIJ5XnfpiKl+4= -go.uber.org/multierr v1.6.0/go.mod h1:cdWPpRnG4AhwMwsgIHip0KRBQjJy5kYEpYjJxpXp9iU= go.uber.org/tools v0.0.0-20190618225709-2cfd321de3ee/go.mod h1:vJERXedbb3MVM5f9Ejo0C68/HhF8uaILCdgjnY+goOA= go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= go.uber.org/zap v1.13.0/go.mod h1:zwrFLgMcdUuIBviXEYEH1YKNaOBnKXsx2IPda5bBwHM= -go.uber.org/zap v1.17.0/go.mod h1:MXVU+bhUf/A7Xi2HNOnopQOrmycQ5Ih87HtOu4q5SSo= -golang.org/x/crypto v0.0.0-20170930174604-9419663f5a44/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20181029021203-45a5f77698d3/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20181203042331-505ab145d0a9/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= -golang.org/x/crypto v0.0.0-20190426145343-a29dc8fdc734/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190701094942-4def268fd1a4/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20190820162420-60c769a6c586/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20190909091759-094676da4a83/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20191206172530-e9b2fee46413/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.0.0-20200115085410-6d4e4cb37c7d/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.0.0-20200510223506-06a226fb4e37/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200728195943-123391ffb6de/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.0.0-20200820211705-5c72a883971a/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.0.0-20201117144127-c1f2f97bffc9/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I= golang.org/x/crypto v0.0.0-20210421170649-83a5a9bb288b/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= -golang.org/x/crypto v0.0.0-20210817164053-32db794688a5/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.0.0-20211108221036-ceb1ce70b4fa/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.5.0 h1:U/0M97KRkSFvyD/3FSmdP5W5swImpNgle/EHFhOsQPE= golang.org/x/crypto v0.5.0/go.mod h1:NK/OQwhpMQP3MwtdjgLlYHnH9ebylxKWv3e0fK+mkQU= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= -golang.org/x/exp v0.0.0-20190731235908-ec7cb31e5a56/go.mod h1:JhuoJpWY28nO4Vef9tZUw9qufEGTyX1+7lmHxV5q5G4= golang.org/x/exp v0.0.0-20190829153037-c13cbed26979/go.mod h1:86+5VVa7VpoJ4kLfm080zCjGlMRFzhUhsZKEZO7MGek= golang.org/x/exp v0.0.0-20191030013958-a1ab85dbe136/go.mod h1:JXzH8nQsPlswgeRAPE3MuO9GYsAcnJvJ4vnMwN/5qkY= golang.org/x/exp v0.0.0-20191129062945-2f5052295587/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= @@ -1016,25 +745,19 @@ golang.org/x/lint v0.0.0-20191125180803-fdd1cda4f05f/go.mod h1:5qLYkcX4OjUUV8bRu golang.org/x/lint v0.0.0-20200130185559-910be7a94367/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= golang.org/x/lint v0.0.0-20200302205851-738671d3881b/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= golang.org/x/lint v0.0.0-20201208152925-83fdc39ff7b5/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= -golang.org/x/lint v0.0.0-20210508222113-6edffad5e616/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= golang.org/x/mobile v0.0.0-20190312151609-d3739f865fa6/go.mod h1:z+o9i4GpDbdi3rU15maQ/Ox0txvL9dWGYEHz965HBQE= golang.org/x/mobile v0.0.0-20190719004257-d2bd2a29d028/go.mod h1:E/iHnbuqvinMTCcRqshq8CkpyQDoeVncDDYHnLhea+o= -golang.org/x/mobile v0.0.0-20200801112145-973feb4309de/go.mod h1:skQtrUTUwhdJvXM/2KKJzY8pDgNr9I/FOMqDVRPBUS4= golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc= golang.org/x/mod v0.1.0/go.mod h1:0QHyrYULN0/3qlju5TqG8bIK38QM8yzMo5ekMj3DlcY= golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= golang.org/x/mod v0.1.1-0.20191107180719-034126e5016b/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= -golang.org/x/mod v0.1.1-0.20191209134235-331c550502dd/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.4.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.4.1/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.6.0 h1:b9gGHsz9/HhJ3HF5DHQytPpuwocVTChQJK3AvoLRD5I= -golang.org/x/net v0.0.0-20180719180050-a680a1efc54d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20181011144130-49bb7cea24b1/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20181023162649-9b4f9f5ad519/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20181201002055-351d144fa1fc/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -1052,7 +775,6 @@ golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLL golang.org/x/net v0.0.0-20190628185345-da137c7871d7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190724013045-ca1201d0de80/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190813141303-74dc4d7220e7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20190923162816-aa69164e4478/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20191209160850-c0dbc17a3553/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200114155413-6afb5195e5aa/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200202094626-16171245cfb2/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= @@ -1070,20 +792,12 @@ golang.org/x/net v0.0.0-20200625001655-4c5254603344/go.mod h1:/O7V0waA8r7cgGh81R golang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= golang.org/x/net v0.0.0-20200813134508-3edf25e44fcc/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= -golang.org/x/net v0.0.0-20200904194848-62affa334b73/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= golang.org/x/net v0.0.0-20201031054903-ff519b6c9102/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= -golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= golang.org/x/net v0.0.0-20201209123823-ac852fbbde11/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20201224014010-6772e930b67b/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= -golang.org/x/net v0.0.0-20210119194325-5f4716e94777/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= -golang.org/x/net v0.0.0-20210316092652-d523dce5a7f4/go.mod h1:RBQZq4jEuRlivfhVLdyRGr576XBO4/greRjx4P4O3yc= -golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= -golang.org/x/net v0.0.0-20210428140749-89ef3d95e781/go.mod h1:OJAsFXCWl8Ukc7SiCT/9KSuxbyM7479/AVlXFRxuMCk= -golang.org/x/net v0.0.0-20210525063256-abc453219eb5/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20210805182204-aaa1db679c0d/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/net v0.0.0-20210903162142-ad29c8ab022f/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.5.0 h1:GyT4nK/YDHSqa1c4753ouYCDajOYKTja9Xb/OHtgvSw= golang.org/x/net v0.5.0/go.mod h1:DivGGAXEgPSlEBzxGzZI+ZLohi+xUj054jfeKui00ws= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= @@ -1095,10 +809,6 @@ golang.org/x/oauth2 v0.0.0-20200902213428-5d25da1a8d43/go.mod h1:KelEdhl1UZF7XfJ golang.org/x/oauth2 v0.0.0-20201109201403-9fd604954f58/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= golang.org/x/oauth2 v0.0.0-20201208152858-08078c50e5b5/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= golang.org/x/oauth2 v0.0.0-20210218202405-ba52d332ba99/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20210220000619-9bb904979d93/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20210313182246-cd4f82c27b84/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20210402161424-2e8d93401602/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20210514164344-f6687ab2804c/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= @@ -1109,7 +819,6 @@ golang.org/x/sync v0.0.0-20200317015054-43a5402ce75a/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= @@ -1126,18 +835,14 @@ golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20190502145724-3ef323f4f1fd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190606203320-7fc4e5ec1444/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190626221950-04f50cda93cb/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190712062909-fae7ac547cb7/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190826190057-c7b8b68b1456/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190904154756-749cb33beabd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190924154521-2837fb4f24fe/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191001151750-bb3f8db39f24/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191005200804-aed5e4c7ecf9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191115151921-52ab43148777/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191120155948-bd437916bb0e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191220142924-d4481acd189f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -1162,43 +867,27 @@ golang.org/x/sys v0.0.0-20200615200032-f1bc736245b1/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20200625212154-ddb9806d33ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200803210538-64077c9b5642/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200814200057-3d37ad5750ed/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200824131525-c12d262b63d8/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200905004654-be1d3432aa8f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200909081042-eff7692f9009/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200923182605-d9f96fdee20d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20201015000850-e3ed0017c211/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201201145000-ef89a241ccb3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210104204734-6f8348627aad/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210112080510-489259a85091/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210220050731-9a76102bfb43/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210225134936-a50acf3fe073/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210305230114-8fe3ee5dd75b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210315160823-c6e025ad8005/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210320140829-1e4c9ba3b0c4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210403161142-5e06dd20ab57/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210423185535-09eb48e85fd7/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210426230700-d19ff857e887/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210603081109-ebe580a85c40/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210616094352-59db8d763f22/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210809222454-d867a43fc93e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210819135213-f52c844e1c1c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210903071746-97244b99971b/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210927094055-39ccf1dd6fa6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220405052023-b1e9470b6e64/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220908164124-27713097b956/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.4.0 h1:Zr2JFtRQNX3BCZ8YtxRE9hNJYC8J6I1MVbMg6owUp18= golang.org/x/sys v0.4.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.4.0 h1:O7UWfv5+A2qiuulQk30kVinPoMtoIPeVaKLEgLpVkvg= golang.org/x/term v0.4.0/go.mod h1:9P2UbLfCdcvo3p/nzKvsmas4TnlujnuoV9hGgYzW1lQ= @@ -1208,7 +897,6 @@ golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3 golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.4/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.6.0 h1:3XmdazWV+ubf7QgHSTWeykHOci5oeekaGJBLkrkaw4k= golang.org/x/text v0.6.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= @@ -1233,7 +921,6 @@ golang.org/x/tools v0.0.0-20190911174233-4f2ddba30aff/go.mod h1:b+2E5dAYhXwXZwtn golang.org/x/tools v0.0.0-20191012152004-8de300cfc20a/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191029041327-9cc4af7d6b2c/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191029190741-b9c20aec41a5/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191112195655-aa38f8e97acc/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191113191852-77e3bb0ad9e7/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191115202509-3a792d9c32b2/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= @@ -1242,7 +929,6 @@ golang.org/x/tools v0.0.0-20191130070609-6e064ea0cf2d/go.mod h1:b+2E5dAYhXwXZwtn golang.org/x/tools v0.0.0-20191216173652-a0e659d51361/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20191227053925-7b8e75db28f4/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20200103221440-774c71fcf114/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200117012304-6edc0a871e69/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20200117161641-43d50277825c/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20200122220014-bf1340f18c4a/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20200130002326-2f3ba24bd6e7/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= @@ -1257,10 +943,8 @@ golang.org/x/tools v0.0.0-20200331025713-a30bf2db82d4/go.mod h1:Sl4aGygMT6LrqrWc golang.org/x/tools v0.0.0-20200501065659-ab2804fb9c9d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200512131952-2bc93b1c0c88/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200515010526-7d3b6ebf133d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200522201501-cb1345f3a375/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200618134242-20370b0cb4b2/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200717024301-6ddee64345a6/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= golang.org/x/tools v0.0.0-20200729194436-6467de6f59a7/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= golang.org/x/tools v0.0.0-20200804011535-6c149bb5ef0d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= golang.org/x/tools v0.0.0-20200825202427-b303f430e36d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= @@ -1274,9 +958,6 @@ golang.org/x/tools v0.0.0-20210105154028-b0ab187a4818/go.mod h1:emZCQorbCU4vsT4f golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20210108195828-e2f9c7f1fc8e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.1.0/go.mod h1:xkSsbof2nBLbhDlRMhhhyNLN/zl3eTqcnHD5viDpcZ0= -golang.org/x/tools v0.1.1/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= -golang.org/x/tools v0.1.2/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= -golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.2.0 h1:G6AHpWxTMGY1KyEYoAQ5WTtIekUUvDNjan3ugu60JvE= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= @@ -1303,9 +984,6 @@ google.golang.org/api v0.30.0/go.mod h1:QGmEvQ87FHZNiUVJkT14jQNYJ4ZJjdRF23ZXz513 google.golang.org/api v0.35.0/go.mod h1:/XrVsuzM0rZmrsbjJutiuftIzeuTQcEeaYcSk/mQ1dg= google.golang.org/api v0.36.0/go.mod h1:+z5ficQTmoYpPn8LCUNVpK5I7hwkpjbcgqA7I34qYtE= google.golang.org/api v0.40.0/go.mod h1:fYKFpnQN0DsDSKRVRcQSDQNtqWPfM9i+zNPxepjRCQ8= -google.golang.org/api v0.41.0/go.mod h1:RkxM5lITDfTzmyKFPt+wGrCJbVfniCr2ool8kTBzRTU= -google.golang.org/api v0.43.0/go.mod h1:nQsDGjRXMo4lvh5hP0TKqF244gqhGcr/YSIykhUk/94= -google.golang.org/api v0.44.0/go.mod h1:EBOGZqzyhtvMDoxwS97ctnh0zUmYY6CxqXsc1AvkYD8= google.golang.org/appengine v1.2.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= @@ -1349,20 +1027,12 @@ google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6D google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200904004341-0bd0a958aa1d/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20201109203340-2640f1f9cdfb/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20201119123407-9b1e624d6bc4/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20201201144952-b05cb90ed32e/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20201210142538-e3217bee35cc/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20201214200347-8c77b98c765d/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20210108203827-ffc7fda8c3d7/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20210126160654-44e461bb6506/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210222152913-aa3ee6e6a81c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20210226172003-ab064af71705/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210303154014-9728d6b83eeb/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210310155132-4ce2db91004e/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210319143718-93e7006c17a6/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210402141018-6c239bbf2bb1/go.mod h1:9lPAdzaEmUacj36I+k7YKbEc5CXzPIeORRgDAUOu28A= -google.golang.org/genproto v0.0.0-20210602131652-f16073e35f0c/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0= -google.golang.org/genproto v0.0.0-20210828152312-66f60bf46e71/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= google.golang.org/genproto v0.0.0-20221024183307-1bc688fe9f3e h1:S9GbmC1iCgvbLyAokVCwiO6tVIrU9Y7c5oMx1V/ki/Y= google.golang.org/genproto v0.0.0-20221024183307-1bc688fe9f3e/go.mod h1:9qHF0xnpdSfF6knlcsnpzUu5y+rpwgbvsyGAZPBMg4s= google.golang.org/grpc v1.33.2 h1:EQyQC3sa8M+p6Ulc8yy9SWSS2GVwyRc83gAbG8lrl4o= @@ -1377,10 +1047,8 @@ google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2 google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= google.golang.org/protobuf v1.24.0/go.mod h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGjtUeSXeh4= google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c= -google.golang.org/protobuf v1.25.1-0.20200805231151-a709e31e5d12/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c= google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= -google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= google.golang.org/protobuf v1.28.2-0.20220831092852-f930b1dc76e8 h1:KR8+MyP7/qOlV+8Af01LtjL04bu7on42eVsxT4EyBQk= google.golang.org/protobuf v1.28.2-0.20220831092852-f930b1dc76e8/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= @@ -1393,16 +1061,11 @@ gopkg.in/cheggaaa/pb.v1 v1.0.25/go.mod h1:V/YB90LKu/1FcN3WVnfiiE5oMCibMjukxqG/qS gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= gopkg.in/gcfg.v1 v1.2.3/go.mod h1:yesOnuUOFQAhST5vPY4nbZsb/huCgGGXlipJsBn0b3o= -gopkg.in/ini.v1 v1.51.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= -gopkg.in/ini.v1 v1.62.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= gopkg.in/ini.v1 v1.67.0 h1:Dgnx+6+nfE+IfzjUEISNeydPJh9AXNNsWbGP9KzCsOA= gopkg.in/ini.v1 v1.67.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= -gopkg.in/natefinch/npipe.v2 v2.0.0-20160621034901-c1b8fa8bdcce/go.mod h1:5AcXVHNjg+BDxry382+8OKon8SEWiKktQR07RKPsv1c= -gopkg.in/olebedev/go-duktape.v3 v3.0.0-20200619000410-60c24ae608a6/go.mod h1:uAJfkITjFhyEEuUfm7bsmCZRbW5WRq8s9EY8HZ6hCns= gopkg.in/resty.v1 v1.12.0/go.mod h1:mDo4pnntr5jdWRML875a/NmxYqAlA73dVijT2AXvQQo= gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ= gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw= -gopkg.in/urfave/cli.v1 v1.20.0/go.mod h1:vuBzUtMdQeixQj8LVd+/98pzhxNGQoyuPBlsXHOQNO0= gopkg.in/warnings.v0 v0.1.2/go.mod h1:jksf8JmL6Qr/oQM2OXTHunEvvTAsrWBLb6OOjuVWRNI= gopkg.in/yaml.v2 v2.0.0-20170812160011-eb3733d160e7/go.mod h1:JAlM8MvJe8wmxCU4Bli9HhUf9+ttbYbLASfIpnQbh74= gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= @@ -1418,7 +1081,6 @@ gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -gotest.tools v2.2.0+incompatible/go.mod h1:DsYFclhRJ6vuDpmuTbkuFWG+y2sxOXAzmJt81HFBacw= honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= From 8489a43c7a02bdefbc1e7c4d07df8b5acb25a3e7 Mon Sep 17 00:00:00 2001 From: zemyblue Date: Fri, 3 Feb 2023 14:23:10 +0900 Subject: [PATCH 15/17] chore: feedback reviews --- Makefile | 6 +++--- appplus/app.go | 3 +-- appplus/app_test.go | 2 +- proto/lbm/wasm/v1/genesis.proto | 2 +- proto/lbm/wasm/v1/query.proto | 1 + 5 files changed, 7 insertions(+), 7 deletions(-) diff --git a/Makefile b/Makefile index 5e9d3d4f7c..469be81c48 100644 --- a/Makefile +++ b/Makefile @@ -82,8 +82,7 @@ build: go.sum ifeq ($(OS),Windows_NT) exit 1 else - go build -mod=readonly $(BUILD_FLAGS) -o build/wasmd ./cmd/wasmd - go build -mod=readonly $(BUILD_FLAGS) -o build/wasmplusd ./cmd/wasmplusd + go build -mod=readonly $(BUILD_FLAGS) -o build/wasmd ./cmd/wasmplusd endif build-contract-tests-hooks: @@ -94,7 +93,8 @@ else endif install: go.sum - go install -mod=readonly $(BUILD_FLAGS) ./cmd/wasmd + go install -mod=readonly $(BUILD_FLAGS) ./cmd/wasmplusd + mv $(BINDIR)/wasmplusd $(BINDIR)/wasmd ######################################## ### Tools & dependencies diff --git a/appplus/app.go b/appplus/app.go index 74cb218560..e96a30ae5e 100644 --- a/appplus/app.go +++ b/appplus/app.go @@ -117,7 +117,7 @@ import ( wasmplustypes "github.com/line/wasmd/x/wasmplus/types" ) -const appName = "WasmApp" +const appName = "WasmPlusApp" // We pull these out, so we can set them with LDFLAGS in the Makefile var ( @@ -741,7 +741,6 @@ func NewWasmApp( app.ScopedWasmKeeper = scopedWasmKeeper app.ScopedICAHostKeeper = scopedICAHostKeeper app.ScopedICAControllerKeeper = scopedICAControllerKeeper - //app.ScopedInterTxKeeper = scopedInterTxKeeper if loadLatest { if err := app.LoadLatestVersion(); err != nil { diff --git a/appplus/app_test.go b/appplus/app_test.go index 3e56b32d9d..c69a92bd77 100644 --- a/appplus/app_test.go +++ b/appplus/app_test.go @@ -51,7 +51,6 @@ func TestBlockedAddrs(t *testing.T) { blockedAddrs := gapp.BlockedAddrs() for acc := range maccPerms { - //for acc := range gapp.BlockedAddrs() { t.Run(acc, func(t *testing.T) { addr := gapp.AccountKeeper.GetModuleAddress(acc) if blockedAddrs[addr.String()] { @@ -69,6 +68,7 @@ type WrongWasmAppOptions struct{} // Get implements AppOptions func (ao WrongWasmAppOptions) Get(o string) interface{} { if o == server.FlagTrace { + // make fail case. return "FALse" } return nil diff --git a/proto/lbm/wasm/v1/genesis.proto b/proto/lbm/wasm/v1/genesis.proto index b6712e065d..1bf1f31153 100644 --- a/proto/lbm/wasm/v1/genesis.proto +++ b/proto/lbm/wasm/v1/genesis.proto @@ -26,5 +26,5 @@ message GenesisState { ]; // InactiveContractAddresses is a list of contract address that set inactive - repeated string inactive_contract_addresses = 6 [(gogoproto.jsontag) = "inactive_contract_address, omitempty"]; + repeated string inactive_contract_addresses = 6 [(gogoproto.jsontag) = "inactive_contract_address,omitempty"]; } diff --git a/proto/lbm/wasm/v1/query.proto b/proto/lbm/wasm/v1/query.proto index 48f0cea6e5..bc5ed2bb9c 100644 --- a/proto/lbm/wasm/v1/query.proto +++ b/proto/lbm/wasm/v1/query.proto @@ -16,6 +16,7 @@ service Query { option (google.api.http).get = "/lbm/wasm/v1/inactive_contracts"; }; + // InactiveContract check it the contract is inactive state or not rpc InactiveContract(QueryInactiveContractRequest) returns (QueryInactiveContractResponse) { option (google.api.http).get = "/lbm/wasm/v1/inactive_contracts/{address}"; } From f9954a8e59b296420be68bee0faf462ef05f3c33 Mon Sep 17 00:00:00 2001 From: zemyblue Date: Fri, 3 Feb 2023 16:38:22 +0900 Subject: [PATCH 16/17] doc: update proto changes --- docs/proto/proto-docs.md | 2 +- x/wasmplus/types/genesis.pb.go | 55 +++++++++++++++++----------------- x/wasmplus/types/query.pb.go | 2 ++ 3 files changed, 30 insertions(+), 29 deletions(-) diff --git a/docs/proto/proto-docs.md b/docs/proto/proto-docs.md index 895122161d..8c335e87cc 100644 --- a/docs/proto/proto-docs.md +++ b/docs/proto/proto-docs.md @@ -1522,7 +1522,7 @@ Query defines the gRPC querier service. | Method Name | Request Type | Response Type | Description | HTTP Verb | Endpoint | | ----------- | ------------ | ------------- | ------------| ------- | -------- | | `InactiveContracts` | [QueryInactiveContractsRequest](#lbm.wasm.v1.QueryInactiveContractsRequest) | [QueryInactiveContractsResponse](#lbm.wasm.v1.QueryInactiveContractsResponse) | InactiveContracts queries all inactive contracts | GET|/lbm/wasm/v1/inactive_contracts| -| `InactiveContract` | [QueryInactiveContractRequest](#lbm.wasm.v1.QueryInactiveContractRequest) | [QueryInactiveContractResponse](#lbm.wasm.v1.QueryInactiveContractResponse) | | GET|/lbm/wasm/v1/inactive_contracts/{address}| +| `InactiveContract` | [QueryInactiveContractRequest](#lbm.wasm.v1.QueryInactiveContractRequest) | [QueryInactiveContractResponse](#lbm.wasm.v1.QueryInactiveContractResponse) | InactiveContract check it the contract is inactive state or not | GET|/lbm/wasm/v1/inactive_contracts/{address}| diff --git a/x/wasmplus/types/genesis.pb.go b/x/wasmplus/types/genesis.pb.go index 3dfe136c35..ac95ec1614 100644 --- a/x/wasmplus/types/genesis.pb.go +++ b/x/wasmplus/types/genesis.pb.go @@ -32,7 +32,7 @@ type GenesisState struct { Sequences []types.Sequence `protobuf:"bytes,4,rep,name=sequences,proto3" json:"sequences,omitempty"` GenMsgs []types.GenesisState_GenMsgs `protobuf:"bytes,5,rep,name=gen_msgs,json=genMsgs,proto3" json:"gen_msgs,omitempty"` // InactiveContractAddresses is a list of contract address that set inactive - InactiveContractAddresses []string `protobuf:"bytes,6,rep,name=inactive_contract_addresses,json=inactiveContractAddresses,proto3" json:"inactive_contract_address, omitempty"` + InactiveContractAddresses []string `protobuf:"bytes,6,rep,name=inactive_contract_addresses,json=inactiveContractAddresses,proto3" json:"inactive_contract_address,omitempty"` } func (m *GenesisState) Reset() { *m = GenesisState{} } @@ -117,33 +117,32 @@ func init() { func init() { proto.RegisterFile("lbm/wasm/v1/genesis.proto", fileDescriptor_3308f670fed712dc) } var fileDescriptor_3308f670fed712dc = []byte{ - // 401 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x74, 0x92, 0xcf, 0x8b, 0xda, 0x40, - 0x14, 0xc7, 0x93, 0xfa, 0xa3, 0x35, 0x16, 0x0a, 0x69, 0x69, 0x63, 0x2c, 0x31, 0x94, 0x22, 0x39, - 0x48, 0x82, 0x16, 0x7a, 0x6e, 0x53, 0x4a, 0x4f, 0x85, 0x45, 0xd9, 0xcb, 0xc2, 0x22, 0xf9, 0x31, - 0x8c, 0x81, 0x4c, 0x26, 0x9b, 0x37, 0xba, 0xeb, 0x7d, 0xff, 0x80, 0xfd, 0xb3, 0x3c, 0x7a, 0xdc, - 0x93, 0x2c, 0x7a, 0xf3, 0xaf, 0x58, 0x32, 0xc9, 0x68, 0x16, 0xd7, 0x53, 0x92, 0xf7, 0x3e, 0xdf, - 0xcf, 0xcb, 0x0c, 0x4f, 0xe9, 0xc4, 0x3e, 0x71, 0x6e, 0x3d, 0x20, 0xce, 0x62, 0xe8, 0x60, 0x94, - 0x20, 0x88, 0xc0, 0x4e, 0x33, 0xca, 0xa8, 0xda, 0x8e, 0x7d, 0x62, 0xe7, 0x2d, 0x7b, 0x31, 0xd4, - 0x3f, 0x61, 0x8a, 0x29, 0xaf, 0x3b, 0xf9, 0x5b, 0x81, 0xe8, 0x5f, 0x03, 0x0a, 0x84, 0xa7, 0x85, - 0x82, 0x2d, 0x53, 0x54, 0x0a, 0x74, 0xe3, 0xa4, 0xfb, 0x62, 0xc0, 0xb7, 0xfb, 0xba, 0xf2, 0xfe, - 0x5f, 0x51, 0x99, 0x30, 0x8f, 0x21, 0xf5, 0xa7, 0xd2, 0x4c, 0xbd, 0xcc, 0x23, 0xa0, 0xc9, 0xa6, - 0x6c, 0xb5, 0x47, 0x9a, 0x2d, 0x0c, 0xe2, 0x3f, 0xec, 0x0b, 0xde, 0x77, 0xeb, 0xab, 0x4d, 0x4f, - 0x1a, 0x97, 0xb4, 0xfa, 0x57, 0x69, 0x04, 0x34, 0x44, 0xa0, 0xbd, 0x31, 0x6b, 0x56, 0x7b, 0xf4, - 0xf9, 0x34, 0xf6, 0x87, 0x86, 0xc8, 0xfd, 0x92, 0x87, 0xf6, 0x9b, 0xde, 0x07, 0x0e, 0x0f, 0x28, - 0x89, 0x18, 0x22, 0x29, 0x5b, 0x8e, 0x8b, 0xb4, 0x7a, 0xa9, 0xb4, 0x02, 0x9a, 0xb0, 0xcc, 0x0b, - 0x18, 0x68, 0x35, 0xae, 0xd2, 0x5f, 0x53, 0x15, 0x88, 0xdb, 0x2d, 0x75, 0x1f, 0x0f, 0xa1, 0x8a, - 0xf2, 0x68, 0xca, 0xb5, 0x80, 0x6e, 0xe6, 0x28, 0x09, 0x10, 0x68, 0xf5, 0x73, 0xda, 0x49, 0x89, - 0x1c, 0xb5, 0x87, 0x50, 0x55, 0x7b, 0x28, 0xaa, 0xd7, 0xca, 0x3b, 0x8c, 0x92, 0x29, 0x01, 0x0c, - 0x5a, 0x83, 0x5b, 0xfb, 0xa7, 0xd6, 0xea, 0xf5, 0xe6, 0x1f, 0xff, 0x01, 0x83, 0xab, 0x97, 0x13, - 0x54, 0x91, 0xaf, 0x0c, 0x78, 0x8b, 0x0b, 0x48, 0x9d, 0x29, 0xdd, 0x28, 0xf1, 0x02, 0x16, 0x2d, - 0xd0, 0x54, 0x9c, 0x65, 0xea, 0x85, 0x61, 0x86, 0x00, 0x10, 0x68, 0x4d, 0xb3, 0x66, 0xb5, 0x5c, - 0x6b, 0xbf, 0xe9, 0x7d, 0x3f, 0x8b, 0x0d, 0xcc, 0xa3, 0xb7, 0x23, 0x28, 0x71, 0x7d, 0xbf, 0x85, - 0xca, 0xfd, 0xb5, 0xda, 0x1a, 0xf2, 0x7a, 0x6b, 0xc8, 0x4f, 0x5b, 0x43, 0x7e, 0xd8, 0x19, 0xd2, - 0x7a, 0x67, 0x48, 0x8f, 0x3b, 0x43, 0xba, 0xea, 0xe3, 0x88, 0xcd, 0xe6, 0xbe, 0x1d, 0x50, 0xe2, - 0xc4, 0x51, 0x82, 0xf8, 0x1e, 0x85, 0xce, 0x1d, 0x7f, 0xa6, 0xf1, 0x1c, 0x8a, 0x75, 0xf3, 0x9b, - 0x7c, 0x9f, 0x7e, 0x3c, 0x07, 0x00, 0x00, 0xff, 0xff, 0xf8, 0xb5, 0x23, 0x84, 0xcd, 0x02, 0x00, - 0x00, + // 399 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x74, 0x92, 0xcf, 0x4b, 0xe3, 0x40, + 0x14, 0xc7, 0x93, 0xed, 0x8f, 0xdd, 0xa6, 0x0b, 0x0b, 0xd9, 0x65, 0x37, 0x4d, 0x97, 0xb4, 0x28, + 0xd4, 0x1e, 0x24, 0xa1, 0x15, 0x3c, 0x6b, 0x44, 0x3c, 0x09, 0xd2, 0xe2, 0x45, 0x90, 0x92, 0x1f, + 0xc3, 0x18, 0xc8, 0x64, 0x62, 0xde, 0xb4, 0xda, 0xb3, 0xff, 0x80, 0x7f, 0x56, 0x8f, 0x3d, 0x7a, + 0x2a, 0xd2, 0xde, 0xfa, 0x57, 0x48, 0x26, 0x99, 0x36, 0x52, 0x7b, 0x4a, 0xf2, 0xde, 0xe7, 0xfb, + 0x79, 0x99, 0xe1, 0x29, 0x8d, 0xd0, 0x25, 0xd6, 0x93, 0x03, 0xc4, 0x9a, 0xf4, 0x2c, 0x8c, 0x22, + 0x04, 0x01, 0x98, 0x71, 0x42, 0x19, 0x55, 0xeb, 0xa1, 0x4b, 0xcc, 0xb4, 0x65, 0x4e, 0x7a, 0xfa, + 0x1f, 0x4c, 0x31, 0xe5, 0x75, 0x2b, 0x7d, 0xcb, 0x10, 0xfd, 0xbf, 0x47, 0x81, 0xf0, 0xb4, 0x50, + 0xb0, 0x69, 0x8c, 0x72, 0x81, 0x6e, 0xec, 0x74, 0x3f, 0x0d, 0x38, 0x78, 0x29, 0x2b, 0x3f, 0xaf, + 0xb2, 0xca, 0x90, 0x39, 0x0c, 0xa9, 0xa7, 0x4a, 0x35, 0x76, 0x12, 0x87, 0x80, 0x26, 0xb7, 0xe5, + 0x6e, 0xbd, 0xaf, 0x99, 0xc2, 0x20, 0xfe, 0xc3, 0xbc, 0xe1, 0x7d, 0xbb, 0x3c, 0x5b, 0xb4, 0xa4, + 0x41, 0x4e, 0xab, 0x97, 0x4a, 0xc5, 0xa3, 0x3e, 0x02, 0xed, 0x5b, 0xbb, 0xd4, 0xad, 0xf7, 0xff, + 0xee, 0xc6, 0x2e, 0xa8, 0x8f, 0xec, 0x7f, 0x69, 0x68, 0xbd, 0x68, 0xfd, 0xe2, 0xf0, 0x31, 0x25, + 0x01, 0x43, 0x24, 0x66, 0xd3, 0x41, 0x96, 0x56, 0x6f, 0x95, 0x9a, 0x47, 0x23, 0x96, 0x38, 0x1e, + 0x03, 0xad, 0xc4, 0x55, 0xfa, 0x57, 0xaa, 0x0c, 0xb1, 0x9b, 0xb9, 0xee, 0xf7, 0x26, 0x54, 0x50, + 0x6e, 0x4d, 0xa9, 0x16, 0xd0, 0xe3, 0x18, 0x45, 0x1e, 0x02, 0xad, 0xbc, 0x4f, 0x3b, 0xcc, 0x91, + 0xad, 0x76, 0x13, 0x2a, 0x6a, 0x37, 0x45, 0xf5, 0x5e, 0xf9, 0x81, 0x51, 0x34, 0x22, 0x80, 0x41, + 0xab, 0x70, 0x6b, 0x67, 0xd7, 0x5a, 0xbc, 0xde, 0xf4, 0xe3, 0x1a, 0x30, 0xd8, 0x7a, 0x3e, 0x41, + 0x15, 0xf9, 0xc2, 0x80, 0xef, 0x38, 0x83, 0x54, 0xac, 0x34, 0x83, 0xc8, 0xf1, 0x58, 0x30, 0x41, + 0x23, 0x71, 0x96, 0x91, 0xe3, 0xfb, 0x09, 0x02, 0x40, 0xa0, 0x55, 0xdb, 0xa5, 0x6e, 0xcd, 0x3e, + 0x5a, 0x2f, 0x5a, 0x87, 0x7b, 0xb1, 0x82, 0xb6, 0x21, 0x20, 0x71, 0x7b, 0xe7, 0xc2, 0x64, 0x9f, + 0xcd, 0x96, 0x86, 0x3c, 0x5f, 0x1a, 0xf2, 0xfb, 0xd2, 0x90, 0x5f, 0x57, 0x86, 0x34, 0x5f, 0x19, + 0xd2, 0xdb, 0xca, 0x90, 0xee, 0x3a, 0x38, 0x60, 0x0f, 0x63, 0xd7, 0xf4, 0x28, 0xb1, 0xc2, 0x20, + 0x42, 0x7c, 0x8d, 0x7c, 0xeb, 0x99, 0x3f, 0xe3, 0x70, 0x0c, 0xd9, 0xb6, 0xb9, 0x55, 0xbe, 0x4e, + 0x27, 0x1f, 0x01, 0x00, 0x00, 0xff, 0xff, 0x90, 0xa2, 0x83, 0x75, 0xcc, 0x02, 0x00, 0x00, } func (m *GenesisState) Marshal() (dAtA []byte, err error) { diff --git a/x/wasmplus/types/query.pb.go b/x/wasmplus/types/query.pb.go index 7c347d947b..d2673d2dc1 100644 --- a/x/wasmplus/types/query.pb.go +++ b/x/wasmplus/types/query.pb.go @@ -243,6 +243,7 @@ const _ = grpc.SupportPackageIsVersion4 type QueryClient interface { // InactiveContracts queries all inactive contracts InactiveContracts(ctx context.Context, in *QueryInactiveContractsRequest, opts ...grpc.CallOption) (*QueryInactiveContractsResponse, error) + // InactiveContract check it the contract is inactive state or not InactiveContract(ctx context.Context, in *QueryInactiveContractRequest, opts ...grpc.CallOption) (*QueryInactiveContractResponse, error) } @@ -276,6 +277,7 @@ func (c *queryClient) InactiveContract(ctx context.Context, in *QueryInactiveCon type QueryServer interface { // InactiveContracts queries all inactive contracts InactiveContracts(context.Context, *QueryInactiveContractsRequest) (*QueryInactiveContractsResponse, error) + // InactiveContract check it the contract is inactive state or not InactiveContract(context.Context, *QueryInactiveContractRequest) (*QueryInactiveContractResponse, error) } From 0e91bf7fad4700096a33ee2b61eb8176d303be58 Mon Sep 17 00:00:00 2001 From: zemyblue Date: Mon, 6 Feb 2023 13:37:26 +0900 Subject: [PATCH 17/17] chore: apply review feedback - move all function of `wasmplus/keeper/keeper_extension.go` to `wasmplus/keeper/keeper.go` - remove no need files (keeper_extension.go, metrics.go) --- x/wasmplus/keeper/keeper.go | 65 +++++++++++- x/wasmplus/keeper/keeper_extension.go | 68 ------------ x/wasmplus/keeper/metrics.go | 145 -------------------------- 3 files changed, 62 insertions(+), 216 deletions(-) delete mode 100644 x/wasmplus/keeper/keeper_extension.go delete mode 100644 x/wasmplus/keeper/metrics.go diff --git a/x/wasmplus/keeper/keeper.go b/x/wasmplus/keeper/keeper.go index 92e29a3a78..d023441118 100644 --- a/x/wasmplus/keeper/keeper.go +++ b/x/wasmplus/keeper/keeper.go @@ -5,6 +5,7 @@ import ( "github.com/line/lbm-sdk/codec" sdk "github.com/line/lbm-sdk/types" + sdkerrors "github.com/line/lbm-sdk/types/errors" bankpluskeeper "github.com/line/lbm-sdk/x/bankplus/keeper" paramtypes "github.com/line/lbm-sdk/x/params/types" "github.com/line/ostracon/libs/log" @@ -18,7 +19,7 @@ type Keeper struct { wasmkeeper.Keeper cdc codec.Codec storeKey sdk.StoreKey - metrics *Metrics + metrics *wasmkeeper.Metrics bank bankpluskeeper.Keeper } @@ -48,9 +49,8 @@ func NewKeeper( result := Keeper{ cdc: cdc, storeKey: storeKey, - metrics: NopMetrics(), + metrics: wasmkeeper.NopMetrics(), bank: bankPlusKeeper, - //paramSpace: paramSpace, } result.Keeper = wasmkeeper.NewKeeper( cdc, @@ -89,3 +89,62 @@ func (Keeper) Logger(ctx sdk.Context) log.Logger { func ModuleLogger(ctx sdk.Context) log.Logger { return ctx.Logger().With("module", fmt.Sprintf("x/%s", types.ModuleName)) } + +func (k Keeper) IsInactiveContract(ctx sdk.Context, contractAddress sdk.AccAddress) bool { + store := ctx.KVStore(k.storeKey) + return store.Has(types.GetInactiveContractKey(contractAddress)) +} + +func (k Keeper) IterateInactiveContracts(ctx sdk.Context, fn func(contractAddress sdk.AccAddress) (stop bool)) { + store := ctx.KVStore(k.storeKey) + prefix := types.InactiveContractPrefix + iterator := sdk.KVStorePrefixIterator(store, prefix) + defer iterator.Close() + + for ; iterator.Valid(); iterator.Next() { + contractAddress := sdk.AccAddress(iterator.Value()) + if stop := fn(contractAddress); stop { + break + } + } +} + +func (k Keeper) addInactiveContract(ctx sdk.Context, contractAddress sdk.AccAddress) { + store := ctx.KVStore(k.storeKey) + key := types.GetInactiveContractKey(contractAddress) + + store.Set(key, contractAddress) +} + +func (k Keeper) deleteInactiveContract(ctx sdk.Context, contractAddress sdk.AccAddress) { + store := ctx.KVStore(k.storeKey) + key := types.GetInactiveContractKey(contractAddress) + store.Delete(key) +} + +// activateContract delete the contract address from inactivateContract list if the contract is deactivated. +func (k Keeper) activateContract(ctx sdk.Context, contractAddress sdk.AccAddress) error { + if !k.IsInactiveContract(ctx, contractAddress) { + return sdkerrors.Wrapf(wasmtypes.ErrNotFound, "no inactivate contract %s", contractAddress.String()) + } + + k.deleteInactiveContract(ctx, contractAddress) + k.bank.DeleteFromInactiveAddr(ctx, contractAddress) + + return nil +} + +// deactivateContract add the contract address to inactivateContract list. +func (k Keeper) deactivateContract(ctx sdk.Context, contractAddress sdk.AccAddress) error { + if k.IsInactiveContract(ctx, contractAddress) { + return sdkerrors.Wrapf(wasmtypes.ErrAccountExists, "already inactivate contract %s", contractAddress.String()) + } + if !k.HasContractInfo(ctx, contractAddress) { + return sdkerrors.Wrapf(wasmtypes.ErrInvalid, "no contract %s", contractAddress.String()) + } + + k.addInactiveContract(ctx, contractAddress) + k.bank.AddToInactiveAddr(ctx, contractAddress) + + return nil +} diff --git a/x/wasmplus/keeper/keeper_extension.go b/x/wasmplus/keeper/keeper_extension.go deleted file mode 100644 index 6ddcff4882..0000000000 --- a/x/wasmplus/keeper/keeper_extension.go +++ /dev/null @@ -1,68 +0,0 @@ -package keeper - -import ( - sdk "github.com/line/lbm-sdk/types" - sdkerrors "github.com/line/lbm-sdk/types/errors" - - wasmtypes "github.com/line/wasmd/x/wasm/types" - "github.com/line/wasmd/x/wasmplus/types" -) - -func (k Keeper) IsInactiveContract(ctx sdk.Context, contractAddress sdk.AccAddress) bool { - store := ctx.KVStore(k.storeKey) - return store.Has(types.GetInactiveContractKey(contractAddress)) -} - -func (k Keeper) IterateInactiveContracts(ctx sdk.Context, fn func(contractAddress sdk.AccAddress) (stop bool)) { - store := ctx.KVStore(k.storeKey) - prefix := types.InactiveContractPrefix - iterator := sdk.KVStorePrefixIterator(store, prefix) - defer iterator.Close() - - for ; iterator.Valid(); iterator.Next() { - contractAddress := sdk.AccAddress(iterator.Value()) - if stop := fn(contractAddress); stop { - break - } - } -} - -func (k Keeper) addInactiveContract(ctx sdk.Context, contractAddress sdk.AccAddress) { - store := ctx.KVStore(k.storeKey) - key := types.GetInactiveContractKey(contractAddress) - - store.Set(key, contractAddress) -} - -func (k Keeper) deleteInactiveContract(ctx sdk.Context, contractAddress sdk.AccAddress) { - store := ctx.KVStore(k.storeKey) - key := types.GetInactiveContractKey(contractAddress) - store.Delete(key) -} - -// activateContract delete the contract address from inactivateContract list if the contract is deactivated. -func (k Keeper) activateContract(ctx sdk.Context, contractAddress sdk.AccAddress) error { - if !k.IsInactiveContract(ctx, contractAddress) { - return sdkerrors.Wrapf(wasmtypes.ErrNotFound, "no inactivate contract %s", contractAddress.String()) - } - - k.deleteInactiveContract(ctx, contractAddress) - k.bank.DeleteFromInactiveAddr(ctx, contractAddress) - - return nil -} - -// deactivateContract add the contract address to inactivateContract list. -func (k Keeper) deactivateContract(ctx sdk.Context, contractAddress sdk.AccAddress) error { - if k.IsInactiveContract(ctx, contractAddress) { - return sdkerrors.Wrapf(wasmtypes.ErrAccountExists, "already inactivate contract %s", contractAddress.String()) - } - if !k.HasContractInfo(ctx, contractAddress) { - return sdkerrors.Wrapf(wasmtypes.ErrInvalid, "no contract %s", contractAddress.String()) - } - - k.addInactiveContract(ctx, contractAddress) - k.bank.AddToInactiveAddr(ctx, contractAddress) - - return nil -} diff --git a/x/wasmplus/keeper/metrics.go b/x/wasmplus/keeper/metrics.go deleted file mode 100644 index cfe8016785..0000000000 --- a/x/wasmplus/keeper/metrics.go +++ /dev/null @@ -1,145 +0,0 @@ -package keeper - -import ( - "github.com/go-kit/kit/metrics" - "github.com/go-kit/kit/metrics/discard" - go_prometheus "github.com/go-kit/kit/metrics/prometheus" - "github.com/prometheus/client_golang/prometheus" - - wasmvmtypes "github.com/line/wasmvm/types" -) - -const ( - labelPinned = "pinned" - labelMemory = "memory" - labelFs = "fs" - MetricsSubsystem = "wasm" -) - -type Metrics struct { - InstantiateElapsedTimes metrics.Histogram - ExecuteElapsedTimes metrics.Histogram - MigrateElapsedTimes metrics.Histogram - SudoElapsedTimes metrics.Histogram - QuerySmartElapsedTimes metrics.Histogram - QueryRawElapsedTimes metrics.Histogram -} - -func PrometheusMetrics(namespace string, labelsAndValues ...string) *Metrics { - return &Metrics{ - InstantiateElapsedTimes: go_prometheus.NewSummaryFrom(prometheus.SummaryOpts{ - Namespace: namespace, - Subsystem: MetricsSubsystem, - Name: "instantiate", - Help: "elapsed time of Instantiate the wasm contract", - }, nil), - ExecuteElapsedTimes: go_prometheus.NewSummaryFrom(prometheus.SummaryOpts{ - Namespace: namespace, - Subsystem: MetricsSubsystem, - Name: "execute", - Help: "elapsed time of Execute the wasm contract", - }, nil), - MigrateElapsedTimes: go_prometheus.NewSummaryFrom(prometheus.SummaryOpts{ - Namespace: namespace, - Subsystem: MetricsSubsystem, - Name: "migrate", - Help: "elapsed time of Migrate the wasm contract", - }, nil), - SudoElapsedTimes: go_prometheus.NewSummaryFrom(prometheus.SummaryOpts{ - Namespace: namespace, - Subsystem: MetricsSubsystem, - Name: "sudo", - Help: "elapsed time of Sudo the wasm contract", - }, nil), - QuerySmartElapsedTimes: go_prometheus.NewSummaryFrom(prometheus.SummaryOpts{ - Namespace: namespace, - Subsystem: MetricsSubsystem, - Name: "query_smart", - Help: "elapsed time of QuerySmart the wasm contract", - }, nil), - QueryRawElapsedTimes: go_prometheus.NewSummaryFrom(prometheus.SummaryOpts{ - Namespace: namespace, - Subsystem: MetricsSubsystem, - Name: "query_raw", - Help: "elapsed time of QueryRaw the wasm contract", - }, nil), - } -} - -// NopMetrics returns no-op Metrics. -func NopMetrics() *Metrics { - return &Metrics{ - InstantiateElapsedTimes: discard.NewHistogram(), - ExecuteElapsedTimes: discard.NewHistogram(), - MigrateElapsedTimes: discard.NewHistogram(), - SudoElapsedTimes: discard.NewHistogram(), - QuerySmartElapsedTimes: discard.NewHistogram(), - QueryRawElapsedTimes: discard.NewHistogram(), - } -} - -type MetricsProvider func() *Metrics - -// PrometheusMetricsProvider returns PrometheusMetrics for each store -func PrometheusMetricsProvider(namespace string, labelsAndValues ...string) func() *Metrics { - return func() *Metrics { - return PrometheusMetrics(namespace, labelsAndValues...) - } -} - -// NopMetricsProvider returns NopMetrics for each store -func NopMetricsProvider() func() *Metrics { - //nolint:gocritic - return func() *Metrics { - return NopMetrics() - } -} - -// metricSource source of wasmvm metrics -type metricSource interface { - GetMetrics() (*wasmvmtypes.Metrics, error) -} - -var _ prometheus.Collector = (*WasmVMCacheMetricsCollector)(nil) - -// WasmVMCacheMetricsCollector custom metrics collector to be used with Prometheus -type WasmVMCacheMetricsCollector struct { - source metricSource - CacheHitsDescr *prometheus.Desc - CacheMissesDescr *prometheus.Desc - CacheElementsDescr *prometheus.Desc - CacheSizeDescr *prometheus.Desc -} - -// Register registers all metrics -func (p *WasmVMCacheMetricsCollector) Register(r prometheus.Registerer) { - r.MustRegister(p) -} - -// Describe sends the super-set of all possible descriptors of metrics -func (p *WasmVMCacheMetricsCollector) Describe(descs chan<- *prometheus.Desc) { - descs <- p.CacheHitsDescr - descs <- p.CacheMissesDescr - descs <- p.CacheElementsDescr - descs <- p.CacheSizeDescr -} - -// Collect is called by the Prometheus registry when collecting metrics. -func (p *WasmVMCacheMetricsCollector) Collect(c chan<- prometheus.Metric) { - m, err := p.source.GetMetrics() - if err != nil { - return - } - c <- prometheus.MustNewConstMetric(p.CacheHitsDescr, prometheus.CounterValue, float64(m.HitsPinnedMemoryCache), labelPinned) - c <- prometheus.MustNewConstMetric(p.CacheHitsDescr, prometheus.CounterValue, float64(m.HitsMemoryCache), labelMemory) - c <- prometheus.MustNewConstMetric(p.CacheHitsDescr, prometheus.CounterValue, float64(m.HitsFsCache), labelFs) - c <- prometheus.MustNewConstMetric(p.CacheMissesDescr, prometheus.CounterValue, float64(m.Misses)) - c <- prometheus.MustNewConstMetric(p.CacheElementsDescr, prometheus.GaugeValue, float64(m.ElementsPinnedMemoryCache), labelPinned) - c <- prometheus.MustNewConstMetric(p.CacheElementsDescr, prometheus.GaugeValue, float64(m.ElementsMemoryCache), labelMemory) - c <- prometheus.MustNewConstMetric(p.CacheSizeDescr, prometheus.GaugeValue, float64(m.SizeMemoryCache), labelMemory) - c <- prometheus.MustNewConstMetric(p.CacheSizeDescr, prometheus.GaugeValue, float64(m.SizePinnedMemoryCache), labelPinned) - // Node about fs metrics: - // The number of elements and the size of elements in the file system cache cannot easily be obtained. - // We had to either scan the whole directory of potentially thousands of files or track the values when files are added or removed. - // Such a tracking would need to be on disk such that the values are not cleared when the node is restarted. -}