From 7a23b411ae988c644f3160afe7ee5703d092a444 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=81ukasz=20Magiera?= Date: Thu, 25 Mar 2021 15:09:50 +0100 Subject: [PATCH] Merge apistruct with the api package --- Makefile | 6 +- api/api_test.go | 6 + api/apistruct/struct_test.go | 9 - api/apistruct/types.go | 12 - api/client/client.go | 7 +- api/docgen-openrpc/cmd/docgen_openrpc.go | 11 +- api/docgen/cmd/docgen.go | 23 +- api/docgen/docgen.go | 37 +++ api/{apistruct => }/permissioned.go | 11 +- api/{apistruct => }/struct.go | 355 +++++++++++------------ api/v0api/common.go | 77 ----- api/v0api/latest.go | 24 ++ api/v0api/permissioned.go | 13 + api/v0api/storage.go | 9 - api/v0api/struct.go | 166 ----------- api/v1api/latest.go | 7 +- build/openrpc/full.json.gz | Bin 22582 -> 22496 bytes build/openrpc/miner.json.gz | Bin 7643 -> 7608 bytes build/openrpc/worker.json.gz | Bin 2578 -> 2561 bytes cli/auth.go | 14 +- cmd/lotus-seal-worker/main.go | 5 +- cmd/lotus-shed/jwt.go | 13 +- cmd/lotus-storage-miner/run.go | 3 +- cmd/lotus/rpc.go | 6 +- gen/api/proxygen.go | 20 +- metrics/proxy.go | 11 +- node/impl/storminer.go | 3 +- node/modules/core.go | 4 +- 28 files changed, 314 insertions(+), 538 deletions(-) delete mode 100644 api/apistruct/struct_test.go delete mode 100644 api/apistruct/types.go rename api/{apistruct => }/permissioned.go (78%) rename api/{apistruct => }/struct.go (87%) delete mode 100644 api/v0api/common.go create mode 100644 api/v0api/latest.go create mode 100644 api/v0api/permissioned.go delete mode 100644 api/v0api/storage.go diff --git a/Makefile b/Makefile index 4ede5a5a9..e38844347 100644 --- a/Makefile +++ b/Makefile @@ -320,7 +320,7 @@ dist-clean: type-gen: go run ./gen/main.go - go generate ./... + go generate -x ./... goimports -w api/ method-gen: @@ -328,8 +328,8 @@ method-gen: api-gen: go run ./gen/api - goimports -w api/apistruct api/v0api - goimports -w api/apistruct api/v0api + goimports -w api + goimports -w api .PHONY: api-gen docsgen: docsgen-md docsgen-openrpc diff --git a/api/api_test.go b/api/api_test.go index 70d918b5c..738e1b067 100644 --- a/api/api_test.go +++ b/api/api_test.go @@ -113,3 +113,9 @@ func TestReturnTypes(t *testing.T) { t.Run("miner", tst(new(StorageMiner))) t.Run("worker", tst(new(Worker))) } + +func TestPermTags(t *testing.T) { + _ = PermissionedFullAPI(&FullNodeStruct{}) + _ = PermissionedStorMinerAPI(&StorageMinerStruct{}) + _ = PermissionedWorkerAPI(&WorkerStruct{}) +} diff --git a/api/apistruct/struct_test.go b/api/apistruct/struct_test.go deleted file mode 100644 index 9f5f58360..000000000 --- a/api/apistruct/struct_test.go +++ /dev/null @@ -1,9 +0,0 @@ -package apistruct - -import "testing" - -func TestPermTags(t *testing.T) { - _ = PermissionedFullAPI(&FullNodeStruct{}) - _ = PermissionedStorMinerAPI(&StorageMinerStruct{}) - _ = PermissionedWorkerAPI(&WorkerStruct{}) -} diff --git a/api/apistruct/types.go b/api/apistruct/types.go deleted file mode 100644 index 57c89cdaa..000000000 --- a/api/apistruct/types.go +++ /dev/null @@ -1,12 +0,0 @@ -package apistruct - -import "github.com/filecoin-project/lotus/api" - -type ChainIO = api.ChainIO -type Common = api.Common -type FullNode = api.FullNode -type Gateway = api.Gateway -type Signable = api.Signable -type StorageMiner = api.StorageMiner -type Wallet = api.Wallet -type Worker = api.Worker diff --git a/api/client/client.go b/api/client/client.go index a08da0929..6c2f00b46 100644 --- a/api/client/client.go +++ b/api/client/client.go @@ -10,7 +10,6 @@ import ( "github.com/filecoin-project/go-jsonrpc" "github.com/filecoin-project/lotus/api" - "github.com/filecoin-project/lotus/api/apistruct" "github.com/filecoin-project/lotus/api/v0api" "github.com/filecoin-project/lotus/api/v1api" "github.com/filecoin-project/lotus/lib/rpcenc" @@ -71,7 +70,7 @@ func NewWorkerRPC(ctx context.Context, addr string, requestHeader http.Header) ( u.Path = path.Join(u.Path, "../streams/v0/push") - var res apistruct.WorkerStruct + var res api.WorkerStruct closer, err := jsonrpc.NewMergeClient(ctx, addr, "Filecoin", []interface{}{ &res.Internal, @@ -87,7 +86,7 @@ func NewWorkerRPC(ctx context.Context, addr string, requestHeader http.Header) ( // NewGatewayRPC creates a new http jsonrpc client for a gateway node. func NewGatewayRPC(ctx context.Context, addr string, requestHeader http.Header, opts ...jsonrpc.Option) (api.Gateway, jsonrpc.ClientCloser, error) { - var res apistruct.GatewayStruct + var res api.GatewayStruct closer, err := jsonrpc.NewMergeClient(ctx, addr, "Filecoin", []interface{}{ &res.Internal, @@ -100,7 +99,7 @@ func NewGatewayRPC(ctx context.Context, addr string, requestHeader http.Header, } func NewWalletRPC(ctx context.Context, addr string, requestHeader http.Header) (api.Wallet, jsonrpc.ClientCloser, error) { - var res apistruct.WalletStruct + var res api.WalletStruct closer, err := jsonrpc.NewMergeClient(ctx, addr, "Filecoin", []interface{}{ &res.Internal, diff --git a/api/docgen-openrpc/cmd/docgen_openrpc.go b/api/docgen-openrpc/cmd/docgen_openrpc.go index b2eb31057..febbef3e4 100644 --- a/api/docgen-openrpc/cmd/docgen_openrpc.go +++ b/api/docgen-openrpc/cmd/docgen_openrpc.go @@ -9,7 +9,6 @@ import ( "github.com/filecoin-project/lotus/api/docgen" - "github.com/filecoin-project/lotus/api/apistruct" docgen_openrpc "github.com/filecoin-project/lotus/api/docgen-openrpc" ) @@ -35,14 +34,8 @@ func main() { doc := docgen_openrpc.NewLotusOpenRPCDocument(Comments, GroupDocs) - switch os.Args[2] { - case "FullNode": - doc.RegisterReceiverName("Filecoin", &apistruct.FullNodeStruct{}) - case "StorageMiner": - doc.RegisterReceiverName("Filecoin", &apistruct.StorageMinerStruct{}) - case "Worker": - doc.RegisterReceiverName("Filecoin", &apistruct.WorkerStruct{}) - } + i, _, _, _ := docgen.GetAPIType(os.Args[2], os.Args[3]) + doc.RegisterReceiverName("Filecoin", i) out, err := doc.Discover() if err != nil { diff --git a/api/docgen/cmd/docgen.go b/api/docgen/cmd/docgen.go index 57182d400..912eea841 100644 --- a/api/docgen/cmd/docgen.go +++ b/api/docgen/cmd/docgen.go @@ -4,12 +4,9 @@ import ( "encoding/json" "fmt" "os" - "reflect" "sort" "strings" - "github.com/filecoin-project/lotus/api" - "github.com/filecoin-project/lotus/api/apistruct" "github.com/filecoin-project/lotus/api/docgen" ) @@ -18,25 +15,7 @@ func main() { groups := make(map[string]*docgen.MethodGroup) - var t reflect.Type - var permStruct, commonPermStruct reflect.Type - - switch os.Args[2] { - case "FullNode": - t = reflect.TypeOf(new(struct{ api.FullNode })).Elem() - permStruct = reflect.TypeOf(apistruct.FullNodeStruct{}.Internal) - commonPermStruct = reflect.TypeOf(apistruct.CommonStruct{}.Internal) - case "StorageMiner": - t = reflect.TypeOf(new(struct{ api.StorageMiner })).Elem() - permStruct = reflect.TypeOf(apistruct.StorageMinerStruct{}.Internal) - commonPermStruct = reflect.TypeOf(apistruct.CommonStruct{}.Internal) - case "Worker": - t = reflect.TypeOf(new(struct{ api.Worker })).Elem() - permStruct = reflect.TypeOf(apistruct.WorkerStruct{}.Internal) - commonPermStruct = reflect.TypeOf(apistruct.WorkerStruct{}.Internal) - default: - panic("unknown type") - } + _, t, permStruct, commonPermStruct := docgen.GetAPIType(os.Args[2], os.Args[3]) for i := 0; i < t.NumMethod(); i++ { m := t.Method(i) diff --git a/api/docgen/docgen.go b/api/docgen/docgen.go index 49f838959..9ce10edfe 100644 --- a/api/docgen/docgen.go +++ b/api/docgen/docgen.go @@ -35,6 +35,7 @@ import ( "github.com/filecoin-project/lotus/api" apitypes "github.com/filecoin-project/lotus/api/types" + "github.com/filecoin-project/lotus/api/v0api" "github.com/filecoin-project/lotus/build" "github.com/filecoin-project/lotus/chain/types" "github.com/filecoin-project/lotus/extern/sector-storage/sealtasks" @@ -262,6 +263,42 @@ func init() { ) } +func GetAPIType(name, pkg string) (i interface{}, t, permStruct, commonPermStruct reflect.Type) { + switch pkg { + case "api": // latest + switch name { + case "FullNode": + i = &api.FullNodeStruct{} + t = reflect.TypeOf(new(struct{ api.FullNode })).Elem() + permStruct = reflect.TypeOf(api.FullNodeStruct{}.Internal) + commonPermStruct = reflect.TypeOf(api.CommonStruct{}.Internal) + case "StorageMiner": + i = &api.StorageMinerStruct{} + t = reflect.TypeOf(new(struct{ api.StorageMiner })).Elem() + permStruct = reflect.TypeOf(api.StorageMinerStruct{}.Internal) + commonPermStruct = reflect.TypeOf(api.CommonStruct{}.Internal) + case "Worker": + i = &api.WorkerStruct{} + t = reflect.TypeOf(new(struct{ api.Worker })).Elem() + permStruct = reflect.TypeOf(api.WorkerStruct{}.Internal) + commonPermStruct = reflect.TypeOf(api.WorkerStruct{}.Internal) + default: + panic("unknown type") + } + case "v0api": + switch name { + case "FullNode": + i = v0api.FullNodeStruct{} + t = reflect.TypeOf(new(struct{ v0api.FullNode })).Elem() + permStruct = reflect.TypeOf(v0api.FullNodeStruct{}.Internal) + commonPermStruct = reflect.TypeOf(v0api.CommonStruct{}.Internal) + default: + panic("unknown type") + } + } + return +} + func ExampleValue(method string, t, parent reflect.Type) interface{} { v, ok := ExampleValues[t] if ok { diff --git a/api/apistruct/permissioned.go b/api/permissioned.go similarity index 78% rename from api/apistruct/permissioned.go rename to api/permissioned.go index 23259fa87..d99e5943b 100644 --- a/api/apistruct/permissioned.go +++ b/api/permissioned.go @@ -1,8 +1,7 @@ -package apistruct +package api import ( "github.com/filecoin-project/go-jsonrpc/auth" - "github.com/filecoin-project/lotus/api" ) const ( @@ -17,27 +16,27 @@ const ( var AllPermissions = []auth.Permission{PermRead, PermWrite, PermSign, PermAdmin} var DefaultPerms = []auth.Permission{PermRead} -func PermissionedStorMinerAPI(a api.StorageMiner) api.StorageMiner { +func PermissionedStorMinerAPI(a StorageMiner) StorageMiner { var out StorageMinerStruct auth.PermissionedProxy(AllPermissions, DefaultPerms, a, &out.Internal) auth.PermissionedProxy(AllPermissions, DefaultPerms, a, &out.CommonStruct.Internal) return &out } -func PermissionedFullAPI(a api.FullNode) api.FullNode { +func PermissionedFullAPI(a FullNode) FullNode { var out FullNodeStruct auth.PermissionedProxy(AllPermissions, DefaultPerms, a, &out.Internal) auth.PermissionedProxy(AllPermissions, DefaultPerms, a, &out.CommonStruct.Internal) return &out } -func PermissionedWorkerAPI(a api.Worker) api.Worker { +func PermissionedWorkerAPI(a Worker) Worker { var out WorkerStruct auth.PermissionedProxy(AllPermissions, DefaultPerms, a, &out.Internal) return &out } -func PermissionedWalletAPI(a api.Wallet) api.Wallet { +func PermissionedWalletAPI(a Wallet) Wallet { var out WalletStruct auth.PermissionedProxy(AllPermissions, DefaultPerms, a, &out.Internal) return &out diff --git a/api/apistruct/struct.go b/api/struct.go similarity index 87% rename from api/apistruct/struct.go rename to api/struct.go index 63dbb51b0..9a619e3d0 100644 --- a/api/apistruct/struct.go +++ b/api/struct.go @@ -1,6 +1,6 @@ // Code generated by github.com/filecoin-project/lotus/gen/api. DO NOT EDIT. -package apistruct +package api import ( "context" @@ -18,7 +18,6 @@ import ( "github.com/filecoin-project/go-state-types/abi" "github.com/filecoin-project/go-state-types/crypto" "github.com/filecoin-project/go-state-types/dline" - "github.com/filecoin-project/lotus/api" apitypes "github.com/filecoin-project/lotus/api/types" "github.com/filecoin-project/lotus/chain/actors/builtin/miner" "github.com/filecoin-project/lotus/chain/actors/builtin/paych" @@ -66,7 +65,7 @@ type CommonStruct struct { NetAgentVersion func(p0 context.Context, p1 peer.ID) (string, error) `perm:"read"` - NetAutoNatStatus func(p0 context.Context) (api.NatInfo, error) `perm:"read"` + NetAutoNatStatus func(p0 context.Context) (NatInfo, error) `perm:"read"` NetBandwidthStats func(p0 context.Context) (metrics.Stats, error) `perm:"read"` @@ -74,11 +73,11 @@ type CommonStruct struct { NetBandwidthStatsByProtocol func(p0 context.Context) (map[protocol.ID]metrics.Stats, error) `perm:"read"` - NetBlockAdd func(p0 context.Context, p1 api.NetBlockList) error `perm:"admin"` + NetBlockAdd func(p0 context.Context, p1 NetBlockList) error `perm:"admin"` - NetBlockList func(p0 context.Context) (api.NetBlockList, error) `perm:"read"` + NetBlockList func(p0 context.Context) (NetBlockList, error) `perm:"read"` - NetBlockRemove func(p0 context.Context, p1 api.NetBlockList) error `perm:"admin"` + NetBlockRemove func(p0 context.Context, p1 NetBlockList) error `perm:"admin"` NetConnect func(p0 context.Context, p1 peer.AddrInfo) error `perm:"write"` @@ -88,17 +87,17 @@ type CommonStruct struct { NetFindPeer func(p0 context.Context, p1 peer.ID) (peer.AddrInfo, error) `perm:"read"` - NetPeerInfo func(p0 context.Context, p1 peer.ID) (*api.ExtendedPeerInfo, error) `perm:"read"` + NetPeerInfo func(p0 context.Context, p1 peer.ID) (*ExtendedPeerInfo, error) `perm:"read"` NetPeers func(p0 context.Context) ([]peer.AddrInfo, error) `perm:"read"` - NetPubsubScores func(p0 context.Context) ([]api.PubsubScore, error) `perm:"read"` + NetPubsubScores func(p0 context.Context) ([]PubsubScore, error) `perm:"read"` Session func(p0 context.Context) (uuid.UUID, error) `perm:"read"` Shutdown func(p0 context.Context) error `perm:"admin"` - Version func(p0 context.Context) (api.APIVersion, error) `perm:"read"` + Version func(p0 context.Context) (APIVersion, error) `perm:"read"` } } @@ -114,19 +113,19 @@ type FullNodeStruct struct { ChainGetBlock func(p0 context.Context, p1 cid.Cid) (*types.BlockHeader, error) `perm:"read"` - ChainGetBlockMessages func(p0 context.Context, p1 cid.Cid) (*api.BlockMessages, error) `perm:"read"` + ChainGetBlockMessages func(p0 context.Context, p1 cid.Cid) (*BlockMessages, error) `perm:"read"` ChainGetGenesis func(p0 context.Context) (*types.TipSet, error) `perm:"read"` ChainGetMessage func(p0 context.Context, p1 cid.Cid) (*types.Message, error) `perm:"read"` - ChainGetNode func(p0 context.Context, p1 string) (*api.IpldObject, error) `perm:"read"` + ChainGetNode func(p0 context.Context, p1 string) (*IpldObject, error) `perm:"read"` - ChainGetParentMessages func(p0 context.Context, p1 cid.Cid) ([]api.Message, error) `perm:"read"` + ChainGetParentMessages func(p0 context.Context, p1 cid.Cid) ([]Message, error) `perm:"read"` ChainGetParentReceipts func(p0 context.Context, p1 cid.Cid) ([]*types.MessageReceipt, error) `perm:"read"` - ChainGetPath func(p0 context.Context, p1 types.TipSetKey, p2 types.TipSetKey) ([]*api.HeadChange, error) `perm:"read"` + ChainGetPath func(p0 context.Context, p1 types.TipSetKey, p2 types.TipSetKey) ([]*HeadChange, error) `perm:"read"` ChainGetRandomnessFromBeacon func(p0 context.Context, p1 types.TipSetKey, p2 crypto.DomainSeparationTag, p3 abi.ChainEpoch, p4 []byte) (abi.Randomness, error) `perm:"read"` @@ -140,47 +139,47 @@ type FullNodeStruct struct { ChainHead func(p0 context.Context) (*types.TipSet, error) `perm:"read"` - ChainNotify func(p0 context.Context) (<-chan []*api.HeadChange, error) `perm:"read"` + ChainNotify func(p0 context.Context) (<-chan []*HeadChange, error) `perm:"read"` ChainReadObj func(p0 context.Context, p1 cid.Cid) ([]byte, error) `perm:"read"` ChainSetHead func(p0 context.Context, p1 types.TipSetKey) error `perm:"admin"` - ChainStatObj func(p0 context.Context, p1 cid.Cid, p2 cid.Cid) (api.ObjStat, error) `perm:"read"` + ChainStatObj func(p0 context.Context, p1 cid.Cid, p2 cid.Cid) (ObjStat, error) `perm:"read"` ChainTipSetWeight func(p0 context.Context, p1 types.TipSetKey) (types.BigInt, error) `perm:"read"` - ClientCalcCommP func(p0 context.Context, p1 string) (*api.CommPRet, error) `perm:"write"` + ClientCalcCommP func(p0 context.Context, p1 string) (*CommPRet, error) `perm:"write"` ClientCancelDataTransfer func(p0 context.Context, p1 datatransfer.TransferID, p2 peer.ID, p3 bool) error `perm:"write"` - ClientDataTransferUpdates func(p0 context.Context) (<-chan api.DataTransferChannel, error) `perm:"write"` + ClientDataTransferUpdates func(p0 context.Context) (<-chan DataTransferChannel, error) `perm:"write"` - ClientDealPieceCID func(p0 context.Context, p1 cid.Cid) (api.DataCIDSize, error) `perm:"read"` + ClientDealPieceCID func(p0 context.Context, p1 cid.Cid) (DataCIDSize, error) `perm:"read"` - ClientDealSize func(p0 context.Context, p1 cid.Cid) (api.DataSize, error) `perm:"read"` + ClientDealSize func(p0 context.Context, p1 cid.Cid) (DataSize, error) `perm:"read"` - ClientFindData func(p0 context.Context, p1 cid.Cid, p2 *cid.Cid) ([]api.QueryOffer, error) `perm:"read"` + ClientFindData func(p0 context.Context, p1 cid.Cid, p2 *cid.Cid) ([]QueryOffer, error) `perm:"read"` - ClientGenCar func(p0 context.Context, p1 api.FileRef, p2 string) error `perm:"write"` + ClientGenCar func(p0 context.Context, p1 FileRef, p2 string) error `perm:"write"` - ClientGetDealInfo func(p0 context.Context, p1 cid.Cid) (*api.DealInfo, error) `perm:"read"` + ClientGetDealInfo func(p0 context.Context, p1 cid.Cid) (*DealInfo, error) `perm:"read"` ClientGetDealStatus func(p0 context.Context, p1 uint64) (string, error) `perm:"read"` - ClientGetDealUpdates func(p0 context.Context) (<-chan api.DealInfo, error) `perm:"write"` + ClientGetDealUpdates func(p0 context.Context) (<-chan DealInfo, error) `perm:"write"` ClientHasLocal func(p0 context.Context, p1 cid.Cid) (bool, error) `perm:"write"` - ClientImport func(p0 context.Context, p1 api.FileRef) (*api.ImportRes, error) `perm:"admin"` + ClientImport func(p0 context.Context, p1 FileRef) (*ImportRes, error) `perm:"admin"` - ClientListDataTransfers func(p0 context.Context) ([]api.DataTransferChannel, error) `perm:"write"` + ClientListDataTransfers func(p0 context.Context) ([]DataTransferChannel, error) `perm:"write"` - ClientListDeals func(p0 context.Context) ([]api.DealInfo, error) `perm:"write"` + ClientListDeals func(p0 context.Context) ([]DealInfo, error) `perm:"write"` - ClientListImports func(p0 context.Context) ([]api.Import, error) `perm:"write"` + ClientListImports func(p0 context.Context) ([]Import, error) `perm:"write"` - ClientMinerQueryOffer func(p0 context.Context, p1 address.Address, p2 cid.Cid, p3 *cid.Cid) (api.QueryOffer, error) `perm:"read"` + ClientMinerQueryOffer func(p0 context.Context, p1 address.Address, p2 cid.Cid, p3 *cid.Cid) (QueryOffer, error) `perm:"read"` ClientQueryAsk func(p0 context.Context, p1 peer.ID, p2 address.Address) (*storagemarket.StorageAsk, error) `perm:"read"` @@ -188,13 +187,13 @@ type FullNodeStruct struct { ClientRestartDataTransfer func(p0 context.Context, p1 datatransfer.TransferID, p2 peer.ID, p3 bool) error `perm:"write"` - ClientRetrieve func(p0 context.Context, p1 api.RetrievalOrder, p2 *api.FileRef) error `perm:"admin"` + ClientRetrieve func(p0 context.Context, p1 RetrievalOrder, p2 *FileRef) error `perm:"admin"` ClientRetrieveTryRestartInsufficientFunds func(p0 context.Context, p1 address.Address) error `perm:"write"` - ClientRetrieveWithEvents func(p0 context.Context, p1 api.RetrievalOrder, p2 *api.FileRef) (<-chan marketevents.RetrievalEvent, error) `perm:"admin"` + ClientRetrieveWithEvents func(p0 context.Context, p1 RetrievalOrder, p2 *FileRef) (<-chan marketevents.RetrievalEvent, error) `perm:"admin"` - ClientStartDeal func(p0 context.Context, p1 *api.StartDealParams) (*cid.Cid, error) `perm:"admin"` + ClientStartDeal func(p0 context.Context, p1 *StartDealParams) (*cid.Cid, error) `perm:"admin"` CreateBackup func(p0 context.Context, p1 string) error `perm:"admin"` @@ -204,7 +203,7 @@ type FullNodeStruct struct { GasEstimateGasPremium func(p0 context.Context, p1 uint64, p2 address.Address, p3 int64, p4 types.TipSetKey) (types.BigInt, error) `perm:"read"` - GasEstimateMessageGas func(p0 context.Context, p1 *types.Message, p2 *api.MessageSendSpec, p3 types.TipSetKey) (*types.Message, error) `perm:"read"` + GasEstimateMessageGas func(p0 context.Context, p1 *types.Message, p2 *MessageSendSpec, p3 types.TipSetKey) (*types.Message, error) `perm:"read"` MarketAddBalance func(p0 context.Context, p1 address.Address, p2 address.Address, p3 types.BigInt) (cid.Cid, error) `perm:"sign"` @@ -216,13 +215,13 @@ type FullNodeStruct struct { MarketWithdraw func(p0 context.Context, p1 address.Address, p2 address.Address, p3 types.BigInt) (cid.Cid, error) `perm:"sign"` - MinerCreateBlock func(p0 context.Context, p1 *api.BlockTemplate) (*types.BlockMsg, error) `perm:"write"` + MinerCreateBlock func(p0 context.Context, p1 *BlockTemplate) (*types.BlockMsg, error) `perm:"write"` - MinerGetBaseInfo func(p0 context.Context, p1 address.Address, p2 abi.ChainEpoch, p3 types.TipSetKey) (*api.MiningBaseInfo, error) `perm:"read"` + MinerGetBaseInfo func(p0 context.Context, p1 address.Address, p2 abi.ChainEpoch, p3 types.TipSetKey) (*MiningBaseInfo, error) `perm:"read"` MpoolBatchPush func(p0 context.Context, p1 []*types.SignedMessage) ([]cid.Cid, error) `perm:"write"` - MpoolBatchPushMessage func(p0 context.Context, p1 []*types.Message, p2 *api.MessageSendSpec) ([]*types.SignedMessage, error) `perm:"sign"` + MpoolBatchPushMessage func(p0 context.Context, p1 []*types.Message, p2 *MessageSendSpec) ([]*types.SignedMessage, error) `perm:"sign"` MpoolBatchPushUntrusted func(p0 context.Context, p1 []*types.SignedMessage) ([]cid.Cid, error) `perm:"write"` @@ -236,7 +235,7 @@ type FullNodeStruct struct { MpoolPush func(p0 context.Context, p1 *types.SignedMessage) (cid.Cid, error) `perm:"write"` - MpoolPushMessage func(p0 context.Context, p1 *types.Message, p2 *api.MessageSendSpec) (*types.SignedMessage, error) `perm:"sign"` + MpoolPushMessage func(p0 context.Context, p1 *types.Message, p2 *MessageSendSpec) (*types.SignedMessage, error) `perm:"sign"` MpoolPushUntrusted func(p0 context.Context, p1 *types.SignedMessage) (cid.Cid, error) `perm:"write"` @@ -244,7 +243,7 @@ type FullNodeStruct struct { MpoolSetConfig func(p0 context.Context, p1 *types.MpoolConfig) error `perm:"admin"` - MpoolSub func(p0 context.Context) (<-chan api.MpoolUpdate, error) `perm:"read"` + MpoolSub func(p0 context.Context) (<-chan MpoolUpdate, error) `perm:"read"` MsigAddApprove func(p0 context.Context, p1 address.Address, p2 address.Address, p3 uint64, p4 address.Address, p5 address.Address, p6 bool) (cid.Cid, error) `perm:"sign"` @@ -262,11 +261,11 @@ type FullNodeStruct struct { MsigGetAvailableBalance func(p0 context.Context, p1 address.Address, p2 types.TipSetKey) (types.BigInt, error) `perm:"read"` - MsigGetPending func(p0 context.Context, p1 address.Address, p2 types.TipSetKey) ([]*api.MsigTransaction, error) `perm:"read"` + MsigGetPending func(p0 context.Context, p1 address.Address, p2 types.TipSetKey) ([]*MsigTransaction, error) `perm:"read"` MsigGetVested func(p0 context.Context, p1 address.Address, p2 types.TipSetKey, p3 types.TipSetKey) (types.BigInt, error) `perm:"read"` - MsigGetVestingSchedule func(p0 context.Context, p1 address.Address, p2 types.TipSetKey) (api.MsigVesting, error) `perm:"read"` + MsigGetVestingSchedule func(p0 context.Context, p1 address.Address, p2 types.TipSetKey) (MsigVesting, error) `perm:"read"` MsigPropose func(p0 context.Context, p1 address.Address, p2 address.Address, p3 types.BigInt, p4 address.Address, p5 uint64, p6 []byte) (cid.Cid, error) `perm:"sign"` @@ -280,23 +279,23 @@ type FullNodeStruct struct { PaychAllocateLane func(p0 context.Context, p1 address.Address) (uint64, error) `perm:"sign"` - PaychAvailableFunds func(p0 context.Context, p1 address.Address) (*api.ChannelAvailableFunds, error) `perm:"sign"` + PaychAvailableFunds func(p0 context.Context, p1 address.Address) (*ChannelAvailableFunds, error) `perm:"sign"` - PaychAvailableFundsByFromTo func(p0 context.Context, p1 address.Address, p2 address.Address) (*api.ChannelAvailableFunds, error) `perm:"sign"` + PaychAvailableFundsByFromTo func(p0 context.Context, p1 address.Address, p2 address.Address) (*ChannelAvailableFunds, error) `perm:"sign"` PaychCollect func(p0 context.Context, p1 address.Address) (cid.Cid, error) `perm:"sign"` - PaychGet func(p0 context.Context, p1 address.Address, p2 address.Address, p3 types.BigInt) (*api.ChannelInfo, error) `perm:"sign"` + PaychGet func(p0 context.Context, p1 address.Address, p2 address.Address, p3 types.BigInt) (*ChannelInfo, error) `perm:"sign"` PaychGetWaitReady func(p0 context.Context, p1 cid.Cid) (address.Address, error) `perm:"sign"` PaychList func(p0 context.Context) ([]address.Address, error) `perm:"read"` - PaychNewPayment func(p0 context.Context, p1 address.Address, p2 address.Address, p3 []api.VoucherSpec) (*api.PaymentInfo, error) `perm:"sign"` + PaychNewPayment func(p0 context.Context, p1 address.Address, p2 address.Address, p3 []VoucherSpec) (*PaymentInfo, error) `perm:"sign"` PaychSettle func(p0 context.Context, p1 address.Address) (cid.Cid, error) `perm:"sign"` - PaychStatus func(p0 context.Context, p1 address.Address) (*api.PaychStatus, error) `perm:"read"` + PaychStatus func(p0 context.Context, p1 address.Address) (*PaychStatus, error) `perm:"read"` PaychVoucherAdd func(p0 context.Context, p1 address.Address, p2 *paych.SignedVoucher, p3 []byte, p4 types.BigInt) (types.BigInt, error) `perm:"write"` @@ -304,7 +303,7 @@ type FullNodeStruct struct { PaychVoucherCheckValid func(p0 context.Context, p1 address.Address, p2 *paych.SignedVoucher) error `perm:"read"` - PaychVoucherCreate func(p0 context.Context, p1 address.Address, p2 types.BigInt, p3 uint64) (*api.VoucherCreateResult, error) `perm:"sign"` + PaychVoucherCreate func(p0 context.Context, p1 address.Address, p2 types.BigInt, p3 uint64) (*VoucherCreateResult, error) `perm:"sign"` PaychVoucherList func(p0 context.Context, p1 address.Address) ([]*paych.SignedVoucher, error) `perm:"write"` @@ -312,17 +311,17 @@ type FullNodeStruct struct { StateAccountKey func(p0 context.Context, p1 address.Address, p2 types.TipSetKey) (address.Address, error) `perm:"read"` - StateAllMinerFaults func(p0 context.Context, p1 abi.ChainEpoch, p2 types.TipSetKey) ([]*api.Fault, error) `perm:"read"` + StateAllMinerFaults func(p0 context.Context, p1 abi.ChainEpoch, p2 types.TipSetKey) ([]*Fault, error) `perm:"read"` - StateCall func(p0 context.Context, p1 *types.Message, p2 types.TipSetKey) (*api.InvocResult, error) `perm:"read"` + StateCall func(p0 context.Context, p1 *types.Message, p2 types.TipSetKey) (*InvocResult, error) `perm:"read"` StateChangedActors func(p0 context.Context, p1 cid.Cid, p2 cid.Cid) (map[string]types.Actor, error) `perm:"read"` StateCirculatingSupply func(p0 context.Context, p1 types.TipSetKey) (abi.TokenAmount, error) `perm:"read"` - StateCompute func(p0 context.Context, p1 abi.ChainEpoch, p2 []*types.Message, p3 types.TipSetKey) (*api.ComputeStateOutput, error) `perm:"read"` + StateCompute func(p0 context.Context, p1 abi.ChainEpoch, p2 []*types.Message, p3 types.TipSetKey) (*ComputeStateOutput, error) `perm:"read"` - StateDealProviderCollateralBounds func(p0 context.Context, p1 abi.PaddedPieceSize, p2 bool, p3 types.TipSetKey) (api.DealCollateralBounds, error) `perm:"read"` + StateDealProviderCollateralBounds func(p0 context.Context, p1 abi.PaddedPieceSize, p2 bool, p3 types.TipSetKey) (DealCollateralBounds, error) `perm:"read"` StateDecodeParams func(p0 context.Context, p1 address.Address, p2 abi.MethodNum, p3 []byte, p4 types.TipSetKey) (interface{}, error) `perm:"read"` @@ -332,25 +331,25 @@ type FullNodeStruct struct { StateListActors func(p0 context.Context, p1 types.TipSetKey) ([]address.Address, error) `perm:"read"` - StateListMessages func(p0 context.Context, p1 *api.MessageMatch, p2 types.TipSetKey, p3 abi.ChainEpoch) ([]cid.Cid, error) `perm:"read"` + StateListMessages func(p0 context.Context, p1 *MessageMatch, p2 types.TipSetKey, p3 abi.ChainEpoch) ([]cid.Cid, error) `perm:"read"` StateListMiners func(p0 context.Context, p1 types.TipSetKey) ([]address.Address, error) `perm:"read"` StateLookupID func(p0 context.Context, p1 address.Address, p2 types.TipSetKey) (address.Address, error) `perm:"read"` - StateMarketBalance func(p0 context.Context, p1 address.Address, p2 types.TipSetKey) (api.MarketBalance, error) `perm:"read"` + StateMarketBalance func(p0 context.Context, p1 address.Address, p2 types.TipSetKey) (MarketBalance, error) `perm:"read"` - StateMarketDeals func(p0 context.Context, p1 types.TipSetKey) (map[string]api.MarketDeal, error) `perm:"read"` + StateMarketDeals func(p0 context.Context, p1 types.TipSetKey) (map[string]MarketDeal, error) `perm:"read"` - StateMarketParticipants func(p0 context.Context, p1 types.TipSetKey) (map[string]api.MarketBalance, error) `perm:"read"` + StateMarketParticipants func(p0 context.Context, p1 types.TipSetKey) (map[string]MarketBalance, error) `perm:"read"` - StateMarketStorageDeal func(p0 context.Context, p1 abi.DealID, p2 types.TipSetKey) (*api.MarketDeal, error) `perm:"read"` + StateMarketStorageDeal func(p0 context.Context, p1 abi.DealID, p2 types.TipSetKey) (*MarketDeal, error) `perm:"read"` StateMinerActiveSectors func(p0 context.Context, p1 address.Address, p2 types.TipSetKey) ([]*miner.SectorOnChainInfo, error) `perm:"read"` StateMinerAvailableBalance func(p0 context.Context, p1 address.Address, p2 types.TipSetKey) (types.BigInt, error) `perm:"read"` - StateMinerDeadlines func(p0 context.Context, p1 address.Address, p2 types.TipSetKey) ([]api.Deadline, error) `perm:"read"` + StateMinerDeadlines func(p0 context.Context, p1 address.Address, p2 types.TipSetKey) ([]Deadline, error) `perm:"read"` StateMinerFaults func(p0 context.Context, p1 address.Address, p2 types.TipSetKey) (bitfield.BitField, error) `perm:"read"` @@ -358,9 +357,9 @@ type FullNodeStruct struct { StateMinerInitialPledgeCollateral func(p0 context.Context, p1 address.Address, p2 miner.SectorPreCommitInfo, p3 types.TipSetKey) (types.BigInt, error) `perm:"read"` - StateMinerPartitions func(p0 context.Context, p1 address.Address, p2 uint64, p3 types.TipSetKey) ([]api.Partition, error) `perm:"read"` + StateMinerPartitions func(p0 context.Context, p1 address.Address, p2 uint64, p3 types.TipSetKey) ([]Partition, error) `perm:"read"` - StateMinerPower func(p0 context.Context, p1 address.Address, p2 types.TipSetKey) (*api.MinerPower, error) `perm:"read"` + StateMinerPower func(p0 context.Context, p1 address.Address, p2 types.TipSetKey) (*MinerPower, error) `perm:"read"` StateMinerPreCommitDepositForPower func(p0 context.Context, p1 address.Address, p2 miner.SectorPreCommitInfo, p3 types.TipSetKey) (types.BigInt, error) `perm:"read"` @@ -370,7 +369,7 @@ type FullNodeStruct struct { StateMinerSectorAllocated func(p0 context.Context, p1 address.Address, p2 abi.SectorNumber, p3 types.TipSetKey) (bool, error) `perm:"read"` - StateMinerSectorCount func(p0 context.Context, p1 address.Address, p2 types.TipSetKey) (api.MinerSectors, error) `perm:"read"` + StateMinerSectorCount func(p0 context.Context, p1 address.Address, p2 types.TipSetKey) (MinerSectors, error) `perm:"read"` StateMinerSectors func(p0 context.Context, p1 address.Address, p2 *bitfield.BitField, p3 types.TipSetKey) ([]*miner.SectorOnChainInfo, error) `perm:"read"` @@ -378,13 +377,13 @@ type FullNodeStruct struct { StateNetworkVersion func(p0 context.Context, p1 types.TipSetKey) (apitypes.NetworkVersion, error) `perm:"read"` - StateReadState func(p0 context.Context, p1 address.Address, p2 types.TipSetKey) (*api.ActorState, error) `perm:"read"` + StateReadState func(p0 context.Context, p1 address.Address, p2 types.TipSetKey) (*ActorState, error) `perm:"read"` - StateReplay func(p0 context.Context, p1 types.TipSetKey, p2 cid.Cid) (*api.InvocResult, error) `perm:"read"` + StateReplay func(p0 context.Context, p1 types.TipSetKey, p2 cid.Cid) (*InvocResult, error) `perm:"read"` - StateSearchMsg func(p0 context.Context, p1 cid.Cid) (*api.MsgLookup, error) `perm:"read"` + StateSearchMsg func(p0 context.Context, p1 cid.Cid) (*MsgLookup, error) `perm:"read"` - StateSearchMsgLimited func(p0 context.Context, p1 cid.Cid, p2 abi.ChainEpoch) (*api.MsgLookup, error) `perm:"read"` + StateSearchMsgLimited func(p0 context.Context, p1 cid.Cid, p2 abi.ChainEpoch) (*MsgLookup, error) `perm:"read"` StateSectorExpiration func(p0 context.Context, p1 address.Address, p2 abi.SectorNumber, p3 types.TipSetKey) (*miner.SectorExpiration, error) `perm:"read"` @@ -394,7 +393,7 @@ type FullNodeStruct struct { StateSectorPreCommitInfo func(p0 context.Context, p1 address.Address, p2 abi.SectorNumber, p3 types.TipSetKey) (miner.SectorPreCommitOnChainInfo, error) `perm:"read"` - StateVMCirculatingSupplyInternal func(p0 context.Context, p1 types.TipSetKey) (api.CirculatingSupply, error) `perm:"read"` + StateVMCirculatingSupplyInternal func(p0 context.Context, p1 types.TipSetKey) (CirculatingSupply, error) `perm:"read"` StateVerifiedClientStatus func(p0 context.Context, p1 address.Address, p2 types.TipSetKey) (*abi.StoragePower, error) `perm:"read"` @@ -402,9 +401,9 @@ type FullNodeStruct struct { StateVerifierStatus func(p0 context.Context, p1 address.Address, p2 types.TipSetKey) (*abi.StoragePower, error) `perm:"read"` - StateWaitMsg func(p0 context.Context, p1 cid.Cid, p2 uint64) (*api.MsgLookup, error) `perm:"read"` + StateWaitMsg func(p0 context.Context, p1 cid.Cid, p2 uint64) (*MsgLookup, error) `perm:"read"` - StateWaitMsgLimited func(p0 context.Context, p1 cid.Cid, p2 uint64, p3 abi.ChainEpoch) (*api.MsgLookup, error) `perm:"read"` + StateWaitMsgLimited func(p0 context.Context, p1 cid.Cid, p2 uint64, p3 abi.ChainEpoch) (*MsgLookup, error) `perm:"read"` SyncCheckBad func(p0 context.Context, p1 cid.Cid) (string, error) `perm:"read"` @@ -414,7 +413,7 @@ type FullNodeStruct struct { SyncMarkBad func(p0 context.Context, p1 cid.Cid) error `perm:"admin"` - SyncState func(p0 context.Context) (*api.SyncState, error) `perm:"read"` + SyncState func(p0 context.Context) (*SyncState, error) `perm:"read"` SyncSubmitBlock func(p0 context.Context, p1 *types.BlockMsg) error `perm:"write"` @@ -454,7 +453,7 @@ type FullNodeStruct struct { type GatewayStruct struct { Internal struct { - ChainGetBlockMessages func(p0 context.Context, p1 cid.Cid) (*api.BlockMessages, error) `` + ChainGetBlockMessages func(p0 context.Context, p1 cid.Cid) (*BlockMessages, error) `` ChainGetMessage func(p0 context.Context, p1 cid.Cid) (*types.Message, error) `` @@ -466,23 +465,23 @@ type GatewayStruct struct { ChainHead func(p0 context.Context) (*types.TipSet, error) `` - ChainNotify func(p0 context.Context) (<-chan []*api.HeadChange, error) `` + ChainNotify func(p0 context.Context) (<-chan []*HeadChange, error) `` ChainReadObj func(p0 context.Context, p1 cid.Cid) ([]byte, error) `` - GasEstimateMessageGas func(p0 context.Context, p1 *types.Message, p2 *api.MessageSendSpec, p3 types.TipSetKey) (*types.Message, error) `` + GasEstimateMessageGas func(p0 context.Context, p1 *types.Message, p2 *MessageSendSpec, p3 types.TipSetKey) (*types.Message, error) `` MpoolPush func(p0 context.Context, p1 *types.SignedMessage) (cid.Cid, error) `` MsigGetAvailableBalance func(p0 context.Context, p1 address.Address, p2 types.TipSetKey) (types.BigInt, error) `` - MsigGetPending func(p0 context.Context, p1 address.Address, p2 types.TipSetKey) ([]*api.MsigTransaction, error) `` + MsigGetPending func(p0 context.Context, p1 address.Address, p2 types.TipSetKey) ([]*MsigTransaction, error) `` MsigGetVested func(p0 context.Context, p1 address.Address, p2 types.TipSetKey, p3 types.TipSetKey) (types.BigInt, error) `` StateAccountKey func(p0 context.Context, p1 address.Address, p2 types.TipSetKey) (address.Address, error) `` - StateDealProviderCollateralBounds func(p0 context.Context, p1 abi.PaddedPieceSize, p2 bool, p3 types.TipSetKey) (api.DealCollateralBounds, error) `` + StateDealProviderCollateralBounds func(p0 context.Context, p1 abi.PaddedPieceSize, p2 bool, p3 types.TipSetKey) (DealCollateralBounds, error) `` StateGetActor func(p0 context.Context, p1 address.Address, p2 types.TipSetKey) (*types.Actor, error) `` @@ -492,31 +491,31 @@ type GatewayStruct struct { StateLookupID func(p0 context.Context, p1 address.Address, p2 types.TipSetKey) (address.Address, error) `` - StateMarketBalance func(p0 context.Context, p1 address.Address, p2 types.TipSetKey) (api.MarketBalance, error) `` + StateMarketBalance func(p0 context.Context, p1 address.Address, p2 types.TipSetKey) (MarketBalance, error) `` - StateMarketStorageDeal func(p0 context.Context, p1 abi.DealID, p2 types.TipSetKey) (*api.MarketDeal, error) `` + StateMarketStorageDeal func(p0 context.Context, p1 abi.DealID, p2 types.TipSetKey) (*MarketDeal, error) `` StateMinerInfo func(p0 context.Context, p1 address.Address, p2 types.TipSetKey) (miner.MinerInfo, error) `` - StateMinerPower func(p0 context.Context, p1 address.Address, p2 types.TipSetKey) (*api.MinerPower, error) `` + StateMinerPower func(p0 context.Context, p1 address.Address, p2 types.TipSetKey) (*MinerPower, error) `` StateMinerProvingDeadline func(p0 context.Context, p1 address.Address, p2 types.TipSetKey) (*dline.Info, error) `` StateNetworkVersion func(p0 context.Context, p1 types.TipSetKey) (apitypes.NetworkVersion, error) `` - StateSearchMsg func(p0 context.Context, p1 cid.Cid) (*api.MsgLookup, error) `` + StateSearchMsg func(p0 context.Context, p1 cid.Cid) (*MsgLookup, error) `` StateSectorGetInfo func(p0 context.Context, p1 address.Address, p2 abi.SectorNumber, p3 types.TipSetKey) (*miner.SectorOnChainInfo, error) `` StateVerifiedClientStatus func(p0 context.Context, p1 address.Address, p2 types.TipSetKey) (*abi.StoragePower, error) `` - StateWaitMsg func(p0 context.Context, p1 cid.Cid, p2 uint64) (*api.MsgLookup, error) `` + StateWaitMsg func(p0 context.Context, p1 cid.Cid, p2 uint64) (*MsgLookup, error) `` } } type SignableStruct struct { Internal struct { - Sign func(p0 context.Context, p1 api.SignFunc) error `` + Sign func(p0 context.Context, p1 SignFunc) error `` } } @@ -526,7 +525,7 @@ type StorageMinerStruct struct { Internal struct { ActorAddress func(p0 context.Context) (address.Address, error) `perm:"read"` - ActorAddressConfig func(p0 context.Context) (api.AddressConfig, error) `perm:"read"` + ActorAddressConfig func(p0 context.Context) (AddressConfig, error) `perm:"read"` ActorSectorSize func(p0 context.Context, p1 address.Address) (abi.SectorSize, error) `perm:"read"` @@ -548,7 +547,7 @@ type StorageMinerStruct struct { DealsImportData func(p0 context.Context, p1 cid.Cid, p2 string) error `perm:"admin"` - DealsList func(p0 context.Context) ([]api.MarketDeal, error) `perm:"admin"` + DealsList func(p0 context.Context) ([]MarketDeal, error) `perm:"admin"` DealsPieceCidBlocklist func(p0 context.Context) ([]cid.Cid, error) `perm:"admin"` @@ -568,7 +567,7 @@ type StorageMinerStruct struct { MarketCancelDataTransfer func(p0 context.Context, p1 datatransfer.TransferID, p2 peer.ID, p3 bool) error `perm:"write"` - MarketDataTransferUpdates func(p0 context.Context) (<-chan api.DataTransferChannel, error) `perm:"write"` + MarketDataTransferUpdates func(p0 context.Context) (<-chan DataTransferChannel, error) `perm:"write"` MarketGetAsk func(p0 context.Context) (*storagemarket.SignedStorageAsk, error) `perm:"read"` @@ -578,15 +577,15 @@ type StorageMinerStruct struct { MarketImportDealData func(p0 context.Context, p1 cid.Cid, p2 string) error `perm:"write"` - MarketListDataTransfers func(p0 context.Context) ([]api.DataTransferChannel, error) `perm:"write"` + MarketListDataTransfers func(p0 context.Context) ([]DataTransferChannel, error) `perm:"write"` - MarketListDeals func(p0 context.Context) ([]api.MarketDeal, error) `perm:"read"` + MarketListDeals func(p0 context.Context) ([]MarketDeal, error) `perm:"read"` MarketListIncompleteDeals func(p0 context.Context) ([]storagemarket.MinerDeal, error) `perm:"read"` MarketListRetrievalDeals func(p0 context.Context) ([]retrievalmarket.ProviderDealState, error) `perm:"read"` - MarketPendingDeals func(p0 context.Context) (api.PendingDealInfo, error) `perm:"write"` + MarketPendingDeals func(p0 context.Context) (PendingDealInfo, error) `perm:"write"` MarketPublishPendingDeals func(p0 context.Context) error `perm:"admin"` @@ -656,15 +655,15 @@ type StorageMinerStruct struct { SectorsList func(p0 context.Context) ([]abi.SectorNumber, error) `perm:"read"` - SectorsListInStates func(p0 context.Context, p1 []api.SectorState) ([]abi.SectorNumber, error) `perm:"read"` + SectorsListInStates func(p0 context.Context, p1 []SectorState) ([]abi.SectorNumber, error) `perm:"read"` - SectorsRefs func(p0 context.Context) (map[string][]api.SealedRef, error) `perm:"read"` + SectorsRefs func(p0 context.Context) (map[string][]SealedRef, error) `perm:"read"` - SectorsStatus func(p0 context.Context, p1 abi.SectorNumber, p2 bool) (api.SectorInfo, error) `perm:"read"` + SectorsStatus func(p0 context.Context, p1 abi.SectorNumber, p2 bool) (SectorInfo, error) `perm:"read"` - SectorsSummary func(p0 context.Context) (map[api.SectorState]int, error) `perm:"read"` + SectorsSummary func(p0 context.Context) (map[SectorState]int, error) `perm:"read"` - SectorsUpdate func(p0 context.Context, p1 abi.SectorNumber, p2 api.SectorState) error `perm:"admin"` + SectorsUpdate func(p0 context.Context, p1 abi.SectorNumber, p2 SectorState) error `perm:"admin"` StorageAddLocal func(p0 context.Context, p1 string) error `perm:"admin"` @@ -714,7 +713,7 @@ type WalletStruct struct { WalletNew func(p0 context.Context, p1 types.KeyType) (address.Address, error) `` - WalletSign func(p0 context.Context, p1 address.Address, p2 []byte, p3 api.MsgMeta) (*crypto.Signature, error) `` + WalletSign func(p0 context.Context, p1 address.Address, p2 []byte, p3 MsgMeta) (*crypto.Signature, error) `` } } @@ -764,7 +763,7 @@ type WorkerStruct struct { UnsealPiece func(p0 context.Context, p1 storage.SectorRef, p2 storiface.UnpaddedByteIndex, p3 abi.UnpaddedPieceSize, p4 abi.SealRandomness, p5 cid.Cid) (storiface.CallID, error) `perm:"admin"` - Version func(p0 context.Context) (api.Version, error) `perm:"admin"` + Version func(p0 context.Context) (Version, error) `perm:"admin"` WaitQuiet func(p0 context.Context) error `perm:"admin"` } @@ -814,7 +813,7 @@ func (s *CommonStruct) NetAgentVersion(p0 context.Context, p1 peer.ID) (string, return s.Internal.NetAgentVersion(p0, p1) } -func (s *CommonStruct) NetAutoNatStatus(p0 context.Context) (api.NatInfo, error) { +func (s *CommonStruct) NetAutoNatStatus(p0 context.Context) (NatInfo, error) { return s.Internal.NetAutoNatStatus(p0) } @@ -830,15 +829,15 @@ func (s *CommonStruct) NetBandwidthStatsByProtocol(p0 context.Context) (map[prot return s.Internal.NetBandwidthStatsByProtocol(p0) } -func (s *CommonStruct) NetBlockAdd(p0 context.Context, p1 api.NetBlockList) error { +func (s *CommonStruct) NetBlockAdd(p0 context.Context, p1 NetBlockList) error { return s.Internal.NetBlockAdd(p0, p1) } -func (s *CommonStruct) NetBlockList(p0 context.Context) (api.NetBlockList, error) { +func (s *CommonStruct) NetBlockList(p0 context.Context) (NetBlockList, error) { return s.Internal.NetBlockList(p0) } -func (s *CommonStruct) NetBlockRemove(p0 context.Context, p1 api.NetBlockList) error { +func (s *CommonStruct) NetBlockRemove(p0 context.Context, p1 NetBlockList) error { return s.Internal.NetBlockRemove(p0, p1) } @@ -858,7 +857,7 @@ func (s *CommonStruct) NetFindPeer(p0 context.Context, p1 peer.ID) (peer.AddrInf return s.Internal.NetFindPeer(p0, p1) } -func (s *CommonStruct) NetPeerInfo(p0 context.Context, p1 peer.ID) (*api.ExtendedPeerInfo, error) { +func (s *CommonStruct) NetPeerInfo(p0 context.Context, p1 peer.ID) (*ExtendedPeerInfo, error) { return s.Internal.NetPeerInfo(p0, p1) } @@ -866,7 +865,7 @@ func (s *CommonStruct) NetPeers(p0 context.Context) ([]peer.AddrInfo, error) { return s.Internal.NetPeers(p0) } -func (s *CommonStruct) NetPubsubScores(p0 context.Context) ([]api.PubsubScore, error) { +func (s *CommonStruct) NetPubsubScores(p0 context.Context) ([]PubsubScore, error) { return s.Internal.NetPubsubScores(p0) } @@ -878,7 +877,7 @@ func (s *CommonStruct) Shutdown(p0 context.Context) error { return s.Internal.Shutdown(p0) } -func (s *CommonStruct) Version(p0 context.Context) (api.APIVersion, error) { +func (s *CommonStruct) Version(p0 context.Context) (APIVersion, error) { return s.Internal.Version(p0) } @@ -898,7 +897,7 @@ func (s *FullNodeStruct) ChainGetBlock(p0 context.Context, p1 cid.Cid) (*types.B return s.Internal.ChainGetBlock(p0, p1) } -func (s *FullNodeStruct) ChainGetBlockMessages(p0 context.Context, p1 cid.Cid) (*api.BlockMessages, error) { +func (s *FullNodeStruct) ChainGetBlockMessages(p0 context.Context, p1 cid.Cid) (*BlockMessages, error) { return s.Internal.ChainGetBlockMessages(p0, p1) } @@ -910,11 +909,11 @@ func (s *FullNodeStruct) ChainGetMessage(p0 context.Context, p1 cid.Cid) (*types return s.Internal.ChainGetMessage(p0, p1) } -func (s *FullNodeStruct) ChainGetNode(p0 context.Context, p1 string) (*api.IpldObject, error) { +func (s *FullNodeStruct) ChainGetNode(p0 context.Context, p1 string) (*IpldObject, error) { return s.Internal.ChainGetNode(p0, p1) } -func (s *FullNodeStruct) ChainGetParentMessages(p0 context.Context, p1 cid.Cid) ([]api.Message, error) { +func (s *FullNodeStruct) ChainGetParentMessages(p0 context.Context, p1 cid.Cid) ([]Message, error) { return s.Internal.ChainGetParentMessages(p0, p1) } @@ -922,7 +921,7 @@ func (s *FullNodeStruct) ChainGetParentReceipts(p0 context.Context, p1 cid.Cid) return s.Internal.ChainGetParentReceipts(p0, p1) } -func (s *FullNodeStruct) ChainGetPath(p0 context.Context, p1 types.TipSetKey, p2 types.TipSetKey) ([]*api.HeadChange, error) { +func (s *FullNodeStruct) ChainGetPath(p0 context.Context, p1 types.TipSetKey, p2 types.TipSetKey) ([]*HeadChange, error) { return s.Internal.ChainGetPath(p0, p1, p2) } @@ -950,7 +949,7 @@ func (s *FullNodeStruct) ChainHead(p0 context.Context) (*types.TipSet, error) { return s.Internal.ChainHead(p0) } -func (s *FullNodeStruct) ChainNotify(p0 context.Context) (<-chan []*api.HeadChange, error) { +func (s *FullNodeStruct) ChainNotify(p0 context.Context) (<-chan []*HeadChange, error) { return s.Internal.ChainNotify(p0) } @@ -962,7 +961,7 @@ func (s *FullNodeStruct) ChainSetHead(p0 context.Context, p1 types.TipSetKey) er return s.Internal.ChainSetHead(p0, p1) } -func (s *FullNodeStruct) ChainStatObj(p0 context.Context, p1 cid.Cid, p2 cid.Cid) (api.ObjStat, error) { +func (s *FullNodeStruct) ChainStatObj(p0 context.Context, p1 cid.Cid, p2 cid.Cid) (ObjStat, error) { return s.Internal.ChainStatObj(p0, p1, p2) } @@ -970,7 +969,7 @@ func (s *FullNodeStruct) ChainTipSetWeight(p0 context.Context, p1 types.TipSetKe return s.Internal.ChainTipSetWeight(p0, p1) } -func (s *FullNodeStruct) ClientCalcCommP(p0 context.Context, p1 string) (*api.CommPRet, error) { +func (s *FullNodeStruct) ClientCalcCommP(p0 context.Context, p1 string) (*CommPRet, error) { return s.Internal.ClientCalcCommP(p0, p1) } @@ -978,27 +977,27 @@ func (s *FullNodeStruct) ClientCancelDataTransfer(p0 context.Context, p1 datatra return s.Internal.ClientCancelDataTransfer(p0, p1, p2, p3) } -func (s *FullNodeStruct) ClientDataTransferUpdates(p0 context.Context) (<-chan api.DataTransferChannel, error) { +func (s *FullNodeStruct) ClientDataTransferUpdates(p0 context.Context) (<-chan DataTransferChannel, error) { return s.Internal.ClientDataTransferUpdates(p0) } -func (s *FullNodeStruct) ClientDealPieceCID(p0 context.Context, p1 cid.Cid) (api.DataCIDSize, error) { +func (s *FullNodeStruct) ClientDealPieceCID(p0 context.Context, p1 cid.Cid) (DataCIDSize, error) { return s.Internal.ClientDealPieceCID(p0, p1) } -func (s *FullNodeStruct) ClientDealSize(p0 context.Context, p1 cid.Cid) (api.DataSize, error) { +func (s *FullNodeStruct) ClientDealSize(p0 context.Context, p1 cid.Cid) (DataSize, error) { return s.Internal.ClientDealSize(p0, p1) } -func (s *FullNodeStruct) ClientFindData(p0 context.Context, p1 cid.Cid, p2 *cid.Cid) ([]api.QueryOffer, error) { +func (s *FullNodeStruct) ClientFindData(p0 context.Context, p1 cid.Cid, p2 *cid.Cid) ([]QueryOffer, error) { return s.Internal.ClientFindData(p0, p1, p2) } -func (s *FullNodeStruct) ClientGenCar(p0 context.Context, p1 api.FileRef, p2 string) error { +func (s *FullNodeStruct) ClientGenCar(p0 context.Context, p1 FileRef, p2 string) error { return s.Internal.ClientGenCar(p0, p1, p2) } -func (s *FullNodeStruct) ClientGetDealInfo(p0 context.Context, p1 cid.Cid) (*api.DealInfo, error) { +func (s *FullNodeStruct) ClientGetDealInfo(p0 context.Context, p1 cid.Cid) (*DealInfo, error) { return s.Internal.ClientGetDealInfo(p0, p1) } @@ -1006,7 +1005,7 @@ func (s *FullNodeStruct) ClientGetDealStatus(p0 context.Context, p1 uint64) (str return s.Internal.ClientGetDealStatus(p0, p1) } -func (s *FullNodeStruct) ClientGetDealUpdates(p0 context.Context) (<-chan api.DealInfo, error) { +func (s *FullNodeStruct) ClientGetDealUpdates(p0 context.Context) (<-chan DealInfo, error) { return s.Internal.ClientGetDealUpdates(p0) } @@ -1014,23 +1013,23 @@ func (s *FullNodeStruct) ClientHasLocal(p0 context.Context, p1 cid.Cid) (bool, e return s.Internal.ClientHasLocal(p0, p1) } -func (s *FullNodeStruct) ClientImport(p0 context.Context, p1 api.FileRef) (*api.ImportRes, error) { +func (s *FullNodeStruct) ClientImport(p0 context.Context, p1 FileRef) (*ImportRes, error) { return s.Internal.ClientImport(p0, p1) } -func (s *FullNodeStruct) ClientListDataTransfers(p0 context.Context) ([]api.DataTransferChannel, error) { +func (s *FullNodeStruct) ClientListDataTransfers(p0 context.Context) ([]DataTransferChannel, error) { return s.Internal.ClientListDataTransfers(p0) } -func (s *FullNodeStruct) ClientListDeals(p0 context.Context) ([]api.DealInfo, error) { +func (s *FullNodeStruct) ClientListDeals(p0 context.Context) ([]DealInfo, error) { return s.Internal.ClientListDeals(p0) } -func (s *FullNodeStruct) ClientListImports(p0 context.Context) ([]api.Import, error) { +func (s *FullNodeStruct) ClientListImports(p0 context.Context) ([]Import, error) { return s.Internal.ClientListImports(p0) } -func (s *FullNodeStruct) ClientMinerQueryOffer(p0 context.Context, p1 address.Address, p2 cid.Cid, p3 *cid.Cid) (api.QueryOffer, error) { +func (s *FullNodeStruct) ClientMinerQueryOffer(p0 context.Context, p1 address.Address, p2 cid.Cid, p3 *cid.Cid) (QueryOffer, error) { return s.Internal.ClientMinerQueryOffer(p0, p1, p2, p3) } @@ -1046,7 +1045,7 @@ func (s *FullNodeStruct) ClientRestartDataTransfer(p0 context.Context, p1 datatr return s.Internal.ClientRestartDataTransfer(p0, p1, p2, p3) } -func (s *FullNodeStruct) ClientRetrieve(p0 context.Context, p1 api.RetrievalOrder, p2 *api.FileRef) error { +func (s *FullNodeStruct) ClientRetrieve(p0 context.Context, p1 RetrievalOrder, p2 *FileRef) error { return s.Internal.ClientRetrieve(p0, p1, p2) } @@ -1054,11 +1053,11 @@ func (s *FullNodeStruct) ClientRetrieveTryRestartInsufficientFunds(p0 context.Co return s.Internal.ClientRetrieveTryRestartInsufficientFunds(p0, p1) } -func (s *FullNodeStruct) ClientRetrieveWithEvents(p0 context.Context, p1 api.RetrievalOrder, p2 *api.FileRef) (<-chan marketevents.RetrievalEvent, error) { +func (s *FullNodeStruct) ClientRetrieveWithEvents(p0 context.Context, p1 RetrievalOrder, p2 *FileRef) (<-chan marketevents.RetrievalEvent, error) { return s.Internal.ClientRetrieveWithEvents(p0, p1, p2) } -func (s *FullNodeStruct) ClientStartDeal(p0 context.Context, p1 *api.StartDealParams) (*cid.Cid, error) { +func (s *FullNodeStruct) ClientStartDeal(p0 context.Context, p1 *StartDealParams) (*cid.Cid, error) { return s.Internal.ClientStartDeal(p0, p1) } @@ -1078,7 +1077,7 @@ func (s *FullNodeStruct) GasEstimateGasPremium(p0 context.Context, p1 uint64, p2 return s.Internal.GasEstimateGasPremium(p0, p1, p2, p3, p4) } -func (s *FullNodeStruct) GasEstimateMessageGas(p0 context.Context, p1 *types.Message, p2 *api.MessageSendSpec, p3 types.TipSetKey) (*types.Message, error) { +func (s *FullNodeStruct) GasEstimateMessageGas(p0 context.Context, p1 *types.Message, p2 *MessageSendSpec, p3 types.TipSetKey) (*types.Message, error) { return s.Internal.GasEstimateMessageGas(p0, p1, p2, p3) } @@ -1102,11 +1101,11 @@ func (s *FullNodeStruct) MarketWithdraw(p0 context.Context, p1 address.Address, return s.Internal.MarketWithdraw(p0, p1, p2, p3) } -func (s *FullNodeStruct) MinerCreateBlock(p0 context.Context, p1 *api.BlockTemplate) (*types.BlockMsg, error) { +func (s *FullNodeStruct) MinerCreateBlock(p0 context.Context, p1 *BlockTemplate) (*types.BlockMsg, error) { return s.Internal.MinerCreateBlock(p0, p1) } -func (s *FullNodeStruct) MinerGetBaseInfo(p0 context.Context, p1 address.Address, p2 abi.ChainEpoch, p3 types.TipSetKey) (*api.MiningBaseInfo, error) { +func (s *FullNodeStruct) MinerGetBaseInfo(p0 context.Context, p1 address.Address, p2 abi.ChainEpoch, p3 types.TipSetKey) (*MiningBaseInfo, error) { return s.Internal.MinerGetBaseInfo(p0, p1, p2, p3) } @@ -1114,7 +1113,7 @@ func (s *FullNodeStruct) MpoolBatchPush(p0 context.Context, p1 []*types.SignedMe return s.Internal.MpoolBatchPush(p0, p1) } -func (s *FullNodeStruct) MpoolBatchPushMessage(p0 context.Context, p1 []*types.Message, p2 *api.MessageSendSpec) ([]*types.SignedMessage, error) { +func (s *FullNodeStruct) MpoolBatchPushMessage(p0 context.Context, p1 []*types.Message, p2 *MessageSendSpec) ([]*types.SignedMessage, error) { return s.Internal.MpoolBatchPushMessage(p0, p1, p2) } @@ -1142,7 +1141,7 @@ func (s *FullNodeStruct) MpoolPush(p0 context.Context, p1 *types.SignedMessage) return s.Internal.MpoolPush(p0, p1) } -func (s *FullNodeStruct) MpoolPushMessage(p0 context.Context, p1 *types.Message, p2 *api.MessageSendSpec) (*types.SignedMessage, error) { +func (s *FullNodeStruct) MpoolPushMessage(p0 context.Context, p1 *types.Message, p2 *MessageSendSpec) (*types.SignedMessage, error) { return s.Internal.MpoolPushMessage(p0, p1, p2) } @@ -1158,7 +1157,7 @@ func (s *FullNodeStruct) MpoolSetConfig(p0 context.Context, p1 *types.MpoolConfi return s.Internal.MpoolSetConfig(p0, p1) } -func (s *FullNodeStruct) MpoolSub(p0 context.Context) (<-chan api.MpoolUpdate, error) { +func (s *FullNodeStruct) MpoolSub(p0 context.Context) (<-chan MpoolUpdate, error) { return s.Internal.MpoolSub(p0) } @@ -1194,7 +1193,7 @@ func (s *FullNodeStruct) MsigGetAvailableBalance(p0 context.Context, p1 address. return s.Internal.MsigGetAvailableBalance(p0, p1, p2) } -func (s *FullNodeStruct) MsigGetPending(p0 context.Context, p1 address.Address, p2 types.TipSetKey) ([]*api.MsigTransaction, error) { +func (s *FullNodeStruct) MsigGetPending(p0 context.Context, p1 address.Address, p2 types.TipSetKey) ([]*MsigTransaction, error) { return s.Internal.MsigGetPending(p0, p1, p2) } @@ -1202,7 +1201,7 @@ func (s *FullNodeStruct) MsigGetVested(p0 context.Context, p1 address.Address, p return s.Internal.MsigGetVested(p0, p1, p2, p3) } -func (s *FullNodeStruct) MsigGetVestingSchedule(p0 context.Context, p1 address.Address, p2 types.TipSetKey) (api.MsigVesting, error) { +func (s *FullNodeStruct) MsigGetVestingSchedule(p0 context.Context, p1 address.Address, p2 types.TipSetKey) (MsigVesting, error) { return s.Internal.MsigGetVestingSchedule(p0, p1, p2) } @@ -1230,11 +1229,11 @@ func (s *FullNodeStruct) PaychAllocateLane(p0 context.Context, p1 address.Addres return s.Internal.PaychAllocateLane(p0, p1) } -func (s *FullNodeStruct) PaychAvailableFunds(p0 context.Context, p1 address.Address) (*api.ChannelAvailableFunds, error) { +func (s *FullNodeStruct) PaychAvailableFunds(p0 context.Context, p1 address.Address) (*ChannelAvailableFunds, error) { return s.Internal.PaychAvailableFunds(p0, p1) } -func (s *FullNodeStruct) PaychAvailableFundsByFromTo(p0 context.Context, p1 address.Address, p2 address.Address) (*api.ChannelAvailableFunds, error) { +func (s *FullNodeStruct) PaychAvailableFundsByFromTo(p0 context.Context, p1 address.Address, p2 address.Address) (*ChannelAvailableFunds, error) { return s.Internal.PaychAvailableFundsByFromTo(p0, p1, p2) } @@ -1242,7 +1241,7 @@ func (s *FullNodeStruct) PaychCollect(p0 context.Context, p1 address.Address) (c return s.Internal.PaychCollect(p0, p1) } -func (s *FullNodeStruct) PaychGet(p0 context.Context, p1 address.Address, p2 address.Address, p3 types.BigInt) (*api.ChannelInfo, error) { +func (s *FullNodeStruct) PaychGet(p0 context.Context, p1 address.Address, p2 address.Address, p3 types.BigInt) (*ChannelInfo, error) { return s.Internal.PaychGet(p0, p1, p2, p3) } @@ -1254,7 +1253,7 @@ func (s *FullNodeStruct) PaychList(p0 context.Context) ([]address.Address, error return s.Internal.PaychList(p0) } -func (s *FullNodeStruct) PaychNewPayment(p0 context.Context, p1 address.Address, p2 address.Address, p3 []api.VoucherSpec) (*api.PaymentInfo, error) { +func (s *FullNodeStruct) PaychNewPayment(p0 context.Context, p1 address.Address, p2 address.Address, p3 []VoucherSpec) (*PaymentInfo, error) { return s.Internal.PaychNewPayment(p0, p1, p2, p3) } @@ -1262,7 +1261,7 @@ func (s *FullNodeStruct) PaychSettle(p0 context.Context, p1 address.Address) (ci return s.Internal.PaychSettle(p0, p1) } -func (s *FullNodeStruct) PaychStatus(p0 context.Context, p1 address.Address) (*api.PaychStatus, error) { +func (s *FullNodeStruct) PaychStatus(p0 context.Context, p1 address.Address) (*PaychStatus, error) { return s.Internal.PaychStatus(p0, p1) } @@ -1278,7 +1277,7 @@ func (s *FullNodeStruct) PaychVoucherCheckValid(p0 context.Context, p1 address.A return s.Internal.PaychVoucherCheckValid(p0, p1, p2) } -func (s *FullNodeStruct) PaychVoucherCreate(p0 context.Context, p1 address.Address, p2 types.BigInt, p3 uint64) (*api.VoucherCreateResult, error) { +func (s *FullNodeStruct) PaychVoucherCreate(p0 context.Context, p1 address.Address, p2 types.BigInt, p3 uint64) (*VoucherCreateResult, error) { return s.Internal.PaychVoucherCreate(p0, p1, p2, p3) } @@ -1294,11 +1293,11 @@ func (s *FullNodeStruct) StateAccountKey(p0 context.Context, p1 address.Address, return s.Internal.StateAccountKey(p0, p1, p2) } -func (s *FullNodeStruct) StateAllMinerFaults(p0 context.Context, p1 abi.ChainEpoch, p2 types.TipSetKey) ([]*api.Fault, error) { +func (s *FullNodeStruct) StateAllMinerFaults(p0 context.Context, p1 abi.ChainEpoch, p2 types.TipSetKey) ([]*Fault, error) { return s.Internal.StateAllMinerFaults(p0, p1, p2) } -func (s *FullNodeStruct) StateCall(p0 context.Context, p1 *types.Message, p2 types.TipSetKey) (*api.InvocResult, error) { +func (s *FullNodeStruct) StateCall(p0 context.Context, p1 *types.Message, p2 types.TipSetKey) (*InvocResult, error) { return s.Internal.StateCall(p0, p1, p2) } @@ -1310,11 +1309,11 @@ func (s *FullNodeStruct) StateCirculatingSupply(p0 context.Context, p1 types.Tip return s.Internal.StateCirculatingSupply(p0, p1) } -func (s *FullNodeStruct) StateCompute(p0 context.Context, p1 abi.ChainEpoch, p2 []*types.Message, p3 types.TipSetKey) (*api.ComputeStateOutput, error) { +func (s *FullNodeStruct) StateCompute(p0 context.Context, p1 abi.ChainEpoch, p2 []*types.Message, p3 types.TipSetKey) (*ComputeStateOutput, error) { return s.Internal.StateCompute(p0, p1, p2, p3) } -func (s *FullNodeStruct) StateDealProviderCollateralBounds(p0 context.Context, p1 abi.PaddedPieceSize, p2 bool, p3 types.TipSetKey) (api.DealCollateralBounds, error) { +func (s *FullNodeStruct) StateDealProviderCollateralBounds(p0 context.Context, p1 abi.PaddedPieceSize, p2 bool, p3 types.TipSetKey) (DealCollateralBounds, error) { return s.Internal.StateDealProviderCollateralBounds(p0, p1, p2, p3) } @@ -1334,7 +1333,7 @@ func (s *FullNodeStruct) StateListActors(p0 context.Context, p1 types.TipSetKey) return s.Internal.StateListActors(p0, p1) } -func (s *FullNodeStruct) StateListMessages(p0 context.Context, p1 *api.MessageMatch, p2 types.TipSetKey, p3 abi.ChainEpoch) ([]cid.Cid, error) { +func (s *FullNodeStruct) StateListMessages(p0 context.Context, p1 *MessageMatch, p2 types.TipSetKey, p3 abi.ChainEpoch) ([]cid.Cid, error) { return s.Internal.StateListMessages(p0, p1, p2, p3) } @@ -1346,19 +1345,19 @@ func (s *FullNodeStruct) StateLookupID(p0 context.Context, p1 address.Address, p return s.Internal.StateLookupID(p0, p1, p2) } -func (s *FullNodeStruct) StateMarketBalance(p0 context.Context, p1 address.Address, p2 types.TipSetKey) (api.MarketBalance, error) { +func (s *FullNodeStruct) StateMarketBalance(p0 context.Context, p1 address.Address, p2 types.TipSetKey) (MarketBalance, error) { return s.Internal.StateMarketBalance(p0, p1, p2) } -func (s *FullNodeStruct) StateMarketDeals(p0 context.Context, p1 types.TipSetKey) (map[string]api.MarketDeal, error) { +func (s *FullNodeStruct) StateMarketDeals(p0 context.Context, p1 types.TipSetKey) (map[string]MarketDeal, error) { return s.Internal.StateMarketDeals(p0, p1) } -func (s *FullNodeStruct) StateMarketParticipants(p0 context.Context, p1 types.TipSetKey) (map[string]api.MarketBalance, error) { +func (s *FullNodeStruct) StateMarketParticipants(p0 context.Context, p1 types.TipSetKey) (map[string]MarketBalance, error) { return s.Internal.StateMarketParticipants(p0, p1) } -func (s *FullNodeStruct) StateMarketStorageDeal(p0 context.Context, p1 abi.DealID, p2 types.TipSetKey) (*api.MarketDeal, error) { +func (s *FullNodeStruct) StateMarketStorageDeal(p0 context.Context, p1 abi.DealID, p2 types.TipSetKey) (*MarketDeal, error) { return s.Internal.StateMarketStorageDeal(p0, p1, p2) } @@ -1370,7 +1369,7 @@ func (s *FullNodeStruct) StateMinerAvailableBalance(p0 context.Context, p1 addre return s.Internal.StateMinerAvailableBalance(p0, p1, p2) } -func (s *FullNodeStruct) StateMinerDeadlines(p0 context.Context, p1 address.Address, p2 types.TipSetKey) ([]api.Deadline, error) { +func (s *FullNodeStruct) StateMinerDeadlines(p0 context.Context, p1 address.Address, p2 types.TipSetKey) ([]Deadline, error) { return s.Internal.StateMinerDeadlines(p0, p1, p2) } @@ -1386,11 +1385,11 @@ func (s *FullNodeStruct) StateMinerInitialPledgeCollateral(p0 context.Context, p return s.Internal.StateMinerInitialPledgeCollateral(p0, p1, p2, p3) } -func (s *FullNodeStruct) StateMinerPartitions(p0 context.Context, p1 address.Address, p2 uint64, p3 types.TipSetKey) ([]api.Partition, error) { +func (s *FullNodeStruct) StateMinerPartitions(p0 context.Context, p1 address.Address, p2 uint64, p3 types.TipSetKey) ([]Partition, error) { return s.Internal.StateMinerPartitions(p0, p1, p2, p3) } -func (s *FullNodeStruct) StateMinerPower(p0 context.Context, p1 address.Address, p2 types.TipSetKey) (*api.MinerPower, error) { +func (s *FullNodeStruct) StateMinerPower(p0 context.Context, p1 address.Address, p2 types.TipSetKey) (*MinerPower, error) { return s.Internal.StateMinerPower(p0, p1, p2) } @@ -1410,7 +1409,7 @@ func (s *FullNodeStruct) StateMinerSectorAllocated(p0 context.Context, p1 addres return s.Internal.StateMinerSectorAllocated(p0, p1, p2, p3) } -func (s *FullNodeStruct) StateMinerSectorCount(p0 context.Context, p1 address.Address, p2 types.TipSetKey) (api.MinerSectors, error) { +func (s *FullNodeStruct) StateMinerSectorCount(p0 context.Context, p1 address.Address, p2 types.TipSetKey) (MinerSectors, error) { return s.Internal.StateMinerSectorCount(p0, p1, p2) } @@ -1426,19 +1425,19 @@ func (s *FullNodeStruct) StateNetworkVersion(p0 context.Context, p1 types.TipSet return s.Internal.StateNetworkVersion(p0, p1) } -func (s *FullNodeStruct) StateReadState(p0 context.Context, p1 address.Address, p2 types.TipSetKey) (*api.ActorState, error) { +func (s *FullNodeStruct) StateReadState(p0 context.Context, p1 address.Address, p2 types.TipSetKey) (*ActorState, error) { return s.Internal.StateReadState(p0, p1, p2) } -func (s *FullNodeStruct) StateReplay(p0 context.Context, p1 types.TipSetKey, p2 cid.Cid) (*api.InvocResult, error) { +func (s *FullNodeStruct) StateReplay(p0 context.Context, p1 types.TipSetKey, p2 cid.Cid) (*InvocResult, error) { return s.Internal.StateReplay(p0, p1, p2) } -func (s *FullNodeStruct) StateSearchMsg(p0 context.Context, p1 cid.Cid) (*api.MsgLookup, error) { +func (s *FullNodeStruct) StateSearchMsg(p0 context.Context, p1 cid.Cid) (*MsgLookup, error) { return s.Internal.StateSearchMsg(p0, p1) } -func (s *FullNodeStruct) StateSearchMsgLimited(p0 context.Context, p1 cid.Cid, p2 abi.ChainEpoch) (*api.MsgLookup, error) { +func (s *FullNodeStruct) StateSearchMsgLimited(p0 context.Context, p1 cid.Cid, p2 abi.ChainEpoch) (*MsgLookup, error) { return s.Internal.StateSearchMsgLimited(p0, p1, p2) } @@ -1458,7 +1457,7 @@ func (s *FullNodeStruct) StateSectorPreCommitInfo(p0 context.Context, p1 address return s.Internal.StateSectorPreCommitInfo(p0, p1, p2, p3) } -func (s *FullNodeStruct) StateVMCirculatingSupplyInternal(p0 context.Context, p1 types.TipSetKey) (api.CirculatingSupply, error) { +func (s *FullNodeStruct) StateVMCirculatingSupplyInternal(p0 context.Context, p1 types.TipSetKey) (CirculatingSupply, error) { return s.Internal.StateVMCirculatingSupplyInternal(p0, p1) } @@ -1474,11 +1473,11 @@ func (s *FullNodeStruct) StateVerifierStatus(p0 context.Context, p1 address.Addr return s.Internal.StateVerifierStatus(p0, p1, p2) } -func (s *FullNodeStruct) StateWaitMsg(p0 context.Context, p1 cid.Cid, p2 uint64) (*api.MsgLookup, error) { +func (s *FullNodeStruct) StateWaitMsg(p0 context.Context, p1 cid.Cid, p2 uint64) (*MsgLookup, error) { return s.Internal.StateWaitMsg(p0, p1, p2) } -func (s *FullNodeStruct) StateWaitMsgLimited(p0 context.Context, p1 cid.Cid, p2 uint64, p3 abi.ChainEpoch) (*api.MsgLookup, error) { +func (s *FullNodeStruct) StateWaitMsgLimited(p0 context.Context, p1 cid.Cid, p2 uint64, p3 abi.ChainEpoch) (*MsgLookup, error) { return s.Internal.StateWaitMsgLimited(p0, p1, p2, p3) } @@ -1498,7 +1497,7 @@ func (s *FullNodeStruct) SyncMarkBad(p0 context.Context, p1 cid.Cid) error { return s.Internal.SyncMarkBad(p0, p1) } -func (s *FullNodeStruct) SyncState(p0 context.Context) (*api.SyncState, error) { +func (s *FullNodeStruct) SyncState(p0 context.Context) (*SyncState, error) { return s.Internal.SyncState(p0) } @@ -1570,7 +1569,7 @@ func (s *FullNodeStruct) WalletVerify(p0 context.Context, p1 address.Address, p2 return s.Internal.WalletVerify(p0, p1, p2, p3) } -func (s *GatewayStruct) ChainGetBlockMessages(p0 context.Context, p1 cid.Cid) (*api.BlockMessages, error) { +func (s *GatewayStruct) ChainGetBlockMessages(p0 context.Context, p1 cid.Cid) (*BlockMessages, error) { return s.Internal.ChainGetBlockMessages(p0, p1) } @@ -1594,7 +1593,7 @@ func (s *GatewayStruct) ChainHead(p0 context.Context) (*types.TipSet, error) { return s.Internal.ChainHead(p0) } -func (s *GatewayStruct) ChainNotify(p0 context.Context) (<-chan []*api.HeadChange, error) { +func (s *GatewayStruct) ChainNotify(p0 context.Context) (<-chan []*HeadChange, error) { return s.Internal.ChainNotify(p0) } @@ -1602,7 +1601,7 @@ func (s *GatewayStruct) ChainReadObj(p0 context.Context, p1 cid.Cid) ([]byte, er return s.Internal.ChainReadObj(p0, p1) } -func (s *GatewayStruct) GasEstimateMessageGas(p0 context.Context, p1 *types.Message, p2 *api.MessageSendSpec, p3 types.TipSetKey) (*types.Message, error) { +func (s *GatewayStruct) GasEstimateMessageGas(p0 context.Context, p1 *types.Message, p2 *MessageSendSpec, p3 types.TipSetKey) (*types.Message, error) { return s.Internal.GasEstimateMessageGas(p0, p1, p2, p3) } @@ -1614,7 +1613,7 @@ func (s *GatewayStruct) MsigGetAvailableBalance(p0 context.Context, p1 address.A return s.Internal.MsigGetAvailableBalance(p0, p1, p2) } -func (s *GatewayStruct) MsigGetPending(p0 context.Context, p1 address.Address, p2 types.TipSetKey) ([]*api.MsigTransaction, error) { +func (s *GatewayStruct) MsigGetPending(p0 context.Context, p1 address.Address, p2 types.TipSetKey) ([]*MsigTransaction, error) { return s.Internal.MsigGetPending(p0, p1, p2) } @@ -1626,7 +1625,7 @@ func (s *GatewayStruct) StateAccountKey(p0 context.Context, p1 address.Address, return s.Internal.StateAccountKey(p0, p1, p2) } -func (s *GatewayStruct) StateDealProviderCollateralBounds(p0 context.Context, p1 abi.PaddedPieceSize, p2 bool, p3 types.TipSetKey) (api.DealCollateralBounds, error) { +func (s *GatewayStruct) StateDealProviderCollateralBounds(p0 context.Context, p1 abi.PaddedPieceSize, p2 bool, p3 types.TipSetKey) (DealCollateralBounds, error) { return s.Internal.StateDealProviderCollateralBounds(p0, p1, p2, p3) } @@ -1646,11 +1645,11 @@ func (s *GatewayStruct) StateLookupID(p0 context.Context, p1 address.Address, p2 return s.Internal.StateLookupID(p0, p1, p2) } -func (s *GatewayStruct) StateMarketBalance(p0 context.Context, p1 address.Address, p2 types.TipSetKey) (api.MarketBalance, error) { +func (s *GatewayStruct) StateMarketBalance(p0 context.Context, p1 address.Address, p2 types.TipSetKey) (MarketBalance, error) { return s.Internal.StateMarketBalance(p0, p1, p2) } -func (s *GatewayStruct) StateMarketStorageDeal(p0 context.Context, p1 abi.DealID, p2 types.TipSetKey) (*api.MarketDeal, error) { +func (s *GatewayStruct) StateMarketStorageDeal(p0 context.Context, p1 abi.DealID, p2 types.TipSetKey) (*MarketDeal, error) { return s.Internal.StateMarketStorageDeal(p0, p1, p2) } @@ -1658,7 +1657,7 @@ func (s *GatewayStruct) StateMinerInfo(p0 context.Context, p1 address.Address, p return s.Internal.StateMinerInfo(p0, p1, p2) } -func (s *GatewayStruct) StateMinerPower(p0 context.Context, p1 address.Address, p2 types.TipSetKey) (*api.MinerPower, error) { +func (s *GatewayStruct) StateMinerPower(p0 context.Context, p1 address.Address, p2 types.TipSetKey) (*MinerPower, error) { return s.Internal.StateMinerPower(p0, p1, p2) } @@ -1670,7 +1669,7 @@ func (s *GatewayStruct) StateNetworkVersion(p0 context.Context, p1 types.TipSetK return s.Internal.StateNetworkVersion(p0, p1) } -func (s *GatewayStruct) StateSearchMsg(p0 context.Context, p1 cid.Cid) (*api.MsgLookup, error) { +func (s *GatewayStruct) StateSearchMsg(p0 context.Context, p1 cid.Cid) (*MsgLookup, error) { return s.Internal.StateSearchMsg(p0, p1) } @@ -1682,11 +1681,11 @@ func (s *GatewayStruct) StateVerifiedClientStatus(p0 context.Context, p1 address return s.Internal.StateVerifiedClientStatus(p0, p1, p2) } -func (s *GatewayStruct) StateWaitMsg(p0 context.Context, p1 cid.Cid, p2 uint64) (*api.MsgLookup, error) { +func (s *GatewayStruct) StateWaitMsg(p0 context.Context, p1 cid.Cid, p2 uint64) (*MsgLookup, error) { return s.Internal.StateWaitMsg(p0, p1, p2) } -func (s *SignableStruct) Sign(p0 context.Context, p1 api.SignFunc) error { +func (s *SignableStruct) Sign(p0 context.Context, p1 SignFunc) error { return s.Internal.Sign(p0, p1) } @@ -1694,7 +1693,7 @@ func (s *StorageMinerStruct) ActorAddress(p0 context.Context) (address.Address, return s.Internal.ActorAddress(p0) } -func (s *StorageMinerStruct) ActorAddressConfig(p0 context.Context) (api.AddressConfig, error) { +func (s *StorageMinerStruct) ActorAddressConfig(p0 context.Context) (AddressConfig, error) { return s.Internal.ActorAddressConfig(p0) } @@ -1738,7 +1737,7 @@ func (s *StorageMinerStruct) DealsImportData(p0 context.Context, p1 cid.Cid, p2 return s.Internal.DealsImportData(p0, p1, p2) } -func (s *StorageMinerStruct) DealsList(p0 context.Context) ([]api.MarketDeal, error) { +func (s *StorageMinerStruct) DealsList(p0 context.Context) ([]MarketDeal, error) { return s.Internal.DealsList(p0) } @@ -1778,7 +1777,7 @@ func (s *StorageMinerStruct) MarketCancelDataTransfer(p0 context.Context, p1 dat return s.Internal.MarketCancelDataTransfer(p0, p1, p2, p3) } -func (s *StorageMinerStruct) MarketDataTransferUpdates(p0 context.Context) (<-chan api.DataTransferChannel, error) { +func (s *StorageMinerStruct) MarketDataTransferUpdates(p0 context.Context) (<-chan DataTransferChannel, error) { return s.Internal.MarketDataTransferUpdates(p0) } @@ -1798,11 +1797,11 @@ func (s *StorageMinerStruct) MarketImportDealData(p0 context.Context, p1 cid.Cid return s.Internal.MarketImportDealData(p0, p1, p2) } -func (s *StorageMinerStruct) MarketListDataTransfers(p0 context.Context) ([]api.DataTransferChannel, error) { +func (s *StorageMinerStruct) MarketListDataTransfers(p0 context.Context) ([]DataTransferChannel, error) { return s.Internal.MarketListDataTransfers(p0) } -func (s *StorageMinerStruct) MarketListDeals(p0 context.Context) ([]api.MarketDeal, error) { +func (s *StorageMinerStruct) MarketListDeals(p0 context.Context) ([]MarketDeal, error) { return s.Internal.MarketListDeals(p0) } @@ -1814,7 +1813,7 @@ func (s *StorageMinerStruct) MarketListRetrievalDeals(p0 context.Context) ([]ret return s.Internal.MarketListRetrievalDeals(p0) } -func (s *StorageMinerStruct) MarketPendingDeals(p0 context.Context) (api.PendingDealInfo, error) { +func (s *StorageMinerStruct) MarketPendingDeals(p0 context.Context) (PendingDealInfo, error) { return s.Internal.MarketPendingDeals(p0) } @@ -1954,23 +1953,23 @@ func (s *StorageMinerStruct) SectorsList(p0 context.Context) ([]abi.SectorNumber return s.Internal.SectorsList(p0) } -func (s *StorageMinerStruct) SectorsListInStates(p0 context.Context, p1 []api.SectorState) ([]abi.SectorNumber, error) { +func (s *StorageMinerStruct) SectorsListInStates(p0 context.Context, p1 []SectorState) ([]abi.SectorNumber, error) { return s.Internal.SectorsListInStates(p0, p1) } -func (s *StorageMinerStruct) SectorsRefs(p0 context.Context) (map[string][]api.SealedRef, error) { +func (s *StorageMinerStruct) SectorsRefs(p0 context.Context) (map[string][]SealedRef, error) { return s.Internal.SectorsRefs(p0) } -func (s *StorageMinerStruct) SectorsStatus(p0 context.Context, p1 abi.SectorNumber, p2 bool) (api.SectorInfo, error) { +func (s *StorageMinerStruct) SectorsStatus(p0 context.Context, p1 abi.SectorNumber, p2 bool) (SectorInfo, error) { return s.Internal.SectorsStatus(p0, p1, p2) } -func (s *StorageMinerStruct) SectorsSummary(p0 context.Context) (map[api.SectorState]int, error) { +func (s *StorageMinerStruct) SectorsSummary(p0 context.Context) (map[SectorState]int, error) { return s.Internal.SectorsSummary(p0) } -func (s *StorageMinerStruct) SectorsUpdate(p0 context.Context, p1 abi.SectorNumber, p2 api.SectorState) error { +func (s *StorageMinerStruct) SectorsUpdate(p0 context.Context, p1 abi.SectorNumber, p2 SectorState) error { return s.Internal.SectorsUpdate(p0, p1, p2) } @@ -2062,7 +2061,7 @@ func (s *WalletStruct) WalletNew(p0 context.Context, p1 types.KeyType) (address. return s.Internal.WalletNew(p0, p1) } -func (s *WalletStruct) WalletSign(p0 context.Context, p1 address.Address, p2 []byte, p3 api.MsgMeta) (*crypto.Signature, error) { +func (s *WalletStruct) WalletSign(p0 context.Context, p1 address.Address, p2 []byte, p3 MsgMeta) (*crypto.Signature, error) { return s.Internal.WalletSign(p0, p1, p2, p3) } @@ -2154,7 +2153,7 @@ func (s *WorkerStruct) UnsealPiece(p0 context.Context, p1 storage.SectorRef, p2 return s.Internal.UnsealPiece(p0, p1, p2, p3, p4, p5) } -func (s *WorkerStruct) Version(p0 context.Context) (api.Version, error) { +func (s *WorkerStruct) Version(p0 context.Context) (Version, error) { return s.Internal.Version(p0) } diff --git a/api/v0api/common.go b/api/v0api/common.go deleted file mode 100644 index 6848fa6a8..000000000 --- a/api/v0api/common.go +++ /dev/null @@ -1,77 +0,0 @@ -package v0api - -import ( - "context" - - "github.com/filecoin-project/lotus/api" - - "github.com/google/uuid" - - "github.com/filecoin-project/go-jsonrpc/auth" - metrics "github.com/libp2p/go-libp2p-core/metrics" - "github.com/libp2p/go-libp2p-core/network" - "github.com/libp2p/go-libp2p-core/peer" - protocol "github.com/libp2p/go-libp2p-core/protocol" - - apitypes "github.com/filecoin-project/lotus/api/types" -) - -type Common interface { - - // MethodGroup: Auth - - AuthVerify(ctx context.Context, token string) ([]auth.Permission, error) //perm:read - AuthNew(ctx context.Context, perms []auth.Permission) ([]byte, error) //perm:admin - - // MethodGroup: Net - - NetConnectedness(context.Context, peer.ID) (network.Connectedness, error) //perm:read - NetPeers(context.Context) ([]peer.AddrInfo, error) //perm:read - NetConnect(context.Context, peer.AddrInfo) error //perm:write - NetAddrsListen(context.Context) (peer.AddrInfo, error) //perm:read - NetDisconnect(context.Context, peer.ID) error //perm:write - NetFindPeer(context.Context, peer.ID) (peer.AddrInfo, error) //perm:read - NetPubsubScores(context.Context) ([]api.PubsubScore, error) //perm:read - NetAutoNatStatus(context.Context) (api.NatInfo, error) //perm:read - NetAgentVersion(ctx context.Context, p peer.ID) (string, error) //perm:read - NetPeerInfo(context.Context, peer.ID) (*api.ExtendedPeerInfo, error) //perm:read - - // NetBandwidthStats returns statistics about the nodes total bandwidth - // usage and current rate across all peers and protocols. - NetBandwidthStats(ctx context.Context) (metrics.Stats, error) //perm:read - - // NetBandwidthStatsByPeer returns statistics about the nodes bandwidth - // usage and current rate per peer - NetBandwidthStatsByPeer(ctx context.Context) (map[string]metrics.Stats, error) //perm:read - - // NetBandwidthStatsByProtocol returns statistics about the nodes bandwidth - // usage and current rate per protocol - NetBandwidthStatsByProtocol(ctx context.Context) (map[protocol.ID]metrics.Stats, error) //perm:read - - // ConnectionGater API - NetBlockAdd(ctx context.Context, acl api.NetBlockList) error //perm:admin - NetBlockRemove(ctx context.Context, acl api.NetBlockList) error //perm:admin - NetBlockList(ctx context.Context) (api.NetBlockList, error) //perm:read - - // MethodGroup: Common - - // Discover returns an OpenRPC document describing an RPC API. - Discover(ctx context.Context) (apitypes.OpenRPCDocument, error) //perm:read - - // ID returns peerID of libp2p node backing this API - ID(context.Context) (peer.ID, error) //perm:read - - // Version provides information about API provider - Version(context.Context) (api.APIVersion, error) //perm:read - - LogList(context.Context) ([]string, error) //perm:write - LogSetLevel(context.Context, string, string) error //perm:write - - // trigger graceful shutdown - Shutdown(context.Context) error //perm:admin - - // Session returns a random UUID of api provider session - Session(context.Context) (uuid.UUID, error) //perm:read - - Closing(context.Context) (<-chan struct{}, error) //perm:read -} diff --git a/api/v0api/latest.go b/api/v0api/latest.go new file mode 100644 index 000000000..9e29f948d --- /dev/null +++ b/api/v0api/latest.go @@ -0,0 +1,24 @@ +package v0api + +import ( + "github.com/filecoin-project/lotus/api" +) + +type Common = api.Common +type CommonStruct = api.CommonStruct + +type Gateway = api.Gateway + +type StorageMiner = api.StorageMiner +type StorageMinerStruct = api.StorageMinerStruct + +type Worker = api.Worker +type WorkerStruct = api.WorkerStruct + +func PermissionedStorMinerAPI(a StorageMiner) StorageMiner { + return api.PermissionedStorMinerAPI(a) +} + +func PermissionedWorkerAPI(a Worker) Worker { + return api.PermissionedWorkerAPI(a) +} diff --git a/api/v0api/permissioned.go b/api/v0api/permissioned.go new file mode 100644 index 000000000..ad64bc29e --- /dev/null +++ b/api/v0api/permissioned.go @@ -0,0 +1,13 @@ +package v0api + +import ( + "github.com/filecoin-project/go-jsonrpc/auth" + "github.com/filecoin-project/lotus/api" +) + +func PermissionedFullAPI(a FullNode) FullNode { + var out FullNodeStruct + auth.PermissionedProxy(api.AllPermissions, api.DefaultPerms, a, &out.Internal) + auth.PermissionedProxy(api.AllPermissions, api.DefaultPerms, a, &out.CommonStruct.Internal) + return &out +} diff --git a/api/v0api/storage.go b/api/v0api/storage.go deleted file mode 100644 index a05f48285..000000000 --- a/api/v0api/storage.go +++ /dev/null @@ -1,9 +0,0 @@ -package v0api - -import ( - "github.com/filecoin-project/lotus/api" - "github.com/filecoin-project/lotus/api/apistruct" -) - -type StorageMiner = api.StorageMiner -type StorageMinerStruct = apistruct.StorageMinerStruct diff --git a/api/v0api/struct.go b/api/v0api/struct.go index e5550814f..0a7fb97dc 100644 --- a/api/v0api/struct.go +++ b/api/v0api/struct.go @@ -9,7 +9,6 @@ import ( "github.com/filecoin-project/go-bitfield" datatransfer "github.com/filecoin-project/go-data-transfer" "github.com/filecoin-project/go-fil-markets/storagemarket" - "github.com/filecoin-project/go-jsonrpc/auth" "github.com/filecoin-project/go-multistore" "github.com/filecoin-project/go-state-types/abi" "github.com/filecoin-project/go-state-types/crypto" @@ -21,70 +20,10 @@ import ( "github.com/filecoin-project/lotus/chain/types" marketevents "github.com/filecoin-project/lotus/markets/loggers" "github.com/filecoin-project/lotus/node/modules/dtypes" - "github.com/google/uuid" "github.com/ipfs/go-cid" - metrics "github.com/libp2p/go-libp2p-core/metrics" - "github.com/libp2p/go-libp2p-core/network" "github.com/libp2p/go-libp2p-core/peer" - protocol "github.com/libp2p/go-libp2p-core/protocol" ) -type CommonStruct struct { - Internal struct { - AuthNew func(p0 context.Context, p1 []auth.Permission) ([]byte, error) `perm:"admin"` - - AuthVerify func(p0 context.Context, p1 string) ([]auth.Permission, error) `perm:"read"` - - Closing func(p0 context.Context) (<-chan struct{}, error) `perm:"read"` - - Discover func(p0 context.Context) (apitypes.OpenRPCDocument, error) `perm:"read"` - - ID func(p0 context.Context) (peer.ID, error) `perm:"read"` - - LogList func(p0 context.Context) ([]string, error) `perm:"write"` - - LogSetLevel func(p0 context.Context, p1 string, p2 string) error `perm:"write"` - - NetAddrsListen func(p0 context.Context) (peer.AddrInfo, error) `perm:"read"` - - NetAgentVersion func(p0 context.Context, p1 peer.ID) (string, error) `perm:"read"` - - NetAutoNatStatus func(p0 context.Context) (api.NatInfo, error) `perm:"read"` - - NetBandwidthStats func(p0 context.Context) (metrics.Stats, error) `perm:"read"` - - NetBandwidthStatsByPeer func(p0 context.Context) (map[string]metrics.Stats, error) `perm:"read"` - - NetBandwidthStatsByProtocol func(p0 context.Context) (map[protocol.ID]metrics.Stats, error) `perm:"read"` - - NetBlockAdd func(p0 context.Context, p1 api.NetBlockList) error `perm:"admin"` - - NetBlockList func(p0 context.Context) (api.NetBlockList, error) `perm:"read"` - - NetBlockRemove func(p0 context.Context, p1 api.NetBlockList) error `perm:"admin"` - - NetConnect func(p0 context.Context, p1 peer.AddrInfo) error `perm:"write"` - - NetConnectedness func(p0 context.Context, p1 peer.ID) (network.Connectedness, error) `perm:"read"` - - NetDisconnect func(p0 context.Context, p1 peer.ID) error `perm:"write"` - - NetFindPeer func(p0 context.Context, p1 peer.ID) (peer.AddrInfo, error) `perm:"read"` - - NetPeerInfo func(p0 context.Context, p1 peer.ID) (*api.ExtendedPeerInfo, error) `perm:"read"` - - NetPeers func(p0 context.Context) ([]peer.AddrInfo, error) `perm:"read"` - - NetPubsubScores func(p0 context.Context) ([]api.PubsubScore, error) `perm:"read"` - - Session func(p0 context.Context) (uuid.UUID, error) `perm:"read"` - - Shutdown func(p0 context.Context) error `perm:"admin"` - - Version func(p0 context.Context) (api.APIVersion, error) `perm:"read"` - } -} - type FullNodeStruct struct { CommonStruct @@ -435,110 +374,6 @@ type FullNodeStruct struct { } } -func (s *CommonStruct) AuthNew(p0 context.Context, p1 []auth.Permission) ([]byte, error) { - return s.Internal.AuthNew(p0, p1) -} - -func (s *CommonStruct) AuthVerify(p0 context.Context, p1 string) ([]auth.Permission, error) { - return s.Internal.AuthVerify(p0, p1) -} - -func (s *CommonStruct) Closing(p0 context.Context) (<-chan struct{}, error) { - return s.Internal.Closing(p0) -} - -func (s *CommonStruct) Discover(p0 context.Context) (apitypes.OpenRPCDocument, error) { - return s.Internal.Discover(p0) -} - -func (s *CommonStruct) ID(p0 context.Context) (peer.ID, error) { - return s.Internal.ID(p0) -} - -func (s *CommonStruct) LogList(p0 context.Context) ([]string, error) { - return s.Internal.LogList(p0) -} - -func (s *CommonStruct) LogSetLevel(p0 context.Context, p1 string, p2 string) error { - return s.Internal.LogSetLevel(p0, p1, p2) -} - -func (s *CommonStruct) NetAddrsListen(p0 context.Context) (peer.AddrInfo, error) { - return s.Internal.NetAddrsListen(p0) -} - -func (s *CommonStruct) NetAgentVersion(p0 context.Context, p1 peer.ID) (string, error) { - return s.Internal.NetAgentVersion(p0, p1) -} - -func (s *CommonStruct) NetAutoNatStatus(p0 context.Context) (api.NatInfo, error) { - return s.Internal.NetAutoNatStatus(p0) -} - -func (s *CommonStruct) NetBandwidthStats(p0 context.Context) (metrics.Stats, error) { - return s.Internal.NetBandwidthStats(p0) -} - -func (s *CommonStruct) NetBandwidthStatsByPeer(p0 context.Context) (map[string]metrics.Stats, error) { - return s.Internal.NetBandwidthStatsByPeer(p0) -} - -func (s *CommonStruct) NetBandwidthStatsByProtocol(p0 context.Context) (map[protocol.ID]metrics.Stats, error) { - return s.Internal.NetBandwidthStatsByProtocol(p0) -} - -func (s *CommonStruct) NetBlockAdd(p0 context.Context, p1 api.NetBlockList) error { - return s.Internal.NetBlockAdd(p0, p1) -} - -func (s *CommonStruct) NetBlockList(p0 context.Context) (api.NetBlockList, error) { - return s.Internal.NetBlockList(p0) -} - -func (s *CommonStruct) NetBlockRemove(p0 context.Context, p1 api.NetBlockList) error { - return s.Internal.NetBlockRemove(p0, p1) -} - -func (s *CommonStruct) NetConnect(p0 context.Context, p1 peer.AddrInfo) error { - return s.Internal.NetConnect(p0, p1) -} - -func (s *CommonStruct) NetConnectedness(p0 context.Context, p1 peer.ID) (network.Connectedness, error) { - return s.Internal.NetConnectedness(p0, p1) -} - -func (s *CommonStruct) NetDisconnect(p0 context.Context, p1 peer.ID) error { - return s.Internal.NetDisconnect(p0, p1) -} - -func (s *CommonStruct) NetFindPeer(p0 context.Context, p1 peer.ID) (peer.AddrInfo, error) { - return s.Internal.NetFindPeer(p0, p1) -} - -func (s *CommonStruct) NetPeerInfo(p0 context.Context, p1 peer.ID) (*api.ExtendedPeerInfo, error) { - return s.Internal.NetPeerInfo(p0, p1) -} - -func (s *CommonStruct) NetPeers(p0 context.Context) ([]peer.AddrInfo, error) { - return s.Internal.NetPeers(p0) -} - -func (s *CommonStruct) NetPubsubScores(p0 context.Context) ([]api.PubsubScore, error) { - return s.Internal.NetPubsubScores(p0) -} - -func (s *CommonStruct) Session(p0 context.Context) (uuid.UUID, error) { - return s.Internal.Session(p0) -} - -func (s *CommonStruct) Shutdown(p0 context.Context) error { - return s.Internal.Shutdown(p0) -} - -func (s *CommonStruct) Version(p0 context.Context) (api.APIVersion, error) { - return s.Internal.Version(p0) -} - func (s *FullNodeStruct) BeaconGetEntry(p0 context.Context, p1 abi.ChainEpoch) (*types.BeaconEntry, error) { return s.Internal.BeaconGetEntry(p0, p1) } @@ -1227,5 +1062,4 @@ func (s *FullNodeStruct) WalletVerify(p0 context.Context, p1 address.Address, p2 return s.Internal.WalletVerify(p0, p1, p2, p3) } -var _ Common = new(CommonStruct) var _ FullNode = new(FullNodeStruct) diff --git a/api/v1api/latest.go b/api/v1api/latest.go index eb67e1e36..6f57d8826 100644 --- a/api/v1api/latest.go +++ b/api/v1api/latest.go @@ -2,8 +2,11 @@ package v1api import ( "github.com/filecoin-project/lotus/api" - "github.com/filecoin-project/lotus/api/apistruct" ) type FullNode = api.FullNode -type FullNodeStruct = apistruct.FullNodeStruct +type FullNodeStruct = api.FullNodeStruct + +func PermissionedFullAPI(a FullNode) FullNode { + return api.PermissionedFullAPI(a) +} diff --git a/build/openrpc/full.json.gz b/build/openrpc/full.json.gz index 42d7e5b954d1b5f955c274b897f12b195c68386a..6225a04aaee0d4f139b65efc61d021589a4e9f48 100644 GIT binary patch literal 22496 zcmV)=K!m>^iwFP!00000|LpyFbK5w!KMubYl%792Nhxl}cG4YJO+Dp3z8xnX+ez+B zl>2Rnge0^nfDM3_)v3JqUt!_C2&803w$U{;u}Eyha?a;0IOlthhKR7x>+SYlZES74 z>GgYNq4)WEXg`2>mM4(%-aiIV0gYXrAL%eY?ftVbH)SEm9&t8amh`8xoRqX@B z7-i4F_W>CQhD5{&;2WnzAVy%YQR+xG{Cq%u49K5<{@LsIcr=|tHt+5B@H@M`nb=Bsc0o?N)z z?$@}PZ$J7yhW?H)Lw;{pun5V9LxwykOqE4yJ})!W z@4X8e5x=*)v(@h%LIHcbz5kG4^S_t-6Oa7Q1pWJ8|LVyxLEl$X4TEz=L&OA@_0^F3 zy)g6WyJ_ZoZ;E`Z{up8c+5Cuj)W>8jmkx6DW=9@3Jw-h(n0)i29}lNu4NOt<`^S%T ze(CTpZwo2&+Q2olV}JSno@y4fXQ{Q--}q#+wDz+2>I@>zm8Rr z4UbNLjSt7mkWo3VUjs>bejNsM`0EsMf!MDw#J_U2l{d!p|M&j)-*@EqlnIX7tA{8+ z0(~6*)tcbstJe`65BnPj*nh5xN*zrpwN+13@rH3sE<7GY&OB(1YqK0xhG{G(^j z&jBPpfZ$A)nm|6;$Wx#1y|Dv~lhtZr) z!@q{p5t@&-cSd+Sn!kx6w6k@yqmF!hyv*V3PQE@wK~OzeCVRY!PNCcCg@h$0hTKK|SFi^5pg}pYRQL#2@PsFK@V7 zgpw;_gHX;eL9Dmi8*RSY+TQ8)dso=IMymJE7suy}(orR9>GzHTkfE zh~Dno{-Vk$lv21xlBK?E;GA9xQ%^rThfMCA{Le24k0+wH+uQ8*d+*E-1q|a7mjViO zL8n|sdHcpfGE8XSQW9d^iiM<@E8j{=%yeQYEygtx zsc{-V;DRzqE{KvCGa{s{wlN?B@_`Dp3r6G{=UODx7PO6T8wDn}sb?E@zw@n`c^pX=jRSu=wZ?s5AB?Z*5>% z3b%|pH~AGS4>uR$u*b7Gn_NOpP%JBT-kheswJF(@x812}^NUpjrYv9x`U*QFzl**i zsb1jV^e~aL2gH*t88KZ@hMb}K@ydg_?N~>5($_YGCt>nCTN+%Xre=-p(%%N;$btq@ zCe7m{8Elcvq&dgLktK+14 zktHKN4Fmt9nnznMYTB)5p)2BYW+U2AOH&rysNJ_x%AU?onXKpDS%S&cxv6{{{?*(4 z-j<4*A+*zL=&owI(bHKcv^|1T`f98Bl;-UOozH8&nZ+3R>$jHhx75L66r8WpWFZSx z$=DJ_M;Zf{ZDtMvKTZgo?8egcX5TC(l2W$*){hmXUt1}tI?=Xn>eVH?YEpA$C}w7X zw5sa?6VU~J2Aa|&eoD&`(YP5KBAOS@OwD#AHPf9fNsX%{B$dSvMwF%WwSutfOKnBM z3a%z7ZNqph1egocfuva+P=a0x`jQf)4fcvgPxI70CSvMFoS-%ADXFiW2h<=AuJy z%l`w-`ykvZKGXF59fJPB1d=vDS#>MBkmuei7{Eq|d=;G53?e}2`&e-F}wzfE_x z#ouHr+`{4Q?S$QUlN;3g@$GI*K4BG<_qJTBX23DmlD*1qnz>h1BNFXKTyrU|_Ix(x~AFxxwMC4(%vsRSMs;iXK^2DTaqI0i1aJw#xP@3__ z#HSXR@$y7gU*+nq;;L-z0dcBy#LKWM(@G7m(!Mv2RXJAWSe0W{j#VYBYI}h#yT)_Y zmN)6@mdvQD!*SBdVq=RgnsYfenzovNK*``7xA+-~8t1=#x2J!B5mwLa{@hH>a#SF0 z#xAC4jsAWK0+H$8PLrRn1_Da2IT%9kS^>%AmUVn-Iw2rB-sphju7ML8-_Wiu-_JD& z2|$nq7%}~JK;p~Ou~Bw)^yq=%7pM7l1a)l*>Q0mO^Bv@!1ElJ@i~U!Ilm=F0F==oC zXwv0?H$f`8#0bDNR3bpPn5XU~?t;scasH6otTeOc;bNj8d&-PP)1pUr@$W*p*q#VwL zorg`@<^o=13Yt5ZI1GFhubbOl!c<##KvMpssBYqK31>i#c!g?V$F zu*U%$(n#yX#tep&0yqDK4*&W^Ytw!iLXLh>DyD$bl*g--Jz54$?kvdmlZb;5_;@rL zkRcK?WJ-z|1$wJGmj5_dezUpRt;~9XF+*uelbb%b5&JIjKPJ+}drYLvx3ksq0<@`T zbMHfU_OwD0ylGNxXgu>}3F}a{1$#5GezK3pr^Jp`6}njf8MCEZ7{^E!us@R2v z8ne`J!!gd61s)8%C{UbKo?ZP=TXEBKEGKbghj=}rmBe#fRR9~<%+EFuA zcjlV0eJ5@iW>M`(;H#~}?LR2}a`MmZKY#r9KR4*z|BCSB%^qi;{%7C&a{F%o_;TwV zKcXjBx9sfw%^&|OM%{I*|407>ai+9GFz`S!TEPKKvh6+cMKw`sq&#`_*RZPAFI9X0xZOvbr5jZAVZ| zyNifvTr^8d8G-@u)&IqG)RD}`OfqZfRmB17=RB0s;c@Vc5(Gjc zcRqLa%SS=!8l~wMPkd?2P0khif~DuF!XqsA@{R-5F;*G>=M0l`hP@8a(>o>@R@Kgt zMb-QV?CDL?zC#1*D{*@V#9x&d=p4?chzLcwZ*)KhKoN~gqQ2=X>ey}htyK z?-Suju1bdu^~j@2y=~N#pCEDoyK2XE+Vn1$XuY19UE=)x+m5;Ju8 zVDCbqiwaA&e7rg^VZP5Ai;GFJw~Z~V-#g_8dlz~?wM65lW5Qa95{jm2 zt)%cQ`N{70UThS-%2M#8@@kzGG#r%^pzo9Altf!Q{oVzfsT*gpFXE5YE7|)QM@NO> z&Joks^>wnY!$?O@(k0X)ANF=%?`&`Ndj|~Z$Vymkj?K-@S1;B7t~NJ!)&Kt6QyG^O z28efBJi`YQNC*n_r<@WjFcefSODBtMzjuLnNQqwAj!nq1Z2!>vA#q>GYzp;WZ?lN2 z1ZMk?uXZ&~d1fl~gq`wBq`yo5{!AlpqCT^*J8Sp+M=^=zudY)QPk|yCJ6o-j0p+&J z_nzh-+9LtI6!K|>5Ry5UZM3DyvAR>cPVsnJ)#xOPEx{<5iX40dSn$B$CinsB3v{`}dQEpS7*@o~>PN&^E8G>rla!QJAN;ggC5|+s%U*S;GTNP#>sf8MlpB}N;3F~wz1plz zZ=Drz4CPo#T+?mT32YH2;?2%;@JugCD`72Z*-~87<#QL|B5njT2&5RYGRaJT)}8qc z?sN{QStYe3nv$QaKv~ao(&*Ch4)XWZgJm6$-4ThauPD4wvCT#2A}*Sd$!8O!+-g&M z=)vis+=ziJ7|czgL8rrbv^oqIVJJ@kYLkwtBXl|qDeG_rFH?Del|tnPRs}E6;y~Z| zb{7!a51`%2p&b&b+$+n?kyGrOa9! zzo{^#N!7cO`5zS$uT99Qj_7;LMOItU6^)nLsg7^<^;@=(k=^X5PE`+0#7CA-%I3@{ z2AR_lfI$E#8B=-IMN*cIl&|U1!O$u{w!$Z+y42k|r#Lm!U8|WMrBlVL&DuPW=^;fh zSc;6u`nBYvmDx4h+#*_`$|ZE7Y-5#_!&had&_{7RIwiLNPqngq_{8-4s>nne6W>zl zwVk!VSqmH)ch&-DEqGYgf=7ij8Wp3GVQV>X8KhxasKXliwLQ{En_Gl6Oi7ivpBw#% zans~VqbDW^Gr%Yn;NbL-uK-xoXp%B7evUW1T-X{-NWb?7n%^a_zN8WJ8oBgiJzS0V zwA6iphFcVN2dvOaZFU%~E8j4e4YFY?RoIZsO|G{0xXL52jUrO0nMwPed023>_P|uu zQpb0-{?>&lvNM?(@4BCm|Ib-m*5ayJIRc8iYPQ;|W(_2=c% zXv*U>cb`Z-DP6Tv&Z>1+sZ5i358vDkwB%Y@`d-58uC9@(d?dfDt!JdWq~|W_J-ADH z4;FXUW+hdqOA*aIe%%pp#?|YPW*UrctB5+EgJ&@&&BiqWFZ;BEO?k!@e$DdGZ7Ls{b0=Bs}1=r+W1H0I|e`uhXz5Su%0#!5Gu8>v-| z-1l16=)$u*A_OyQR(i{H1+4Vh`PF~QoTkz1;Q~$R4O+^%D%(UI$5G;nc4v}@8l4_m zT?8*Qy~xWdTU<@)4Klt~TCun?Zc+Z6JM%z(y}3#c20ZEi8WJ-G=fuyHguddH1$$Bfoj8z9~L#_XFH3&7rCDne$3pl~>wY zqJrAY_Y6US_Mvwjh3z3hrt+fHqs>@5-%tbF&lCin`oRIAJ_1Aij8;T4P-Zvz;Tzy; zf(B%Y#DvN%saDctgwXc}MZ|#*(UcOo=U7CD+@G&HbDeHUKa?p{+IUX6|kJF^g@dzt-#cy*EWZR$FX{31ssl;!$5x zQMrg5y-{*p8PC%WSXA%74iJ`GLhUFhL4U3HdITc_8alio{C57|@K>@l&UL;m{anQjI2Rj_>SZCPbShzh4k0IK_0B-BZ z$$zV{*X5a8Oih;K<))S9z}!`Lv6NCEe!H_e^+0Y+Srvio#)j#e+8MS#n?Rv>f5@;#V|Ai&osz!OS+Kt})*FNh=^0+@h5$xvAz1^XR5=@wowip4O!SV@kD>&p*7P;C!VMF8{!UESUA zbykWzbQR9pNbyzNyUvsLi96E%;r|1`-uLE-{&#BNY|FWJ%SObgaG;achM ztGcOo*)5d@VZn>O(?C7Z%HY-O8lwfHc{XIojh)kWARdXCq5v`(;bg3Y58Y~I$` zku|;gg2lvVaMqDp$JKu(rOu4OmP*G})D1rQ2L}-esM>CZR>uLQojz)hT#LFC@<8e(Kdxt8%-^joH?u zUyP=54w*bTE8CZ=vU&G=SJ=DOu_-=Z9G^2vM^%#2QPR7v- z8WAgtZB>*O^FZgl`;p9-U9gsT(OP_Ix}+VyHr*iIJ~-VV-Igko(A9YiIFEsj9s{|o zxMKn}54k^@k;HLoJzyIm(luaG%*fhSO!>_HQKG7OXqnTa%znC&q+A0QCrcLHp9|FW zbS>TjD-AD|$8mKoZJGBrDC!-8CR=kwZX8?G5+F|w;=DU}IU<7L6s>&0qyR=Try~3F z3&P`xF#dAy%nt){bP1J0d&SWJRl|k>ULX(QP@mS-G@s?nt7&on{pH?x%+T0m6W3I4 zt8Zv$<+>CgqKU3Iwyl0l*|nnRfjUGwc)6UmeaKPbiYwdYMW}j-yzn~zuq_nLHkzR& z4^!Z77oo7ogVF=uW&#TvX8qZ5iI6;W0VI3i9>VmOn7~64h6>cm20g^g#wu`Th8VRw z%}XK3gw%GcUcum6#&9h&;4Te(NoKk;jDFG_;NeOIk69wfWlPKfo+rIsAJbieSDSUt zsgkOnAVr{0$%u9{24os&Wyc-jje`lqM5#FIE&!ilDU!$STNw@V<5_Iey_z6~l!q#z z0?d&Bkj#Ncr&G1PwT~+1Ku4I}c$zlc++y8X#04cWy9jl%;>hoi9xfiJru(bfg&DH&bn|Y%+N`?+5mFlLL*Y%%BR**l z>2lTU0NvMbM$LbT#{~ICXm}2uef?(Zd{^wJ;j&S#C>YAWKp63f5)8N+0muaZnxd(! zvAR%R)n9AH_e{YT3N_fn}Ve&He1D!+VR|UC<|^KR@EwU;fUNPAHFXR z?0Bi;r8R+Nx)Q)A98|2D3D-bthrk`xcqCNAA@H?Desz}{bCBl~5iH`OOYD~FcJ527 zlI_q|y^_?i*0bo#j!{yN(};O!g^|=9@pr`E5&wrw{GIy6sb6ZD@K)VbRmofq0tCzJ zX2o|^)jC!?q%>F*peftP0`{qj0Z;xv2O%QzT*j<28x25~T^V1L-(Yn_49ju~9P#5Y!%1<*X23w$+ARn-oh@=RJeKqv0IT z(Q~z7P0T*Mapm|%c-(6LHpRqFKdLq^cCLtxF65kH%CMO4`F`q0a*6*z3M0M4<4JG# z)z)_A*?T%Ok1kLcKo9NDj}f|n0#o^XW4qrwXAwaMlm2i`&E&rneto<_%p{CZ zpCD_t)W*~`^}WhNH20adUH}VC>xD11fo~PFRx#kh5?Fa1y zt~-onm*^!-e`#L}&Za4tz=9OfY9J6J+tnQ<=b!6rCQfbU)Mid?w)U*B$!5~s<+RD$ zw8kpZ#wKFtWUBm2@6)riGlkC4*(ZP6Bq_(ec4)3cCmtY?QdIltidZx-> zQ0{h0g1JtCVjt7iVPq_2wHZeG!gJ$h?Y3jLlj=Ct*4X z)6ri?f1QN6zJg1Wf6)pY(5-yWSEOTY;c}k$HeUljbH^$jt8}c=u}a4(oif%bW0%A< zP5z6QD3JTG6PVF;E#0M*4t5k!DBkQW=Q@>iYoT}5WfSKq2m;JiLiF;*0LlO+UJ%I* z3NTTAkIEHt7*Oxpc~{-BcU7ZC$?O}e$$GW5vE9|-(YbgzNaY~aLx)t4$;In+lehEb zau=R18!kNMtf=YLADer6*=85$9g?DeBf-;qdFFZ(5VUj+ibr7>V2ujf-hi?(E4ph= z?wZqGUvqNzIA7O!u5vuy^ZmUrWb~$kdq}SOvZ>7DyH?>&#p~A<&)%53%+{*f;&8JO z@@2oWAK7jV3C&g4J{dPkh7K9J!8GE*9LNJtrDVS6`wE(})S={500FO&CcGmW1au~4 zB26!M!64e)-1d|_&ha?@UiB39&0BpREPf{?E7_JA3YhY7zIZa4Sf_k?XbKESt^}*@ zj-Z*=O0)d)*#wCR(wEir>6Al>4~MD30iVz)@WBvCQI8?Wk+0i%y!X%^Q9k(fy(gEB zx_rBDo#*)VgBtCdH43}n)UQtcY6o@R)R~ku_dbBcLuKS=iF9=BI|e$PKut2TDooRe zXLL>Asejf1&FGPI0W%J+IJn~A${oTL2LK!ZSbG3aXMfe~?p$+`t_Z+XUlszCpY3$x z`{{U!jK7iTn`$wG=W;-DhZ`p}7F%Rv{(Xn+-V7nb?;SgL?0l_9TV~^qF*?S$?u_xb zI@_jX3Cmaj+N=K)3An@wTQa~(Rel5KYtr4nOa;uCjm47Ya1I26ghQ2JUkaY9;D1ETvY_s$Ed_ z@%WSoWlk;^`YmnuckuPwa4ypM0msynA1qdP%s}b zAm|o)BABb*vcr)j#RQXU^%rDlW3_Czq(=reHgSeL9O4Y2%D=vWL8R_(sV^BNvTH2V zwzS}zX%!TBFbHC?y!Z))@vF&@b(Dv-kD9AFIN{*L9f`&3Jle8$JIfF3hPwF^jPUC` zr@uYOQ}%ns?E=Z^?WVSL=d&x`bHLmI^X|a>_qrHh9FLc9dT8(QumFe`KzFrYXVS)R zoj`Y^Geiuw>w$KIM?^iozI%<(odVE0rwfNa9sYbMb6m!s>xk$cx)bO_*tcaI>JXhn zbPo;DHF&ZfFa$+6bDgeQhv*XIwFSO@tMptM;*Em|#N;TX-ozf#Wec@LbMb)NU)Rx9 zfv5gSHmQVPGZ+L&Sc101wIua6(I~0_y|flj`O%nzRVWaVfO^-!kC?jo7vmrO5)&*i z48RZu5{y~7%Ifbcp|&yPAY|BEHNtubw7-nBN*nnO!UU}BR&*oy%ALJCTZUJguQp%Z ziMOl6W2?twYcr<~?Krfv1lnnE+dV;I?*`%k4g<8Wxnn2jQ_)Tv&6X%-q{}0p#Zabt z01E;uRo6>`EGfkbWlB{u`?_tK7%s?C<8o1L_ARij0+8APsa;P zW=%QJS`xOm4Q`hwNOVr2nXA4W8T3FBRXSS|vwT|3g*2=#xn@S&&66a!V|;^1 z<^qD2*fzjNNzf{5LWaO73R2e+zb{*w>r5Jif`F1SVgmxh5J3heNV$|a;^&CpqL6fj z<53lku3Y49L(v&`Fn@)?fpnze#esX;1burbk=!18WV5#oj+-Y)d`8`(tY>R4!Gx4* zaV7XV8H(MFfTTtaPs1sVhzeYKeEMFa=NnxLldKj|{qhhK5EBq0hN-_AA4M)8699$O zo8(_0;%6T_?&Y|bt@hAOnv-|#p3!V=HaH>~YKzJE(wiVZ3Oeg?3e7Ah|Hw8?gDtpB zzI!VHs8B7(b8hrI;3ENXz_l(XF9bPZ#Zj(Blq<8BOY@k2XA^DpRNEwDrK`@naw)-y zHbLzwTT#FFNf|Z|ja}0`ZW$f5*jHQFpBV!?}C9=o@PZaUak1qKDu-Q+6+Kj+4%n z;GrR#23LX$G^IC4$Fl4MZ?X-nM-;Hai0tElWhpgNBqJ!8!fT{`6ep035s-%<0}4_|BItlfl%iWOSF&Yix_nv;49&oh-#3TC zgijg}bDrc8jiZB61_%{8i3J`LWi6aA#3wZHGqJ$}Izvn!S4z-;z<|m|u$bh!H#727 zCGd3~?L)t$;$nw6mb&gN^;Lrt%jFD)%ft`M)c*-7M3#y_mLGb1B|@hDqI@E}XL(-m4 zmRhjnl+VGlSVC@Qc2yn72CG@zV`T(Y$3Kyl9*PjPmM5de8AWfqIH<#MM10=yY~%Womqso{dc-bUA4x`U#xzx)O@?f52AuB z?$6~GyP~V0>Tz33XbDzH@iW6|zV`N5ssF-`9yb znacLEhNa%Q(72N-oD$9{;p`9mPK~Kb9jg=6@vxsD+kH-FWcee1O^uY z*eYn=ePP~Zz~iF=VmnR7krO23L|q{0&pQ+7q=h<4ZNS2F@T^3i?dWf|hdak*4%+-g zXj4V$%1mS3naWzyfhJSXd(1lmG+DFa+^e|0T~51cZ|M_W9ZGf4R(ep$I@WQQy>3!b ze?YTyIG1p^+g?lSFDny#{buwvmm%_`P+;1%77B7hSu7hku)k)bErb2smbm-)$tuQc zdsusPD;Qi@tOr@8zBl^au(nQL6eIX1!=2&EozT0kdpBmgq-|%lb5^@GRc)>1X@ApXwYwBhL>(Q2 zb=?*Y!I@fiM?UVr9r;*@s9mwbODiFQ62YiJyQv^?h#AruhIZRV*v_@s8q}u!KCwvI zZ<_2kMi$!h+b7Q{)Ni9vdlAaI8!CQ+Z<;V_wc%W#Qd;hoxpc}Sv%3KLSdV+7lC5ej z+UW_3M?43vO@#d%LO0Kf(n>i1Z$|7jvTWK*ENH%p1=e!)M4;T+O2jDnXDq-g-^!9q zW=0nanA#&VClYB}=^GDO6O!>%fy%BEJ0G?UybLrQ}-*s?S%2QwYabTHGwOb0U^%ycmG{$S?XWce}4 z5Pn96gtf$pzcqRDWl_{;7*v>>T4O}j%(D3KxrTt&2r%x{T_$&^&!Ikt`W)(WsP93d zzA8lXAqvWf#yrfpeVFbfJ$ul2rO9_G=J^akv7|mrHPJrndy-E$j-US=JbRIA^Fpm( zD39U`t7ZpS2(;x zvTFNypXI)row5q$fo@SJ@eHG3fIV=H=EanpV|;@MI6X|#cs|Vpn}yY~8tsY>V!znT zFx=)7!N|_`^>5?th%n^;^V{f_?2P|2 zhHT~PB%})l0U(sTM7N<_VPIa12^4^OUc|r*iwPzmp!9kOy=#EvR}_ewz#&Isb%ZT9 zV|V7Jpd{KAB(Zn2Zb_?$+H_TRj`+phS~m19vlE8p5o#;wKXyIp+Zs1GMRyKhg-4(j zb(J;iXzB}n!p;!qaExkb>WfoyLp?hmw``9V)Kr!PEHc<<8 zltwyBM<^v2E~Hd4fn<#M#()e++A<8o0GsUaakGM|pPJPE!a)d`6lb`sv;nRrXh7nk zn5x)mQ#@>0<7rJ>lSP?D5Bgi_>siOGQIwl`Kr$MdUX>yD+RJFSw;=SeGOQOoEq zKf@qGMs;}t`FlLYqPP22{WwPG0EX$ybB3lkn#PLGRAG8)Y$w@b3}XnvJ}F-b`<{CR2JXW<&q>8s6^k)>_bR3DGj&-Jz

iiH9YbeAIrv`0R2?odf}tuD7ITYfD_0+ak;{8HPJetTs07L zr7L^2x^=#E!VYQz-XN=7j>6=ZL^S%(IWKa6I`JXcUpS8bo0{tA_*?+{#} zDmYt}EsvOHTi;D6Km$7@5>HRNT1&XpKQ3%gbJ0ul zOU%3|fC7{8WfX=%M;F#oGj$lD!fSPiH?HV4BKp3I9WbcquKpHvb(Ng|D!PT90A5-K za9xOwKs;dpijvdU#(-Q&Bw&0FB1xJdna?JOp~S_2Q9(T#04yY3?<>lRIiMt%OR5dx z4I(FuM^iQNt8+teM$Q(Vr}@2D>6({+?_%BOX-$)#`~jVYQHN+?*~%^4Ouv3B`AKb8 z`AM0URWBbS5k{6YC>hY=U|`t_+9Pumpj$i)5b)@9DhYz}In8=L<=mU>ZzDy7S9t;BH_j9uiW;h6T2jnGq zPobZ$ugA~_lu5Fu-gyyIURj=82rxm=2Y93iV_Zu%6}O%Ga~UzqxM&r6P+v~Na37!$ET2mj0Ip6|?+B-jgT@WJ>@H1L|FKAWtarB|}L+S9f&~3#A^TL`$af zQ)LT_D<4a?0lkSX8FQMngeH|^>QVjDo?ol2t8EgFPTnEe1g>E z%S{kZ-+-hY4)q*I95F>rK4gxg1VLC}801g7r$_+QGh^H}Md2jw`-oGQA;zzj;!TCbAa7G8!5sX_JAIpJEzGeoL6K?h{ve5)@%s~J@K z1=ENNFo8FQUQ))8CjgO>3fFsT4Eca4ZwU@o>W=#0uN4&e`JH>lJDZBLsjN5Nw+Fru^dCIl9H;Xs7o|yxF>VXF1zr?$ zgC1)IJ)Ccy^R08fb#E4$q}D@~(P_MY-}I=$Iy^k!9Ox-_9Rg{*FM& z?~bjlfTul#h`El%*|WF|87a+U{+$IwtLI)><^5yeAzMv1h)$5G_NKSuA93yFqT9Y` zdwVF;t;NNmxO7gmi0?}nm#1I2cGXa1eyDxmpDKZOB&mh9y6Hm7i}u%09^&Pbc4ELI zyNXKNX5{M+nhme>LI_c zJ)w;xqFg-9XB*)~j%`5V!IioLF9FVZPZETDo~>*yu0T%&#$U5EqQ3GASCe&#AoC_? zeEjVBMzSc%gLZej|y^g|o^#(+KLOehDk3Kj(lv8qebbfJkuy=KIxC=g& zIxEZqCBF#e(;0;!WwI4az|AYLcYf;b>pq5Cp$@OC7O&)~=z{pRX(<~7($fgRP;xyjxJR0n&GG%12CLKn=mxR5(F|gey=UU? zbpC`0`-}34RFzou&4QJAkgp>d*lx0a%L5Z%jOk7Y;udN{;+q0z5-(N>2g?4CzXPM_ zg=GTKs)1M91jm8KaM6A8r<=u4Hr!00q4Gkw4X4MX`dcPTx& z)48e;_SsprWbI86cJC$jdwcI87hL=vX>_CMBt7bBFxdgLsIxv+-C@+>|yGO+e zn@sVF6JUatLBzWLeIVkbCksTZ%PvC1Q&~!DdnS+rFMwEXwvf(H0+i3yk3D_E+`(lB zmmeQo-f1$mY8~k5VMhvKYTth%(M-=4+Vi-yq!zWrU}hw*mJo<9r<#(L+_D7 zHQD&iAiG8)w$OGWQ@JLVqgA=4tSD8na|?2nt72sMC{zUMhYW zI!cR~2JFSfOnBV1ehac1ceg-h%oI+ug_03v`g$pVLmCMqHLA-wcS|-MA?g%oIbFr3 zFw418c2SnM-fX|wme1vfP!0q2H%1<+%$nBKS1rAFwfkywdrRF0RX4xXV9l%?1Q-#K z)oI7K(z4Iq!yyXF>CP?%WWr=vR!YZy?}+&M2WC&7Gwh*r#LP=YmCN_v%nLoJ!s8!( zeYoTVT_R6VR?+=?$i=77m#bVDMgaLF`{>6C14d`pu|>6b?pu2SmZqm|3+XD^cm$Z$ zuZXRZ-L&nz3p1P3>dJMpDcgQ()h27(Ms}mwjJA5uceuQrIj+g<$9D^>qf5jmq{TKY zpBbxfEFD3sTA5?GROs@@37K9unVL1HIfqPO4~LM5rI1s$oh1NNd(pJeu@#ic*2$^i zo8?oDu)?&m16u0~wCaSvhJr2OR;@_5IwbIu#KlKS4V$cudM}uRTnW-!5W`F}O(7=a z`_scZ=lo6*Wxi)?WnHFPgM^vCHYDtz};) z@cvAJx1HwG3AIkBbwcgE3bl^`w7qF^|4@!pd!E2INKbWF5w_IMa%R@A-(D#1tqtAU zN20tmPsxbdLAk2o*kHL*y&RY`D2|&~I)_et*HSr~N$jMm2Xh_Lg^b;eeFy3md%@Lh z_o}oM^+oSCL4`UPEh43BaU>rM-9qB9h|-;l?WjBYqV6Je04cYjN(6HV=NBs7Q1>Qc zh8!S&+##00(QSy^1foCHscyP&9Ts&*pTQXclmQ+h;@qelV_(GBvwOW}B9oUcw`ZQhHF_(_gL;UdA7Ik;o@c&| zW#yH)A$y9J?b?=3{aUFSqaZk1x00@gsV2b<57)-~92vV$|#R zROkq~z01Md!W5hOC)!)zRY7i z@HSa9(D2+v&EQlEvw^e=M_{cT$kzlO47?~%*?T0CiS^h33c%?U0VFAv&Q6?MVF?k#)E|&+ z#ml^6^Mg1Mg~ zVs+CgyVb0`0BcsdecgBqS=TJ>So@m!9sRW24|g^fx*x`to272Srj7ixYg@S?*rJWJ zlEw8cme{!56)uM&+!d~$P1+WE3u*nrUJy_{^6vDl&{7*B2ZwkgtLUiFE)OZSj51q2 zo;J$lLT%tpkax`i9;qa(It{#XDbnwsC`l_W+?{z3y>-q*Kbs;`TE1^#9xk3W*;8f- zV{P$6CanvdRrJBoVHK7otE!bHv+AX-*`@!i=-w7HW@_cMOZw>Sf|atkocMyRz>s zTYXd_`>TZx70XB3?GR)4MTKl$;|srh=-qPAU3*+x8FIHEr6=^5Z-7%R!;f$v5X%Vv z91tAzm1liS&>=$r6EBE-%1!Gy}sYjj zC1g|N*~9+E0rn+XJ|#EQyHLB|k}jLhtcbEK3z+(cr^&z&=WvYr0CFBpF&P6azzp(4 z`>1V8!+?6%QsY%U)iCc?%R`nm|kU}5siosC;{FC zV$vTF*~1ix3H8AY2l2%-0EwOvz~Nl`Nf}rfw>5*D{33LFW>80y6m3$5Oj;YNFZNN`y8Boy1dd(8oGswabXV7-w_OCXGt~(xlazTzcC-ruX@|T%u0!gtcXV=#3boFI6ah0KbNBS3FJD1D_6T=K+<9y zj|r4$r4NRYFwF!3pkjiUUMD0F<9Y#Q_s=+un1_D#5f_*!O13O*;p(mD--t>&4!0QW^|g1Ax#z9lLbGk1koCd zoC1D5rZ}3K2WN^)_I6+Od*_B2^!`JF&HrBRPdxHJ6ZG$Y z{YxU;s{6siVd$gr4co>$9_45zCUZW1eS3Wy{yidFvyu1Do9WHgWJ<5aZ0O%!!`mIM zFyI*3~Chb zwuJqbIFh)ooH6|{iVZ|>Hk1GK2AV)NPGhWJMnegM%TUlFsxP7`1CfhoI7 ziD2naRaMMDuU4wb4210kxs@GXmGS-tbK7LQ>brf3J zPO>d8aCJ$F0n0s6`5$5UuQs-P}+t7RL`tjDvnvq_ znsvPv;gGjO-VS*?%ihr7-*#Z@=XvY1v`J56_C_4=J4Q5pKB1+y?s+%>0Y8(*q8xK@0^RLk9VbFW%J0bJZ)SdL0mR?R?KJ1 zIpeYckJRmjsz^xcMIri=dR7t3D)+n)psKgo>k@0yMF6X9!bJdE?+9QI7d19r&Mzh> zTmm;HjodYId{4c$8iwrHS^>wTA{b%f^CT77uVL~+**x;l@kwWCbqMTfBCz;aHp8z> zDI4sSPjZ{fYui45ZHuI@t*hXc-=x&OK;!xXhk!00lAuBF3G5T zrF={QLm_2CyGJUA*@y@{MF7ijjG%{rpgQO+2OjlT81mNPG<%#@+9nmAvgHysNbDE~ zpOu5OK@i6{IKw3Sb3bB4q(9$N?>hTB({UH9k#^9QN*DX?P(S{b4pq%0b*LFn_Y>w0 zZ<<{3VorJxU_^v`6m?AERn^jx!N-+sY-~q#hL|0Xs2+#K1(~XvIgN%71q2>UubOCr zAAik&Bz_b)09bJjrY<883J?)&9$z6z8WM0Apt!jKNn3i7x)8^tTIi>Xhoh{Ut|(!# z`kQyO@M}pLo4n3qa&UphmL^K1o}iT!l6#5&+4<`9xYNNY?39YR_G z3H+_eWc~$W(K%q3scaK3A;Ltw*=ZjqA??C~s+q#ss0j5T5LAk0LXA6oA7G&qpKuTn zfdfse;tS}IF?@q~CY}K#J{Ti?qd%YV%A;h2eMCG2d=!ewh6|VA!X>zH2`*g1V-J_0 zY5bjezwB(e7zr*$f{T&hVkE2)wr(=p8#uaDY_fbC_DEZ~oGu%rtkk)sTWP*t=OASp zCa+%;L`Tn?m~vW@EE2IHJ?FKuHpbHw%l;; zhI7E@#6$kZfPCUc;el=iLn?lpQZ_lB{b+gi(>m{O>&yUi;wg=Ir_-)#R-E&C&szlBW(2JN>IBE|;qZU?kp$<0Sb1u-d-4U)-lGIO9?v;&_L`88!vQ~06 z{qxyg7zS8wmexU8a?N#1LcR}qmvCu1F{~saQ1o_tJ{0Jsz*AJEKIp2WDBUF%1?@${ zjb#Cuupi+SWaIWie82aFvTMZh_oA0cJ)YSMPb+NB>&*ro!eum^VzDnddp9zb)~^F5 zFEmtEWzP860-)p@Z3ZcsvcQ7`3=xPVR~8g-^$I{h&@7k(k0E9M(|QJNP1+a`g2YUU z31Y%%G@fWP5~2R;!mt-6z>=K3L(tdv`cFzMg*y=2)gPrp~M>?QKT>-@u(Of}bNZ3L5t z0>ayA`il%HJ>YF7u&`m;M2=B=qH7{@^`ILkE)bG#SZb-!Ur>{6e-%I?d*B|z^p}`G zi$SL>qT|3*hSP2E1!`r3Pdh+j-rjC!m~!iAIeAjst$GE6Yd81`2Hd5Au3@hd!0^O5 zK#Jq;??_f1vJ9fIIW&0;*o~a$8nB3YDvR#Vg|57!&(1GLRfz)NdD7dpt4RFh6@;%h z8?1Dn$P}{cy&&jn705PFsV-b7Z5LXo7qznmK^U#CvM=jq- zwPQxh7;iNVH=VJ3;mVM1sX*oH!tpJ^nQCEqpA8qAY$aQ^Mkx@lbAUQH4rMD_GlfP8 zuF&El9-s>XU;U%Qahq+a9B{jC!v{~>pO&PuRil^Cd*tXgq^!M+lC5kHc#QAGA82lq zRH@L%qTQ|w=BRMU@C_6QTqAXvH*)}%pu!J+`{!4o&Os)9ZQ~zvWs-{oT%~+b(=KJR zDzArjP72w^mbKT`SRoz*2ivaEN9eQh4t7Oa@1SiYO-t=Vw%J8T`W@sox`w>$f}i$* zc0zvPEHn!Fr_&`kp02#Wxzdo%t};l{$D-q*3j&5bqynx$kZ{&m-RuRCuij)>p}E7U zDs!MR3Yusht3ExBmAGirKZyqHG%6w9W8Rel$g0%}hp*o{9e2}U(?OR-K!Ca6D#A=g z!GMbi@4GUG&A1)TzmUh3teeCbdBXW9?P+949MOM#DNM_F6A~g@?9_t zcpq@&gzK$&4r-(7S$G! z0xI1rHmBb>Z|d8aS2TOq_n6UX_V))$Jd-p3vkGXXZ`htdt|Bh0i@hh1A0u=C!}R4j zLsJ}0&4V))xVX2g@8YT@sEYV#vXU44&xWCo#y4ym?|77>nV8J^`1S4eZTReRKNoHvr4RSQ7 zBMr*l3(W5QwMFHRG9vElx^(CovBuX1mUH$jv{HxH_1bjRZI?S)q&h3qNG?64jtVeV zZR?PyCLoTFJnCzoPzYuy2ws|-LuTA7gX;GlmDMSt@9da0T8vZ*+4iZlvz6Oxt9RgL;sdyiFf z&G{_i7#NWM9$%LqUM~1;X@W?7m>Btj#$}e`*}1>e+wvCdgpeQQMQUrqeaeVeqD~P{F-^m!QAm?6AKN~cc^P?Y3R8vT?HDk6!r8t z@CS(pdi(Ua(2^lBFd_|nj%d~Gbcx5B$f(6};%C?Sx^BE}1LYGll=7dSdVMcYxl-8` z9RvBICq_Yoi73mY2+#-2d;Di5H%+)OI&%fT-d*INO)*fByLWd_lBr@nTaC*V&ztfwO?w7i#w;-dKr1U`SK$()@ zprMinI^>`R;RFpxRFJRTOo6@#kOX|bSk&zt%)7#^Rky89VMBKQL>h(&D)fd-@MbQO z<0m-K5$hlS10&=di@$5jMsiofz#Bw>Lfel3%On;Vn4m0pm$0KL@5uzyPlyD@gi!7Q zPDbVkl5`HvB1V);hP3;07?c3YQpo#59|kw)ydpM3H*N1yU5Z;H*+Ks#?dK+Kjgr5; z3p#0lCpuf$8oy}K8A^i+EAf&^Aa@`MP4M*|8$trX;L7p$x$3XTpz8pX-Tbo({2&qy zkjxBr&86Gn_Q8w7%Ug%C;q;rC7vr$4=Vq!J1B1*RK}R*r{Dmh}xs9H@_% z6Ra`@74!8Wfb+bY!F32-V&fRU1n6EJ8$1Z&o4kJUeqFV#-c3ywOJ1#$V~_+1AbnZO zd*3ZzNX18d#ED+^EghBsI#bpw%NSmY`ZWWj_jk$r=U|w{_zpw%=tXsqW&vsL+tbj~ zf~VG4ksuZVWMJ`*BZY#)0*1~fj$)yFF9eXkH9P;HBsb(KlYu<=g>y*?^h?{|@5)Ji z?*-dRL7ZSgHt=(B7^I4LzMFmf;2zli;W1~ANr6&jlKLMzy>NvdA@9Z59nS_}QobMq zK3djbFQ(**5xtN8$`N*K8$_Sr{16`3?Sfvc8$rAd!;TR<1y=vCd%k#M&0X<6*>eDM zw#`kvgS_*X@)(6%R~ve6{|-XT0ahL&Po!|caL$!P<{FfR*~0ZiWv_Na6$0Y>LM(&! z5j?g0&vHMwMAG~t3gZ9r5h!08&IrfL9xI1>4~ia6geVDI;9u9*T^KPsv}-RV(HVzm zZ<_@Fa;W26-(25byL$9l{o5s6`7Fqw$beJwTZUp0NC-Wi+>_0+}bN>_IEd^LGc$+~j`A&qpOv6#K3OYZuSknZ$7Pqm;D}7^g`pkEBz- zX506kBVD*8(#J))FnqnHv%}N>?hm{ye|r9z!-1pF>Ct#=fX$m+&L?BoWm^)`xGJOL zYpwAY$)r~>EV!w#6;a#(Jv@aVZ880+?0Cyc1TS;}vfF|J2d|Sj< z=3X{*0yCFte)1ZWqS32tam7f1>fo}|E)DJ_$G<_`tQ{#CFuO_fGdXf{M!yUrOc(Q} z2YyJfxf*ZCH9O9KaIJGCL9-Kb9xu^+G@e;f6i;5Sox2mw%45fiE(~)*e_)OGrPjbz&)IS+#<0|g4HWVy} zZ2tX_W=WnXl!E3EGFo;fLQsd`n3l*nai*Z*Af{62(M(Ln)afmxC|rk951?3rPAI$h z7*d%SaQ$Z(h*Ar`SCq+jC5;NC;u+7D6$$zSRZ&!CZkdE+*!As+VBn~3un;5TC1n;V z7aVYzd6x4*%U~SEe1}0W&d5cgA~^a_V9C5K(Q(2fZ$1N+&@55CLva-O<>fdS*|cKrCjG=T#C zJc3}vf;nH%1Oy?9nq!i?hX<5g{Jp&bZ;o)=#0Gj-`9uamO~{7Cx_Sh}dAT`+!6EnY z5q(ow@dClf#C2vpx=pLZX7Fq45hwWoK)fsKss*;@*edv4)Nj*+<9{?j@M(-C&9F#m zC@{WBoVx{@Tjg%&^ZT4EBl%?nN<4K9RyE89WmW0k$< z4c8sp$@zjwhs}9H*66lbDsN9wMxFMX$3azfXZ_T6a^rff`Q^nLTosE6!Y}Mc(vJ97 zlA491r+doyF8KaLS}Y7Bwdf2*Pj92KJ@1Ng!9xootPIZAbt@D>g|hZR&qEuiKx2V0 z?j%M|QF9x2Gj^YxP^LEuc})!lVQO5~$M)Wu@){K{LAU_kP9tIWg)-oJ*mQKP4(M<_ z)F)~BW`Fo`Z|>d2pSghV#Q6Yp*!^Gt`Z>@n@}yiSU3cPRa$lB6*5GfWZGGY^2%#DRz2-6xCNgPsMA5X0Dle~-)-uC*X#2u zKO0${X_R#^20|jAo>Uq=hG; zR?2$d5u(Hnhd2_%#fT?CEf!p6j!xJ>Ik*`J4z@xIb#V^Y*%_kmLTIo^@NA|ntD0&}&$&WkTAuAw1LzaZp4A-*_CWb6(k%^L2NTFZ=sFtfYyIK(;9TBZ-G?a}RxB{CZ}(?jSdk>G13R;xz9P@a5gp zbO4;&BE02XLuzyK3=lMG+djm4><#e42~pv(+OS{1IxzK;Q5qSNp(IN4p$va2dboi` zSf@40M;^;G8SV}pE>jKW5;StHG)d=iDX1J>cch4)77^wIoMIR|hf&a^khg~)2*7y2 zY4N|3Y(g6JB3Xd-KrkM5HT&rFs z#3*ImJ|6yZi4E~`t_qp#q#L5u@e$#pBfKS(n`%}WYH4%HeYkBDeMSubC*=r^6ns;OIaC; zlO#i(fY9h6d7>BJ>BoY|sq%oi#(SNY?ho4J#i2)SnwMmC?j3$g>EwtC$O(HP@UcY)8$xlR@$GryEz0zMS2(8w z`zzs8sp$&XfKd83J_jt%w^HfGZZsuV^PSQ=f~T6Raag(t((Qj-@3Jc``zKaEu(Y{U zx%P&1g@QWziJ%>&$ZMqWS#cELbU%OaykGpN33;=E;eM5-DFstd-L9*pTDY@D`$4*) zct<6&doXV)6fU(%s;aW7T)9lXY*sF>m6+>eK~AE-7a(U3aFHu^ zZSUG*;o4YgisGKnSawB0!)TgN zu?2WlRBR$qHk1N@futn^e2^-Bt6I-T=Elm^2z-xH!7kitDDmuZeXAPFhc9c1B4@PL zYJLL?<B(8R9ME(K;KFynU*#FAw=|0sddW0Q>o_FU-BOY`+ufE;M&{$#?F^!Y^RM=wr&*hn8f*mIZa9BqIOk?cc`IbP+|nqvc|c{ z??(AQoI%nYG-rc*Yl(*>?p!5vBf(1INtogxT%XV*E1NlXe=6Env=Won{8J}W-hJ>% zJU}f#!+OKT9Nzd_G)?$go9u|xj%ltqD1V~r+xu!*@vt7)dBN+vp3P$7uWZ}q%{5Ne zSSZ?=x%tR!0RCjPo+SQlw@e#kfdJpF`odP#l$2V{P2f9e;IUHahJiA2uhJB#-ggjLDs5Zat1JE6bq^N*=>r*dhZ7ipWqxZRHaB z$Vpe@;X~3_3Kp`YSV^DJ=)`)cQ%3rF$z+U+64Y~+Sb30JrZAhv^xO^gja4^i^Nyc@ z9MX^2ydz|^)>vjp5MO?WzPy-T=oKXgQ8Ru=S`c1Vm%(=A5Er9{^RH4BTiYZ{sB)Fy z3ny_HI^TfjK(3+$J`11%4l7;%D$PEH6Zlb9$IYtg==pHAa}&wjI!Z`1-!m&}*LS1yG1&j`KHSJJ z6Q4+#3B#xHiw4P%qAqhD#p#>ndYY4DavU7dhQV&Bg=*pL`L`0S#)_wc6jGvp=}cL` z1PGnj0ui@&960^?L}@C|2%S9GddT9lo>dcLBV&ZNU#=#iA7qny&s0?2a7Wzv;me3v$Sdb*mnfP^f?_mV~}(j1(e zZTb~odJgv26<;51W!E(-rzG1>w+O@vB&5`H`OXsc{Ypw5^trY}AKR4sq?F!fyd0!s zjrV%Mh+$>2CYmLmo@uh$+92LQ-;OG$QC8K$AD6KPq#t^(&%|tZROhVlT}|$@0T{`@ z6fSt!Z!xGB8oIV#?}|4yURD-;#oh!8G(`kzP&8Oh8slo&xiyfj>1c@*tMGD7TlwTG z$8vCKTH8Z5He>Sb&)kRp*lp4N$+17IY|D%>k&(CHa2(nA$G2WB^hDi8GizJNCZ$le z#e*Acz340xZ70Jie*(6$#1~^()kov_(dsvr(`DE81ieHO$-zrLHnt9vo;IcLR?ebb zkaD4A*Peo(KD(=(mDtK*!-zB+%@-a{PceMPaX#D*gMMrNOzByeUY7bVt=X2Q|Lm^A zu_qE=84-*ogI-=^G5^u9H@YhqJyK(WIg08Cn(mjz$1odDYk$;;D8B7`1_;Un_uXq=RBWv~}{s0b0buzDh;g_@7T3gFe} z_W@>Y2M5pn>+M0ND^TWxUC=ZQI2ErJ#unAwHF;id zQ+T|!SpbpxZ8$bGDKPNpVH)#iv(PD+fUqD&_K&PBk#)$UNs z3!@cR6^@-%6KFw%rQ6TXl-jaXsNcxw>7R8e=Qi30gx+jAz2v1sCD5FC+7CWR!zbYU z!B#73m}8U`zw3qHwN;8#Zv~Qj=Qk}bRPm!^m+6Q@2m9SD>(3kBiScogQ2Rqq=)PVq zo2r(Kzm^WMJhsN^AY8uguRXki`E?ybOeEDqm;4>q&_bt2p7+es{S5}=`Sjh9SzRTl zF-y2LL^OQO*HwYO2GRV?8M|P_gMHlUiQ5bk;$p%J9pgK9FG!yB2=;t2vM!cWUG7L- ztE0LNC9~ocr3Hq5YO{@oBAPcj=N4m)>gSu@_v-Qfx?2n<(6U1MhL(4e;;E)nROtiO z&%@1ByCT3dwX#H)^29;h44@k9FTDKh{q-c4X0lIAY<#+gI76I6ir~pWcaebu!y?_Q zSGc=_-O4ti%@ZPaLKG#1e68i#d?S_Svt1QLbva@IiX|Q#5(K1Np9gn}9+FwQ=!>$n z=I{9%G}!QYyVaCDr$?$)TU971;>`FAh2(UXwbmkeX+e&CBV7VRyD$#!6fHiqBV^pN zp#$8Pxy^9-BdPR@`rQ05;{8>?U{JD4Cg+sYG%Wey=Bz~Biv~O&M@6r)F7@jS z^YKbP9OhBJ*SA!&Sln!{0>gYySo(cnxO$-|;8NKqW2ej^g+)lEM%paycnI4l#jU;LU9h0-dM^~EO z5bd_$ip$X2cS5O7@36(NZ}ex1th$=^i;yvq*5M~E{v)+B5o|C8LiDI~az(IIvEZ%D z0XaepXdToOT4t^{);sQ?@VCQVe`DMmu*29Jadq8In!`H6M(Sc~s2!T1TO?9F95y)a zvfIwH_Ya=9`g<4Zvv^v$@~98^_f{73pS#=p7sFHC4yc$t^KUWIN1bsd0w@?q3JR7J*Jw4K z$X-~(Kw}|O2U>A4p2;p)vi=ZZ5}!YQKaQ;-B-pt_byxN3@U8Rd0_(a=KQQi07;Z4& zT!ZIGZ3B2@e=Y@k7BWn6BznjQ)}gu4TonE~g?g%F{=-R~W({iU@5~fV5Q_pvgpdw> z=Ynns3q<6NRzKBh_Z>WCdwTWW>qZx5N{* z7jIFc(jpJPeEbv*p8nD&l;gV-M1KGVd{nIh)y*>qkwl5(9M+JwAE_lhj9Cs2R-ZYa z_jbq|{W$MFy;ys;^5o9q+VNkXIdA;a+j`3t1Kf1_Q(mr-)TiIq0tYWcTUQpcJKE01 z=v#AVbm|V;wlQ9Q*)@<-B}@aNB>kinkI0-KBqrR=VikFJReQd8`nBz0`-sILKkB2v zcNhkQ3|d{Wsmn06v{d-y`ous62?bDNFRwS>dA6fqL_Y=l0M`@O|LRtGc|Vc1won6- zuN?6so}ba(FXZi&fp4plsyk+0GXK@_N|VRnkj^z+Ddozm7JscoSg=9Ro$!C|is6dk z1RBK=vE*`We9@g_%!v-Sh|vr@s3Eg>P!eI`gF938!|Vrw^U1)SK?i?#ZQWAz%%=08 zD9}O#AX;W1`xzbltnmZui-C?+(~AK$4Zx!{T{%sxgY(kV@_`l)f#!yh#$y z(&}{~caxz{`6~pF_H3a-C86>92$1|a>YD)+D>bGfgnrN{+}?s$uq{|3MWH|krNAF4 zuYmv%Dt#2`Xb2|IfTY4kmGOuGFboxk!E|UO4Gx>vML1@glx2-nt`ZXlbhWXh9N(Ar z?s6&=dQq1+2p71GE`Rmb1(8v;JiOxpOtMe)$ZkAD_l8z>(MiPWR3hFQtptfwN^x8s zVKFYWsOAccEgVSMheK!MQgqhbjE+fTb4=7GzB1t62ke4m?NK#M_LU|S$BGevu(q9Nu3tN*JrT{G5L zz>-lT>0pni7!0PeMxqiXFt1=LM#jJ_Y(iBNSRET`Ffw-0?UdiadW}4T(77MlHEN@T zUZ+aIfGT;3mFkg7cr?>&NNBYxGi9(W-?QOR!G=R#DEhjWA|VFC6D|D!0f$L+A|6Xh z7L04?RKf+>fcyHIWM2m6SMH*DVEmi&loAf*uw3WVrXz}@fCf1MFZYU$*V?_3MiW%- zD>6~pc{IG~PT}S+{Vh!f{dvnFcz=0v{u!0Gfv=hZG*>eR+D!pFXsVj zLUpYW^%c~QI~^b^RRkN^`Z{0P%70S6NsaM?cdk*My!V;1vI&a#ovrJs85pVqcyCHM zLD~UR-VkShjGg^1Fdeh1DD+KNmU{h#$X{B1RnEg1(69b|zzN^AlISSxnvwKU+4WnS zMZ|@xknf9K1;n+wv;rf?HB5wV*M{lrcnqAkMuzj~#+asM;n?I(XXJ|M=izJR%9ZXu6FM3bvM0 z3grul4p3(qm{2D9IXT9w!~EW^|I!e&(mRTYWXl$&VqKZgEQrmGw@A06dl1G&DY zBeaglvY`CeLzA%y#EZV!z()w?;&&ZbOv7-9KvO6_p4`gmT7F$-Xr8gF(fj7xW30=8 zMjq;yH8Z65dF6zo5KVM-9eNWx{;mQKnWLuf$Vh<1Npem8X&&{@i563243y}=C{TfVF@NLiGn5@2 zm5!?9xHibNV#E0Kz1A`SC}f4q7Zo*QZ;ij1L6Bn4doH6FZ62p$=5*-MzQ90KUivk) z9){bvYmb?(RL77+R?Nl~IGC*~=DR?2dQ`bO(9LKNhr0_G4|^Ai#N< z-l)`4<4pDm;oL@{5wzohju#VT7gba@bVC>~8`zA1PRHRKxBEMlI#|5AmjYW$fe3pu zk?>ipuF$=(6_s2-7d@tIz(2fBi!@yt-rAw)`=y%Bxl#h?N?DvmKuea!vGZRqnstoD zntjD9E=Qgm?!;L2mS{e1viONq;uvDynR6~1dD`sS!<)=9mMZfpcEb%LXG!jrP-iZ= zPl$R$y>e3|5I?eDab4F5bk(gH6D!?D!u3l1B%T!>96}yk%15rajEJ<1jjaaIF(?9j z&q>?<3iBN6(O^P{Rmff$4i_AfU;4syNY#}q%v;~CPq(Skn#3`aiaLVl-Iogr8JVKx zAGRhfDATnPC#e@ijRs=9;_gKyYFnR>_v&1Xubf`ar8E9b z(_xswLT~=oo9|tqyBCl!C=a~xT-exH-=5&(E%P{@r-TDPEeu(M6-iezq|JA@eDJ}h zCp%48=r8jqZhJOoePIkUC3Zk%#nviUOkmeJw?5B$)i`p>dXv-n3hIz}8BAXn>WtQ^ z!f`Z$t$xRJrhCv;RdKN6e1Xg%E1dVx-2ZL8VZjzxT}$(mLm(nR++xbIeVGDkBD5u#N@(OP|Jiz%P3%BG}`#2v9ep8cu}#1wPr?n)50-K zJ&5ElMb)P$R21C>%E26w0g z(z|3SOn-0|l6OTII~lEZBAhg(q`yA_oA)i+5={Q${k$=0){$Aa`pr*-!d) z6$|OoYv&R3M%zPfky(C>jd0ObZjr`1x5(Y4hufN(;6m!a!q?th%EbGpKX(iE2^|| zf8wrHcRp+ySa4c!r6)!>=!#T>9banP-aMpyM?pmdQkL^=AugEa$^GQ5=g#xSS@Fao`-Loc&BJ`1PvD|?3O7`^T9}{vSX zCJLW{u{#K)Lob9T9FePFI@gc)B~;JVa)vL2Z#3ZMFb5llCr zk13=LDrC{mWcBLrBzx4$c9y81PZ=?^SpT|eb`Bh~5TkB#>6ojt>go$(G>BlGr|K_1 z4>`A8Y-C-V(&aGEvYwiLU0Z@eO_y|#8Y%7%`!koQ4H0_6!k% z=$JbZA|q*Ts6>-fB35b*3x~3YDrzV}o|``4+aFlqa~fq>>OF-dnTCNbXTM~SP#AZ_ zvYV8K`}gk*?ww;KD+S%xD;88@G>EDJi_GELuQ@xbGtNa?>Kj9p;Ue!_bhrb}WYP<2 zpe-@Grc3`IXbd!3s-{=7*_KBd@n1x@duW^sO)rH2zofFuw&-z)iLetx+x_#$AH>ZB}C>3dVk*wc=cHoB{6uP@*gf$9+}w8frGmyZGZqy9he0 z$ZZA}DT;^URqePvR!kFhgWs)fzO3G1Dsst)H{vRfq1EQbkKYs~+J2NzuLWs?62}(b z_eJ|`k7XD?0zGoVNvbD`zkLeJI_hE{v<>-jUOlMnQ@XVZ!q|feCZRsmAqrmRJhkXn z4K&nhI`6KHS+ZJ*gbei2K9HChQxJ!o^aBl@o(Z8J1qv-qi+lAPNVnIIy=79D zJ0b-AMuA9d`IivEwCh&Cuh2@mZtrj`1mXG_=rJAS9F%It%~# ztu4sy912szP~(zwkT4;jni>YDyhV|R0WfA{{WP7#DphvWv3>q7d5nhrF))Vvwzj?e zy$d*`kMm@X+fS0Euk1oLPH4~q3hXntn_939XFE!9<3c9@7u@#vx6?3KG1N-{HmHFHOc~2?U##Sv#d&?&eGy zbFQYLIH^QEm~jof&<`brE#edlGe-`8<1A!K=-lMIqf|o_i?k3xcP;}1;~|DYSF`fF z6AnXhCC85E8wULu>U__7EwtwEuwGODwvPG;8Zc)1I)!jnR#-ea;+w%}lzZsB#H6W9a} zs22gt4GH9rV5G=lx=u*+*PpzLM~lXWmQdmEz1&1pZi|5#$&|=8IhnC6LgjO-HoMHq zX``^Bz9Qg)$?5b39+77uvaon4I7(|USjoE2<`Q{TuDz4L{mx057#uQ9Y84|o?AhCg zbhic^6F1E=Uj=ualf#_zk0Q498xkr6fu-nLYOGgfo+DBFy_m4#F;NnPzx6uiJOAul zPbU3HhaA}>ittGb_QB(;p^(%k36a$Pa8g$E30=IcO>REVnNm=(Y+7i`si|G2O8o`PWR<*;y1!+=5sOh zN$C2gO1?p~cO9ey3>d-;R@#a6`!hM$kilr7{gI@709w`qNfx~jjK&omnOEv=B>2_l z?iZ72l`z6&!u*&6)+4i0ac|MvfleY($&vrM4`?P@i~Kp640&Vae`Y!dgVgm|UW<+LD(3G9|QlJNkAjdkzJ^_9sP z&9TmxirkPA8Pva-;+7i$WxH3E?D~8uK8Tj@3US!tkcE616VvYU>B1KWtyptE=(CYc z!2sETp0(38@%jKj^g{sRw(0)SHq2RWe`fhZnmF;+=bFTIVoU%g%1W{hqO1o$p64fnO=@d}25adoW zJRlq!%^@L`UZT2kd=|F{EqZteFT3R*iy6qYu0EbRrPn?{xAgimA*Q$7^|S+&&-SJ? zVGCnNPiV#T=|wW0YQ!Tq6OLuk6xe<>%%_QmEUb9`i=Cs@wDSS+^<~7#(W#kB|3PiD zvy6&S@4{gD*1Whw*XbWWfr(a`C;!xD!zX^S)a8W?)Y0hAbs2G^IBID$2!~Oh@_zxN zqj;m#cCGzM6Hf_W+OtljZZLxyJFU~Zv!}!#e_zG-PQSR=#C+Zz`t;#jK!t3UK1*}F ztvJ5O``yJi9HKt>XpWmm=`w|uImYtT?O_t3mxD@HY3W%W=vF~*9ly+CrvH_SxU+qhJT04eZezrpOSoO_vK>y38ib+V!dir=;g~B{< zn;-iinC!%-eGYNRVv_0DlPg$QKKki^N*n)&!PHF;R_M2Nt@Y1!D~#v}e(0g;pJ3ed z4tbbIS%jcpp-^$TxN}?plsKGdh*oh_<0Ev-J6UJx?elTIIfQ}x+&OA>1J6RuuOMWX zpDHr9pBm*VSx2o|S#~&_Hk*@bjP#L;o$Yc;)9gy)=Nf9g@eYR=z2*;6QzjUY!b8kX zxr3dtxey%2LcmHmSHYWDR{k7Uje zb7f((HEV97&iR_xl$lRUK|>>jVd6kU7MsFjUG>FN;evt zui0rkO^WUsu?S5;&!DN0>ju8;@9US;Mz_<2#sUq)V_*o~Hdgw)>nCUk46gVI&Ebh> zw73JX=GEytK0#Pa$3~EMVvAcYs_=ds^i@msf4aFW*PN{5`M=4*1ND zMf_z%Pp_TG-nnnEy~LeUeymB)(=I;nq5me>y?wGjwo8ormchBg-qF+PJ~YtlL?_k3 znbWn`c_;`g&bR{!a!FhZ#whcByTvav;Q7LwzfAS1$Gw7J5QgdBPVvT)1EM5QqjY+| zBf?iY@9g#Mux_bVujvA+OnceC4pAmi=;;0+_RFi!K9Z;*uQ`2da-WO%mS8SWOO~et zB#|yhkD4xdC4-GD^}mgF_{`(B0d_vYlDyXP_a|ehCX%t~60vc`TXz_BoTvt~LRGob zSweI*=9=Cf1|44R&G08#87|4SjVi@$=L$yu#Oua1Yl2kc{;pBO^{nI2HL5#588Qol zoR4{+PbRifIhv$`h*DgmESQ5iNyg=hrh-OTNcsxZ3KIEkf@`AVL4M=adi~jdr9kcH zV!`Fwh33A#7^f?D`PTf4f9NE0tkwL9)*IH9w~%qs)A=Le_miWo)nof%iJ$lrZMh7H zqFbcG_j{Hv5L8X@dzrAXMM!Bb#Q}Z}@0;2z%+sv^JL*6PUO6;H#V&35_QN_lnQ~a% z#T;~2M!150Q(w$5qq%v=)+ISY?eZIM!u>cK?~q79PD2O`=GL;Lxu)jCOJ9-CDeP{E z8OUnbDa(*UeekY1anF|F%xaMBzRz0@r|Fj2{UvG1gmtP zaJTwl=&fZXmA@AQ+ziP2pbL8+HeK$^9Z+xPgQs%w&?!Kw%xH-eT&vX?o^zSeK$b|I z*NsTM)NOfjOe!>yQd|a#T@X~OHTdb20P>Uw864u+O$wJH_RK>8)g-Fmz}) zDsC$T;t8pbQmL&<9Lc>47PcO57b%fK>d3piQ)#~aFCKT66$2mE;JmeYer`OL1a1uB zRmvZNf|Wn+Zum`^q@p)ZshE?{Ea~-o;>lDN1mWAEawM6hyQB1x7S!}`!-20N`Yk3~ zeWz*$e@~Y$MFrLq#ejRC+Z;;YRQFeFg?)z2M&=&H3r+1sI*fPRcaco=bxiIm#uMha z0?+nCQwk}43&}eCa56vcj_^doJa`P9f=)!Gc1shUGkJ>SjS^-8F-eD#sIFoS?-t_F zN3N9I;8%XJDOdC~SrE>yl%rQ@Qe0AO#J~O!2!zB@kYF%C8JetV4%VV}1_*Jygp?ne z@IIgs-?3_hvsYP=6};%RDvRVJ7|Uk#MCJPL`*)=kgIJkL^{wRFyCZ*4O0_WKVZMb` zNoM2}=JNwja_3rdA#fVTV1G&A2B4uC1sNp>p5>8&D$T|^T@u74{75>6DmG@;w}MbV zx_v3b+s}9Ip&(2-U~;KE#RK?aU`tnTF*daXHcPdwI(e zE-_$=YX?F1v^k|TL+}Dap&4-ODH}~dj=U?|HLL(sDGJaRjxQ2#{@&Ko%UL#?s4&k0 z>(BkWvf$8yuvxXGNjJ4t4$4S_IivygEb4KqSfA^K1WkWh8#eYmb|e?gV0hCsf{IVGu}T zCawb1Ti(tq_Lje<>|KGq@$c}le6C?%^Ip&ol#8jyEHrXcwb6RN)~1eQ=NBSZmSkpn z1xLirRLgFNJf(#}K(SK>oQ%zl!S{v1m`+et7&O4Pao}^}4MDg*CCdcc#pURHI|9k} zLGIM*rqZiQf6`BZpIdwI?8GmYSNav>i|2CKNh_eRpLBL}U%+dNhaFH5;B0$zG>uU_ z*v7f>9*nRb$jC?80TLwrOi^?s8B$v3s2GbVyzm13BTGjR_RSbVDRpp#k^SE6Cp?{p z8mFlAD`Edbs956{)#)GhV6wRZ!C~Xk=x9ZWkQ$uN)Jt!C)`!(7iiFy{a-Y4C~A9t zxo_ofjFOslw!jES%bpAaxb6nIq(6pRTq4N+iC)Qn=}PyIEBw6NkT3ix*oJKB6>UU+ zB^JVtsIJADHjk0v96d~Vhk~?WV5(N`fZnb>#Skk#%4RmjxsZ3o6+x4)sfAmoY`#6> z-~6JMGdh5UG>!r15IlhsOByhu^c|zC1sZ|$#5R@QO}u;hbz}QvPTGa4mCm$J^N!2& zA3nEWw{lclFyAdAWHGIt9a~U_H)n51}DrmrOLw~Jct?k^2?H+)8#v}YiYu; zINasM8+304jfmEJo)i8|NV<_mH_}58RC(j>*C{| z`pZ--!n6twe-yq8|7I$dYYm2N-vWEXwqStrBqWn3bk<^Uo=~0V)^c4`;rLZ53)k)b z%lHV<)+QV-3v6tL89T;ic4& z5o`V~k2o?bQx9oi3$d`Nn3CsGTFo}Se;6W>8Y=#li&BwkLdKO4uo7j=^Jm};mN=8? z9re!?3a(nP4>7DZ6HnRBZvrw;FHhT23_UO8DpwM!)2cB3Rpz{I9>nH5u7<2O)Us)Z zz3gTHc?sVUY$oBD0yDiY<~iquWJv85vy;N33i=W^5%lpOY$5tKJt?3PSP|n=ydUAv zbwP8;!UaN!M|NzpwuQI*Qldu2dVBz+b*TlsosX{e0#f*V&F!@uBiHl})TuqcTj-xH z?^jVv^<=jjep61VVU2AC2)fnbU^Usv`nBWgQw=8&tYJFM5vf<@^6_QnXPh2Ysed`N zk+uYKm9W|f0kyGTUG{5<+>*!i-9y=m2I{bMvVir0QA%Cl9z!j$6RRC2k5l{%r!LwK z6?v@wCOJe1z}c)6)MtPtd609F0*bHw(Z|^Z!Rg2PAtZau(X5YResmoR!ih$b-22{ay-)-t)Sju zVO?+TjszYXIetET(B6L8)G7Y=NRy$M9tZB=tXWt0JyFX6y=7IqG z>KS*``~<9xdSCPE-Ue5Q8f!Dao=C;YDxp-5J&V3go(pJZKM@isD*RrBEie3F<&&{( zp$lDLYE8205$9ARo=2FK8FZfpzW*|8v!QIUOGTP78JPD39rpH<)$u6|< zHj>0l^DH!@@n;K3w;<5ml3CyH;iO)<7APw=VtcBRg%Ya5In_JETC_S3V(RBm^6j6C zGJ&p-7iEQZW}%4NpY`5$Ua-)JUBn^dTc-`^B1;6pc=;6^QM$4cweiFNO<~F-<0%h zTp%pc&+m$_<%g@eg+ALw^Fj{ZP}-!+0!kUL&(^n66_%tVTlsLI#(|+@4+_gRcB@)g zd9FHt&9-41_uqTwX=It3bt1vJ5ax_$wAAH)jvhTGgYyYAb(=QZBdk>SD6yCABhjc% z;`4whHQncXRv)c&Z|nYWkN6LG0sxr=K}K~_&<2dmn%u7S=(8qH$a;iW5!To|1SLs6 z!3YcX7uy_K^~Q;t;UveYvzsgKG;VF6wH7Ndw6jSENRRd_%3w6EjGqJixnJ1@si~W? ztH^@y>WDQkxCi-SLk|z(28k-G@~@ixQevtsxkhxiF3%jz2x~rC=H*3H;?Qv*b3e!z zps;>7iqcEqKz@#bV*R*7_7TZ;b&xf43riUeZomKg2m7QEZz8x!OgZKL$pc~)RTn>4 zXZ`OH#U~~u{qen9z(o+)yJk)S`zzbHs#b+#(+`WrSL0zho2R7FOX3xlrq4)q2LUE0i$bN)i*Vc z`@1{t6O7dT`1#5E|1%xo{gEf*OxotLj!h-d)Adb<4=mcSFZNM}%bR6wuWfmK`$xGu z?%VHaRUny4Hdq@6YTH|)GF)VQ`*6Vo&`fHuSIv^byb-}!rMC4hUeoD} z19FoqjK-UyVyLVc;~OTiGwCzAN|mY7vyoJEyH{ru_4ya1aj#@)(;U8QnhBM|nK|Ic zxEb+@<@NH>YrNa6U1b*KuOk{xbg{OM>_k8HwL$9aJLe#oC8yV)LS%dcO*%8$zvQE2 zbJgBZ!smvJvHqu$v;2wzeA6&Ux1@A84Ba5z-Q6+d&@C}AAPCY8QX(~Umw-wRARtJm zbjKhufUxXu&z}9fU*7-VJ?DAu=en<{oRC_TB9}H2uE}0?7vG_t9f*a%fr?;3hp<@A z9`r=iSke!$?B&H%Z$V_y6R05=3@on8-3`M+;I1i!PmbM|>CIZEyx;lA`#D^j$`z8t zs5w}$MoIsrj$Uox#*|$&TjYYRF1O_|_HbKFFd*97USm^mNF)@Qj@ttmL?I`bjLGW> z)%1~Vs}p#5B79`kQ+D%W(>=$K+wWE%5j?j17nbH@!v>(dN=6v^ihP zD2kOhyz{2=?l1zD4;|W=3;?KSCab8XT@rVTVbr?%UXyI&F9HlQl$ZE>KC*7_C01@Rz+NcNZDr5HYcurdv@LBxK1BUtRT6kWTMGA`7h3;wNazJ zEy$U1gbwlXpV`V*dpLd6;U^#O4y++fDGcg9>vpo@>XBM6n6Q9$G5g%59rJ-prqo02 z55{P-IJ>Q z5vYqNz{72ab)j2+NO6$`TUYX1Mb$ckv5(c-UgJ8|XT+yfATouzxh# z*(1J?#@~L!O%hTd0w0L};j7R%MB~bmxXG8jIAjUV9U$hB^$3Vxwd`lA3tuF71??}D zEaz(d{eJa3!}=&x&dq;HK^-9Y$2g@j3EHJg6->Od<_%Uk5-<;!>+{u|IWOk$;o@0^ zAn1DocvNNbMGVZ7|L_s)PvxI*w8S*=guIPEu{3!TuIR5Gr-W7O=7c4RRRLJG0-N)r zT5#u8XU)nSLbyxqKT`6;n4toW*-WK8uJLVVt84TJqgiWs(RpvJ!=r5bz)9&x)Eksk zr8iN(Bi$<%5kVSw+N<$xKOBK3H>=Ha!lY*%d)*G)MO2*%#+$`lU+yRy9)>c|a%NFi zw%5m)zoUgnmrjSFd~$V-j6sPqRo423{9VolaX!LKD}c&(89l1<d+T<&=kWu;dz;uBX zM+AexMwaFUy{^lR{f0#E#X77jqC_4jW(h+b3jYr^VT?j^ts@bM@-aR(Pu(>M| zv|S~Ov7}-ZTHS2&Nn2oVeDkCoMKS9A23~J zuf{L4?2vkR1Cs-Q>EFy-3!1~6cV1<~AJ2dCb)f3g0r)isR-yAZ*54d8>%8s+2fR2Y zg>0TG77ol58%{k%%^D3ihibXjvI77Ng^bIzH=_7Wbi~Jkz8bw60j%8BZHLndhU3lP z>d4^GQ;IF>WIa0B$ubUB2QXSEMCzBh8`m6P$-0&}=?C;Msu$G8nF;Bqmp24RL>O}) zs?^`WZLWKJ3X|4sXr7K&9>mB*@_NO8NDzNwmoOM}zlo3G(@6zZoWk7nu6Wyo`}gBY zH{{bJv;RAwY|MPJ>U>P8R64H4lhc?T{!3z;O7K~ifGXvszqAJC-)SJnrnuRvU=JxD zE+)%Rpkox=7{zEnVr^y#z{67+&d`jYgv$Z{h^}8xBCR8R z_40Yq&wj_AN54`G9-IgeJ)jL`%+0HRN`7r3cbi8b_hK19g9~89OErCY$l$4AO&j!wOBeBWp4tM-2NjJ6%Lwh$ zQ)!E6VCBVXa{owt!`%TUJ$AA)_S7j@ndB7&@6-5xq9T{rN9S6zF~8mpMRvO7{cmJ0 z;*#)9E_=CIq%0;2?a?vzSAx_F5o-y;qo^hoCR;(nkUmXASm+f9#>AwCwxwF6iz$Y! z+~A*Ax=K>yI$&$A=AAJw@-1&#C|xU!;JqM{9OJD5eHs|U`T+78;@Q?#CTpwH7fvd# zqu+8n- zL3Z)-=Q7NTkLPpW2brD)<({7w`kBw_60~XmKm0wH<6Th-@7p%jmjb+tZuiT9g)`gu zE!bdGrrL7OtG|XWF0%%G-Ch0b*8o)s{aHUGaS6Et*%S?FL~!CF{~Obdo8pjC$n@)| zv1|Hp|D+f{$eZ*UjU+J?3AwSoYlu;r*ybLY2Gj!TNlN zCluxJ2^im>@SX@iZv#N(K{Z3$))bl-W%z}d_dNGS?{H$c42+pdQ8Xif=HCnlLS~V* z0Wq@?yd~BPf7J6Dd^_0)FViUieNr7C9~#D73|gOj$3qC)ce%?tJwb1F<^y9o0u@^G zNEEnNxW6zKfsEKG;7g@Yh5-@3jPh~Ny9BjPEt&VurbGWI0;exM(P2Hy5g+Uv>S~6h zT2}VdyYv$OWeV_&@BVWPM<`FAOKOG9VN{&(utb+D7#Z=S^qO;U3-Un+nm#x~PdQW@ z?IdHJX~){mMC8Kjyr`?cWuFRqxuq_(TcfA&6hVIeCx2G^zx>$%XIwi&;hr>lqCoX% z1~!^**wE5K;=y^2xcf9yz~0(iis&2|F4xMe67u6a1}*I7KzuSyM_VLUBF?pWAY7UhN7LhD9}BQ&)rxFBo+)y;x* z`kuX49PI)anXCvI!^ey<(RO-mt%tS?WX^eg_9zI$Ur$*Q^+%%7HxhM>Q^<=_?E&8N z-_0^G4gA&^3xIz*XosROzJO+d=r=`k3 z5j9(z=03OvfH%bjs9e?lCRaSTD@ZvNJRhQwY}1E%hpO$I1jVSr%iAQ?f-|@q)BafL ze`YgeA4=R;!o_w17@35Q4u{YwQXBdC)3cK^r5RGc&g?Uom~N67IVvKoaUbhx)19yL znp;?P^7?LZUmg^DeEM?jwNJL_yW}bGR#TEObh6jy#a^oX-I8Ew-nAc#YS#PHI;S>= z2gM9T%!9Jz=1gya@wi9=xB2SmgN&Ld1fM2{e+mV);V(6{MW?DM@%=0{R&{Ir&v7js7E1Z2$8-2_ABzbdj zJ(CZvfx@+@-O`*i+uXp9x7mIynC&2$jXYNDtaS{BT#d5A(rmU!ld30 z>kPmVVd#h*p|^pNVCCgSDfk=2^&kO=e7S(Dy7ev!1x(6o$JrUB3y!yK5o2a?Reb^8 zw)W7OL5F5X>eMT4+c!31)TBkvyF_F){Rml{{w>93m@|MCH^+sWYl??M_`wfZ!px-> zt%QeYicGO-^-zlZZ3=7tufb_?9)hi+h%K-l)HhTz_)@955A8z{u(XRG5zf&@Av-<$etQv*3y99`o12)zP(oPer5O(i}R z-Xa7F;WKCfmqMk(us(vu>4j$R*Mw0hT3uVIL8Ih-N>Uke$V7A>(zCSt#c32ss=VX0%a`HB#FsAeo6-Ocmck3p% zhEd(zS#&k=Fqyp!j@f5WL}+0~IViUWvj8mFIDCq-1@1vP!|#;bJOe)*A>S%b1?3P- zs?lo0z0>0|q*`|_EeffYJ_g4T{iFVd&!|!Xf8>(?%Q=fHsH%T!RCgn;boc)_;CMjfTMLBWK7tmsQ5j6|rdp`A)#B({t<+{Rr zUSdJFU*6p+N}kB?FiNeigt98rfB`J(Nu>Xt(WzdvO;l}|-EVNKKL)C^?B3li!!P$k z;T!XL_`pE}%D>wC)^oLD*G+I44hNK#?cpPxUd}W>-oK0$S((dM(^ctn6IBlQcOP+t zKtUz$q+Hh-MxmfGQ@y3V)Y`0=@#o738C(?Z4&CES{;s`ltM&+_kepV}`&X7~<|Qv0 zxiI!=uBgf?_1$Ts2E7C?GPEQW1(G(f=3>ePWwXz_@BJGOnoD^02-8!gdefcRPUIzRm;sm7LzDQzvMNsa@nOKRT<`WPL6yZA98lgDNS_Wq(lkN{@Ll! z)31N)!Z)6O|J=X0Wter?kKeKAVWqNRq%oV`eS|S2#p@nw?iotUPM7WEVpeF^R@4>q zca@m@_&qztQ{qS`^(>f!!CX0zq`}S^sa9=Tq;Dze!Cv%h9KI{;MQLrHh_P?-u+6XF z0K2&9yRIiiEd9srCw%OiR2h#Wh8J)~)>c=4@t<;0vshHr3~B+jdpxG!pWft@>{IyP zch_Uq47^`qG9EB%zohv+lMqh&-onC?(fk>db>J%;stPS@sy4Q6>)v`=|7{qW{0yEE zK1bDZ0(~m*&y5Fo(%2@*;5zRiD+DYz(T9Ek_~}$C`rNlXhi^Le^#G^b3+Vot5)< z39(znsfQ#r71|R>nq2sbpXr0B>5X(6hok6&-1J;TDyT%iP|W0vr&X8N-x(*G&)(sS z2fA|WO^K*nIA5%&@38~2{Fpc`I;TaBK07wF*GC+aqI*ba>pS;3M`L6C<&tL;`f;Xp z`_RpTKDXggMgE+mn%e6$2}z?}X(}kS?_yjNPLqf!ve^5@rHW4=x3$TC##Z!*kHL|- z5brtxK%m4Ug7w7U6qf_f_>4#{*eT z7xhY_WU#(O3h-7MGj0cxB&A!I4uyoty+Q4}SE(cur84Y71g@p(6s^mcd;s<+XOsqw zUxuriy)$FASfa(JAV}W$HL8LS6Qh>bJI~OGvD;+Mtbu*Yrhjj>AP%XtahIpr0XyDEj7+i zo*a|NlZvaZmmWS>fcs8}upBCYam1>W0did0A8mS*Bl!?#09jLR8xr5Ma*e7rulsxl zZ=3xtiYG!7Vup&Ei&O9W$I+0;g~8LbjZnizFTWB>bR}9w($RP0(4Wd{T%?-^$opfy z{L}tzpleyg7E1SVrUGVa37l`b`PL)yikgfl$+cZk(1XeT{Y{YRplw*6j8SmtqB-(IemiV#MjO z|4y3B*bjz{@+GI=f5>~vZ@H{gGIINIVwc+M_u7Z%-losp(TYI9;gxhRdmw~cEpUA2 zUAdNCwgH#=Vj@(l$pPSX8u2?g=Xz^6Acv%KL?rp>Oglpp2c(*z7nPe|ZKWs@7k0H+ zq+ZU{$YSgRTw?s0Fxw&lH7ajbzfHiS;nOaY5cr!9+)maZF9g206$TZ$H|aPTa*}V} z##-*C8p{p8EVK0fm;--z(G(1*wSGcwIZ6GzbVkr>SgOXXT+h6CgM0A)AEoizzK-5U zlkk8Q^2&*zpenb$DFIw{J5KIOE@rT zfRxOS9nh*Dw|dPPFc+00nOAAb^;`8vy?zh|dCj)~xN%0shzjj>+Xe?}5Id%I-Xe?O zS$Wir$`tQ0$$X0UCM8JoNMP+|A<>zuV_~TpCrte)$5>lQZQ-in1ZMow1=_I$J|F?l zsr4>X{1aMzr|vWjLs?j|(p{>Pkh>0=lM9*N3CBr-uAouMK08ZoR~`O0JYG bMCQV|(2CBVZC)h7&(E={=}o^ts7U_>zxAJ= diff --git a/build/openrpc/miner.json.gz b/build/openrpc/miner.json.gz index faab78eb76c65d98e3190189bcda59a2faa51f16..e311dc8cc26a3400418dada4154810e5eac750f1 100644 GIT binary patch literal 7608 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 ac2h+h8qd!+&;K6)0RR8G8tvFgbpZfe663D` literal 7643 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 JfEo*V0RT7s00{s9 diff --git a/build/openrpc/worker.json.gz b/build/openrpc/worker.json.gz index 7bf6216a75f64bf7adaa10fbee6e214287f259b6..62ec8064c97cfb0a84f7fe2b5284a0161e163955 100644 GIT binary patch literal 2561 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 diff --git a/cli/auth.go b/cli/auth.go index 6426a4ab6..20b9bb394 100644 --- a/cli/auth.go +++ b/cli/auth.go @@ -8,7 +8,7 @@ import ( "github.com/filecoin-project/go-jsonrpc/auth" - "github.com/filecoin-project/lotus/api/apistruct" + "github.com/filecoin-project/lotus/api" cliutil "github.com/filecoin-project/lotus/cli/util" "github.com/filecoin-project/lotus/node/repo" ) @@ -47,18 +47,18 @@ var AuthCreateAdminToken = &cli.Command{ perm := cctx.String("perm") idx := 0 - for i, p := range apistruct.AllPermissions { + for i, p := range api.AllPermissions { if auth.Permission(perm) == p { idx = i + 1 } } if idx == 0 { - return fmt.Errorf("--perm flag has to be one of: %s", apistruct.AllPermissions) + return fmt.Errorf("--perm flag has to be one of: %s", api.AllPermissions) } // slice on [:idx] so for example: 'sign' gives you [read, write, sign] - token, err := napi.AuthNew(ctx, apistruct.AllPermissions[:idx]) + token, err := napi.AuthNew(ctx, api.AllPermissions[:idx]) if err != nil { return err } @@ -95,18 +95,18 @@ var AuthApiInfoToken = &cli.Command{ perm := cctx.String("perm") idx := 0 - for i, p := range apistruct.AllPermissions { + for i, p := range api.AllPermissions { if auth.Permission(perm) == p { idx = i + 1 } } if idx == 0 { - return fmt.Errorf("--perm flag has to be one of: %s", apistruct.AllPermissions) + return fmt.Errorf("--perm flag has to be one of: %s", api.AllPermissions) } // slice on [:idx] so for example: 'sign' gives you [read, write, sign] - token, err := napi.AuthNew(ctx, apistruct.AllPermissions[:idx]) + token, err := napi.AuthNew(ctx, api.AllPermissions[:idx]) if err != nil { return err } diff --git a/cmd/lotus-seal-worker/main.go b/cmd/lotus-seal-worker/main.go index 24918e52a..0f0cb88e6 100644 --- a/cmd/lotus-seal-worker/main.go +++ b/cmd/lotus-seal-worker/main.go @@ -28,7 +28,6 @@ import ( "github.com/filecoin-project/go-statestore" "github.com/filecoin-project/lotus/api" - "github.com/filecoin-project/lotus/api/apistruct" "github.com/filecoin-project/lotus/build" lcli "github.com/filecoin-project/lotus/cli" cliutil "github.com/filecoin-project/lotus/cli/util" @@ -366,7 +365,7 @@ var runCmd = &cli.Command{ fh := &stores.FetchHandler{Local: localStore} remoteHandler := func(w http.ResponseWriter, r *http.Request) { - if !auth.HasPerm(r.Context(), nil, apistruct.PermAdmin) { + if !auth.HasPerm(r.Context(), nil, api.PermAdmin) { w.WriteHeader(401) _ = json.NewEncoder(w).Encode(struct{ Error string }{"unauthorized: missing admin permission"}) return @@ -394,7 +393,7 @@ var runCmd = &cli.Command{ readerHandler, readerServerOpt := rpcenc.ReaderParamDecoder() rpcServer := jsonrpc.NewServer(readerServerOpt) - rpcServer.Register("Filecoin", apistruct.PermissionedWorkerAPI(metrics.MetricedWorkerAPI(workerApi))) + rpcServer.Register("Filecoin", api.PermissionedWorkerAPI(metrics.MetricedWorkerAPI(workerApi))) mux.Handle("/rpc/v0", rpcServer) mux.Handle("/rpc/streams/v0/push/{uuid}", readerHandler) diff --git a/cmd/lotus-shed/jwt.go b/cmd/lotus-shed/jwt.go index 78abcec76..e8853b419 100644 --- a/cmd/lotus-shed/jwt.go +++ b/cmd/lotus-shed/jwt.go @@ -15,7 +15,8 @@ import ( "github.com/urfave/cli/v2" "github.com/filecoin-project/go-jsonrpc/auth" - "github.com/filecoin-project/lotus/api/apistruct" + + "github.com/filecoin-project/lotus/api" "github.com/filecoin-project/lotus/chain/types" "github.com/filecoin-project/lotus/node/modules" ) @@ -98,19 +99,19 @@ var jwtTokenCmd = &cli.Command{ perms := []auth.Permission{} if cctx.Bool("read") { - perms = append(perms, apistruct.PermRead) + perms = append(perms, api.PermRead) } if cctx.Bool("write") { - perms = append(perms, apistruct.PermWrite) + perms = append(perms, api.PermWrite) } if cctx.Bool("sign") { - perms = append(perms, apistruct.PermSign) + perms = append(perms, api.PermSign) } if cctx.Bool("admin") { - perms = append(perms, apistruct.PermAdmin) + perms = append(perms, api.PermAdmin) } p := modules.JwtPayload{ @@ -152,7 +153,7 @@ var jwtNewCmd = &cli.Command{ } p := modules.JwtPayload{ - Allow: apistruct.AllPermissions, + Allow: api.AllPermissions, } token, err := jwt.Sign(&p, jwt.NewHS256(keyInfo.PrivateKey)) diff --git a/cmd/lotus-storage-miner/run.go b/cmd/lotus-storage-miner/run.go index cdcc4d88f..0d2e5a70e 100644 --- a/cmd/lotus-storage-miner/run.go +++ b/cmd/lotus-storage-miner/run.go @@ -22,7 +22,6 @@ import ( "github.com/filecoin-project/go-jsonrpc/auth" "github.com/filecoin-project/lotus/api" - "github.com/filecoin-project/lotus/api/apistruct" "github.com/filecoin-project/lotus/build" lcli "github.com/filecoin-project/lotus/cli" "github.com/filecoin-project/lotus/lib/ulimit" @@ -165,7 +164,7 @@ var runCmd = &cli.Command{ mux := mux.NewRouter() rpcServer := jsonrpc.NewServer() - rpcServer.Register("Filecoin", apistruct.PermissionedStorMinerAPI(metrics.MetricedStorMinerAPI(minerapi))) + rpcServer.Register("Filecoin", api.PermissionedStorMinerAPI(metrics.MetricedStorMinerAPI(minerapi))) mux.Handle("/rpc/v0", rpcServer) mux.PathPrefix("/remote").HandlerFunc(minerapi.(*impl.StorageMinerAPI).ServeRemote) diff --git a/cmd/lotus/rpc.go b/cmd/lotus/rpc.go index 00de0fddb..95050d639 100644 --- a/cmd/lotus/rpc.go +++ b/cmd/lotus/rpc.go @@ -21,7 +21,7 @@ import ( "github.com/filecoin-project/go-jsonrpc" "github.com/filecoin-project/go-jsonrpc/auth" - "github.com/filecoin-project/lotus/api/apistruct" + "github.com/filecoin-project/lotus/api" "github.com/filecoin-project/lotus/api/v0api" "github.com/filecoin-project/lotus/api/v1api" "github.com/filecoin-project/lotus/metrics" @@ -48,7 +48,7 @@ func serveRPC(a v1api.FullNode, stop node.StopFunc, addr multiaddr.Multiaddr, sh http.Handle(path, ah) } - pma := apistruct.PermissionedFullAPI(metrics.MetricedFullAPI(a)) + pma := api.PermissionedFullAPI(metrics.MetricedFullAPI(a)) serveRpc("/rpc/v1", pma) serveRpc("/rpc/v0", &v0api.WrapperV1Full{FullNode: pma}) @@ -116,7 +116,7 @@ func handleImport(a *impl.FullNodeAPI) func(w http.ResponseWriter, r *http.Reque w.WriteHeader(404) return } - if !auth.HasPerm(r.Context(), nil, apistruct.PermWrite) { + if !auth.HasPerm(r.Context(), nil, api.PermWrite) { w.WriteHeader(401) _ = json.NewEncoder(w).Encode(struct{ Error string }{"unauthorized: missing write permission"}) return diff --git a/gen/api/proxygen.go b/gen/api/proxygen.go index 64859380f..fb624c808 100644 --- a/gen/api/proxygen.go +++ b/gen/api/proxygen.go @@ -54,7 +54,7 @@ func (v *Visitor) Visit(node ast.Node) ast.Visitor { } func main() { // latest (v1) - if err := generate("./api", "api", "apistruct", "./api/apistruct/struct.go"); err != nil { + if err := generate("./api", "api", "api", "./api/struct.go"); err != nil { fmt.Println("error: ", err) } @@ -64,34 +64,34 @@ func main() { } } -func typeName(e ast.Expr) (string, error) { +func typeName(e ast.Expr, pkg string) (string, error) { switch t := e.(type) { case *ast.SelectorExpr: return t.X.(*ast.Ident).Name + "." + t.Sel.Name, nil case *ast.Ident: pstr := t.Name - if !unicode.IsLower(rune(pstr[0])) { + if !unicode.IsLower(rune(pstr[0])) && pkg != "api" { pstr = "api." + pstr // todo src pkg name } return pstr, nil case *ast.ArrayType: - subt, err := typeName(t.Elt) + subt, err := typeName(t.Elt, pkg) if err != nil { return "", err } return "[]" + subt, nil case *ast.StarExpr: - subt, err := typeName(t.X) + subt, err := typeName(t.X, pkg) if err != nil { return "", err } return "*" + subt, nil case *ast.MapType: - k, err := typeName(t.Key) + k, err := typeName(t.Key, pkg) if err != nil { return "", err } - v, err := typeName(t.Value) + v, err := typeName(t.Value, pkg) if err != nil { return "", err } @@ -107,7 +107,7 @@ func typeName(e ast.Expr) (string, error) { } return "interface{}", nil case *ast.ChanType: - subt, err := typeName(t.Value) + subt, err := typeName(t.Value, pkg) if err != nil { return "", err } @@ -197,7 +197,7 @@ func generate(path, pkg, outpkg, outfile string) error { if _, ok := info.Methods[mname]; !ok { var params, pnames []string for _, param := range node.ftype.Params.List { - pstr, err := typeName(param.Type) + pstr, err := typeName(param.Type, outpkg) if err != nil { return err } @@ -216,7 +216,7 @@ func generate(path, pkg, outpkg, outfile string) error { var results []string for _, result := range node.ftype.Results.List { - rs, err := typeName(result.Type) + rs, err := typeName(result.Type, outpkg) if err != nil { return err } diff --git a/metrics/proxy.go b/metrics/proxy.go index 309ef80e1..7253a76c2 100644 --- a/metrics/proxy.go +++ b/metrics/proxy.go @@ -7,37 +7,36 @@ import ( "go.opencensus.io/tag" "github.com/filecoin-project/lotus/api" - "github.com/filecoin-project/lotus/api/apistruct" ) func MetricedStorMinerAPI(a api.StorageMiner) api.StorageMiner { - var out apistruct.StorageMinerStruct + var out api.StorageMinerStruct proxy(a, &out.Internal) proxy(a, &out.CommonStruct.Internal) return &out } func MetricedFullAPI(a api.FullNode) api.FullNode { - var out apistruct.FullNodeStruct + var out api.FullNodeStruct proxy(a, &out.Internal) proxy(a, &out.CommonStruct.Internal) return &out } func MetricedWorkerAPI(a api.Worker) api.Worker { - var out apistruct.WorkerStruct + var out api.WorkerStruct proxy(a, &out.Internal) return &out } func MetricedWalletAPI(a api.Wallet) api.Wallet { - var out apistruct.WalletStruct + var out api.WalletStruct proxy(a, &out.Internal) return &out } func MetricedGatewayAPI(a api.Gateway) api.Gateway { - var out apistruct.GatewayStruct + var out api.GatewayStruct proxy(a, &out.Internal) return &out } diff --git a/node/impl/storminer.go b/node/impl/storminer.go index e81560059..fa840d980 100644 --- a/node/impl/storminer.go +++ b/node/impl/storminer.go @@ -31,7 +31,6 @@ import ( sealing "github.com/filecoin-project/lotus/extern/storage-sealing" "github.com/filecoin-project/lotus/api" - "github.com/filecoin-project/lotus/api/apistruct" apitypes "github.com/filecoin-project/lotus/api/types" "github.com/filecoin-project/lotus/chain/types" "github.com/filecoin-project/lotus/markets/storageadapter" @@ -86,7 +85,7 @@ type StorageMinerAPI struct { } func (sm *StorageMinerAPI) ServeRemote(w http.ResponseWriter, r *http.Request) { - if !auth.HasPerm(r.Context(), nil, apistruct.PermAdmin) { + if !auth.HasPerm(r.Context(), nil, api.PermAdmin) { w.WriteHeader(401) _ = json.NewEncoder(w).Encode(struct{ Error string }{"unauthorized: missing write permission"}) return diff --git a/node/modules/core.go b/node/modules/core.go index 83a7e8d42..e089333e7 100644 --- a/node/modules/core.go +++ b/node/modules/core.go @@ -22,7 +22,7 @@ import ( "github.com/filecoin-project/go-jsonrpc/auth" "github.com/filecoin-project/go-state-types/abi" - "github.com/filecoin-project/lotus/api/apistruct" + "github.com/filecoin-project/lotus/api" "github.com/filecoin-project/lotus/build" "github.com/filecoin-project/lotus/chain/types" "github.com/filecoin-project/lotus/lib/addrutil" @@ -163,7 +163,7 @@ func APISecret(keystore types.KeyStore, lr repo.LockedRepo) (*dtypes.APIAlg, err // TODO: make this configurable p := JwtPayload{ - Allow: apistruct.AllPermissions, + Allow: api.AllPermissions, } cliToken, err := jwt.Sign(&p, jwt.NewHS256(key.PrivateKey))