From f4ad96608e7da429b0cd1317032365558299618c Mon Sep 17 00:00:00 2001 From: Gianmaria Del Monte <39946305+gmgigi96@users.noreply.github.com> Date: Fri, 22 Apr 2022 15:14:13 +0200 Subject: [PATCH 1/3] Implementation of CS3 Lock API for EOS storage driver (#2444) --- README.md | 2 +- .../unreleased/eos-lock-implementation.md | 4 + cmd/reva/getlock.go | 70 + cmd/reva/grpc.go | 4 +- cmd/reva/main.go | 3 + cmd/reva/setlock.go | 171 + cmd/reva/unlock.go | 93 + docs/content/en/docs/concepts/plugins.md | 6 +- internal/grpc/services/gateway/appprovider.go | 8 +- pkg/eosclient/eosbinary/eosbinary.go | 97 +- pkg/eosclient/eosclient.go | 11 +- pkg/eosclient/eosgrpc/eos_grpc/Rpc.pb.go | 8147 +++++++++++------ pkg/eosclient/eosgrpc/eos_grpc/Rpc.proto | 59 + pkg/eosclient/eosgrpc/eos_grpc/Rpc_grpc.pb.go | 445 + pkg/eosclient/eosgrpc/eosgrpc.go | 54 +- pkg/eosclient/utils.go | 40 + pkg/rgrpc/status/status.go | 11 + pkg/sdk/session.go | 8 +- pkg/storage/utils/eosfs/eosfs.go | 429 +- 19 files changed, 6575 insertions(+), 3087 deletions(-) create mode 100644 changelog/unreleased/eos-lock-implementation.md create mode 100644 cmd/reva/getlock.go create mode 100644 cmd/reva/setlock.go create mode 100644 cmd/reva/unlock.go create mode 100644 pkg/eosclient/eosgrpc/eos_grpc/Rpc_grpc.pb.go create mode 100644 pkg/eosclient/utils.go diff --git a/README.md b/README.md index 780e3680d5..e01ba092d7 100644 --- a/README.md +++ b/README.md @@ -57,7 +57,7 @@ If you see `TestGetManagerWithInvalidUser/Nil_in_user` fail, [try removing](http To run a single one of them you can do: ```sh $ go test `go list ./pkg/utils/...` -ok github.com/cs3org/reva/pkg/utils 0.374s +ok github.com/cs3org/reva/v2/pkg/utils 0.374s ``` ### Integration tests (GRPC) diff --git a/changelog/unreleased/eos-lock-implementation.md b/changelog/unreleased/eos-lock-implementation.md new file mode 100644 index 0000000000..94913179d9 --- /dev/null +++ b/changelog/unreleased/eos-lock-implementation.md @@ -0,0 +1,4 @@ +Enhancement: Implement the CS3 Lock API in the EOS storage driver + +https://github.com/cs3org/cs3apis/pull/160 +https://github.com/cs3org/reva/pull/2444 \ No newline at end of file diff --git a/cmd/reva/getlock.go b/cmd/reva/getlock.go new file mode 100644 index 0000000000..b4d501354c --- /dev/null +++ b/cmd/reva/getlock.go @@ -0,0 +1,70 @@ +// Copyright 2018-2021 CERN +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +// In applying this license, CERN does not waive the privileges and immunities +// granted to it by virtue of its status as an Intergovernmental Organization +// or submit itself to any jurisdiction. + +package main + +import ( + "errors" + "fmt" + "io" + + rpc "github.com/cs3org/go-cs3apis/cs3/rpc/v1beta1" + provider "github.com/cs3org/go-cs3apis/cs3/storage/provider/v1beta1" + "github.com/gdexlab/go-render/render" +) + +func getlockCommand() *command { + cmd := newCommand("getlock") + cmd.Description = func() string { return "get a lock on a resource" } + cmd.Usage = func() string { return "Usage: getlock " } + + cmd.ResetFlags = func() {} + + cmd.Action = func(w ...io.Writer) error { + if cmd.NArg() < 1 { + return errors.New("Invalid arguments: " + cmd.Usage()) + } + + fn := cmd.Args()[0] + client, err := getClient() + if err != nil { + return err + } + + ctx := getAuthContext() + + ref := &provider.Reference{Path: fn} + + res, err := client.GetLock(ctx, &provider.GetLockRequest{ + Ref: ref, + }) + + if err != nil { + return err + } + + if res.Status.Code != rpc.Code_CODE_OK { + return formatError(res.Status) + } + + fmt.Println(render.Render(res.Lock)) + + return nil + } + return cmd +} diff --git a/cmd/reva/grpc.go b/cmd/reva/grpc.go index 24776afe1c..d254799124 100644 --- a/cmd/reva/grpc.go +++ b/cmd/reva/grpc.go @@ -30,7 +30,7 @@ import ( rpc "github.com/cs3org/go-cs3apis/cs3/rpc/v1beta1" ctxpkg "github.com/cs3org/reva/v2/pkg/ctx" "google.golang.org/grpc" - grpcinsecure "google.golang.org/grpc/credentials/insecure" + ins "google.golang.org/grpc/credentials/insecure" "google.golang.org/grpc/metadata" ) @@ -57,7 +57,7 @@ func getClient() (gateway.GatewayAPIClient, error) { func getConn() (*grpc.ClientConn, error) { if insecure { - return grpc.Dial(conf.Host, grpc.WithTransportCredentials(grpcinsecure.NewCredentials())) + return grpc.Dial(conf.Host, grpc.WithTransportCredentials(ins.NewCredentials())) } // TODO(labkode): if in the future we want client-side certificate validation, diff --git a/cmd/reva/main.go b/cmd/reva/main.go index 96c84416cc..752fe40685 100644 --- a/cmd/reva/main.go +++ b/cmd/reva/main.go @@ -87,6 +87,9 @@ var ( appTokensListCommand(), appTokensRemoveCommand(), appTokensCreateCommand(), + setlockCommand(), + getlockCommand(), + unlockCommand(), helpCommand(), } ) diff --git a/cmd/reva/setlock.go b/cmd/reva/setlock.go new file mode 100644 index 0000000000..da85f47d4f --- /dev/null +++ b/cmd/reva/setlock.go @@ -0,0 +1,171 @@ +// Copyright 2018-2021 CERN +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +// In applying this license, CERN does not waive the privileges and immunities +// granted to it by virtue of its status as an Intergovernmental Organization +// or submit itself to any jurisdiction. + +package main + +import ( + "context" + "errors" + "fmt" + "io" + "time" + + gateway "github.com/cs3org/go-cs3apis/cs3/gateway/v1beta1" + user "github.com/cs3org/go-cs3apis/cs3/identity/user/v1beta1" + rpc "github.com/cs3org/go-cs3apis/cs3/rpc/v1beta1" + provider "github.com/cs3org/go-cs3apis/cs3/storage/provider/v1beta1" + types "github.com/cs3org/go-cs3apis/cs3/types/v1beta1" +) + +func setlockCommand() *command { + cmd := newCommand("setlock") + cmd.Description = func() string { return "set a lock on a resource" } + cmd.Usage = func() string { return "Usage: setlock [-flags] " } + + typeFlag := cmd.String("type", "write", "type of lock") + idFlag := cmd.String("id", "", "id of lock") + userFlag := cmd.String("user", "", "user associated to lock") + appFlag := cmd.String("app", "", "app associated to lock") + expFlag := cmd.String("exp", "", "lock expiration time") + refreshFlag := cmd.Bool("refresh", false, "refresh the lock") + + cmd.ResetFlags = func() { + *typeFlag, *idFlag, *userFlag, *appFlag, *expFlag, *refreshFlag = "", "", "", "", "", false + } + + cmd.Action = func(w ...io.Writer) error { + if cmd.NArg() < 1 { + return errors.New("Invalid arguments: " + cmd.Usage()) + } + + fn := cmd.Args()[0] + client, err := getClient() + if err != nil { + return err + } + + ctx := getAuthContext() + + lock, err := createLock(ctx, client, *typeFlag, *idFlag, *userFlag, *appFlag, *expFlag) + if err != nil { + return err + } + + ref := &provider.Reference{Path: fn} + + if *refreshFlag { + res, err := client.RefreshLock(ctx, &provider.RefreshLockRequest{ + Ref: ref, + Lock: lock, + }) + if err != nil { + return err + } + + if res.Status.Code != rpc.Code_CODE_OK { + return formatError(res.Status) + } + } else { + res, err := client.SetLock(ctx, &provider.SetLockRequest{ + Ref: ref, + Lock: lock, + }) + if err != nil { + return err + } + + if res.Status.Code != rpc.Code_CODE_OK { + return formatError(res.Status) + } + } + + fmt.Println("OK") + + return nil + } + return cmd +} + +func createLock(ctx context.Context, client gateway.GatewayAPIClient, t, id, u, app, exp string) (*provider.Lock, error) { + lockType, err := getType(t) + if err != nil { + return nil, err + } + var uID *user.UserId + if u != "" { + u, err := getUser(ctx, client, u) + if err != nil { + return nil, err + } + uID = u.GetId() + } + var expiration *types.Timestamp + if exp != "" { + expiration, err = getExpiration(exp) + if err != nil { + return nil, err + } + } + + lock := provider.Lock{ + LockId: id, + Type: lockType, + User: uID, + AppName: app, + Expiration: expiration, + } + + return &lock, nil +} + +func getType(t string) (provider.LockType, error) { + switch t { + case "shared": + return provider.LockType_LOCK_TYPE_SHARED, nil + case "write": + return provider.LockType_LOCK_TYPE_WRITE, nil + case "exclusive": + return provider.LockType_LOCK_TYPE_EXCL, nil + default: + return provider.LockType_LOCK_TYPE_INVALID, errors.New("type not recognised") + } +} + +func getUser(ctx context.Context, client gateway.GatewayAPIClient, u string) (*user.User, error) { + res, err := client.GetUserByClaim(ctx, &user.GetUserByClaimRequest{ + Claim: "username", + Value: u, + }) + switch { + case err != nil: + return nil, err + case res.Status.Code != rpc.Code_CODE_OK: + return nil, errors.New(res.Status.Message) + } + return res.User, nil +} + +func getExpiration(exp string) (*types.Timestamp, error) { + t, err := time.Parse("2006-01-02", exp) + if err != nil { + return nil, err + } + return &types.Timestamp{ + Seconds: uint64(t.Unix()), + }, nil +} diff --git a/cmd/reva/unlock.go b/cmd/reva/unlock.go new file mode 100644 index 0000000000..567c0a26d5 --- /dev/null +++ b/cmd/reva/unlock.go @@ -0,0 +1,93 @@ +// Copyright 2018-2021 CERN +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +// In applying this license, CERN does not waive the privileges and immunities +// granted to it by virtue of its status as an Intergovernmental Organization +// or submit itself to any jurisdiction. + +package main + +import ( + "errors" + "fmt" + "io" + + rpc "github.com/cs3org/go-cs3apis/cs3/rpc/v1beta1" + provider "github.com/cs3org/go-cs3apis/cs3/storage/provider/v1beta1" +) + +func unlockCommand() *command { + cmd := newCommand("unlock") + cmd.Description = func() string { return "remove a lock on a resource" } + cmd.Usage = func() string { return "Usage: unlock " } + + idFlag := cmd.String("id", "", "lock id") + + cmd.ResetFlags = func() { + *idFlag = "" + } + + cmd.Action = func(w ...io.Writer) error { + if cmd.NArg() < 1 { + return errors.New("Invalid arguments: " + cmd.Usage()) + } + + fn := cmd.Args()[0] + client, err := getClient() + if err != nil { + return err + } + + ctx := getAuthContext() + + ref := &provider.Reference{Path: fn} + + // get lock from the id if set + var lock *provider.Lock + if *idFlag == "" { + getLockRes, err := client.GetLock(ctx, &provider.GetLockRequest{ + Ref: ref, + }) + if err != nil { + return err + } + if getLockRes.Status.Code != rpc.Code_CODE_OK { + return formatError(getLockRes.Status) + } + lock = getLockRes.Lock + } else { + lock = &provider.Lock{ + LockId: *idFlag, + } + } + + res, err := client.Unlock(ctx, &provider.UnlockRequest{ + Ref: ref, + Lock: lock, + }) + + if err != nil { + return err + } + + if res.Status.Code != rpc.Code_CODE_OK { + return formatError(res.Status) + } + + fmt.Println("OK") + + return nil + } + return cmd +} diff --git a/docs/content/en/docs/concepts/plugins.md b/docs/content/en/docs/concepts/plugins.md index 2a7c6f21c3..ca8f500dbf 100644 --- a/docs/content/en/docs/concepts/plugins.md +++ b/docs/content/en/docs/concepts/plugins.md @@ -35,7 +35,7 @@ The core handles all of the communication details and go-plugin implementations Your plugin must use the packages from the Reva core to implement the interfaces. You're encouraged to use whatever other packages you want in your plugin implementation. Because plugins are their own processes, there is no danger of colliding dependencies. -- `github.com/cs3org/reva/pkg/`: Contains the interface that you have to implement for any give plugin. +- `github.com/cs3org/reva/v2/pkg/`: Contains the interface that you have to implement for any give plugin. - `github.com/hashicorp/go-plugin`: To serve the plugin over RPC. This handles all the inter-process communication. Basic example of serving your component is shown below. This example consists of a simple `JSON` plugin driver for the [Userprovider](https://github.com/cs3org/reva/blob/master/internal/grpc/services/userprovider/userprovider.go) service. You can find the example code [here](https://github.com/cs3org/reva/blob/master/examples/plugin/json/json.go). @@ -68,7 +68,7 @@ The `plugin.Serve` method handles all the details of communicating with Reva cor The `plugin.Serve` method takes in the plugin configuration, which you would have to define in your plugin source code: -- `HandshakeConfig`: The handshake is defined in `github.com/cs3org/reva/pkg/plugin` +- `HandshakeConfig`: The handshake is defined in `github.com/cs3org/reva/v2/pkg/plugin` ```go var Handshake = plugin.HandshakeConfig{ @@ -123,4 +123,4 @@ driver = "https://github.com/jimil749/json" [grpc.service.userprovider.drivers.json] user = "user.demo.json" -``` \ No newline at end of file +``` diff --git a/internal/grpc/services/gateway/appprovider.go b/internal/grpc/services/gateway/appprovider.go index e53a3c6fc1..8119118d78 100644 --- a/internal/grpc/services/gateway/appprovider.go +++ b/internal/grpc/services/gateway/appprovider.go @@ -40,7 +40,7 @@ import ( "github.com/pkg/errors" "google.golang.org/grpc" "google.golang.org/grpc/credentials" - grpcinsecure "google.golang.org/grpc/credentials/insecure" + "google.golang.org/grpc/credentials/insecure" "google.golang.org/grpc/metadata" ) @@ -285,9 +285,9 @@ func getGRPCConfig(opaque *typespb.Opaque) (bool, bool) { return insecure, skipVerify } -func getConn(host string, insecure, skipverify bool) (*grpc.ClientConn, error) { - if insecure { - return grpc.Dial(host, grpc.WithTransportCredentials(grpcinsecure.NewCredentials())) +func getConn(host string, ins, skipverify bool) (*grpc.ClientConn, error) { + if ins { + return grpc.Dial(host, grpc.WithTransportCredentials(insecure.NewCredentials())) } // TODO(labkode): if in the future we want client-side certificate validation, diff --git a/pkg/eosclient/eosbinary/eosbinary.go b/pkg/eosclient/eosbinary/eosbinary.go index 11868fc12b..3e7f55ec5c 100644 --- a/pkg/eosclient/eosbinary/eosbinary.go +++ b/pkg/eosclient/eosbinary/eosbinary.go @@ -49,42 +49,24 @@ const ( favoritesKey = "http://owncloud.org/ns/favorite" ) -const ( - // SystemAttr is the system extended attribute. - SystemAttr eosclient.AttrType = iota - // UserAttr is the user extended attribute. - UserAttr -) - func serializeAttribute(a *eosclient.Attribute) string { return fmt.Sprintf("%s.%s=%s", attrTypeToString(a.Type), a.Key, a.Val) } func attrTypeToString(at eosclient.AttrType) string { switch at { - case SystemAttr: + case eosclient.SystemAttr: return "sys" - case UserAttr: + case eosclient.UserAttr: return "user" default: return "invalid" } } -func attrStringToType(t string) (eosclient.AttrType, error) { - switch t { - case "sys": - return SystemAttr, nil - case "user": - return UserAttr, nil - default: - return 0, errtypes.InternalError("attr type not existing") - } -} - func isValidAttribute(a *eosclient.Attribute) bool { // validate that an attribute is correct. - if (a.Type != SystemAttr && a.Type != UserAttr) || a.Key == "" { + if (a.Type != eosclient.SystemAttr && a.Type != eosclient.UserAttr) || a.Key == "" { return false } return true @@ -212,14 +194,15 @@ func (c *Client) executeXRDCopy(ctx context.Context, cmdArgs []string) (string, } } + // check for operation not permitted error + if strings.Contains(errBuf.String(), "Operation not permitted") { + err = errtypes.InvalidCredentials("eosclient: no sufficient permissions for the operation") + } + args := fmt.Sprintf("%s", cmd.Args) env := fmt.Sprintf("%s", cmd.Env) log.Info().Str("args", args).Str("env", env).Int("exit", exitStatus).Msg("eos cmd") - if err != nil && exitStatus != int(syscall.ENOENT) { // don't wrap the errtypes.NotFoundError - err = errors.Wrap(err, "eosclient: error while executing command") - } - return outBuf.String(), errBuf.String(), err } @@ -313,14 +296,11 @@ func (c *Client) AddACL(ctx context.Context, auth, rootAuth eosclient.Authorizat sysACL = a.CitrineSerialize() } sysACLAttr := &eosclient.Attribute{ - Type: SystemAttr, + Type: eosclient.SystemAttr, Key: lwShareAttrKey, Val: sysACL, } - if err = c.SetAttr(ctx, auth, sysACLAttr, finfo.IsDir, path); err != nil { - return err - } - return nil + return c.SetAttr(ctx, auth, sysACLAttr, false, finfo.IsDir, path) } sysACL := a.CitrineSerialize() @@ -366,14 +346,11 @@ func (c *Client) RemoveACL(ctx context.Context, auth, rootAuth eosclient.Authori sysACL = a.CitrineSerialize() } sysACLAttr := &eosclient.Attribute{ - Type: SystemAttr, + Type: eosclient.SystemAttr, Key: lwShareAttrKey, Val: sysACL, } - if err = c.SetAttr(ctx, auth, sysACLAttr, finfo.IsDir, path); err != nil { - return err - } - return nil + return c.SetAttr(ctx, auth, sysACLAttr, false, finfo.IsDir, path) } sysACL := a.CitrineSerialize() @@ -524,7 +501,7 @@ func (c *Client) mergeACLsAndAttrsForFiles(ctx context.Context, auth eosclient.A } // SetAttr sets an extended attributes on a path. -func (c *Client) SetAttr(ctx context.Context, auth eosclient.Authorization, attr *eosclient.Attribute, recursive bool, path string) error { +func (c *Client) SetAttr(ctx context.Context, auth eosclient.Authorization, attr *eosclient.Attribute, errorIfExists, recursive bool, path string) error { if !isValidAttribute(attr) { return errors.New("eos: attr is invalid: " + serializeAttribute(attr)) } @@ -534,7 +511,7 @@ func (c *Client) SetAttr(ctx context.Context, auth eosclient.Authorization, attr // We need to set the attrs on the version folder as they are not persisted across writes // Except for the sys.eval.useracl attr as EOS uses that to determine if it needs to obey // the user ACLs set on the file - if !(attr.Type == SystemAttr && attr.Key == userACLEvalKey) { + if !(attr.Type == eosclient.SystemAttr && attr.Key == userACLEvalKey) { info, err = c.getRawFileInfoByPath(ctx, auth, path) if err != nil { return err @@ -545,22 +522,29 @@ func (c *Client) SetAttr(ctx context.Context, auth eosclient.Authorization, attr } // Favorites need to be stored per user so handle these separately - if attr.Type == UserAttr && attr.Key == favoritesKey { + if attr.Type == eosclient.UserAttr && attr.Key == favoritesKey { return c.handleFavAttr(ctx, auth, attr, recursive, path, info, true) } - return c.setEOSAttr(ctx, auth, attr, recursive, path) + return c.setEOSAttr(ctx, auth, attr, errorIfExists, recursive, path) } -func (c *Client) setEOSAttr(ctx context.Context, auth eosclient.Authorization, attr *eosclient.Attribute, recursive bool, path string) error { - var args []string +func (c *Client) setEOSAttr(ctx context.Context, auth eosclient.Authorization, attr *eosclient.Attribute, errorIfExists, recursive bool, path string) error { + args := []string{"attr"} if recursive { - args = []string{"attr", "-r", "set", serializeAttribute(attr), path} - } else { - args = []string{"attr", "set", serializeAttribute(attr), path} + args = append(args, "-r") } + args = append(args, "set") + if errorIfExists { + args = append(args, "-c") + } + args = append(args, serializeAttribute(attr), path) _, _, err := c.executeEOS(ctx, args, auth) if err != nil { + var exErr *exec.ExitError + if errors.As(err, &exErr) && exErr.ExitCode() == 17 { + return eosclient.AttrAlreadyExistsError + } return err } return nil @@ -589,7 +573,7 @@ func (c *Client) handleFavAttr(ctx context.Context, auth eosclient.Authorization favs.DeleteEntry(acl.TypeUser, u.Id.OpaqueId) } attr.Val = favs.Serialize() - return c.setEOSAttr(ctx, auth, attr, recursive, path) + return c.setEOSAttr(ctx, auth, attr, false, recursive, path) } // UnsetAttr unsets an extended attribute on a path. @@ -603,7 +587,7 @@ func (c *Client) UnsetAttr(ctx context.Context, auth eosclient.Authorization, at // We need to set the attrs on the version folder as they are not persisted across writes // Except for the sys.eval.useracl attr as EOS uses that to determine if it needs to obey // the user ACLs set on the file - if !(attr.Type == SystemAttr && attr.Key == userACLEvalKey) { + if !(attr.Type == eosclient.SystemAttr && attr.Key == userACLEvalKey) { info, err = c.getRawFileInfoByPath(ctx, auth, path) if err != nil { return err @@ -614,7 +598,7 @@ func (c *Client) UnsetAttr(ctx context.Context, auth eosclient.Authorization, at } // Favorites need to be stored per user so handle these separately - if attr.Type == UserAttr && attr.Key == favoritesKey { + if attr.Type == eosclient.UserAttr && attr.Key == favoritesKey { return c.handleFavAttr(ctx, auth, attr, recursive, path, info, false) } @@ -626,6 +610,10 @@ func (c *Client) UnsetAttr(ctx context.Context, auth eosclient.Authorization, at } _, _, err = c.executeEOS(ctx, args, auth) if err != nil { + var exErr *exec.ExitError + if errors.As(err, &exErr) && exErr.ExitCode() == 61 { + return eosclient.AttrNotExistsError + } return err } return nil @@ -633,6 +621,17 @@ func (c *Client) UnsetAttr(ctx context.Context, auth eosclient.Authorization, at // GetAttr returns the attribute specified by key func (c *Client) GetAttr(ctx context.Context, auth eosclient.Authorization, key, path string) (*eosclient.Attribute, error) { + + // As SetAttr set the attr on the version folder, we will read the attribute on it + // if the resource is not a folder + info, err := c.getRawFileInfoByPath(ctx, auth, path) + if err != nil { + return nil, err + } + if !info.IsDir { + path = getVersionFolder(path) + } + args := []string{"attr", "get", key, path} attrOut, _, err := c.executeEOS(ctx, args, auth) if err != nil { @@ -647,7 +646,7 @@ func (c *Client) GetAttr(ctx context.Context, auth eosclient.Authorization, key, func deserializeAttribute(attrStr string) (*eosclient.Attribute, error) { // the string is in the form sys.forced.checksum="adler" - keyValue := strings.Split(strings.TrimSpace(attrStr), "=") // keyValue = ["sys.forced.checksum", "\"adler\""] + keyValue := strings.SplitN(strings.TrimSpace(attrStr), "=", 2) // keyValue = ["sys.forced.checksum", "\"adler\""] if len(keyValue) != 2 { return nil, errtypes.InternalError("wrong attr format to deserialize") } @@ -655,7 +654,7 @@ func deserializeAttribute(attrStr string) (*eosclient.Attribute, error) { if len(type2key) != 2 { return nil, errtypes.InternalError("wrong attr format to deserialize") } - t, err := attrStringToType(type2key[0]) + t, err := eosclient.AttrStringToType(type2key[0]) if err != nil { return nil, err } diff --git a/pkg/eosclient/eosclient.go b/pkg/eosclient/eosclient.go index c85081164f..0f661b3ae8 100644 --- a/pkg/eosclient/eosclient.go +++ b/pkg/eosclient/eosclient.go @@ -22,6 +22,7 @@ import ( "context" "io" + "github.com/cs3org/reva/v2/pkg/errtypes" "github.com/cs3org/reva/v2/pkg/storage/utils/acl" ) @@ -35,7 +36,7 @@ type EOSClient interface { GetFileInfoByInode(ctx context.Context, auth Authorization, inode uint64) (*FileInfo, error) GetFileInfoByFXID(ctx context.Context, auth Authorization, fxid string) (*FileInfo, error) GetFileInfoByPath(ctx context.Context, auth Authorization, path string) (*FileInfo, error) - SetAttr(ctx context.Context, auth Authorization, attr *Attribute, recursive bool, path string) error + SetAttr(ctx context.Context, auth Authorization, attr *Attribute, errorIfExists, recursive bool, path string) error UnsetAttr(ctx context.Context, auth Authorization, attr *Attribute, recursive bool, path string) error GetAttr(ctx context.Context, auth Authorization, key, path string) (*Attribute, error) GetQuota(ctx context.Context, username string, rootAuth Authorization, path string) (*QuotaInfo, error) @@ -139,3 +140,11 @@ type Authorization struct { Role Role Token string } + +// AttrAlreadyExistsError is the error raised when setting +// an already existing attr on a resource +const AttrAlreadyExistsError = errtypes.BadRequest("attr already exists") + +// AttrNotExistsError is the error raised when removing +// an attribute that does not exist +const AttrNotExistsError = errtypes.BadRequest("attr not exists") diff --git a/pkg/eosclient/eosgrpc/eos_grpc/Rpc.pb.go b/pkg/eosclient/eosgrpc/eos_grpc/Rpc.pb.go index 0721bf89b3..6f5502ee18 100644 --- a/pkg/eosclient/eosgrpc/eos_grpc/Rpc.pb.go +++ b/pkg/eosclient/eosgrpc/eos_grpc/Rpc.pb.go @@ -16,32 +16,47 @@ // granted to it by virtue of its status as an Intergovernmental Organization // or submit itself to any jurisdiction. +// @project The CERN Tape Archive (CTA) +// @brief CTA-EOS gRPC API for CASTOR-EOS migration +// @copyright Copyright 2019 CERN +// @license This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . + +// NOTE: Compile for Go with: +// protoc ./eos_grpc.proto --go_out=plugins=grpc:. + // Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.26.0 +// protoc v3.19.1 // source: Rpc.proto package eos_grpc import ( - context "context" - fmt "fmt" - math "math" - - proto "github.com/golang/protobuf/proto" - grpc "google.golang.org/grpc" - codes "google.golang.org/grpc/codes" - status "google.golang.org/grpc/status" -) + reflect "reflect" + sync "sync" -// Reference imports to suppress errors if they are not otherwise used. -var _ = proto.Marshal -var _ = fmt.Errorf -var _ = math.Inf + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" +) -// This is a compile-time assertion to ensure that this generated file -// is compatible with the proto package it is being compiled against. -// A compilation error at this line likely means your copy of the -// proto package needs to be updated. -const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) type TYPE int32 @@ -52,26 +67,47 @@ const ( TYPE_STAT TYPE = 3 ) -var TYPE_name = map[int32]string{ - 0: "FILE", - 1: "CONTAINER", - 2: "LISTING", - 3: "STAT", -} +// Enum value maps for TYPE. +var ( + TYPE_name = map[int32]string{ + 0: "FILE", + 1: "CONTAINER", + 2: "LISTING", + 3: "STAT", + } + TYPE_value = map[string]int32{ + "FILE": 0, + "CONTAINER": 1, + "LISTING": 2, + "STAT": 3, + } +) -var TYPE_value = map[string]int32{ - "FILE": 0, - "CONTAINER": 1, - "LISTING": 2, - "STAT": 3, +func (x TYPE) Enum() *TYPE { + p := new(TYPE) + *p = x + return p } func (x TYPE) String() string { - return proto.EnumName(TYPE_name, int32(x)) + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (TYPE) Descriptor() protoreflect.EnumDescriptor { + return file_Rpc_proto_enumTypes[0].Descriptor() +} + +func (TYPE) Type() protoreflect.EnumType { + return &file_Rpc_proto_enumTypes[0] } +func (x TYPE) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use TYPE.Descriptor instead. func (TYPE) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_979aee4989bceb08, []int{0} + return file_Rpc_proto_rawDescGZIP(), []int{0} } type QUOTATYPE int32 @@ -82,24 +118,45 @@ const ( QUOTATYPE_PROJECT QUOTATYPE = 3 ) -var QUOTATYPE_name = map[int32]string{ - 0: "USER", - 2: "GROUP", - 3: "PROJECT", -} +// Enum value maps for QUOTATYPE. +var ( + QUOTATYPE_name = map[int32]string{ + 0: "USER", + 2: "GROUP", + 3: "PROJECT", + } + QUOTATYPE_value = map[string]int32{ + "USER": 0, + "GROUP": 2, + "PROJECT": 3, + } +) -var QUOTATYPE_value = map[string]int32{ - "USER": 0, - "GROUP": 2, - "PROJECT": 3, +func (x QUOTATYPE) Enum() *QUOTATYPE { + p := new(QUOTATYPE) + *p = x + return p } func (x QUOTATYPE) String() string { - return proto.EnumName(QUOTATYPE_name, int32(x)) + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (QUOTATYPE) Descriptor() protoreflect.EnumDescriptor { + return file_Rpc_proto_enumTypes[1].Descriptor() } +func (QUOTATYPE) Type() protoreflect.EnumType { + return &file_Rpc_proto_enumTypes[1] +} + +func (x QUOTATYPE) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use QUOTATYPE.Descriptor instead. func (QUOTATYPE) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_979aee4989bceb08, []int{1} + return file_Rpc_proto_rawDescGZIP(), []int{1} } type QUOTAOP int32 @@ -111,26 +168,47 @@ const ( QUOTAOP_RMNODE QUOTAOP = 3 ) -var QUOTAOP_name = map[int32]string{ - 0: "GET", - 1: "SET", - 2: "RM", - 3: "RMNODE", -} +// Enum value maps for QUOTAOP. +var ( + QUOTAOP_name = map[int32]string{ + 0: "GET", + 1: "SET", + 2: "RM", + 3: "RMNODE", + } + QUOTAOP_value = map[string]int32{ + "GET": 0, + "SET": 1, + "RM": 2, + "RMNODE": 3, + } +) -var QUOTAOP_value = map[string]int32{ - "GET": 0, - "SET": 1, - "RM": 2, - "RMNODE": 3, +func (x QUOTAOP) Enum() *QUOTAOP { + p := new(QUOTAOP) + *p = x + return p } func (x QUOTAOP) String() string { - return proto.EnumName(QUOTAOP_name, int32(x)) + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) } +func (QUOTAOP) Descriptor() protoreflect.EnumDescriptor { + return file_Rpc_proto_enumTypes[2].Descriptor() +} + +func (QUOTAOP) Type() protoreflect.EnumType { + return &file_Rpc_proto_enumTypes[2] +} + +func (x QUOTAOP) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use QUOTAOP.Descriptor instead. func (QUOTAOP) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_979aee4989bceb08, []int{2} + return file_Rpc_proto_rawDescGZIP(), []int{2} } type QUOTAENTRY int32 @@ -141,24 +219,45 @@ const ( QUOTAENTRY_INODE QUOTAENTRY = 2 ) -var QUOTAENTRY_name = map[int32]string{ - 0: "NONE", - 1: "VOLUME", - 2: "INODE", -} +// Enum value maps for QUOTAENTRY. +var ( + QUOTAENTRY_name = map[int32]string{ + 0: "NONE", + 1: "VOLUME", + 2: "INODE", + } + QUOTAENTRY_value = map[string]int32{ + "NONE": 0, + "VOLUME": 1, + "INODE": 2, + } +) -var QUOTAENTRY_value = map[string]int32{ - "NONE": 0, - "VOLUME": 1, - "INODE": 2, +func (x QUOTAENTRY) Enum() *QUOTAENTRY { + p := new(QUOTAENTRY) + *p = x + return p } func (x QUOTAENTRY) String() string { - return proto.EnumName(QUOTAENTRY_name, int32(x)) + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (QUOTAENTRY) Descriptor() protoreflect.EnumDescriptor { + return file_Rpc_proto_enumTypes[3].Descriptor() +} + +func (QUOTAENTRY) Type() protoreflect.EnumType { + return &file_Rpc_proto_enumTypes[3] +} + +func (x QUOTAENTRY) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) } +// Deprecated: Use QUOTAENTRY.Descriptor instead. func (QUOTAENTRY) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_979aee4989bceb08, []int{3} + return file_Rpc_proto_rawDescGZIP(), []int{3} } type MANILA_REQUEST_TYPE int32 @@ -170,35 +269,56 @@ const ( MANILA_REQUEST_TYPE_SHRINK_SHARE MANILA_REQUEST_TYPE = 3 MANILA_REQUEST_TYPE_MANAGE_EXISTING MANILA_REQUEST_TYPE = 4 MANILA_REQUEST_TYPE_UNMANAGE MANILA_REQUEST_TYPE = 5 - MANILA_REQUEST_TYPE_GET_CAPACITIES MANILA_REQUEST_TYPE = 6 + MANILA_REQUEST_TYPE_GET_CAPACITIES MANILA_REQUEST_TYPE = 6 // EXTRA FUNCTIONS NOT IMPLEMENTED ) -var MANILA_REQUEST_TYPE_name = map[int32]string{ - 0: "CREATE_SHARE", - 1: "DELETE_SHARE", - 2: "EXTEND_SHARE", - 3: "SHRINK_SHARE", - 4: "MANAGE_EXISTING", - 5: "UNMANAGE", - 6: "GET_CAPACITIES", -} +// Enum value maps for MANILA_REQUEST_TYPE. +var ( + MANILA_REQUEST_TYPE_name = map[int32]string{ + 0: "CREATE_SHARE", + 1: "DELETE_SHARE", + 2: "EXTEND_SHARE", + 3: "SHRINK_SHARE", + 4: "MANAGE_EXISTING", + 5: "UNMANAGE", + 6: "GET_CAPACITIES", + } + MANILA_REQUEST_TYPE_value = map[string]int32{ + "CREATE_SHARE": 0, + "DELETE_SHARE": 1, + "EXTEND_SHARE": 2, + "SHRINK_SHARE": 3, + "MANAGE_EXISTING": 4, + "UNMANAGE": 5, + "GET_CAPACITIES": 6, + } +) -var MANILA_REQUEST_TYPE_value = map[string]int32{ - "CREATE_SHARE": 0, - "DELETE_SHARE": 1, - "EXTEND_SHARE": 2, - "SHRINK_SHARE": 3, - "MANAGE_EXISTING": 4, - "UNMANAGE": 5, - "GET_CAPACITIES": 6, +func (x MANILA_REQUEST_TYPE) Enum() *MANILA_REQUEST_TYPE { + p := new(MANILA_REQUEST_TYPE) + *p = x + return p } func (x MANILA_REQUEST_TYPE) String() string { - return proto.EnumName(MANILA_REQUEST_TYPE_name, int32(x)) + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (MANILA_REQUEST_TYPE) Descriptor() protoreflect.EnumDescriptor { + return file_Rpc_proto_enumTypes[4].Descriptor() +} + +func (MANILA_REQUEST_TYPE) Type() protoreflect.EnumType { + return &file_Rpc_proto_enumTypes[4] +} + +func (x MANILA_REQUEST_TYPE) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) } +// Deprecated: Use MANILA_REQUEST_TYPE.Descriptor instead. func (MANILA_REQUEST_TYPE) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_979aee4989bceb08, []int{4} + return file_Rpc_proto_rawDescGZIP(), []int{4} } type NSRequest_VersionRequest_VERSION_CMD int32 @@ -210,26 +330,47 @@ const ( NSRequest_VersionRequest_GRAB NSRequest_VersionRequest_VERSION_CMD = 3 ) -var NSRequest_VersionRequest_VERSION_CMD_name = map[int32]string{ - 0: "CREATE", - 1: "PURGE", - 2: "LIST", - 3: "GRAB", -} +// Enum value maps for NSRequest_VersionRequest_VERSION_CMD. +var ( + NSRequest_VersionRequest_VERSION_CMD_name = map[int32]string{ + 0: "CREATE", + 1: "PURGE", + 2: "LIST", + 3: "GRAB", + } + NSRequest_VersionRequest_VERSION_CMD_value = map[string]int32{ + "CREATE": 0, + "PURGE": 1, + "LIST": 2, + "GRAB": 3, + } +) -var NSRequest_VersionRequest_VERSION_CMD_value = map[string]int32{ - "CREATE": 0, - "PURGE": 1, - "LIST": 2, - "GRAB": 3, +func (x NSRequest_VersionRequest_VERSION_CMD) Enum() *NSRequest_VersionRequest_VERSION_CMD { + p := new(NSRequest_VersionRequest_VERSION_CMD) + *p = x + return p } func (x NSRequest_VersionRequest_VERSION_CMD) String() string { - return proto.EnumName(NSRequest_VersionRequest_VERSION_CMD_name, int32(x)) + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (NSRequest_VersionRequest_VERSION_CMD) Descriptor() protoreflect.EnumDescriptor { + return file_Rpc_proto_enumTypes[5].Descriptor() +} + +func (NSRequest_VersionRequest_VERSION_CMD) Type() protoreflect.EnumType { + return &file_Rpc_proto_enumTypes[5] +} + +func (x NSRequest_VersionRequest_VERSION_CMD) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) } +// Deprecated: Use NSRequest_VersionRequest_VERSION_CMD.Descriptor instead. func (NSRequest_VersionRequest_VERSION_CMD) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_979aee4989bceb08, []int{20, 7, 0} + return file_Rpc_proto_rawDescGZIP(), []int{20, 7, 0} } type NSRequest_RecycleRequest_RECYCLE_CMD int32 @@ -240,24 +381,45 @@ const ( NSRequest_RecycleRequest_LIST NSRequest_RecycleRequest_RECYCLE_CMD = 2 ) -var NSRequest_RecycleRequest_RECYCLE_CMD_name = map[int32]string{ - 0: "RESTORE", - 1: "PURGE", - 2: "LIST", -} +// Enum value maps for NSRequest_RecycleRequest_RECYCLE_CMD. +var ( + NSRequest_RecycleRequest_RECYCLE_CMD_name = map[int32]string{ + 0: "RESTORE", + 1: "PURGE", + 2: "LIST", + } + NSRequest_RecycleRequest_RECYCLE_CMD_value = map[string]int32{ + "RESTORE": 0, + "PURGE": 1, + "LIST": 2, + } +) -var NSRequest_RecycleRequest_RECYCLE_CMD_value = map[string]int32{ - "RESTORE": 0, - "PURGE": 1, - "LIST": 2, +func (x NSRequest_RecycleRequest_RECYCLE_CMD) Enum() *NSRequest_RecycleRequest_RECYCLE_CMD { + p := new(NSRequest_RecycleRequest_RECYCLE_CMD) + *p = x + return p } func (x NSRequest_RecycleRequest_RECYCLE_CMD) String() string { - return proto.EnumName(NSRequest_RecycleRequest_RECYCLE_CMD_name, int32(x)) + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (NSRequest_RecycleRequest_RECYCLE_CMD) Descriptor() protoreflect.EnumDescriptor { + return file_Rpc_proto_enumTypes[6].Descriptor() +} + +func (NSRequest_RecycleRequest_RECYCLE_CMD) Type() protoreflect.EnumType { + return &file_Rpc_proto_enumTypes[6] +} + +func (x NSRequest_RecycleRequest_RECYCLE_CMD) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) } +// Deprecated: Use NSRequest_RecycleRequest_RECYCLE_CMD.Descriptor instead. func (NSRequest_RecycleRequest_RECYCLE_CMD) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_979aee4989bceb08, []int{20, 8, 0} + return file_Rpc_proto_rawDescGZIP(), []int{20, 8, 0} } type NSRequest_AclRequest_ACL_COMMAND int32 @@ -268,24 +430,45 @@ const ( NSRequest_AclRequest_LIST NSRequest_AclRequest_ACL_COMMAND = 2 ) -var NSRequest_AclRequest_ACL_COMMAND_name = map[int32]string{ - 0: "NONE", - 1: "MODIFY", - 2: "LIST", -} +// Enum value maps for NSRequest_AclRequest_ACL_COMMAND. +var ( + NSRequest_AclRequest_ACL_COMMAND_name = map[int32]string{ + 0: "NONE", + 1: "MODIFY", + 2: "LIST", + } + NSRequest_AclRequest_ACL_COMMAND_value = map[string]int32{ + "NONE": 0, + "MODIFY": 1, + "LIST": 2, + } +) -var NSRequest_AclRequest_ACL_COMMAND_value = map[string]int32{ - "NONE": 0, - "MODIFY": 1, - "LIST": 2, +func (x NSRequest_AclRequest_ACL_COMMAND) Enum() *NSRequest_AclRequest_ACL_COMMAND { + p := new(NSRequest_AclRequest_ACL_COMMAND) + *p = x + return p } func (x NSRequest_AclRequest_ACL_COMMAND) String() string { - return proto.EnumName(NSRequest_AclRequest_ACL_COMMAND_name, int32(x)) + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (NSRequest_AclRequest_ACL_COMMAND) Descriptor() protoreflect.EnumDescriptor { + return file_Rpc_proto_enumTypes[7].Descriptor() +} + +func (NSRequest_AclRequest_ACL_COMMAND) Type() protoreflect.EnumType { + return &file_Rpc_proto_enumTypes[7] +} + +func (x NSRequest_AclRequest_ACL_COMMAND) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) } +// Deprecated: Use NSRequest_AclRequest_ACL_COMMAND.Descriptor instead. func (NSRequest_AclRequest_ACL_COMMAND) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_979aee4989bceb08, []int{20, 12, 0} + return file_Rpc_proto_rawDescGZIP(), []int{20, 12, 0} } type NSRequest_AclRequest_ACL_TYPE int32 @@ -295,22 +478,153 @@ const ( NSRequest_AclRequest_SYS_ACL NSRequest_AclRequest_ACL_TYPE = 1 ) -var NSRequest_AclRequest_ACL_TYPE_name = map[int32]string{ - 0: "USER_ACL", - 1: "SYS_ACL", -} +// Enum value maps for NSRequest_AclRequest_ACL_TYPE. +var ( + NSRequest_AclRequest_ACL_TYPE_name = map[int32]string{ + 0: "USER_ACL", + 1: "SYS_ACL", + } + NSRequest_AclRequest_ACL_TYPE_value = map[string]int32{ + "USER_ACL": 0, + "SYS_ACL": 1, + } +) -var NSRequest_AclRequest_ACL_TYPE_value = map[string]int32{ - "USER_ACL": 0, - "SYS_ACL": 1, +func (x NSRequest_AclRequest_ACL_TYPE) Enum() *NSRequest_AclRequest_ACL_TYPE { + p := new(NSRequest_AclRequest_ACL_TYPE) + *p = x + return p } func (x NSRequest_AclRequest_ACL_TYPE) String() string { - return proto.EnumName(NSRequest_AclRequest_ACL_TYPE_name, int32(x)) + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (NSRequest_AclRequest_ACL_TYPE) Descriptor() protoreflect.EnumDescriptor { + return file_Rpc_proto_enumTypes[8].Descriptor() +} + +func (NSRequest_AclRequest_ACL_TYPE) Type() protoreflect.EnumType { + return &file_Rpc_proto_enumTypes[8] +} + +func (x NSRequest_AclRequest_ACL_TYPE) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) } +// Deprecated: Use NSRequest_AclRequest_ACL_TYPE.Descriptor instead. func (NSRequest_AclRequest_ACL_TYPE) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_979aee4989bceb08, []int{20, 12, 1} + return file_Rpc_proto_rawDescGZIP(), []int{20, 12, 1} +} + +type NSRequest_ShareRequest_LsShare_OutFormat int32 + +const ( + NSRequest_ShareRequest_LsShare_NONE NSRequest_ShareRequest_LsShare_OutFormat = 0 // + NSRequest_ShareRequest_LsShare_MONITORING NSRequest_ShareRequest_LsShare_OutFormat = 1 // [-m] + NSRequest_ShareRequest_LsShare_LISTING NSRequest_ShareRequest_LsShare_OutFormat = 2 // [-l] + NSRequest_ShareRequest_LsShare_JSON NSRequest_ShareRequest_LsShare_OutFormat = 3 // [grpc] +) + +// Enum value maps for NSRequest_ShareRequest_LsShare_OutFormat. +var ( + NSRequest_ShareRequest_LsShare_OutFormat_name = map[int32]string{ + 0: "NONE", + 1: "MONITORING", + 2: "LISTING", + 3: "JSON", + } + NSRequest_ShareRequest_LsShare_OutFormat_value = map[string]int32{ + "NONE": 0, + "MONITORING": 1, + "LISTING": 2, + "JSON": 3, + } +) + +func (x NSRequest_ShareRequest_LsShare_OutFormat) Enum() *NSRequest_ShareRequest_LsShare_OutFormat { + p := new(NSRequest_ShareRequest_LsShare_OutFormat) + *p = x + return p +} + +func (x NSRequest_ShareRequest_LsShare_OutFormat) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (NSRequest_ShareRequest_LsShare_OutFormat) Descriptor() protoreflect.EnumDescriptor { + return file_Rpc_proto_enumTypes[9].Descriptor() +} + +func (NSRequest_ShareRequest_LsShare_OutFormat) Type() protoreflect.EnumType { + return &file_Rpc_proto_enumTypes[9] +} + +func (x NSRequest_ShareRequest_LsShare_OutFormat) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use NSRequest_ShareRequest_LsShare_OutFormat.Descriptor instead. +func (NSRequest_ShareRequest_LsShare_OutFormat) EnumDescriptor() ([]byte, []int) { + return file_Rpc_proto_rawDescGZIP(), []int{20, 15, 0, 0} +} + +type NSRequest_ShareRequest_OperateShare_Op int32 + +const ( + NSRequest_ShareRequest_OperateShare_CREATE NSRequest_ShareRequest_OperateShare_Op = 0 + NSRequest_ShareRequest_OperateShare_REMOVE NSRequest_ShareRequest_OperateShare_Op = 1 + NSRequest_ShareRequest_OperateShare_SHARE NSRequest_ShareRequest_OperateShare_Op = 2 + NSRequest_ShareRequest_OperateShare_UNSHARE NSRequest_ShareRequest_OperateShare_Op = 3 + NSRequest_ShareRequest_OperateShare_ACCESS NSRequest_ShareRequest_OperateShare_Op = 4 + NSRequest_ShareRequest_OperateShare_MODIFY NSRequest_ShareRequest_OperateShare_Op = 5 +) + +// Enum value maps for NSRequest_ShareRequest_OperateShare_Op. +var ( + NSRequest_ShareRequest_OperateShare_Op_name = map[int32]string{ + 0: "CREATE", + 1: "REMOVE", + 2: "SHARE", + 3: "UNSHARE", + 4: "ACCESS", + 5: "MODIFY", + } + NSRequest_ShareRequest_OperateShare_Op_value = map[string]int32{ + "CREATE": 0, + "REMOVE": 1, + "SHARE": 2, + "UNSHARE": 3, + "ACCESS": 4, + "MODIFY": 5, + } +) + +func (x NSRequest_ShareRequest_OperateShare_Op) Enum() *NSRequest_ShareRequest_OperateShare_Op { + p := new(NSRequest_ShareRequest_OperateShare_Op) + *p = x + return p +} + +func (x NSRequest_ShareRequest_OperateShare_Op) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (NSRequest_ShareRequest_OperateShare_Op) Descriptor() protoreflect.EnumDescriptor { + return file_Rpc_proto_enumTypes[10].Descriptor() +} + +func (NSRequest_ShareRequest_OperateShare_Op) Type() protoreflect.EnumType { + return &file_Rpc_proto_enumTypes[10] +} + +func (x NSRequest_ShareRequest_OperateShare_Op) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use NSRequest_ShareRequest_OperateShare_Op.Descriptor instead. +func (NSRequest_ShareRequest_OperateShare_Op) EnumDescriptor() ([]byte, []int) { + return file_Rpc_proto_rawDescGZIP(), []int{20, 15, 1, 0} } type NSResponse_RecycleResponse_RecycleInfo_DELETIONTYPE int32 @@ -320,1602 +634,1787 @@ const ( NSResponse_RecycleResponse_RecycleInfo_TREE NSResponse_RecycleResponse_RecycleInfo_DELETIONTYPE = 1 ) -var NSResponse_RecycleResponse_RecycleInfo_DELETIONTYPE_name = map[int32]string{ - 0: "FILE", - 1: "TREE", -} +// Enum value maps for NSResponse_RecycleResponse_RecycleInfo_DELETIONTYPE. +var ( + NSResponse_RecycleResponse_RecycleInfo_DELETIONTYPE_name = map[int32]string{ + 0: "FILE", + 1: "TREE", + } + NSResponse_RecycleResponse_RecycleInfo_DELETIONTYPE_value = map[string]int32{ + "FILE": 0, + "TREE": 1, + } +) -var NSResponse_RecycleResponse_RecycleInfo_DELETIONTYPE_value = map[string]int32{ - "FILE": 0, - "TREE": 1, +func (x NSResponse_RecycleResponse_RecycleInfo_DELETIONTYPE) Enum() *NSResponse_RecycleResponse_RecycleInfo_DELETIONTYPE { + p := new(NSResponse_RecycleResponse_RecycleInfo_DELETIONTYPE) + *p = x + return p } func (x NSResponse_RecycleResponse_RecycleInfo_DELETIONTYPE) String() string { - return proto.EnumName(NSResponse_RecycleResponse_RecycleInfo_DELETIONTYPE_name, int32(x)) + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) } -func (NSResponse_RecycleResponse_RecycleInfo_DELETIONTYPE) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_979aee4989bceb08, []int{21, 2, 0, 0} +func (NSResponse_RecycleResponse_RecycleInfo_DELETIONTYPE) Descriptor() protoreflect.EnumDescriptor { + return file_Rpc_proto_enumTypes[11].Descriptor() } -type PingRequest struct { - Authkey string `protobuf:"bytes,1,opt,name=authkey,proto3" json:"authkey,omitempty"` - Message []byte `protobuf:"bytes,2,opt,name=message,proto3" json:"message,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` +func (NSResponse_RecycleResponse_RecycleInfo_DELETIONTYPE) Type() protoreflect.EnumType { + return &file_Rpc_proto_enumTypes[11] } -func (m *PingRequest) Reset() { *m = PingRequest{} } -func (m *PingRequest) String() string { return proto.CompactTextString(m) } -func (*PingRequest) ProtoMessage() {} -func (*PingRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_979aee4989bceb08, []int{0} +func (x NSResponse_RecycleResponse_RecycleInfo_DELETIONTYPE) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) } -func (m *PingRequest) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_PingRequest.Unmarshal(m, b) +// Deprecated: Use NSResponse_RecycleResponse_RecycleInfo_DELETIONTYPE.Descriptor instead. +func (NSResponse_RecycleResponse_RecycleInfo_DELETIONTYPE) EnumDescriptor() ([]byte, []int) { + return file_Rpc_proto_rawDescGZIP(), []int{21, 2, 0, 0} } -func (m *PingRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_PingRequest.Marshal(b, m, deterministic) + +type PingRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Authkey string `protobuf:"bytes,1,opt,name=authkey,proto3" json:"authkey,omitempty"` + Message []byte `protobuf:"bytes,2,opt,name=message,proto3" json:"message,omitempty"` } -func (m *PingRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_PingRequest.Merge(m, src) + +func (x *PingRequest) Reset() { + *x = PingRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_Rpc_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } } -func (m *PingRequest) XXX_Size() int { - return xxx_messageInfo_PingRequest.Size(m) + +func (x *PingRequest) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *PingRequest) XXX_DiscardUnknown() { - xxx_messageInfo_PingRequest.DiscardUnknown(m) + +func (*PingRequest) ProtoMessage() {} + +func (x *PingRequest) ProtoReflect() protoreflect.Message { + mi := &file_Rpc_proto_msgTypes[0] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) } -var xxx_messageInfo_PingRequest proto.InternalMessageInfo +// Deprecated: Use PingRequest.ProtoReflect.Descriptor instead. +func (*PingRequest) Descriptor() ([]byte, []int) { + return file_Rpc_proto_rawDescGZIP(), []int{0} +} -func (m *PingRequest) GetAuthkey() string { - if m != nil { - return m.Authkey +func (x *PingRequest) GetAuthkey() string { + if x != nil { + return x.Authkey } return "" } -func (m *PingRequest) GetMessage() []byte { - if m != nil { - return m.Message +func (x *PingRequest) GetMessage() []byte { + if x != nil { + return x.Message } return nil } type PingReply struct { - Message []byte `protobuf:"bytes,1,opt,name=message,proto3" json:"message,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields -func (m *PingReply) Reset() { *m = PingReply{} } -func (m *PingReply) String() string { return proto.CompactTextString(m) } -func (*PingReply) ProtoMessage() {} -func (*PingReply) Descriptor() ([]byte, []int) { - return fileDescriptor_979aee4989bceb08, []int{1} + Message []byte `protobuf:"bytes,1,opt,name=message,proto3" json:"message,omitempty"` } -func (m *PingReply) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_PingReply.Unmarshal(m, b) -} -func (m *PingReply) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_PingReply.Marshal(b, m, deterministic) -} -func (m *PingReply) XXX_Merge(src proto.Message) { - xxx_messageInfo_PingReply.Merge(m, src) +func (x *PingReply) Reset() { + *x = PingReply{} + if protoimpl.UnsafeEnabled { + mi := &file_Rpc_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } } -func (m *PingReply) XXX_Size() int { - return xxx_messageInfo_PingReply.Size(m) + +func (x *PingReply) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *PingReply) XXX_DiscardUnknown() { - xxx_messageInfo_PingReply.DiscardUnknown(m) + +func (*PingReply) ProtoMessage() {} + +func (x *PingReply) ProtoReflect() protoreflect.Message { + mi := &file_Rpc_proto_msgTypes[1] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) } -var xxx_messageInfo_PingReply proto.InternalMessageInfo +// Deprecated: Use PingReply.ProtoReflect.Descriptor instead. +func (*PingReply) Descriptor() ([]byte, []int) { + return file_Rpc_proto_rawDescGZIP(), []int{1} +} -func (m *PingReply) GetMessage() []byte { - if m != nil { - return m.Message +func (x *PingReply) GetMessage() []byte { + if x != nil { + return x.Message } return nil } type ContainerInsertRequest struct { - Container []*ContainerMdProto `protobuf:"bytes,1,rep,name=container,proto3" json:"container,omitempty"` - Authkey string `protobuf:"bytes,2,opt,name=authkey,proto3" json:"authkey,omitempty"` - InheritMd bool `protobuf:"varint,3,opt,name=inherit_md,json=inheritMd,proto3" json:"inherit_md,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields -func (m *ContainerInsertRequest) Reset() { *m = ContainerInsertRequest{} } -func (m *ContainerInsertRequest) String() string { return proto.CompactTextString(m) } -func (*ContainerInsertRequest) ProtoMessage() {} -func (*ContainerInsertRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_979aee4989bceb08, []int{2} + Container []*ContainerMdProto `protobuf:"bytes,1,rep,name=container,proto3" json:"container,omitempty"` + Authkey string `protobuf:"bytes,2,opt,name=authkey,proto3" json:"authkey,omitempty"` + InheritMd bool `protobuf:"varint,3,opt,name=inherit_md,json=inheritMd,proto3" json:"inherit_md,omitempty"` } -func (m *ContainerInsertRequest) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_ContainerInsertRequest.Unmarshal(m, b) -} -func (m *ContainerInsertRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_ContainerInsertRequest.Marshal(b, m, deterministic) -} -func (m *ContainerInsertRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_ContainerInsertRequest.Merge(m, src) +func (x *ContainerInsertRequest) Reset() { + *x = ContainerInsertRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_Rpc_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } } -func (m *ContainerInsertRequest) XXX_Size() int { - return xxx_messageInfo_ContainerInsertRequest.Size(m) + +func (x *ContainerInsertRequest) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *ContainerInsertRequest) XXX_DiscardUnknown() { - xxx_messageInfo_ContainerInsertRequest.DiscardUnknown(m) + +func (*ContainerInsertRequest) ProtoMessage() {} + +func (x *ContainerInsertRequest) ProtoReflect() protoreflect.Message { + mi := &file_Rpc_proto_msgTypes[2] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) } -var xxx_messageInfo_ContainerInsertRequest proto.InternalMessageInfo +// Deprecated: Use ContainerInsertRequest.ProtoReflect.Descriptor instead. +func (*ContainerInsertRequest) Descriptor() ([]byte, []int) { + return file_Rpc_proto_rawDescGZIP(), []int{2} +} -func (m *ContainerInsertRequest) GetContainer() []*ContainerMdProto { - if m != nil { - return m.Container +func (x *ContainerInsertRequest) GetContainer() []*ContainerMdProto { + if x != nil { + return x.Container } return nil } -func (m *ContainerInsertRequest) GetAuthkey() string { - if m != nil { - return m.Authkey +func (x *ContainerInsertRequest) GetAuthkey() string { + if x != nil { + return x.Authkey } return "" } -func (m *ContainerInsertRequest) GetInheritMd() bool { - if m != nil { - return m.InheritMd +func (x *ContainerInsertRequest) GetInheritMd() bool { + if x != nil { + return x.InheritMd } return false } type FileInsertRequest struct { - Files []*FileMdProto `protobuf:"bytes,1,rep,name=files,proto3" json:"files,omitempty"` - Authkey string `protobuf:"bytes,2,opt,name=authkey,proto3" json:"authkey,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields -func (m *FileInsertRequest) Reset() { *m = FileInsertRequest{} } -func (m *FileInsertRequest) String() string { return proto.CompactTextString(m) } -func (*FileInsertRequest) ProtoMessage() {} -func (*FileInsertRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_979aee4989bceb08, []int{3} + Files []*FileMdProto `protobuf:"bytes,1,rep,name=files,proto3" json:"files,omitempty"` + Authkey string `protobuf:"bytes,2,opt,name=authkey,proto3" json:"authkey,omitempty"` } -func (m *FileInsertRequest) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_FileInsertRequest.Unmarshal(m, b) -} -func (m *FileInsertRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_FileInsertRequest.Marshal(b, m, deterministic) -} -func (m *FileInsertRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_FileInsertRequest.Merge(m, src) +func (x *FileInsertRequest) Reset() { + *x = FileInsertRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_Rpc_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } } -func (m *FileInsertRequest) XXX_Size() int { - return xxx_messageInfo_FileInsertRequest.Size(m) + +func (x *FileInsertRequest) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *FileInsertRequest) XXX_DiscardUnknown() { - xxx_messageInfo_FileInsertRequest.DiscardUnknown(m) + +func (*FileInsertRequest) ProtoMessage() {} + +func (x *FileInsertRequest) ProtoReflect() protoreflect.Message { + mi := &file_Rpc_proto_msgTypes[3] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) } -var xxx_messageInfo_FileInsertRequest proto.InternalMessageInfo +// Deprecated: Use FileInsertRequest.ProtoReflect.Descriptor instead. +func (*FileInsertRequest) Descriptor() ([]byte, []int) { + return file_Rpc_proto_rawDescGZIP(), []int{3} +} -func (m *FileInsertRequest) GetFiles() []*FileMdProto { - if m != nil { - return m.Files +func (x *FileInsertRequest) GetFiles() []*FileMdProto { + if x != nil { + return x.Files } return nil } -func (m *FileInsertRequest) GetAuthkey() string { - if m != nil { - return m.Authkey +func (x *FileInsertRequest) GetAuthkey() string { + if x != nil { + return x.Authkey } return "" } type InsertReply struct { - Message []string `protobuf:"bytes,1,rep,name=message,proto3" json:"message,omitempty"` - Retc []uint32 `protobuf:"varint,2,rep,packed,name=retc,proto3" json:"retc,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields -func (m *InsertReply) Reset() { *m = InsertReply{} } -func (m *InsertReply) String() string { return proto.CompactTextString(m) } -func (*InsertReply) ProtoMessage() {} -func (*InsertReply) Descriptor() ([]byte, []int) { - return fileDescriptor_979aee4989bceb08, []int{4} + Message []string `protobuf:"bytes,1,rep,name=message,proto3" json:"message,omitempty"` + Retc []uint32 `protobuf:"varint,2,rep,packed,name=retc,proto3" json:"retc,omitempty"` } -func (m *InsertReply) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_InsertReply.Unmarshal(m, b) -} -func (m *InsertReply) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_InsertReply.Marshal(b, m, deterministic) -} -func (m *InsertReply) XXX_Merge(src proto.Message) { - xxx_messageInfo_InsertReply.Merge(m, src) +func (x *InsertReply) Reset() { + *x = InsertReply{} + if protoimpl.UnsafeEnabled { + mi := &file_Rpc_proto_msgTypes[4] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } } -func (m *InsertReply) XXX_Size() int { - return xxx_messageInfo_InsertReply.Size(m) + +func (x *InsertReply) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *InsertReply) XXX_DiscardUnknown() { - xxx_messageInfo_InsertReply.DiscardUnknown(m) + +func (*InsertReply) ProtoMessage() {} + +func (x *InsertReply) ProtoReflect() protoreflect.Message { + mi := &file_Rpc_proto_msgTypes[4] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) } -var xxx_messageInfo_InsertReply proto.InternalMessageInfo +// Deprecated: Use InsertReply.ProtoReflect.Descriptor instead. +func (*InsertReply) Descriptor() ([]byte, []int) { + return file_Rpc_proto_rawDescGZIP(), []int{4} +} -func (m *InsertReply) GetMessage() []string { - if m != nil { - return m.Message +func (x *InsertReply) GetMessage() []string { + if x != nil { + return x.Message } return nil } -func (m *InsertReply) GetRetc() []uint32 { - if m != nil { - return m.Retc +func (x *InsertReply) GetRetc() []uint32 { + if x != nil { + return x.Retc } return nil } type Time struct { - Sec uint64 `protobuf:"varint,1,opt,name=sec,proto3" json:"sec,omitempty"` - NSec uint64 `protobuf:"varint,2,opt,name=n_sec,json=nSec,proto3" json:"n_sec,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields -func (m *Time) Reset() { *m = Time{} } -func (m *Time) String() string { return proto.CompactTextString(m) } -func (*Time) ProtoMessage() {} -func (*Time) Descriptor() ([]byte, []int) { - return fileDescriptor_979aee4989bceb08, []int{5} + Sec uint64 `protobuf:"varint,1,opt,name=sec,proto3" json:"sec,omitempty"` + NSec uint64 `protobuf:"varint,2,opt,name=n_sec,json=nSec,proto3" json:"n_sec,omitempty"` } -func (m *Time) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_Time.Unmarshal(m, b) -} -func (m *Time) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_Time.Marshal(b, m, deterministic) -} -func (m *Time) XXX_Merge(src proto.Message) { - xxx_messageInfo_Time.Merge(m, src) +func (x *Time) Reset() { + *x = Time{} + if protoimpl.UnsafeEnabled { + mi := &file_Rpc_proto_msgTypes[5] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } } -func (m *Time) XXX_Size() int { - return xxx_messageInfo_Time.Size(m) + +func (x *Time) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *Time) XXX_DiscardUnknown() { - xxx_messageInfo_Time.DiscardUnknown(m) + +func (*Time) ProtoMessage() {} + +func (x *Time) ProtoReflect() protoreflect.Message { + mi := &file_Rpc_proto_msgTypes[5] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) } -var xxx_messageInfo_Time proto.InternalMessageInfo +// Deprecated: Use Time.ProtoReflect.Descriptor instead. +func (*Time) Descriptor() ([]byte, []int) { + return file_Rpc_proto_rawDescGZIP(), []int{5} +} -func (m *Time) GetSec() uint64 { - if m != nil { - return m.Sec +func (x *Time) GetSec() uint64 { + if x != nil { + return x.Sec } return 0 } -func (m *Time) GetNSec() uint64 { - if m != nil { - return m.NSec +func (x *Time) GetNSec() uint64 { + if x != nil { + return x.NSec } return 0 } type Checksum struct { - Value []byte `protobuf:"bytes,1,opt,name=value,proto3" json:"value,omitempty"` - Type string `protobuf:"bytes,2,opt,name=type,proto3" json:"type,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields -func (m *Checksum) Reset() { *m = Checksum{} } -func (m *Checksum) String() string { return proto.CompactTextString(m) } -func (*Checksum) ProtoMessage() {} -func (*Checksum) Descriptor() ([]byte, []int) { - return fileDescriptor_979aee4989bceb08, []int{6} + Value []byte `protobuf:"bytes,1,opt,name=value,proto3" json:"value,omitempty"` + Type string `protobuf:"bytes,2,opt,name=type,proto3" json:"type,omitempty"` } -func (m *Checksum) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_Checksum.Unmarshal(m, b) -} -func (m *Checksum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_Checksum.Marshal(b, m, deterministic) -} -func (m *Checksum) XXX_Merge(src proto.Message) { - xxx_messageInfo_Checksum.Merge(m, src) +func (x *Checksum) Reset() { + *x = Checksum{} + if protoimpl.UnsafeEnabled { + mi := &file_Rpc_proto_msgTypes[6] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } } -func (m *Checksum) XXX_Size() int { - return xxx_messageInfo_Checksum.Size(m) + +func (x *Checksum) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *Checksum) XXX_DiscardUnknown() { - xxx_messageInfo_Checksum.DiscardUnknown(m) + +func (*Checksum) ProtoMessage() {} + +func (x *Checksum) ProtoReflect() protoreflect.Message { + mi := &file_Rpc_proto_msgTypes[6] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) } -var xxx_messageInfo_Checksum proto.InternalMessageInfo +// Deprecated: Use Checksum.ProtoReflect.Descriptor instead. +func (*Checksum) Descriptor() ([]byte, []int) { + return file_Rpc_proto_rawDescGZIP(), []int{6} +} -func (m *Checksum) GetValue() []byte { - if m != nil { - return m.Value +func (x *Checksum) GetValue() []byte { + if x != nil { + return x.Value } return nil } -func (m *Checksum) GetType() string { - if m != nil { - return m.Type +func (x *Checksum) GetType() string { + if x != nil { + return x.Type } return "" } type FileMdProto struct { - Id uint64 `protobuf:"varint,1,opt,name=id,proto3" json:"id,omitempty"` - ContId uint64 `protobuf:"varint,2,opt,name=cont_id,json=contId,proto3" json:"cont_id,omitempty"` - Uid uint64 `protobuf:"varint,3,opt,name=uid,proto3" json:"uid,omitempty"` - Gid uint64 `protobuf:"varint,4,opt,name=gid,proto3" json:"gid,omitempty"` - Size uint64 `protobuf:"varint,5,opt,name=size,proto3" json:"size,omitempty"` - LayoutId uint32 `protobuf:"varint,6,opt,name=layout_id,json=layoutId,proto3" json:"layout_id,omitempty"` - Flags uint32 `protobuf:"varint,7,opt,name=flags,proto3" json:"flags,omitempty"` - Name []byte `protobuf:"bytes,8,opt,name=name,proto3" json:"name,omitempty"` - LinkName []byte `protobuf:"bytes,9,opt,name=link_name,json=linkName,proto3" json:"link_name,omitempty"` - Ctime *Time `protobuf:"bytes,10,opt,name=ctime,proto3" json:"ctime,omitempty"` - Mtime *Time `protobuf:"bytes,11,opt,name=mtime,proto3" json:"mtime,omitempty"` - Checksum *Checksum `protobuf:"bytes,12,opt,name=checksum,proto3" json:"checksum,omitempty"` - Locations []uint32 `protobuf:"varint,13,rep,packed,name=locations,proto3" json:"locations,omitempty"` - UnlinkLocations []uint32 `protobuf:"varint,14,rep,packed,name=unlink_locations,json=unlinkLocations,proto3" json:"unlink_locations,omitempty"` - Xattrs map[string][]byte `protobuf:"bytes,15,rep,name=xattrs,proto3" json:"xattrs,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` - Path []byte `protobuf:"bytes,16,opt,name=path,proto3" json:"path,omitempty"` - Etag string `protobuf:"bytes,17,opt,name=etag,proto3" json:"etag,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *FileMdProto) Reset() { *m = FileMdProto{} } -func (m *FileMdProto) String() string { return proto.CompactTextString(m) } -func (*FileMdProto) ProtoMessage() {} -func (*FileMdProto) Descriptor() ([]byte, []int) { - return fileDescriptor_979aee4989bceb08, []int{7} -} + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields -func (m *FileMdProto) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_FileMdProto.Unmarshal(m, b) -} -func (m *FileMdProto) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_FileMdProto.Marshal(b, m, deterministic) + Id uint64 `protobuf:"varint,1,opt,name=id,proto3" json:"id,omitempty"` + ContId uint64 `protobuf:"varint,2,opt,name=cont_id,json=contId,proto3" json:"cont_id,omitempty"` + Uid uint64 `protobuf:"varint,3,opt,name=uid,proto3" json:"uid,omitempty"` + Gid uint64 `protobuf:"varint,4,opt,name=gid,proto3" json:"gid,omitempty"` + Size uint64 `protobuf:"varint,5,opt,name=size,proto3" json:"size,omitempty"` + LayoutId uint32 `protobuf:"varint,6,opt,name=layout_id,json=layoutId,proto3" json:"layout_id,omitempty"` + Flags uint32 `protobuf:"varint,7,opt,name=flags,proto3" json:"flags,omitempty"` + Name []byte `protobuf:"bytes,8,opt,name=name,proto3" json:"name,omitempty"` + LinkName []byte `protobuf:"bytes,9,opt,name=link_name,json=linkName,proto3" json:"link_name,omitempty"` + Ctime *Time `protobuf:"bytes,10,opt,name=ctime,proto3" json:"ctime,omitempty"` // change time + Mtime *Time `protobuf:"bytes,11,opt,name=mtime,proto3" json:"mtime,omitempty"` // modification time + Checksum *Checksum `protobuf:"bytes,12,opt,name=checksum,proto3" json:"checksum,omitempty"` + Locations []uint32 `protobuf:"varint,13,rep,packed,name=locations,proto3" json:"locations,omitempty"` + UnlinkLocations []uint32 `protobuf:"varint,14,rep,packed,name=unlink_locations,json=unlinkLocations,proto3" json:"unlink_locations,omitempty"` + Xattrs map[string][]byte `protobuf:"bytes,15,rep,name=xattrs,proto3" json:"xattrs,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + Path []byte `protobuf:"bytes,16,opt,name=path,proto3" json:"path,omitempty"` + Etag string `protobuf:"bytes,17,opt,name=etag,proto3" json:"etag,omitempty"` } -func (m *FileMdProto) XXX_Merge(src proto.Message) { - xxx_messageInfo_FileMdProto.Merge(m, src) + +func (x *FileMdProto) Reset() { + *x = FileMdProto{} + if protoimpl.UnsafeEnabled { + mi := &file_Rpc_proto_msgTypes[7] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } } -func (m *FileMdProto) XXX_Size() int { - return xxx_messageInfo_FileMdProto.Size(m) + +func (x *FileMdProto) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *FileMdProto) XXX_DiscardUnknown() { - xxx_messageInfo_FileMdProto.DiscardUnknown(m) + +func (*FileMdProto) ProtoMessage() {} + +func (x *FileMdProto) ProtoReflect() protoreflect.Message { + mi := &file_Rpc_proto_msgTypes[7] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) } -var xxx_messageInfo_FileMdProto proto.InternalMessageInfo +// Deprecated: Use FileMdProto.ProtoReflect.Descriptor instead. +func (*FileMdProto) Descriptor() ([]byte, []int) { + return file_Rpc_proto_rawDescGZIP(), []int{7} +} -func (m *FileMdProto) GetId() uint64 { - if m != nil { - return m.Id +func (x *FileMdProto) GetId() uint64 { + if x != nil { + return x.Id } return 0 } -func (m *FileMdProto) GetContId() uint64 { - if m != nil { - return m.ContId +func (x *FileMdProto) GetContId() uint64 { + if x != nil { + return x.ContId } return 0 } -func (m *FileMdProto) GetUid() uint64 { - if m != nil { - return m.Uid +func (x *FileMdProto) GetUid() uint64 { + if x != nil { + return x.Uid } return 0 } -func (m *FileMdProto) GetGid() uint64 { - if m != nil { - return m.Gid +func (x *FileMdProto) GetGid() uint64 { + if x != nil { + return x.Gid } return 0 } -func (m *FileMdProto) GetSize() uint64 { - if m != nil { - return m.Size +func (x *FileMdProto) GetSize() uint64 { + if x != nil { + return x.Size } return 0 } -func (m *FileMdProto) GetLayoutId() uint32 { - if m != nil { - return m.LayoutId +func (x *FileMdProto) GetLayoutId() uint32 { + if x != nil { + return x.LayoutId } return 0 } -func (m *FileMdProto) GetFlags() uint32 { - if m != nil { - return m.Flags +func (x *FileMdProto) GetFlags() uint32 { + if x != nil { + return x.Flags } return 0 } -func (m *FileMdProto) GetName() []byte { - if m != nil { - return m.Name +func (x *FileMdProto) GetName() []byte { + if x != nil { + return x.Name } return nil } -func (m *FileMdProto) GetLinkName() []byte { - if m != nil { - return m.LinkName +func (x *FileMdProto) GetLinkName() []byte { + if x != nil { + return x.LinkName } return nil } -func (m *FileMdProto) GetCtime() *Time { - if m != nil { - return m.Ctime +func (x *FileMdProto) GetCtime() *Time { + if x != nil { + return x.Ctime } return nil } -func (m *FileMdProto) GetMtime() *Time { - if m != nil { - return m.Mtime +func (x *FileMdProto) GetMtime() *Time { + if x != nil { + return x.Mtime } return nil } -func (m *FileMdProto) GetChecksum() *Checksum { - if m != nil { - return m.Checksum +func (x *FileMdProto) GetChecksum() *Checksum { + if x != nil { + return x.Checksum } return nil } -func (m *FileMdProto) GetLocations() []uint32 { - if m != nil { - return m.Locations +func (x *FileMdProto) GetLocations() []uint32 { + if x != nil { + return x.Locations } return nil } -func (m *FileMdProto) GetUnlinkLocations() []uint32 { - if m != nil { - return m.UnlinkLocations +func (x *FileMdProto) GetUnlinkLocations() []uint32 { + if x != nil { + return x.UnlinkLocations } return nil } -func (m *FileMdProto) GetXattrs() map[string][]byte { - if m != nil { - return m.Xattrs +func (x *FileMdProto) GetXattrs() map[string][]byte { + if x != nil { + return x.Xattrs } return nil } -func (m *FileMdProto) GetPath() []byte { - if m != nil { - return m.Path +func (x *FileMdProto) GetPath() []byte { + if x != nil { + return x.Path } return nil } -func (m *FileMdProto) GetEtag() string { - if m != nil { - return m.Etag +func (x *FileMdProto) GetEtag() string { + if x != nil { + return x.Etag } return "" } type ContainerMdProto struct { - Id uint64 `protobuf:"varint,1,opt,name=id,proto3" json:"id,omitempty"` - ParentId uint64 `protobuf:"varint,2,opt,name=parent_id,json=parentId,proto3" json:"parent_id,omitempty"` - Uid uint64 `protobuf:"varint,3,opt,name=uid,proto3" json:"uid,omitempty"` - Gid uint64 `protobuf:"varint,4,opt,name=gid,proto3" json:"gid,omitempty"` - TreeSize int64 `protobuf:"varint,6,opt,name=tree_size,json=treeSize,proto3" json:"tree_size,omitempty"` - Mode uint32 `protobuf:"varint,5,opt,name=mode,proto3" json:"mode,omitempty"` - Flags uint32 `protobuf:"varint,7,opt,name=flags,proto3" json:"flags,omitempty"` - Name []byte `protobuf:"bytes,8,opt,name=name,proto3" json:"name,omitempty"` - Ctime *Time `protobuf:"bytes,9,opt,name=ctime,proto3" json:"ctime,omitempty"` - Mtime *Time `protobuf:"bytes,10,opt,name=mtime,proto3" json:"mtime,omitempty"` - Stime *Time `protobuf:"bytes,11,opt,name=stime,proto3" json:"stime,omitempty"` - Xattrs map[string][]byte `protobuf:"bytes,12,rep,name=xattrs,proto3" json:"xattrs,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` - Path []byte `protobuf:"bytes,13,opt,name=path,proto3" json:"path,omitempty"` - Etag string `protobuf:"bytes,14,opt,name=etag,proto3" json:"etag,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *ContainerMdProto) Reset() { *m = ContainerMdProto{} } -func (m *ContainerMdProto) String() string { return proto.CompactTextString(m) } -func (*ContainerMdProto) ProtoMessage() {} -func (*ContainerMdProto) Descriptor() ([]byte, []int) { - return fileDescriptor_979aee4989bceb08, []int{8} -} + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields -func (m *ContainerMdProto) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_ContainerMdProto.Unmarshal(m, b) -} -func (m *ContainerMdProto) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_ContainerMdProto.Marshal(b, m, deterministic) + Id uint64 `protobuf:"varint,1,opt,name=id,proto3" json:"id,omitempty"` + ParentId uint64 `protobuf:"varint,2,opt,name=parent_id,json=parentId,proto3" json:"parent_id,omitempty"` + Uid uint64 `protobuf:"varint,3,opt,name=uid,proto3" json:"uid,omitempty"` + Gid uint64 `protobuf:"varint,4,opt,name=gid,proto3" json:"gid,omitempty"` + TreeSize int64 `protobuf:"varint,6,opt,name=tree_size,json=treeSize,proto3" json:"tree_size,omitempty"` + Mode uint32 `protobuf:"varint,5,opt,name=mode,proto3" json:"mode,omitempty"` + Flags uint32 `protobuf:"varint,7,opt,name=flags,proto3" json:"flags,omitempty"` + Name []byte `protobuf:"bytes,8,opt,name=name,proto3" json:"name,omitempty"` + Ctime *Time `protobuf:"bytes,9,opt,name=ctime,proto3" json:"ctime,omitempty"` // change time + Mtime *Time `protobuf:"bytes,10,opt,name=mtime,proto3" json:"mtime,omitempty"` // modification time + Stime *Time `protobuf:"bytes,11,opt,name=stime,proto3" json:"stime,omitempty"` // sync time + Xattrs map[string][]byte `protobuf:"bytes,12,rep,name=xattrs,proto3" json:"xattrs,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + Path []byte `protobuf:"bytes,13,opt,name=path,proto3" json:"path,omitempty"` + Etag string `protobuf:"bytes,14,opt,name=etag,proto3" json:"etag,omitempty"` } -func (m *ContainerMdProto) XXX_Merge(src proto.Message) { - xxx_messageInfo_ContainerMdProto.Merge(m, src) + +func (x *ContainerMdProto) Reset() { + *x = ContainerMdProto{} + if protoimpl.UnsafeEnabled { + mi := &file_Rpc_proto_msgTypes[8] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } } -func (m *ContainerMdProto) XXX_Size() int { - return xxx_messageInfo_ContainerMdProto.Size(m) + +func (x *ContainerMdProto) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *ContainerMdProto) XXX_DiscardUnknown() { - xxx_messageInfo_ContainerMdProto.DiscardUnknown(m) + +func (*ContainerMdProto) ProtoMessage() {} + +func (x *ContainerMdProto) ProtoReflect() protoreflect.Message { + mi := &file_Rpc_proto_msgTypes[8] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) } -var xxx_messageInfo_ContainerMdProto proto.InternalMessageInfo +// Deprecated: Use ContainerMdProto.ProtoReflect.Descriptor instead. +func (*ContainerMdProto) Descriptor() ([]byte, []int) { + return file_Rpc_proto_rawDescGZIP(), []int{8} +} -func (m *ContainerMdProto) GetId() uint64 { - if m != nil { - return m.Id +func (x *ContainerMdProto) GetId() uint64 { + if x != nil { + return x.Id } return 0 } -func (m *ContainerMdProto) GetParentId() uint64 { - if m != nil { - return m.ParentId +func (x *ContainerMdProto) GetParentId() uint64 { + if x != nil { + return x.ParentId } return 0 } -func (m *ContainerMdProto) GetUid() uint64 { - if m != nil { - return m.Uid +func (x *ContainerMdProto) GetUid() uint64 { + if x != nil { + return x.Uid } return 0 } -func (m *ContainerMdProto) GetGid() uint64 { - if m != nil { - return m.Gid +func (x *ContainerMdProto) GetGid() uint64 { + if x != nil { + return x.Gid } return 0 } -func (m *ContainerMdProto) GetTreeSize() int64 { - if m != nil { - return m.TreeSize +func (x *ContainerMdProto) GetTreeSize() int64 { + if x != nil { + return x.TreeSize } return 0 } -func (m *ContainerMdProto) GetMode() uint32 { - if m != nil { - return m.Mode +func (x *ContainerMdProto) GetMode() uint32 { + if x != nil { + return x.Mode } return 0 } -func (m *ContainerMdProto) GetFlags() uint32 { - if m != nil { - return m.Flags +func (x *ContainerMdProto) GetFlags() uint32 { + if x != nil { + return x.Flags } return 0 } -func (m *ContainerMdProto) GetName() []byte { - if m != nil { - return m.Name +func (x *ContainerMdProto) GetName() []byte { + if x != nil { + return x.Name } return nil } -func (m *ContainerMdProto) GetCtime() *Time { - if m != nil { - return m.Ctime +func (x *ContainerMdProto) GetCtime() *Time { + if x != nil { + return x.Ctime } return nil } -func (m *ContainerMdProto) GetMtime() *Time { - if m != nil { - return m.Mtime +func (x *ContainerMdProto) GetMtime() *Time { + if x != nil { + return x.Mtime } return nil } -func (m *ContainerMdProto) GetStime() *Time { - if m != nil { - return m.Stime +func (x *ContainerMdProto) GetStime() *Time { + if x != nil { + return x.Stime } return nil } -func (m *ContainerMdProto) GetXattrs() map[string][]byte { - if m != nil { - return m.Xattrs +func (x *ContainerMdProto) GetXattrs() map[string][]byte { + if x != nil { + return x.Xattrs } return nil } -func (m *ContainerMdProto) GetPath() []byte { - if m != nil { - return m.Path +func (x *ContainerMdProto) GetPath() []byte { + if x != nil { + return x.Path } return nil } -func (m *ContainerMdProto) GetEtag() string { - if m != nil { - return m.Etag +func (x *ContainerMdProto) GetEtag() string { + if x != nil { + return x.Etag } return "" } type QuotaProto struct { - Path []byte `protobuf:"bytes,1,opt,name=path,proto3" json:"path,omitempty"` - Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` - Type QUOTATYPE `protobuf:"varint,3,opt,name=type,proto3,enum=eos.rpc.QUOTATYPE" json:"type,omitempty"` - Usedbytes uint64 `protobuf:"varint,4,opt,name=usedbytes,proto3" json:"usedbytes,omitempty"` - Usedlogicalbytes uint64 `protobuf:"varint,5,opt,name=usedlogicalbytes,proto3" json:"usedlogicalbytes,omitempty"` - Usedfiles uint64 `protobuf:"varint,6,opt,name=usedfiles,proto3" json:"usedfiles,omitempty"` - Maxbytes uint64 `protobuf:"varint,7,opt,name=maxbytes,proto3" json:"maxbytes,omitempty"` - Maxlogicalbytes uint64 `protobuf:"varint,8,opt,name=maxlogicalbytes,proto3" json:"maxlogicalbytes,omitempty"` - Maxfiles uint64 `protobuf:"varint,9,opt,name=maxfiles,proto3" json:"maxfiles,omitempty"` - Percentageusedbytes float32 `protobuf:"fixed32,10,opt,name=percentageusedbytes,proto3" json:"percentageusedbytes,omitempty"` - Percentageusedfiles float32 `protobuf:"fixed32,11,opt,name=percentageusedfiles,proto3" json:"percentageusedfiles,omitempty"` - Statusbytes string `protobuf:"bytes,12,opt,name=statusbytes,proto3" json:"statusbytes,omitempty"` - Statusfiles string `protobuf:"bytes,13,opt,name=statusfiles,proto3" json:"statusfiles,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *QuotaProto) Reset() { *m = QuotaProto{} } -func (m *QuotaProto) String() string { return proto.CompactTextString(m) } -func (*QuotaProto) ProtoMessage() {} -func (*QuotaProto) Descriptor() ([]byte, []int) { - return fileDescriptor_979aee4989bceb08, []int{9} -} + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields -func (m *QuotaProto) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_QuotaProto.Unmarshal(m, b) + Path []byte `protobuf:"bytes,1,opt,name=path,proto3" json:"path,omitempty"` // quota node path + Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` // associated name for the given type + Type QUOTATYPE `protobuf:"varint,3,opt,name=type,proto3,enum=eos.rpc.QUOTATYPE" json:"type,omitempty"` // user,group,project or all quota + Usedbytes uint64 `protobuf:"varint,4,opt,name=usedbytes,proto3" json:"usedbytes,omitempty"` // bytes used physical + Usedlogicalbytes uint64 `protobuf:"varint,5,opt,name=usedlogicalbytes,proto3" json:"usedlogicalbytes,omitempty"` // bytes used logical + Usedfiles uint64 `protobuf:"varint,6,opt,name=usedfiles,proto3" json:"usedfiles,omitempty"` // number of files used + Maxbytes uint64 `protobuf:"varint,7,opt,name=maxbytes,proto3" json:"maxbytes,omitempty"` // maximum number of bytes (volume quota) + Maxlogicalbytes uint64 `protobuf:"varint,8,opt,name=maxlogicalbytes,proto3" json:"maxlogicalbytes,omitempty"` // maximum number of logical bytes (logical volume quota) + Maxfiles uint64 `protobuf:"varint,9,opt,name=maxfiles,proto3" json:"maxfiles,omitempty"` // maximum number of files (inode quota) + Percentageusedbytes float32 `protobuf:"fixed32,10,opt,name=percentageusedbytes,proto3" json:"percentageusedbytes,omitempty"` // percentage of volume quota used from 0 to 100 + Percentageusedfiles float32 `protobuf:"fixed32,11,opt,name=percentageusedfiles,proto3" json:"percentageusedfiles,omitempty"` // percentag of inode quota used from 0 to 100 + Statusbytes string `protobuf:"bytes,12,opt,name=statusbytes,proto3" json:"statusbytes,omitempty"` // status string for volume quota ok,warning,exceeded + Statusfiles string `protobuf:"bytes,13,opt,name=statusfiles,proto3" json:"statusfiles,omitempty"` // status string for inode quota ok,warning,exceeded } -func (m *QuotaProto) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_QuotaProto.Marshal(b, m, deterministic) -} -func (m *QuotaProto) XXX_Merge(src proto.Message) { - xxx_messageInfo_QuotaProto.Merge(m, src) + +func (x *QuotaProto) Reset() { + *x = QuotaProto{} + if protoimpl.UnsafeEnabled { + mi := &file_Rpc_proto_msgTypes[9] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } } -func (m *QuotaProto) XXX_Size() int { - return xxx_messageInfo_QuotaProto.Size(m) + +func (x *QuotaProto) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *QuotaProto) XXX_DiscardUnknown() { - xxx_messageInfo_QuotaProto.DiscardUnknown(m) + +func (*QuotaProto) ProtoMessage() {} + +func (x *QuotaProto) ProtoReflect() protoreflect.Message { + mi := &file_Rpc_proto_msgTypes[9] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) } -var xxx_messageInfo_QuotaProto proto.InternalMessageInfo +// Deprecated: Use QuotaProto.ProtoReflect.Descriptor instead. +func (*QuotaProto) Descriptor() ([]byte, []int) { + return file_Rpc_proto_rawDescGZIP(), []int{9} +} -func (m *QuotaProto) GetPath() []byte { - if m != nil { - return m.Path +func (x *QuotaProto) GetPath() []byte { + if x != nil { + return x.Path } return nil } -func (m *QuotaProto) GetName() string { - if m != nil { - return m.Name +func (x *QuotaProto) GetName() string { + if x != nil { + return x.Name } return "" } -func (m *QuotaProto) GetType() QUOTATYPE { - if m != nil { - return m.Type +func (x *QuotaProto) GetType() QUOTATYPE { + if x != nil { + return x.Type } return QUOTATYPE_USER } -func (m *QuotaProto) GetUsedbytes() uint64 { - if m != nil { - return m.Usedbytes +func (x *QuotaProto) GetUsedbytes() uint64 { + if x != nil { + return x.Usedbytes } return 0 } -func (m *QuotaProto) GetUsedlogicalbytes() uint64 { - if m != nil { - return m.Usedlogicalbytes +func (x *QuotaProto) GetUsedlogicalbytes() uint64 { + if x != nil { + return x.Usedlogicalbytes } return 0 } -func (m *QuotaProto) GetUsedfiles() uint64 { - if m != nil { - return m.Usedfiles +func (x *QuotaProto) GetUsedfiles() uint64 { + if x != nil { + return x.Usedfiles } return 0 } -func (m *QuotaProto) GetMaxbytes() uint64 { - if m != nil { - return m.Maxbytes +func (x *QuotaProto) GetMaxbytes() uint64 { + if x != nil { + return x.Maxbytes } return 0 } -func (m *QuotaProto) GetMaxlogicalbytes() uint64 { - if m != nil { - return m.Maxlogicalbytes +func (x *QuotaProto) GetMaxlogicalbytes() uint64 { + if x != nil { + return x.Maxlogicalbytes } return 0 } -func (m *QuotaProto) GetMaxfiles() uint64 { - if m != nil { - return m.Maxfiles +func (x *QuotaProto) GetMaxfiles() uint64 { + if x != nil { + return x.Maxfiles } return 0 } -func (m *QuotaProto) GetPercentageusedbytes() float32 { - if m != nil { - return m.Percentageusedbytes +func (x *QuotaProto) GetPercentageusedbytes() float32 { + if x != nil { + return x.Percentageusedbytes } return 0 } -func (m *QuotaProto) GetPercentageusedfiles() float32 { - if m != nil { - return m.Percentageusedfiles +func (x *QuotaProto) GetPercentageusedfiles() float32 { + if x != nil { + return x.Percentageusedfiles } return 0 } -func (m *QuotaProto) GetStatusbytes() string { - if m != nil { - return m.Statusbytes +func (x *QuotaProto) GetStatusbytes() string { + if x != nil { + return x.Statusbytes } return "" } -func (m *QuotaProto) GetStatusfiles() string { - if m != nil { - return m.Statusfiles +func (x *QuotaProto) GetStatusfiles() string { + if x != nil { + return x.Statusfiles } return "" } type RoleId struct { - Uid uint64 `protobuf:"varint,1,opt,name=uid,proto3" json:"uid,omitempty"` - Gid uint64 `protobuf:"varint,2,opt,name=gid,proto3" json:"gid,omitempty"` - Username string `protobuf:"bytes,3,opt,name=username,proto3" json:"username,omitempty"` - Groupname string `protobuf:"bytes,4,opt,name=groupname,proto3" json:"groupname,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *RoleId) Reset() { *m = RoleId{} } -func (m *RoleId) String() string { return proto.CompactTextString(m) } -func (*RoleId) ProtoMessage() {} -func (*RoleId) Descriptor() ([]byte, []int) { - return fileDescriptor_979aee4989bceb08, []int{10} -} + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields -func (m *RoleId) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_RoleId.Unmarshal(m, b) + Uid uint64 `protobuf:"varint,1,opt,name=uid,proto3" json:"uid,omitempty"` + Gid uint64 `protobuf:"varint,2,opt,name=gid,proto3" json:"gid,omitempty"` + Username string `protobuf:"bytes,3,opt,name=username,proto3" json:"username,omitempty"` + Groupname string `protobuf:"bytes,4,opt,name=groupname,proto3" json:"groupname,omitempty"` } -func (m *RoleId) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_RoleId.Marshal(b, m, deterministic) -} -func (m *RoleId) XXX_Merge(src proto.Message) { - xxx_messageInfo_RoleId.Merge(m, src) + +func (x *RoleId) Reset() { + *x = RoleId{} + if protoimpl.UnsafeEnabled { + mi := &file_Rpc_proto_msgTypes[10] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } } -func (m *RoleId) XXX_Size() int { - return xxx_messageInfo_RoleId.Size(m) + +func (x *RoleId) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *RoleId) XXX_DiscardUnknown() { - xxx_messageInfo_RoleId.DiscardUnknown(m) + +func (*RoleId) ProtoMessage() {} + +func (x *RoleId) ProtoReflect() protoreflect.Message { + mi := &file_Rpc_proto_msgTypes[10] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) } -var xxx_messageInfo_RoleId proto.InternalMessageInfo +// Deprecated: Use RoleId.ProtoReflect.Descriptor instead. +func (*RoleId) Descriptor() ([]byte, []int) { + return file_Rpc_proto_rawDescGZIP(), []int{10} +} -func (m *RoleId) GetUid() uint64 { - if m != nil { - return m.Uid +func (x *RoleId) GetUid() uint64 { + if x != nil { + return x.Uid } return 0 } -func (m *RoleId) GetGid() uint64 { - if m != nil { - return m.Gid +func (x *RoleId) GetGid() uint64 { + if x != nil { + return x.Gid } return 0 } -func (m *RoleId) GetUsername() string { - if m != nil { - return m.Username +func (x *RoleId) GetUsername() string { + if x != nil { + return x.Username } return "" } -func (m *RoleId) GetGroupname() string { - if m != nil { - return m.Groupname +func (x *RoleId) GetGroupname() string { + if x != nil { + return x.Groupname } return "" } type MDId struct { - Path []byte `protobuf:"bytes,1,opt,name=path,proto3" json:"path,omitempty"` - Id uint64 `protobuf:"fixed64,2,opt,name=id,proto3" json:"id,omitempty"` - Ino uint64 `protobuf:"fixed64,3,opt,name=ino,proto3" json:"ino,omitempty"` - Type TYPE `protobuf:"varint,4,opt,name=type,proto3,enum=eos.rpc.TYPE" json:"type,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *MDId) Reset() { *m = MDId{} } -func (m *MDId) String() string { return proto.CompactTextString(m) } -func (*MDId) ProtoMessage() {} -func (*MDId) Descriptor() ([]byte, []int) { - return fileDescriptor_979aee4989bceb08, []int{11} -} + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields -func (m *MDId) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_MDId.Unmarshal(m, b) -} -func (m *MDId) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_MDId.Marshal(b, m, deterministic) + Path []byte `protobuf:"bytes,1,opt,name=path,proto3" json:"path,omitempty"` + Id uint64 `protobuf:"fixed64,2,opt,name=id,proto3" json:"id,omitempty"` + Ino uint64 `protobuf:"fixed64,3,opt,name=ino,proto3" json:"ino,omitempty"` + Type TYPE `protobuf:"varint,4,opt,name=type,proto3,enum=eos.rpc.TYPE" json:"type,omitempty"` } -func (m *MDId) XXX_Merge(src proto.Message) { - xxx_messageInfo_MDId.Merge(m, src) + +func (x *MDId) Reset() { + *x = MDId{} + if protoimpl.UnsafeEnabled { + mi := &file_Rpc_proto_msgTypes[11] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } } -func (m *MDId) XXX_Size() int { - return xxx_messageInfo_MDId.Size(m) + +func (x *MDId) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *MDId) XXX_DiscardUnknown() { - xxx_messageInfo_MDId.DiscardUnknown(m) + +func (*MDId) ProtoMessage() {} + +func (x *MDId) ProtoReflect() protoreflect.Message { + mi := &file_Rpc_proto_msgTypes[11] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) } -var xxx_messageInfo_MDId proto.InternalMessageInfo +// Deprecated: Use MDId.ProtoReflect.Descriptor instead. +func (*MDId) Descriptor() ([]byte, []int) { + return file_Rpc_proto_rawDescGZIP(), []int{11} +} -func (m *MDId) GetPath() []byte { - if m != nil { - return m.Path +func (x *MDId) GetPath() []byte { + if x != nil { + return x.Path } return nil } -func (m *MDId) GetId() uint64 { - if m != nil { - return m.Id +func (x *MDId) GetId() uint64 { + if x != nil { + return x.Id } return 0 } -func (m *MDId) GetIno() uint64 { - if m != nil { - return m.Ino +func (x *MDId) GetIno() uint64 { + if x != nil { + return x.Ino } return 0 } -func (m *MDId) GetType() TYPE { - if m != nil { - return m.Type +func (x *MDId) GetType() TYPE { + if x != nil { + return x.Type } return TYPE_FILE } type Limit struct { - Zero bool `protobuf:"varint,1,opt,name=zero,proto3" json:"zero,omitempty"` - Min uint64 `protobuf:"varint,2,opt,name=min,proto3" json:"min,omitempty"` - Max uint64 `protobuf:"varint,3,opt,name=max,proto3" json:"max,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields -func (m *Limit) Reset() { *m = Limit{} } -func (m *Limit) String() string { return proto.CompactTextString(m) } -func (*Limit) ProtoMessage() {} -func (*Limit) Descriptor() ([]byte, []int) { - return fileDescriptor_979aee4989bceb08, []int{12} + Zero bool `protobuf:"varint,1,opt,name=zero,proto3" json:"zero,omitempty"` + Min uint64 `protobuf:"varint,2,opt,name=min,proto3" json:"min,omitempty"` + Max uint64 `protobuf:"varint,3,opt,name=max,proto3" json:"max,omitempty"` } -func (m *Limit) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_Limit.Unmarshal(m, b) -} -func (m *Limit) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_Limit.Marshal(b, m, deterministic) -} -func (m *Limit) XXX_Merge(src proto.Message) { - xxx_messageInfo_Limit.Merge(m, src) +func (x *Limit) Reset() { + *x = Limit{} + if protoimpl.UnsafeEnabled { + mi := &file_Rpc_proto_msgTypes[12] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } } -func (m *Limit) XXX_Size() int { - return xxx_messageInfo_Limit.Size(m) + +func (x *Limit) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *Limit) XXX_DiscardUnknown() { - xxx_messageInfo_Limit.DiscardUnknown(m) + +func (*Limit) ProtoMessage() {} + +func (x *Limit) ProtoReflect() protoreflect.Message { + mi := &file_Rpc_proto_msgTypes[12] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) } -var xxx_messageInfo_Limit proto.InternalMessageInfo +// Deprecated: Use Limit.ProtoReflect.Descriptor instead. +func (*Limit) Descriptor() ([]byte, []int) { + return file_Rpc_proto_rawDescGZIP(), []int{12} +} -func (m *Limit) GetZero() bool { - if m != nil { - return m.Zero +func (x *Limit) GetZero() bool { + if x != nil { + return x.Zero } return false } -func (m *Limit) GetMin() uint64 { - if m != nil { - return m.Min +func (x *Limit) GetMin() uint64 { + if x != nil { + return x.Min } return 0 } -func (m *Limit) GetMax() uint64 { - if m != nil { - return m.Max +func (x *Limit) GetMax() uint64 { + if x != nil { + return x.Max } return 0 } type MDSelection struct { - Select bool `protobuf:"varint,1,opt,name=select,proto3" json:"select,omitempty"` - Ctime *Limit `protobuf:"bytes,2,opt,name=ctime,proto3" json:"ctime,omitempty"` - Mtime *Limit `protobuf:"bytes,3,opt,name=mtime,proto3" json:"mtime,omitempty"` - Stime *Limit `protobuf:"bytes,4,opt,name=stime,proto3" json:"stime,omitempty"` - Size *Limit `protobuf:"bytes,5,opt,name=size,proto3" json:"size,omitempty"` - Treesize *Limit `protobuf:"bytes,6,opt,name=treesize,proto3" json:"treesize,omitempty"` - Children *Limit `protobuf:"bytes,7,opt,name=children,proto3" json:"children,omitempty"` - Locations *Limit `protobuf:"bytes,8,opt,name=locations,proto3" json:"locations,omitempty"` - UnlinkedLocations *Limit `protobuf:"bytes,9,opt,name=unlinked_locations,json=unlinkedLocations,proto3" json:"unlinked_locations,omitempty"` - Layoutid uint64 `protobuf:"varint,10,opt,name=layoutid,proto3" json:"layoutid,omitempty"` - Flags uint64 `protobuf:"varint,11,opt,name=flags,proto3" json:"flags,omitempty"` - Symlink bool `protobuf:"varint,12,opt,name=symlink,proto3" json:"symlink,omitempty"` - Checksum *Checksum `protobuf:"bytes,13,opt,name=checksum,proto3" json:"checksum,omitempty"` - Owner uint32 `protobuf:"varint,14,opt,name=owner,proto3" json:"owner,omitempty"` - Group uint32 `protobuf:"varint,15,opt,name=group,proto3" json:"group,omitempty"` - OwnerRoot bool `protobuf:"varint,16,opt,name=owner_root,json=ownerRoot,proto3" json:"owner_root,omitempty"` - GroupRoot bool `protobuf:"varint,17,opt,name=group_root,json=groupRoot,proto3" json:"group_root,omitempty"` - RegexpFilename []byte `protobuf:"bytes,18,opt,name=regexp_filename,json=regexpFilename,proto3" json:"regexp_filename,omitempty"` - RegexpDirname []byte `protobuf:"bytes,19,opt,name=regexp_dirname,json=regexpDirname,proto3" json:"regexp_dirname,omitempty"` - Xattr map[string][]byte `protobuf:"bytes,20,rep,name=xattr,proto3" json:"xattr,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *MDSelection) Reset() { *m = MDSelection{} } -func (m *MDSelection) String() string { return proto.CompactTextString(m) } -func (*MDSelection) ProtoMessage() {} + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Select bool `protobuf:"varint,1,opt,name=select,proto3" json:"select,omitempty"` + Ctime *Limit `protobuf:"bytes,2,opt,name=ctime,proto3" json:"ctime,omitempty"` + Mtime *Limit `protobuf:"bytes,3,opt,name=mtime,proto3" json:"mtime,omitempty"` + Stime *Limit `protobuf:"bytes,4,opt,name=stime,proto3" json:"stime,omitempty"` + Size *Limit `protobuf:"bytes,5,opt,name=size,proto3" json:"size,omitempty"` + Treesize *Limit `protobuf:"bytes,6,opt,name=treesize,proto3" json:"treesize,omitempty"` + Children *Limit `protobuf:"bytes,7,opt,name=children,proto3" json:"children,omitempty"` + Locations *Limit `protobuf:"bytes,8,opt,name=locations,proto3" json:"locations,omitempty"` + UnlinkedLocations *Limit `protobuf:"bytes,9,opt,name=unlinked_locations,json=unlinkedLocations,proto3" json:"unlinked_locations,omitempty"` + Layoutid uint64 `protobuf:"varint,10,opt,name=layoutid,proto3" json:"layoutid,omitempty"` + Flags uint64 `protobuf:"varint,11,opt,name=flags,proto3" json:"flags,omitempty"` + Symlink bool `protobuf:"varint,12,opt,name=symlink,proto3" json:"symlink,omitempty"` + Checksum *Checksum `protobuf:"bytes,13,opt,name=checksum,proto3" json:"checksum,omitempty"` + Owner uint32 `protobuf:"varint,14,opt,name=owner,proto3" json:"owner,omitempty"` + Group uint32 `protobuf:"varint,15,opt,name=group,proto3" json:"group,omitempty"` + OwnerRoot bool `protobuf:"varint,16,opt,name=owner_root,json=ownerRoot,proto3" json:"owner_root,omitempty"` + GroupRoot bool `protobuf:"varint,17,opt,name=group_root,json=groupRoot,proto3" json:"group_root,omitempty"` + RegexpFilename []byte `protobuf:"bytes,18,opt,name=regexp_filename,json=regexpFilename,proto3" json:"regexp_filename,omitempty"` + RegexpDirname []byte `protobuf:"bytes,19,opt,name=regexp_dirname,json=regexpDirname,proto3" json:"regexp_dirname,omitempty"` + Xattr map[string][]byte `protobuf:"bytes,20,rep,name=xattr,proto3" json:"xattr,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` +} + +func (x *MDSelection) Reset() { + *x = MDSelection{} + if protoimpl.UnsafeEnabled { + mi := &file_Rpc_proto_msgTypes[13] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *MDSelection) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*MDSelection) ProtoMessage() {} + +func (x *MDSelection) ProtoReflect() protoreflect.Message { + mi := &file_Rpc_proto_msgTypes[13] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use MDSelection.ProtoReflect.Descriptor instead. func (*MDSelection) Descriptor() ([]byte, []int) { - return fileDescriptor_979aee4989bceb08, []int{13} -} - -func (m *MDSelection) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_MDSelection.Unmarshal(m, b) -} -func (m *MDSelection) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_MDSelection.Marshal(b, m, deterministic) -} -func (m *MDSelection) XXX_Merge(src proto.Message) { - xxx_messageInfo_MDSelection.Merge(m, src) -} -func (m *MDSelection) XXX_Size() int { - return xxx_messageInfo_MDSelection.Size(m) -} -func (m *MDSelection) XXX_DiscardUnknown() { - xxx_messageInfo_MDSelection.DiscardUnknown(m) + return file_Rpc_proto_rawDescGZIP(), []int{13} } -var xxx_messageInfo_MDSelection proto.InternalMessageInfo - -func (m *MDSelection) GetSelect() bool { - if m != nil { - return m.Select +func (x *MDSelection) GetSelect() bool { + if x != nil { + return x.Select } return false } -func (m *MDSelection) GetCtime() *Limit { - if m != nil { - return m.Ctime +func (x *MDSelection) GetCtime() *Limit { + if x != nil { + return x.Ctime } return nil } -func (m *MDSelection) GetMtime() *Limit { - if m != nil { - return m.Mtime +func (x *MDSelection) GetMtime() *Limit { + if x != nil { + return x.Mtime } return nil } -func (m *MDSelection) GetStime() *Limit { - if m != nil { - return m.Stime +func (x *MDSelection) GetStime() *Limit { + if x != nil { + return x.Stime } return nil } -func (m *MDSelection) GetSize() *Limit { - if m != nil { - return m.Size +func (x *MDSelection) GetSize() *Limit { + if x != nil { + return x.Size } return nil } -func (m *MDSelection) GetTreesize() *Limit { - if m != nil { - return m.Treesize +func (x *MDSelection) GetTreesize() *Limit { + if x != nil { + return x.Treesize } return nil } -func (m *MDSelection) GetChildren() *Limit { - if m != nil { - return m.Children +func (x *MDSelection) GetChildren() *Limit { + if x != nil { + return x.Children } return nil } -func (m *MDSelection) GetLocations() *Limit { - if m != nil { - return m.Locations +func (x *MDSelection) GetLocations() *Limit { + if x != nil { + return x.Locations } return nil } -func (m *MDSelection) GetUnlinkedLocations() *Limit { - if m != nil { - return m.UnlinkedLocations +func (x *MDSelection) GetUnlinkedLocations() *Limit { + if x != nil { + return x.UnlinkedLocations } return nil } -func (m *MDSelection) GetLayoutid() uint64 { - if m != nil { - return m.Layoutid +func (x *MDSelection) GetLayoutid() uint64 { + if x != nil { + return x.Layoutid } return 0 } -func (m *MDSelection) GetFlags() uint64 { - if m != nil { - return m.Flags +func (x *MDSelection) GetFlags() uint64 { + if x != nil { + return x.Flags } return 0 } -func (m *MDSelection) GetSymlink() bool { - if m != nil { - return m.Symlink +func (x *MDSelection) GetSymlink() bool { + if x != nil { + return x.Symlink } return false } -func (m *MDSelection) GetChecksum() *Checksum { - if m != nil { - return m.Checksum +func (x *MDSelection) GetChecksum() *Checksum { + if x != nil { + return x.Checksum } return nil } -func (m *MDSelection) GetOwner() uint32 { - if m != nil { - return m.Owner +func (x *MDSelection) GetOwner() uint32 { + if x != nil { + return x.Owner } return 0 } -func (m *MDSelection) GetGroup() uint32 { - if m != nil { - return m.Group +func (x *MDSelection) GetGroup() uint32 { + if x != nil { + return x.Group } return 0 } -func (m *MDSelection) GetOwnerRoot() bool { - if m != nil { - return m.OwnerRoot +func (x *MDSelection) GetOwnerRoot() bool { + if x != nil { + return x.OwnerRoot } return false } -func (m *MDSelection) GetGroupRoot() bool { - if m != nil { - return m.GroupRoot +func (x *MDSelection) GetGroupRoot() bool { + if x != nil { + return x.GroupRoot } return false } -func (m *MDSelection) GetRegexpFilename() []byte { - if m != nil { - return m.RegexpFilename +func (x *MDSelection) GetRegexpFilename() []byte { + if x != nil { + return x.RegexpFilename } return nil } -func (m *MDSelection) GetRegexpDirname() []byte { - if m != nil { - return m.RegexpDirname +func (x *MDSelection) GetRegexpDirname() []byte { + if x != nil { + return x.RegexpDirname } return nil } -func (m *MDSelection) GetXattr() map[string][]byte { - if m != nil { - return m.Xattr +func (x *MDSelection) GetXattr() map[string][]byte { + if x != nil { + return x.Xattr } return nil } type MDRequest struct { - Type TYPE `protobuf:"varint,1,opt,name=type,proto3,enum=eos.rpc.TYPE" json:"type,omitempty"` - Id *MDId `protobuf:"bytes,2,opt,name=id,proto3" json:"id,omitempty"` - Authkey string `protobuf:"bytes,3,opt,name=authkey,proto3" json:"authkey,omitempty"` - Role *RoleId `protobuf:"bytes,4,opt,name=role,proto3" json:"role,omitempty"` - Selection *MDSelection `protobuf:"bytes,5,opt,name=selection,proto3" json:"selection,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *MDRequest) Reset() { *m = MDRequest{} } -func (m *MDRequest) String() string { return proto.CompactTextString(m) } -func (*MDRequest) ProtoMessage() {} -func (*MDRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_979aee4989bceb08, []int{14} -} + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields -func (m *MDRequest) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_MDRequest.Unmarshal(m, b) -} -func (m *MDRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_MDRequest.Marshal(b, m, deterministic) + Type TYPE `protobuf:"varint,1,opt,name=type,proto3,enum=eos.rpc.TYPE" json:"type,omitempty"` + Id *MDId `protobuf:"bytes,2,opt,name=id,proto3" json:"id,omitempty"` + Authkey string `protobuf:"bytes,3,opt,name=authkey,proto3" json:"authkey,omitempty"` + Role *RoleId `protobuf:"bytes,4,opt,name=role,proto3" json:"role,omitempty"` + Selection *MDSelection `protobuf:"bytes,5,opt,name=selection,proto3" json:"selection,omitempty"` } -func (m *MDRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_MDRequest.Merge(m, src) + +func (x *MDRequest) Reset() { + *x = MDRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_Rpc_proto_msgTypes[14] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } } -func (m *MDRequest) XXX_Size() int { - return xxx_messageInfo_MDRequest.Size(m) + +func (x *MDRequest) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *MDRequest) XXX_DiscardUnknown() { - xxx_messageInfo_MDRequest.DiscardUnknown(m) + +func (*MDRequest) ProtoMessage() {} + +func (x *MDRequest) ProtoReflect() protoreflect.Message { + mi := &file_Rpc_proto_msgTypes[14] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) } -var xxx_messageInfo_MDRequest proto.InternalMessageInfo +// Deprecated: Use MDRequest.ProtoReflect.Descriptor instead. +func (*MDRequest) Descriptor() ([]byte, []int) { + return file_Rpc_proto_rawDescGZIP(), []int{14} +} -func (m *MDRequest) GetType() TYPE { - if m != nil { - return m.Type +func (x *MDRequest) GetType() TYPE { + if x != nil { + return x.Type } return TYPE_FILE } -func (m *MDRequest) GetId() *MDId { - if m != nil { - return m.Id +func (x *MDRequest) GetId() *MDId { + if x != nil { + return x.Id } return nil } -func (m *MDRequest) GetAuthkey() string { - if m != nil { - return m.Authkey +func (x *MDRequest) GetAuthkey() string { + if x != nil { + return x.Authkey } return "" } -func (m *MDRequest) GetRole() *RoleId { - if m != nil { - return m.Role +func (x *MDRequest) GetRole() *RoleId { + if x != nil { + return x.Role } return nil } -func (m *MDRequest) GetSelection() *MDSelection { - if m != nil { - return m.Selection +func (x *MDRequest) GetSelection() *MDSelection { + if x != nil { + return x.Selection } return nil } type MDResponse struct { - Type TYPE `protobuf:"varint,1,opt,name=type,proto3,enum=eos.rpc.TYPE" json:"type,omitempty"` - Fmd *FileMdProto `protobuf:"bytes,2,opt,name=fmd,proto3" json:"fmd,omitempty"` - Cmd *ContainerMdProto `protobuf:"bytes,3,opt,name=cmd,proto3" json:"cmd,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields -func (m *MDResponse) Reset() { *m = MDResponse{} } -func (m *MDResponse) String() string { return proto.CompactTextString(m) } -func (*MDResponse) ProtoMessage() {} -func (*MDResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_979aee4989bceb08, []int{15} + Type TYPE `protobuf:"varint,1,opt,name=type,proto3,enum=eos.rpc.TYPE" json:"type,omitempty"` + Fmd *FileMdProto `protobuf:"bytes,2,opt,name=fmd,proto3" json:"fmd,omitempty"` + Cmd *ContainerMdProto `protobuf:"bytes,3,opt,name=cmd,proto3" json:"cmd,omitempty"` } -func (m *MDResponse) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_MDResponse.Unmarshal(m, b) -} -func (m *MDResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_MDResponse.Marshal(b, m, deterministic) -} -func (m *MDResponse) XXX_Merge(src proto.Message) { - xxx_messageInfo_MDResponse.Merge(m, src) +func (x *MDResponse) Reset() { + *x = MDResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_Rpc_proto_msgTypes[15] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } } -func (m *MDResponse) XXX_Size() int { - return xxx_messageInfo_MDResponse.Size(m) + +func (x *MDResponse) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *MDResponse) XXX_DiscardUnknown() { - xxx_messageInfo_MDResponse.DiscardUnknown(m) + +func (*MDResponse) ProtoMessage() {} + +func (x *MDResponse) ProtoReflect() protoreflect.Message { + mi := &file_Rpc_proto_msgTypes[15] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) } -var xxx_messageInfo_MDResponse proto.InternalMessageInfo +// Deprecated: Use MDResponse.ProtoReflect.Descriptor instead. +func (*MDResponse) Descriptor() ([]byte, []int) { + return file_Rpc_proto_rawDescGZIP(), []int{15} +} -func (m *MDResponse) GetType() TYPE { - if m != nil { - return m.Type +func (x *MDResponse) GetType() TYPE { + if x != nil { + return x.Type } return TYPE_FILE } -func (m *MDResponse) GetFmd() *FileMdProto { - if m != nil { - return m.Fmd +func (x *MDResponse) GetFmd() *FileMdProto { + if x != nil { + return x.Fmd } return nil } -func (m *MDResponse) GetCmd() *ContainerMdProto { - if m != nil { - return m.Cmd +func (x *MDResponse) GetCmd() *ContainerMdProto { + if x != nil { + return x.Cmd } return nil } type FindRequest struct { - Type TYPE `protobuf:"varint,1,opt,name=type,proto3,enum=eos.rpc.TYPE" json:"type,omitempty"` - Id *MDId `protobuf:"bytes,2,opt,name=id,proto3" json:"id,omitempty"` - Role *RoleId `protobuf:"bytes,3,opt,name=role,proto3" json:"role,omitempty"` - Authkey string `protobuf:"bytes,4,opt,name=authkey,proto3" json:"authkey,omitempty"` - Maxdepth uint64 `protobuf:"varint,5,opt,name=maxdepth,proto3" json:"maxdepth,omitempty"` - Selection *MDSelection `protobuf:"bytes,6,opt,name=selection,proto3" json:"selection,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *FindRequest) Reset() { *m = FindRequest{} } -func (m *FindRequest) String() string { return proto.CompactTextString(m) } -func (*FindRequest) ProtoMessage() {} -func (*FindRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_979aee4989bceb08, []int{16} -} + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields -func (m *FindRequest) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_FindRequest.Unmarshal(m, b) -} -func (m *FindRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_FindRequest.Marshal(b, m, deterministic) + Type TYPE `protobuf:"varint,1,opt,name=type,proto3,enum=eos.rpc.TYPE" json:"type,omitempty"` + Id *MDId `protobuf:"bytes,2,opt,name=id,proto3" json:"id,omitempty"` + Role *RoleId `protobuf:"bytes,3,opt,name=role,proto3" json:"role,omitempty"` + Authkey string `protobuf:"bytes,4,opt,name=authkey,proto3" json:"authkey,omitempty"` + Maxdepth uint64 `protobuf:"varint,5,opt,name=maxdepth,proto3" json:"maxdepth,omitempty"` + Selection *MDSelection `protobuf:"bytes,6,opt,name=selection,proto3" json:"selection,omitempty"` } -func (m *FindRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_FindRequest.Merge(m, src) + +func (x *FindRequest) Reset() { + *x = FindRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_Rpc_proto_msgTypes[16] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } } -func (m *FindRequest) XXX_Size() int { - return xxx_messageInfo_FindRequest.Size(m) + +func (x *FindRequest) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *FindRequest) XXX_DiscardUnknown() { - xxx_messageInfo_FindRequest.DiscardUnknown(m) + +func (*FindRequest) ProtoMessage() {} + +func (x *FindRequest) ProtoReflect() protoreflect.Message { + mi := &file_Rpc_proto_msgTypes[16] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) } -var xxx_messageInfo_FindRequest proto.InternalMessageInfo +// Deprecated: Use FindRequest.ProtoReflect.Descriptor instead. +func (*FindRequest) Descriptor() ([]byte, []int) { + return file_Rpc_proto_rawDescGZIP(), []int{16} +} -func (m *FindRequest) GetType() TYPE { - if m != nil { - return m.Type +func (x *FindRequest) GetType() TYPE { + if x != nil { + return x.Type } return TYPE_FILE } -func (m *FindRequest) GetId() *MDId { - if m != nil { - return m.Id +func (x *FindRequest) GetId() *MDId { + if x != nil { + return x.Id } return nil } -func (m *FindRequest) GetRole() *RoleId { - if m != nil { - return m.Role +func (x *FindRequest) GetRole() *RoleId { + if x != nil { + return x.Role } return nil } -func (m *FindRequest) GetAuthkey() string { - if m != nil { - return m.Authkey +func (x *FindRequest) GetAuthkey() string { + if x != nil { + return x.Authkey } return "" } -func (m *FindRequest) GetMaxdepth() uint64 { - if m != nil { - return m.Maxdepth +func (x *FindRequest) GetMaxdepth() uint64 { + if x != nil { + return x.Maxdepth } return 0 } -func (m *FindRequest) GetSelection() *MDSelection { - if m != nil { - return m.Selection +func (x *FindRequest) GetSelection() *MDSelection { + if x != nil { + return x.Selection } return nil } type ShareAuth struct { - Prot string `protobuf:"bytes,1,opt,name=prot,proto3" json:"prot,omitempty"` - Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` - Host string `protobuf:"bytes,3,opt,name=host,proto3" json:"host,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields -func (m *ShareAuth) Reset() { *m = ShareAuth{} } -func (m *ShareAuth) String() string { return proto.CompactTextString(m) } -func (*ShareAuth) ProtoMessage() {} -func (*ShareAuth) Descriptor() ([]byte, []int) { - return fileDescriptor_979aee4989bceb08, []int{17} + Prot string `protobuf:"bytes,1,opt,name=prot,proto3" json:"prot,omitempty"` + Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` + Host string `protobuf:"bytes,3,opt,name=host,proto3" json:"host,omitempty"` } -func (m *ShareAuth) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_ShareAuth.Unmarshal(m, b) -} -func (m *ShareAuth) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_ShareAuth.Marshal(b, m, deterministic) -} -func (m *ShareAuth) XXX_Merge(src proto.Message) { - xxx_messageInfo_ShareAuth.Merge(m, src) +func (x *ShareAuth) Reset() { + *x = ShareAuth{} + if protoimpl.UnsafeEnabled { + mi := &file_Rpc_proto_msgTypes[17] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } } -func (m *ShareAuth) XXX_Size() int { - return xxx_messageInfo_ShareAuth.Size(m) + +func (x *ShareAuth) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *ShareAuth) XXX_DiscardUnknown() { - xxx_messageInfo_ShareAuth.DiscardUnknown(m) + +func (*ShareAuth) ProtoMessage() {} + +func (x *ShareAuth) ProtoReflect() protoreflect.Message { + mi := &file_Rpc_proto_msgTypes[17] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) } -var xxx_messageInfo_ShareAuth proto.InternalMessageInfo +// Deprecated: Use ShareAuth.ProtoReflect.Descriptor instead. +func (*ShareAuth) Descriptor() ([]byte, []int) { + return file_Rpc_proto_rawDescGZIP(), []int{17} +} -func (m *ShareAuth) GetProt() string { - if m != nil { - return m.Prot +func (x *ShareAuth) GetProt() string { + if x != nil { + return x.Prot } return "" } -func (m *ShareAuth) GetName() string { - if m != nil { - return m.Name +func (x *ShareAuth) GetName() string { + if x != nil { + return x.Name } return "" } -func (m *ShareAuth) GetHost() string { - if m != nil { - return m.Host +func (x *ShareAuth) GetHost() string { + if x != nil { + return x.Host } return "" } type ShareProto struct { - Permission string `protobuf:"bytes,1,opt,name=permission,proto3" json:"permission,omitempty"` - Expires uint64 `protobuf:"varint,2,opt,name=expires,proto3" json:"expires,omitempty"` - Owner string `protobuf:"bytes,3,opt,name=owner,proto3" json:"owner,omitempty"` - Group string `protobuf:"bytes,4,opt,name=group,proto3" json:"group,omitempty"` - Generation uint64 `protobuf:"varint,5,opt,name=generation,proto3" json:"generation,omitempty"` - Path string `protobuf:"bytes,6,opt,name=path,proto3" json:"path,omitempty"` - Allowtree bool `protobuf:"varint,7,opt,name=allowtree,proto3" json:"allowtree,omitempty"` - Vtoken string `protobuf:"bytes,8,opt,name=vtoken,proto3" json:"vtoken,omitempty"` - Origins []*ShareAuth `protobuf:"bytes,9,rep,name=origins,proto3" json:"origins,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *ShareProto) Reset() { *m = ShareProto{} } -func (m *ShareProto) String() string { return proto.CompactTextString(m) } -func (*ShareProto) ProtoMessage() {} -func (*ShareProto) Descriptor() ([]byte, []int) { - return fileDescriptor_979aee4989bceb08, []int{18} -} + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields -func (m *ShareProto) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_ShareProto.Unmarshal(m, b) + Permission string `protobuf:"bytes,1,opt,name=permission,proto3" json:"permission,omitempty"` + Expires uint64 `protobuf:"varint,2,opt,name=expires,proto3" json:"expires,omitempty"` + Owner string `protobuf:"bytes,3,opt,name=owner,proto3" json:"owner,omitempty"` + Group string `protobuf:"bytes,4,opt,name=group,proto3" json:"group,omitempty"` + Generation uint64 `protobuf:"varint,5,opt,name=generation,proto3" json:"generation,omitempty"` + Path string `protobuf:"bytes,6,opt,name=path,proto3" json:"path,omitempty"` + Allowtree bool `protobuf:"varint,7,opt,name=allowtree,proto3" json:"allowtree,omitempty"` + Vtoken string `protobuf:"bytes,8,opt,name=vtoken,proto3" json:"vtoken,omitempty"` + Origins []*ShareAuth `protobuf:"bytes,9,rep,name=origins,proto3" json:"origins,omitempty"` } -func (m *ShareProto) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_ShareProto.Marshal(b, m, deterministic) -} -func (m *ShareProto) XXX_Merge(src proto.Message) { - xxx_messageInfo_ShareProto.Merge(m, src) + +func (x *ShareProto) Reset() { + *x = ShareProto{} + if protoimpl.UnsafeEnabled { + mi := &file_Rpc_proto_msgTypes[18] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } } -func (m *ShareProto) XXX_Size() int { - return xxx_messageInfo_ShareProto.Size(m) + +func (x *ShareProto) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *ShareProto) XXX_DiscardUnknown() { - xxx_messageInfo_ShareProto.DiscardUnknown(m) + +func (*ShareProto) ProtoMessage() {} + +func (x *ShareProto) ProtoReflect() protoreflect.Message { + mi := &file_Rpc_proto_msgTypes[18] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) } -var xxx_messageInfo_ShareProto proto.InternalMessageInfo +// Deprecated: Use ShareProto.ProtoReflect.Descriptor instead. +func (*ShareProto) Descriptor() ([]byte, []int) { + return file_Rpc_proto_rawDescGZIP(), []int{18} +} -func (m *ShareProto) GetPermission() string { - if m != nil { - return m.Permission +func (x *ShareProto) GetPermission() string { + if x != nil { + return x.Permission } return "" } -func (m *ShareProto) GetExpires() uint64 { - if m != nil { - return m.Expires +func (x *ShareProto) GetExpires() uint64 { + if x != nil { + return x.Expires } return 0 } -func (m *ShareProto) GetOwner() string { - if m != nil { - return m.Owner +func (x *ShareProto) GetOwner() string { + if x != nil { + return x.Owner } return "" } -func (m *ShareProto) GetGroup() string { - if m != nil { - return m.Group +func (x *ShareProto) GetGroup() string { + if x != nil { + return x.Group } return "" } -func (m *ShareProto) GetGeneration() uint64 { - if m != nil { - return m.Generation +func (x *ShareProto) GetGeneration() uint64 { + if x != nil { + return x.Generation } return 0 } -func (m *ShareProto) GetPath() string { - if m != nil { - return m.Path +func (x *ShareProto) GetPath() string { + if x != nil { + return x.Path } return "" } -func (m *ShareProto) GetAllowtree() bool { - if m != nil { - return m.Allowtree +func (x *ShareProto) GetAllowtree() bool { + if x != nil { + return x.Allowtree } return false } -func (m *ShareProto) GetVtoken() string { - if m != nil { - return m.Vtoken +func (x *ShareProto) GetVtoken() string { + if x != nil { + return x.Vtoken } return "" } -func (m *ShareProto) GetOrigins() []*ShareAuth { - if m != nil { - return m.Origins +func (x *ShareProto) GetOrigins() []*ShareAuth { + if x != nil { + return x.Origins } return nil } type ShareToken struct { - Token *ShareProto `protobuf:"bytes,1,opt,name=token,proto3" json:"token,omitempty"` - Signature []byte `protobuf:"bytes,2,opt,name=signature,proto3" json:"signature,omitempty"` - Serialized []byte `protobuf:"bytes,3,opt,name=serialized,proto3" json:"serialized,omitempty"` - Seed int32 `protobuf:"varint,4,opt,name=seed,proto3" json:"seed,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *ShareToken) Reset() { *m = ShareToken{} } -func (m *ShareToken) String() string { return proto.CompactTextString(m) } -func (*ShareToken) ProtoMessage() {} -func (*ShareToken) Descriptor() ([]byte, []int) { - return fileDescriptor_979aee4989bceb08, []int{19} -} + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields -func (m *ShareToken) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_ShareToken.Unmarshal(m, b) + Token *ShareProto `protobuf:"bytes,1,opt,name=token,proto3" json:"token,omitempty"` + Signature []byte `protobuf:"bytes,2,opt,name=signature,proto3" json:"signature,omitempty"` + Serialized []byte `protobuf:"bytes,3,opt,name=serialized,proto3" json:"serialized,omitempty"` + Seed int32 `protobuf:"varint,4,opt,name=seed,proto3" json:"seed,omitempty"` } -func (m *ShareToken) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_ShareToken.Marshal(b, m, deterministic) -} -func (m *ShareToken) XXX_Merge(src proto.Message) { - xxx_messageInfo_ShareToken.Merge(m, src) + +func (x *ShareToken) Reset() { + *x = ShareToken{} + if protoimpl.UnsafeEnabled { + mi := &file_Rpc_proto_msgTypes[19] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } } -func (m *ShareToken) XXX_Size() int { - return xxx_messageInfo_ShareToken.Size(m) + +func (x *ShareToken) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *ShareToken) XXX_DiscardUnknown() { - xxx_messageInfo_ShareToken.DiscardUnknown(m) + +func (*ShareToken) ProtoMessage() {} + +func (x *ShareToken) ProtoReflect() protoreflect.Message { + mi := &file_Rpc_proto_msgTypes[19] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) } -var xxx_messageInfo_ShareToken proto.InternalMessageInfo +// Deprecated: Use ShareToken.ProtoReflect.Descriptor instead. +func (*ShareToken) Descriptor() ([]byte, []int) { + return file_Rpc_proto_rawDescGZIP(), []int{19} +} -func (m *ShareToken) GetToken() *ShareProto { - if m != nil { - return m.Token +func (x *ShareToken) GetToken() *ShareProto { + if x != nil { + return x.Token } return nil } -func (m *ShareToken) GetSignature() []byte { - if m != nil { - return m.Signature +func (x *ShareToken) GetSignature() []byte { + if x != nil { + return x.Signature } return nil } -func (m *ShareToken) GetSerialized() []byte { - if m != nil { - return m.Serialized +func (x *ShareToken) GetSerialized() []byte { + if x != nil { + return x.Serialized } return nil } -func (m *ShareToken) GetSeed() int32 { - if m != nil { - return m.Seed +func (x *ShareToken) GetSeed() int32 { + if x != nil { + return x.Seed } return 0 } type NSRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + Authkey string `protobuf:"bytes,1,opt,name=authkey,proto3" json:"authkey,omitempty"` Role *RoleId `protobuf:"bytes,2,opt,name=role,proto3" json:"role,omitempty"` // Actual request data object // - // Types that are valid to be assigned to Command: + // Types that are assignable to Command: // *NSRequest_Mkdir // *NSRequest_Rmdir // *NSRequest_Touch @@ -1931,61 +2430,185 @@ type NSRequest struct { // *NSRequest_Acl // *NSRequest_Token // *NSRequest_Quota - Command isNSRequest_Command `protobuf_oneof:"command"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` + // *NSRequest_Share + Command isNSRequest_Command `protobuf_oneof:"command"` } -func (m *NSRequest) Reset() { *m = NSRequest{} } -func (m *NSRequest) String() string { return proto.CompactTextString(m) } -func (*NSRequest) ProtoMessage() {} -func (*NSRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_979aee4989bceb08, []int{20} +func (x *NSRequest) Reset() { + *x = NSRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_Rpc_proto_msgTypes[20] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } } -func (m *NSRequest) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_NSRequest.Unmarshal(m, b) -} -func (m *NSRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_NSRequest.Marshal(b, m, deterministic) -} -func (m *NSRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_NSRequest.Merge(m, src) -} -func (m *NSRequest) XXX_Size() int { - return xxx_messageInfo_NSRequest.Size(m) +func (x *NSRequest) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *NSRequest) XXX_DiscardUnknown() { - xxx_messageInfo_NSRequest.DiscardUnknown(m) + +func (*NSRequest) ProtoMessage() {} + +func (x *NSRequest) ProtoReflect() protoreflect.Message { + mi := &file_Rpc_proto_msgTypes[20] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) } -var xxx_messageInfo_NSRequest proto.InternalMessageInfo +// Deprecated: Use NSRequest.ProtoReflect.Descriptor instead. +func (*NSRequest) Descriptor() ([]byte, []int) { + return file_Rpc_proto_rawDescGZIP(), []int{20} +} -func (m *NSRequest) GetAuthkey() string { - if m != nil { - return m.Authkey +func (x *NSRequest) GetAuthkey() string { + if x != nil { + return x.Authkey } return "" } -func (m *NSRequest) GetRole() *RoleId { - if m != nil { - return m.Role +func (x *NSRequest) GetRole() *RoleId { + if x != nil { + return x.Role } return nil } -type isNSRequest_Command interface { - isNSRequest_Command() +func (m *NSRequest) GetCommand() isNSRequest_Command { + if m != nil { + return m.Command + } + return nil } -type NSRequest_Mkdir struct { - Mkdir *NSRequest_MkdirRequest `protobuf:"bytes,21,opt,name=mkdir,proto3,oneof"` +func (x *NSRequest) GetMkdir() *NSRequest_MkdirRequest { + if x, ok := x.GetCommand().(*NSRequest_Mkdir); ok { + return x.Mkdir + } + return nil } -type NSRequest_Rmdir struct { - Rmdir *NSRequest_RmdirRequest `protobuf:"bytes,22,opt,name=rmdir,proto3,oneof"` +func (x *NSRequest) GetRmdir() *NSRequest_RmdirRequest { + if x, ok := x.GetCommand().(*NSRequest_Rmdir); ok { + return x.Rmdir + } + return nil +} + +func (x *NSRequest) GetTouch() *NSRequest_TouchRequest { + if x, ok := x.GetCommand().(*NSRequest_Touch); ok { + return x.Touch + } + return nil +} + +func (x *NSRequest) GetUnlink() *NSRequest_UnlinkRequest { + if x, ok := x.GetCommand().(*NSRequest_Unlink); ok { + return x.Unlink + } + return nil +} + +func (x *NSRequest) GetRm() *NSRequest_RmRequest { + if x, ok := x.GetCommand().(*NSRequest_Rm); ok { + return x.Rm + } + return nil +} + +func (x *NSRequest) GetRename() *NSRequest_RenameRequest { + if x, ok := x.GetCommand().(*NSRequest_Rename); ok { + return x.Rename + } + return nil +} + +func (x *NSRequest) GetSymlink() *NSRequest_SymlinkRequest { + if x, ok := x.GetCommand().(*NSRequest_Symlink); ok { + return x.Symlink + } + return nil +} + +func (x *NSRequest) GetVersion() *NSRequest_VersionRequest { + if x, ok := x.GetCommand().(*NSRequest_Version); ok { + return x.Version + } + return nil +} + +func (x *NSRequest) GetRecycle() *NSRequest_RecycleRequest { + if x, ok := x.GetCommand().(*NSRequest_Recycle); ok { + return x.Recycle + } + return nil +} + +func (x *NSRequest) GetXattr() *NSRequest_SetXAttrRequest { + if x, ok := x.GetCommand().(*NSRequest_Xattr); ok { + return x.Xattr + } + return nil +} + +func (x *NSRequest) GetChown() *NSRequest_ChownRequest { + if x, ok := x.GetCommand().(*NSRequest_Chown); ok { + return x.Chown + } + return nil +} + +func (x *NSRequest) GetChmod() *NSRequest_ChmodRequest { + if x, ok := x.GetCommand().(*NSRequest_Chmod); ok { + return x.Chmod + } + return nil +} + +func (x *NSRequest) GetAcl() *NSRequest_AclRequest { + if x, ok := x.GetCommand().(*NSRequest_Acl); ok { + return x.Acl + } + return nil +} + +func (x *NSRequest) GetToken() *NSRequest_TokenRequest { + if x, ok := x.GetCommand().(*NSRequest_Token); ok { + return x.Token + } + return nil +} + +func (x *NSRequest) GetQuota() *NSRequest_QuotaRequest { + if x, ok := x.GetCommand().(*NSRequest_Quota); ok { + return x.Quota + } + return nil +} + +func (x *NSRequest) GetShare() *NSRequest_ShareRequest { + if x, ok := x.GetCommand().(*NSRequest_Share); ok { + return x.Share + } + return nil +} + +type isNSRequest_Command interface { + isNSRequest_Command() +} + +type NSRequest_Mkdir struct { + Mkdir *NSRequest_MkdirRequest `protobuf:"bytes,21,opt,name=mkdir,proto3,oneof"` +} + +type NSRequest_Rmdir struct { + Rmdir *NSRequest_RmdirRequest `protobuf:"bytes,22,opt,name=rmdir,proto3,oneof"` } type NSRequest_Touch struct { @@ -2040,6 +2663,10 @@ type NSRequest_Quota struct { Quota *NSRequest_QuotaRequest `protobuf:"bytes,35,opt,name=quota,proto3,oneof"` } +type NSRequest_Share struct { + Share *NSRequest_ShareRequest `protobuf:"bytes,36,opt,name=share,proto3,oneof"` +} + func (*NSRequest_Mkdir) isNSRequest_Command() {} func (*NSRequest_Rmdir) isNSRequest_Command() {} @@ -2070,2628 +2697,4130 @@ func (*NSRequest_Token) isNSRequest_Command() {} func (*NSRequest_Quota) isNSRequest_Command() {} -func (m *NSRequest) GetCommand() isNSRequest_Command { - if m != nil { - return m.Command - } - return nil +func (*NSRequest_Share) isNSRequest_Command() {} + +type NSResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Error *NSResponse_ErrorResponse `protobuf:"bytes,1,opt,name=error,proto3" json:"error,omitempty"` + Version *NSResponse_VersionResponse `protobuf:"bytes,2,opt,name=version,proto3" json:"version,omitempty"` + Recycle *NSResponse_RecycleResponse `protobuf:"bytes,3,opt,name=recycle,proto3" json:"recycle,omitempty"` + Acl *NSResponse_AclResponse `protobuf:"bytes,4,opt,name=acl,proto3" json:"acl,omitempty"` + Quota *NSResponse_QuotaResponse `protobuf:"bytes,5,opt,name=quota,proto3" json:"quota,omitempty"` + Share *NSResponse_ShareResponse `protobuf:"bytes,6,opt,name=share,proto3" json:"share,omitempty"` } -func (m *NSRequest) GetMkdir() *NSRequest_MkdirRequest { - if x, ok := m.GetCommand().(*NSRequest_Mkdir); ok { - return x.Mkdir +func (x *NSResponse) Reset() { + *x = NSResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_Rpc_proto_msgTypes[21] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } - return nil } -func (m *NSRequest) GetRmdir() *NSRequest_RmdirRequest { - if x, ok := m.GetCommand().(*NSRequest_Rmdir); ok { - return x.Rmdir - } - return nil +func (x *NSResponse) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *NSRequest) GetTouch() *NSRequest_TouchRequest { - if x, ok := m.GetCommand().(*NSRequest_Touch); ok { - return x.Touch +func (*NSResponse) ProtoMessage() {} + +func (x *NSResponse) ProtoReflect() protoreflect.Message { + mi := &file_Rpc_proto_msgTypes[21] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms } - return nil + return mi.MessageOf(x) } -func (m *NSRequest) GetUnlink() *NSRequest_UnlinkRequest { - if x, ok := m.GetCommand().(*NSRequest_Unlink); ok { - return x.Unlink +// Deprecated: Use NSResponse.ProtoReflect.Descriptor instead. +func (*NSResponse) Descriptor() ([]byte, []int) { + return file_Rpc_proto_rawDescGZIP(), []int{21} +} + +func (x *NSResponse) GetError() *NSResponse_ErrorResponse { + if x != nil { + return x.Error } return nil } -func (m *NSRequest) GetRm() *NSRequest_RmRequest { - if x, ok := m.GetCommand().(*NSRequest_Rm); ok { - return x.Rm +func (x *NSResponse) GetVersion() *NSResponse_VersionResponse { + if x != nil { + return x.Version } return nil } -func (m *NSRequest) GetRename() *NSRequest_RenameRequest { - if x, ok := m.GetCommand().(*NSRequest_Rename); ok { - return x.Rename +func (x *NSResponse) GetRecycle() *NSResponse_RecycleResponse { + if x != nil { + return x.Recycle } return nil } -func (m *NSRequest) GetSymlink() *NSRequest_SymlinkRequest { - if x, ok := m.GetCommand().(*NSRequest_Symlink); ok { - return x.Symlink +func (x *NSResponse) GetAcl() *NSResponse_AclResponse { + if x != nil { + return x.Acl } return nil } -func (m *NSRequest) GetVersion() *NSRequest_VersionRequest { - if x, ok := m.GetCommand().(*NSRequest_Version); ok { - return x.Version +func (x *NSResponse) GetQuota() *NSResponse_QuotaResponse { + if x != nil { + return x.Quota } return nil } -func (m *NSRequest) GetRecycle() *NSRequest_RecycleRequest { - if x, ok := m.GetCommand().(*NSRequest_Recycle); ok { - return x.Recycle +func (x *NSResponse) GetShare() *NSResponse_ShareResponse { + if x != nil { + return x.Share } return nil } -func (m *NSRequest) GetXattr() *NSRequest_SetXAttrRequest { - if x, ok := m.GetCommand().(*NSRequest_Xattr); ok { - return x.Xattr +type NsStatRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Authkey string `protobuf:"bytes,1,opt,name=authkey,proto3" json:"authkey,omitempty"` +} + +func (x *NsStatRequest) Reset() { + *x = NsStatRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_Rpc_proto_msgTypes[22] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } - return nil } -func (m *NSRequest) GetChown() *NSRequest_ChownRequest { - if x, ok := m.GetCommand().(*NSRequest_Chown); ok { - return x.Chown +func (x *NsStatRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*NsStatRequest) ProtoMessage() {} + +func (x *NsStatRequest) ProtoReflect() protoreflect.Message { + mi := &file_Rpc_proto_msgTypes[22] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms } - return nil + return mi.MessageOf(x) } -func (m *NSRequest) GetChmod() *NSRequest_ChmodRequest { - if x, ok := m.GetCommand().(*NSRequest_Chmod); ok { - return x.Chmod +// Deprecated: Use NsStatRequest.ProtoReflect.Descriptor instead. +func (*NsStatRequest) Descriptor() ([]byte, []int) { + return file_Rpc_proto_rawDescGZIP(), []int{22} +} + +func (x *NsStatRequest) GetAuthkey() string { + if x != nil { + return x.Authkey } - return nil + return "" } -func (m *NSRequest) GetAcl() *NSRequest_AclRequest { - if x, ok := m.GetCommand().(*NSRequest_Acl); ok { - return x.Acl +type NsStatResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Code int64 `protobuf:"varint,1,opt,name=code,proto3" json:"code,omitempty"` + Emsg string `protobuf:"bytes,2,opt,name=emsg,proto3" json:"emsg,omitempty"` + State string `protobuf:"bytes,3,opt,name=state,proto3" json:"state,omitempty"` + Nfiles uint64 `protobuf:"varint,4,opt,name=nfiles,proto3" json:"nfiles,omitempty"` + Ncontainers uint64 `protobuf:"varint,5,opt,name=ncontainers,proto3" json:"ncontainers,omitempty"` + BootTime uint64 `protobuf:"varint,6,opt,name=boot_time,json=bootTime,proto3" json:"boot_time,omitempty"` + CurrentFid uint64 `protobuf:"varint,7,opt,name=current_fid,json=currentFid,proto3" json:"current_fid,omitempty"` + CurrentCid uint64 `protobuf:"varint,8,opt,name=current_cid,json=currentCid,proto3" json:"current_cid,omitempty"` + MemVirtual uint64 `protobuf:"varint,9,opt,name=mem_virtual,json=memVirtual,proto3" json:"mem_virtual,omitempty"` + MemResident uint64 `protobuf:"varint,10,opt,name=mem_resident,json=memResident,proto3" json:"mem_resident,omitempty"` + MemShare uint64 `protobuf:"varint,11,opt,name=mem_share,json=memShare,proto3" json:"mem_share,omitempty"` + MemGrowth uint64 `protobuf:"varint,12,opt,name=mem_growth,json=memGrowth,proto3" json:"mem_growth,omitempty"` + Threads uint64 `protobuf:"varint,13,opt,name=threads,proto3" json:"threads,omitempty"` + Fds uint64 `protobuf:"varint,14,opt,name=fds,proto3" json:"fds,omitempty"` + Uptime uint64 `protobuf:"varint,15,opt,name=uptime,proto3" json:"uptime,omitempty"` +} + +func (x *NsStatResponse) Reset() { + *x = NsStatResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_Rpc_proto_msgTypes[23] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } - return nil } -func (m *NSRequest) GetToken() *NSRequest_TokenRequest { - if x, ok := m.GetCommand().(*NSRequest_Token); ok { - return x.Token +func (x *NsStatResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*NsStatResponse) ProtoMessage() {} + +func (x *NsStatResponse) ProtoReflect() protoreflect.Message { + mi := &file_Rpc_proto_msgTypes[23] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms } - return nil + return mi.MessageOf(x) } -func (m *NSRequest) GetQuota() *NSRequest_QuotaRequest { - if x, ok := m.GetCommand().(*NSRequest_Quota); ok { - return x.Quota +// Deprecated: Use NsStatResponse.ProtoReflect.Descriptor instead. +func (*NsStatResponse) Descriptor() ([]byte, []int) { + return file_Rpc_proto_rawDescGZIP(), []int{23} +} + +func (x *NsStatResponse) GetCode() int64 { + if x != nil { + return x.Code } - return nil + return 0 } -// XXX_OneofWrappers is for the internal use of the proto package. -func (*NSRequest) XXX_OneofWrappers() []interface{} { - return []interface{}{ - (*NSRequest_Mkdir)(nil), - (*NSRequest_Rmdir)(nil), - (*NSRequest_Touch)(nil), - (*NSRequest_Unlink)(nil), - (*NSRequest_Rm)(nil), - (*NSRequest_Rename)(nil), - (*NSRequest_Symlink)(nil), - (*NSRequest_Version)(nil), - (*NSRequest_Recycle)(nil), - (*NSRequest_Xattr)(nil), - (*NSRequest_Chown)(nil), - (*NSRequest_Chmod)(nil), - (*NSRequest_Acl)(nil), - (*NSRequest_Token)(nil), - (*NSRequest_Quota)(nil), +func (x *NsStatResponse) GetEmsg() string { + if x != nil { + return x.Emsg } + return "" } -type NSRequest_MkdirRequest struct { - Id *MDId `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` - Recursive bool `protobuf:"varint,2,opt,name=recursive,proto3" json:"recursive,omitempty"` - Mode int64 `protobuf:"varint,3,opt,name=mode,proto3" json:"mode,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` +func (x *NsStatResponse) GetState() string { + if x != nil { + return x.State + } + return "" } -func (m *NSRequest_MkdirRequest) Reset() { *m = NSRequest_MkdirRequest{} } -func (m *NSRequest_MkdirRequest) String() string { return proto.CompactTextString(m) } -func (*NSRequest_MkdirRequest) ProtoMessage() {} -func (*NSRequest_MkdirRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_979aee4989bceb08, []int{20, 0} +func (x *NsStatResponse) GetNfiles() uint64 { + if x != nil { + return x.Nfiles + } + return 0 } -func (m *NSRequest_MkdirRequest) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_NSRequest_MkdirRequest.Unmarshal(m, b) +func (x *NsStatResponse) GetNcontainers() uint64 { + if x != nil { + return x.Ncontainers + } + return 0 } -func (m *NSRequest_MkdirRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_NSRequest_MkdirRequest.Marshal(b, m, deterministic) + +func (x *NsStatResponse) GetBootTime() uint64 { + if x != nil { + return x.BootTime + } + return 0 } -func (m *NSRequest_MkdirRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_NSRequest_MkdirRequest.Merge(m, src) + +func (x *NsStatResponse) GetCurrentFid() uint64 { + if x != nil { + return x.CurrentFid + } + return 0 } -func (m *NSRequest_MkdirRequest) XXX_Size() int { - return xxx_messageInfo_NSRequest_MkdirRequest.Size(m) + +func (x *NsStatResponse) GetCurrentCid() uint64 { + if x != nil { + return x.CurrentCid + } + return 0 } -func (m *NSRequest_MkdirRequest) XXX_DiscardUnknown() { - xxx_messageInfo_NSRequest_MkdirRequest.DiscardUnknown(m) + +func (x *NsStatResponse) GetMemVirtual() uint64 { + if x != nil { + return x.MemVirtual + } + return 0 } -var xxx_messageInfo_NSRequest_MkdirRequest proto.InternalMessageInfo +func (x *NsStatResponse) GetMemResident() uint64 { + if x != nil { + return x.MemResident + } + return 0 +} -func (m *NSRequest_MkdirRequest) GetId() *MDId { - if m != nil { - return m.Id +func (x *NsStatResponse) GetMemShare() uint64 { + if x != nil { + return x.MemShare } - return nil + return 0 } -func (m *NSRequest_MkdirRequest) GetRecursive() bool { - if m != nil { - return m.Recursive +func (x *NsStatResponse) GetMemGrowth() uint64 { + if x != nil { + return x.MemGrowth } - return false + return 0 } -func (m *NSRequest_MkdirRequest) GetMode() int64 { - if m != nil { - return m.Mode +func (x *NsStatResponse) GetThreads() uint64 { + if x != nil { + return x.Threads } return 0 } -type NSRequest_RmdirRequest struct { - Id *MDId `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` +func (x *NsStatResponse) GetFds() uint64 { + if x != nil { + return x.Fds + } + return 0 } -func (m *NSRequest_RmdirRequest) Reset() { *m = NSRequest_RmdirRequest{} } -func (m *NSRequest_RmdirRequest) String() string { return proto.CompactTextString(m) } -func (*NSRequest_RmdirRequest) ProtoMessage() {} -func (*NSRequest_RmdirRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_979aee4989bceb08, []int{20, 1} +func (x *NsStatResponse) GetUptime() uint64 { + if x != nil { + return x.Uptime + } + return 0 } -func (m *NSRequest_RmdirRequest) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_NSRequest_RmdirRequest.Unmarshal(m, b) +type ManilaRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + RequestType MANILA_REQUEST_TYPE `protobuf:"varint,1,opt,name=request_type,json=requestType,proto3,enum=eos.rpc.MANILA_REQUEST_TYPE" json:"request_type,omitempty"` + AuthKey string `protobuf:"bytes,2,opt,name=auth_key,json=authKey,proto3" json:"auth_key,omitempty"` + Protocol string `protobuf:"bytes,3,opt,name=protocol,proto3" json:"protocol,omitempty"` + ShareName string `protobuf:"bytes,4,opt,name=share_name,json=shareName,proto3" json:"share_name,omitempty"` + Description string `protobuf:"bytes,5,opt,name=description,proto3" json:"description,omitempty"` + ShareId string `protobuf:"bytes,6,opt,name=share_id,json=shareId,proto3" json:"share_id,omitempty"` + ShareGroupId string `protobuf:"bytes,7,opt,name=share_group_id,json=shareGroupId,proto3" json:"share_group_id,omitempty"` + Quota int32 `protobuf:"varint,8,opt,name=quota,proto3" json:"quota,omitempty"` + Creator string `protobuf:"bytes,9,opt,name=creator,proto3" json:"creator,omitempty"` + Egroup string `protobuf:"bytes,10,opt,name=egroup,proto3" json:"egroup,omitempty"` + AdminEgroup string `protobuf:"bytes,11,opt,name=admin_egroup,json=adminEgroup,proto3" json:"admin_egroup,omitempty"` + ShareHost string `protobuf:"bytes,12,opt,name=share_host,json=shareHost,proto3" json:"share_host,omitempty"` + ShareLocation string `protobuf:"bytes,13,opt,name=share_location,json=shareLocation,proto3" json:"share_location,omitempty"` } -func (m *NSRequest_RmdirRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_NSRequest_RmdirRequest.Marshal(b, m, deterministic) + +func (x *ManilaRequest) Reset() { + *x = ManilaRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_Rpc_proto_msgTypes[24] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } } -func (m *NSRequest_RmdirRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_NSRequest_RmdirRequest.Merge(m, src) + +func (x *ManilaRequest) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *NSRequest_RmdirRequest) XXX_Size() int { - return xxx_messageInfo_NSRequest_RmdirRequest.Size(m) + +func (*ManilaRequest) ProtoMessage() {} + +func (x *ManilaRequest) ProtoReflect() protoreflect.Message { + mi := &file_Rpc_proto_msgTypes[24] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) } -func (m *NSRequest_RmdirRequest) XXX_DiscardUnknown() { - xxx_messageInfo_NSRequest_RmdirRequest.DiscardUnknown(m) + +// Deprecated: Use ManilaRequest.ProtoReflect.Descriptor instead. +func (*ManilaRequest) Descriptor() ([]byte, []int) { + return file_Rpc_proto_rawDescGZIP(), []int{24} } -var xxx_messageInfo_NSRequest_RmdirRequest proto.InternalMessageInfo +func (x *ManilaRequest) GetRequestType() MANILA_REQUEST_TYPE { + if x != nil { + return x.RequestType + } + return MANILA_REQUEST_TYPE_CREATE_SHARE +} -func (m *NSRequest_RmdirRequest) GetId() *MDId { - if m != nil { - return m.Id +func (x *ManilaRequest) GetAuthKey() string { + if x != nil { + return x.AuthKey } - return nil + return "" } -type NSRequest_TouchRequest struct { - Id *MDId `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` +func (x *ManilaRequest) GetProtocol() string { + if x != nil { + return x.Protocol + } + return "" } -func (m *NSRequest_TouchRequest) Reset() { *m = NSRequest_TouchRequest{} } -func (m *NSRequest_TouchRequest) String() string { return proto.CompactTextString(m) } -func (*NSRequest_TouchRequest) ProtoMessage() {} -func (*NSRequest_TouchRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_979aee4989bceb08, []int{20, 2} +func (x *ManilaRequest) GetShareName() string { + if x != nil { + return x.ShareName + } + return "" } -func (m *NSRequest_TouchRequest) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_NSRequest_TouchRequest.Unmarshal(m, b) +func (x *ManilaRequest) GetDescription() string { + if x != nil { + return x.Description + } + return "" } -func (m *NSRequest_TouchRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_NSRequest_TouchRequest.Marshal(b, m, deterministic) + +func (x *ManilaRequest) GetShareId() string { + if x != nil { + return x.ShareId + } + return "" } -func (m *NSRequest_TouchRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_NSRequest_TouchRequest.Merge(m, src) + +func (x *ManilaRequest) GetShareGroupId() string { + if x != nil { + return x.ShareGroupId + } + return "" } -func (m *NSRequest_TouchRequest) XXX_Size() int { - return xxx_messageInfo_NSRequest_TouchRequest.Size(m) + +func (x *ManilaRequest) GetQuota() int32 { + if x != nil { + return x.Quota + } + return 0 } -func (m *NSRequest_TouchRequest) XXX_DiscardUnknown() { - xxx_messageInfo_NSRequest_TouchRequest.DiscardUnknown(m) + +func (x *ManilaRequest) GetCreator() string { + if x != nil { + return x.Creator + } + return "" } -var xxx_messageInfo_NSRequest_TouchRequest proto.InternalMessageInfo +func (x *ManilaRequest) GetEgroup() string { + if x != nil { + return x.Egroup + } + return "" +} -func (m *NSRequest_TouchRequest) GetId() *MDId { - if m != nil { - return m.Id +func (x *ManilaRequest) GetAdminEgroup() string { + if x != nil { + return x.AdminEgroup } - return nil + return "" } -type NSRequest_UnlinkRequest struct { - Id *MDId `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` - Norecycle bool `protobuf:"varint,3,opt,name=norecycle,proto3" json:"norecycle,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` +func (x *ManilaRequest) GetShareHost() string { + if x != nil { + return x.ShareHost + } + return "" } -func (m *NSRequest_UnlinkRequest) Reset() { *m = NSRequest_UnlinkRequest{} } -func (m *NSRequest_UnlinkRequest) String() string { return proto.CompactTextString(m) } -func (*NSRequest_UnlinkRequest) ProtoMessage() {} -func (*NSRequest_UnlinkRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_979aee4989bceb08, []int{20, 3} +func (x *ManilaRequest) GetShareLocation() string { + if x != nil { + return x.ShareLocation + } + return "" } -func (m *NSRequest_UnlinkRequest) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_NSRequest_UnlinkRequest.Unmarshal(m, b) +type ManilaResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Msg string `protobuf:"bytes,1,opt,name=msg,proto3" json:"msg,omitempty"` //for generic messages + Code int32 `protobuf:"varint,2,opt,name=code,proto3" json:"code,omitempty"` // < 1 is an error -- > 1 is OK + TotalUsed int64 `protobuf:"varint,3,opt,name=total_used,json=totalUsed,proto3" json:"total_used,omitempty"` + TotalCapacity int64 `protobuf:"varint,4,opt,name=total_capacity,json=totalCapacity,proto3" json:"total_capacity,omitempty"` + NewShareQuota int64 `protobuf:"varint,5,opt,name=new_share_quota,json=newShareQuota,proto3" json:"new_share_quota,omitempty"` + NewSharePath string `protobuf:"bytes,6,opt,name=new_share_path,json=newSharePath,proto3" json:"new_share_path,omitempty"` } -func (m *NSRequest_UnlinkRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_NSRequest_UnlinkRequest.Marshal(b, m, deterministic) + +func (x *ManilaResponse) Reset() { + *x = ManilaResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_Rpc_proto_msgTypes[25] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } } -func (m *NSRequest_UnlinkRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_NSRequest_UnlinkRequest.Merge(m, src) + +func (x *ManilaResponse) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *NSRequest_UnlinkRequest) XXX_Size() int { - return xxx_messageInfo_NSRequest_UnlinkRequest.Size(m) + +func (*ManilaResponse) ProtoMessage() {} + +func (x *ManilaResponse) ProtoReflect() protoreflect.Message { + mi := &file_Rpc_proto_msgTypes[25] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) } -func (m *NSRequest_UnlinkRequest) XXX_DiscardUnknown() { - xxx_messageInfo_NSRequest_UnlinkRequest.DiscardUnknown(m) + +// Deprecated: Use ManilaResponse.ProtoReflect.Descriptor instead. +func (*ManilaResponse) Descriptor() ([]byte, []int) { + return file_Rpc_proto_rawDescGZIP(), []int{25} } -var xxx_messageInfo_NSRequest_UnlinkRequest proto.InternalMessageInfo +func (x *ManilaResponse) GetMsg() string { + if x != nil { + return x.Msg + } + return "" +} -func (m *NSRequest_UnlinkRequest) GetId() *MDId { - if m != nil { - return m.Id +func (x *ManilaResponse) GetCode() int32 { + if x != nil { + return x.Code } - return nil + return 0 } -func (m *NSRequest_UnlinkRequest) GetNorecycle() bool { - if m != nil { - return m.Norecycle +func (x *ManilaResponse) GetTotalUsed() int64 { + if x != nil { + return x.TotalUsed } - return false + return 0 } -type NSRequest_RmRequest struct { - Id *MDId `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` - Recursive bool `protobuf:"varint,2,opt,name=recursive,proto3" json:"recursive,omitempty"` - Norecycle bool `protobuf:"varint,3,opt,name=norecycle,proto3" json:"norecycle,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` +func (x *ManilaResponse) GetTotalCapacity() int64 { + if x != nil { + return x.TotalCapacity + } + return 0 } -func (m *NSRequest_RmRequest) Reset() { *m = NSRequest_RmRequest{} } -func (m *NSRequest_RmRequest) String() string { return proto.CompactTextString(m) } -func (*NSRequest_RmRequest) ProtoMessage() {} -func (*NSRequest_RmRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_979aee4989bceb08, []int{20, 4} +func (x *ManilaResponse) GetNewShareQuota() int64 { + if x != nil { + return x.NewShareQuota + } + return 0 } -func (m *NSRequest_RmRequest) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_NSRequest_RmRequest.Unmarshal(m, b) +func (x *ManilaResponse) GetNewSharePath() string { + if x != nil { + return x.NewSharePath + } + return "" } -func (m *NSRequest_RmRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_NSRequest_RmRequest.Marshal(b, m, deterministic) + +type NSRequest_MkdirRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Id *MDId `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + Recursive bool `protobuf:"varint,2,opt,name=recursive,proto3" json:"recursive,omitempty"` + Mode int64 `protobuf:"varint,3,opt,name=mode,proto3" json:"mode,omitempty"` } -func (m *NSRequest_RmRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_NSRequest_RmRequest.Merge(m, src) + +func (x *NSRequest_MkdirRequest) Reset() { + *x = NSRequest_MkdirRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_Rpc_proto_msgTypes[29] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } } -func (m *NSRequest_RmRequest) XXX_Size() int { - return xxx_messageInfo_NSRequest_RmRequest.Size(m) + +func (x *NSRequest_MkdirRequest) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *NSRequest_RmRequest) XXX_DiscardUnknown() { - xxx_messageInfo_NSRequest_RmRequest.DiscardUnknown(m) + +func (*NSRequest_MkdirRequest) ProtoMessage() {} + +func (x *NSRequest_MkdirRequest) ProtoReflect() protoreflect.Message { + mi := &file_Rpc_proto_msgTypes[29] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) } -var xxx_messageInfo_NSRequest_RmRequest proto.InternalMessageInfo +// Deprecated: Use NSRequest_MkdirRequest.ProtoReflect.Descriptor instead. +func (*NSRequest_MkdirRequest) Descriptor() ([]byte, []int) { + return file_Rpc_proto_rawDescGZIP(), []int{20, 0} +} -func (m *NSRequest_RmRequest) GetId() *MDId { - if m != nil { - return m.Id +func (x *NSRequest_MkdirRequest) GetId() *MDId { + if x != nil { + return x.Id } return nil } -func (m *NSRequest_RmRequest) GetRecursive() bool { - if m != nil { - return m.Recursive +func (x *NSRequest_MkdirRequest) GetRecursive() bool { + if x != nil { + return x.Recursive } return false } -func (m *NSRequest_RmRequest) GetNorecycle() bool { - if m != nil { - return m.Norecycle +func (x *NSRequest_MkdirRequest) GetMode() int64 { + if x != nil { + return x.Mode } - return false + return 0 } -type NSRequest_RenameRequest struct { - Id *MDId `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` - Target []byte `protobuf:"bytes,2,opt,name=target,proto3" json:"target,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} +type NSRequest_RmdirRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields -func (m *NSRequest_RenameRequest) Reset() { *m = NSRequest_RenameRequest{} } -func (m *NSRequest_RenameRequest) String() string { return proto.CompactTextString(m) } -func (*NSRequest_RenameRequest) ProtoMessage() {} -func (*NSRequest_RenameRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_979aee4989bceb08, []int{20, 5} + Id *MDId `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` } -func (m *NSRequest_RenameRequest) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_NSRequest_RenameRequest.Unmarshal(m, b) -} -func (m *NSRequest_RenameRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_NSRequest_RenameRequest.Marshal(b, m, deterministic) -} -func (m *NSRequest_RenameRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_NSRequest_RenameRequest.Merge(m, src) +func (x *NSRequest_RmdirRequest) Reset() { + *x = NSRequest_RmdirRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_Rpc_proto_msgTypes[30] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } } -func (m *NSRequest_RenameRequest) XXX_Size() int { - return xxx_messageInfo_NSRequest_RenameRequest.Size(m) + +func (x *NSRequest_RmdirRequest) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *NSRequest_RenameRequest) XXX_DiscardUnknown() { - xxx_messageInfo_NSRequest_RenameRequest.DiscardUnknown(m) + +func (*NSRequest_RmdirRequest) ProtoMessage() {} + +func (x *NSRequest_RmdirRequest) ProtoReflect() protoreflect.Message { + mi := &file_Rpc_proto_msgTypes[30] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) } -var xxx_messageInfo_NSRequest_RenameRequest proto.InternalMessageInfo +// Deprecated: Use NSRequest_RmdirRequest.ProtoReflect.Descriptor instead. +func (*NSRequest_RmdirRequest) Descriptor() ([]byte, []int) { + return file_Rpc_proto_rawDescGZIP(), []int{20, 1} +} -func (m *NSRequest_RenameRequest) GetId() *MDId { - if m != nil { - return m.Id +func (x *NSRequest_RmdirRequest) GetId() *MDId { + if x != nil { + return x.Id } return nil } -func (m *NSRequest_RenameRequest) GetTarget() []byte { - if m != nil { - return m.Target +type NSRequest_TouchRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Id *MDId `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` +} + +func (x *NSRequest_TouchRequest) Reset() { + *x = NSRequest_TouchRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_Rpc_proto_msgTypes[31] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } - return nil } -type NSRequest_SymlinkRequest struct { - Id *MDId `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` - Target []byte `protobuf:"bytes,2,opt,name=target,proto3" json:"target,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` +func (x *NSRequest_TouchRequest) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *NSRequest_SymlinkRequest) Reset() { *m = NSRequest_SymlinkRequest{} } -func (m *NSRequest_SymlinkRequest) String() string { return proto.CompactTextString(m) } -func (*NSRequest_SymlinkRequest) ProtoMessage() {} -func (*NSRequest_SymlinkRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_979aee4989bceb08, []int{20, 6} +func (*NSRequest_TouchRequest) ProtoMessage() {} + +func (x *NSRequest_TouchRequest) ProtoReflect() protoreflect.Message { + mi := &file_Rpc_proto_msgTypes[31] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) } -func (m *NSRequest_SymlinkRequest) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_NSRequest_SymlinkRequest.Unmarshal(m, b) +// Deprecated: Use NSRequest_TouchRequest.ProtoReflect.Descriptor instead. +func (*NSRequest_TouchRequest) Descriptor() ([]byte, []int) { + return file_Rpc_proto_rawDescGZIP(), []int{20, 2} } -func (m *NSRequest_SymlinkRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_NSRequest_SymlinkRequest.Marshal(b, m, deterministic) + +func (x *NSRequest_TouchRequest) GetId() *MDId { + if x != nil { + return x.Id + } + return nil } -func (m *NSRequest_SymlinkRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_NSRequest_SymlinkRequest.Merge(m, src) + +type NSRequest_UnlinkRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Id *MDId `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + Norecycle bool `protobuf:"varint,3,opt,name=norecycle,proto3" json:"norecycle,omitempty"` } -func (m *NSRequest_SymlinkRequest) XXX_Size() int { - return xxx_messageInfo_NSRequest_SymlinkRequest.Size(m) + +func (x *NSRequest_UnlinkRequest) Reset() { + *x = NSRequest_UnlinkRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_Rpc_proto_msgTypes[32] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } } -func (m *NSRequest_SymlinkRequest) XXX_DiscardUnknown() { - xxx_messageInfo_NSRequest_SymlinkRequest.DiscardUnknown(m) + +func (x *NSRequest_UnlinkRequest) String() string { + return protoimpl.X.MessageStringOf(x) } -var xxx_messageInfo_NSRequest_SymlinkRequest proto.InternalMessageInfo +func (*NSRequest_UnlinkRequest) ProtoMessage() {} -func (m *NSRequest_SymlinkRequest) GetId() *MDId { - if m != nil { - return m.Id +func (x *NSRequest_UnlinkRequest) ProtoReflect() protoreflect.Message { + mi := &file_Rpc_proto_msgTypes[32] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms } - return nil + return mi.MessageOf(x) } -func (m *NSRequest_SymlinkRequest) GetTarget() []byte { - if m != nil { - return m.Target +// Deprecated: Use NSRequest_UnlinkRequest.ProtoReflect.Descriptor instead. +func (*NSRequest_UnlinkRequest) Descriptor() ([]byte, []int) { + return file_Rpc_proto_rawDescGZIP(), []int{20, 3} +} + +func (x *NSRequest_UnlinkRequest) GetId() *MDId { + if x != nil { + return x.Id } return nil } -type NSRequest_VersionRequest struct { - Id *MDId `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` - Cmd NSRequest_VersionRequest_VERSION_CMD `protobuf:"varint,2,opt,name=cmd,proto3,enum=eos.rpc.NSRequest_VersionRequest_VERSION_CMD" json:"cmd,omitempty"` - Maxversion int32 `protobuf:"varint,3,opt,name=maxversion,proto3" json:"maxversion,omitempty"` - Grabversion string `protobuf:"bytes,4,opt,name=grabversion,proto3" json:"grabversion,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *NSRequest_VersionRequest) Reset() { *m = NSRequest_VersionRequest{} } -func (m *NSRequest_VersionRequest) String() string { return proto.CompactTextString(m) } -func (*NSRequest_VersionRequest) ProtoMessage() {} -func (*NSRequest_VersionRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_979aee4989bceb08, []int{20, 7} +func (x *NSRequest_UnlinkRequest) GetNorecycle() bool { + if x != nil { + return x.Norecycle + } + return false } -func (m *NSRequest_VersionRequest) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_NSRequest_VersionRequest.Unmarshal(m, b) -} -func (m *NSRequest_VersionRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_NSRequest_VersionRequest.Marshal(b, m, deterministic) -} -func (m *NSRequest_VersionRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_NSRequest_VersionRequest.Merge(m, src) +type NSRequest_RmRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Id *MDId `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + Recursive bool `protobuf:"varint,2,opt,name=recursive,proto3" json:"recursive,omitempty"` + Norecycle bool `protobuf:"varint,3,opt,name=norecycle,proto3" json:"norecycle,omitempty"` } -func (m *NSRequest_VersionRequest) XXX_Size() int { - return xxx_messageInfo_NSRequest_VersionRequest.Size(m) + +func (x *NSRequest_RmRequest) Reset() { + *x = NSRequest_RmRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_Rpc_proto_msgTypes[33] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } } -func (m *NSRequest_VersionRequest) XXX_DiscardUnknown() { - xxx_messageInfo_NSRequest_VersionRequest.DiscardUnknown(m) + +func (x *NSRequest_RmRequest) String() string { + return protoimpl.X.MessageStringOf(x) } -var xxx_messageInfo_NSRequest_VersionRequest proto.InternalMessageInfo +func (*NSRequest_RmRequest) ProtoMessage() {} -func (m *NSRequest_VersionRequest) GetId() *MDId { - if m != nil { - return m.Id +func (x *NSRequest_RmRequest) ProtoReflect() protoreflect.Message { + mi := &file_Rpc_proto_msgTypes[33] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms } - return nil + return mi.MessageOf(x) } -func (m *NSRequest_VersionRequest) GetCmd() NSRequest_VersionRequest_VERSION_CMD { - if m != nil { - return m.Cmd - } - return NSRequest_VersionRequest_CREATE +// Deprecated: Use NSRequest_RmRequest.ProtoReflect.Descriptor instead. +func (*NSRequest_RmRequest) Descriptor() ([]byte, []int) { + return file_Rpc_proto_rawDescGZIP(), []int{20, 4} } -func (m *NSRequest_VersionRequest) GetMaxversion() int32 { - if m != nil { - return m.Maxversion +func (x *NSRequest_RmRequest) GetId() *MDId { + if x != nil { + return x.Id } - return 0 + return nil } -func (m *NSRequest_VersionRequest) GetGrabversion() string { - if m != nil { - return m.Grabversion +func (x *NSRequest_RmRequest) GetRecursive() bool { + if x != nil { + return x.Recursive } - return "" + return false } -type NSRequest_RecycleRequest struct { - Key string `protobuf:"bytes,1,opt,name=key,proto3" json:"key,omitempty"` - Cmd NSRequest_RecycleRequest_RECYCLE_CMD `protobuf:"varint,2,opt,name=cmd,proto3,enum=eos.rpc.NSRequest_RecycleRequest_RECYCLE_CMD" json:"cmd,omitempty"` - Restoreflag *NSRequest_RecycleRequest_RestoreFlags `protobuf:"bytes,3,opt,name=restoreflag,proto3" json:"restoreflag,omitempty"` - Purgedate *NSRequest_RecycleRequest_PurgeDate `protobuf:"bytes,4,opt,name=purgedate,proto3" json:"purgedate,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *NSRequest_RecycleRequest) Reset() { *m = NSRequest_RecycleRequest{} } -func (m *NSRequest_RecycleRequest) String() string { return proto.CompactTextString(m) } -func (*NSRequest_RecycleRequest) ProtoMessage() {} -func (*NSRequest_RecycleRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_979aee4989bceb08, []int{20, 8} +func (x *NSRequest_RmRequest) GetNorecycle() bool { + if x != nil { + return x.Norecycle + } + return false } -func (m *NSRequest_RecycleRequest) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_NSRequest_RecycleRequest.Unmarshal(m, b) -} -func (m *NSRequest_RecycleRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_NSRequest_RecycleRequest.Marshal(b, m, deterministic) -} -func (m *NSRequest_RecycleRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_NSRequest_RecycleRequest.Merge(m, src) +type NSRequest_RenameRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Id *MDId `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + Target []byte `protobuf:"bytes,2,opt,name=target,proto3" json:"target,omitempty"` } -func (m *NSRequest_RecycleRequest) XXX_Size() int { - return xxx_messageInfo_NSRequest_RecycleRequest.Size(m) + +func (x *NSRequest_RenameRequest) Reset() { + *x = NSRequest_RenameRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_Rpc_proto_msgTypes[34] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } } -func (m *NSRequest_RecycleRequest) XXX_DiscardUnknown() { - xxx_messageInfo_NSRequest_RecycleRequest.DiscardUnknown(m) + +func (x *NSRequest_RenameRequest) String() string { + return protoimpl.X.MessageStringOf(x) } -var xxx_messageInfo_NSRequest_RecycleRequest proto.InternalMessageInfo +func (*NSRequest_RenameRequest) ProtoMessage() {} -func (m *NSRequest_RecycleRequest) GetKey() string { - if m != nil { - return m.Key +func (x *NSRequest_RenameRequest) ProtoReflect() protoreflect.Message { + mi := &file_Rpc_proto_msgTypes[34] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms } - return "" + return mi.MessageOf(x) } -func (m *NSRequest_RecycleRequest) GetCmd() NSRequest_RecycleRequest_RECYCLE_CMD { - if m != nil { - return m.Cmd - } - return NSRequest_RecycleRequest_RESTORE +// Deprecated: Use NSRequest_RenameRequest.ProtoReflect.Descriptor instead. +func (*NSRequest_RenameRequest) Descriptor() ([]byte, []int) { + return file_Rpc_proto_rawDescGZIP(), []int{20, 5} } -func (m *NSRequest_RecycleRequest) GetRestoreflag() *NSRequest_RecycleRequest_RestoreFlags { - if m != nil { - return m.Restoreflag +func (x *NSRequest_RenameRequest) GetId() *MDId { + if x != nil { + return x.Id } return nil } -func (m *NSRequest_RecycleRequest) GetPurgedate() *NSRequest_RecycleRequest_PurgeDate { - if m != nil { - return m.Purgedate +func (x *NSRequest_RenameRequest) GetTarget() []byte { + if x != nil { + return x.Target } return nil } -type NSRequest_RecycleRequest_RestoreFlags struct { - Force bool `protobuf:"varint,1,opt,name=force,proto3" json:"force,omitempty"` - Mkpath bool `protobuf:"varint,2,opt,name=mkpath,proto3" json:"mkpath,omitempty"` - Versions bool `protobuf:"varint,3,opt,name=versions,proto3" json:"versions,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` +type NSRequest_SymlinkRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Id *MDId `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + Target []byte `protobuf:"bytes,2,opt,name=target,proto3" json:"target,omitempty"` } -func (m *NSRequest_RecycleRequest_RestoreFlags) Reset() { *m = NSRequest_RecycleRequest_RestoreFlags{} } -func (m *NSRequest_RecycleRequest_RestoreFlags) String() string { return proto.CompactTextString(m) } -func (*NSRequest_RecycleRequest_RestoreFlags) ProtoMessage() {} -func (*NSRequest_RecycleRequest_RestoreFlags) Descriptor() ([]byte, []int) { - return fileDescriptor_979aee4989bceb08, []int{20, 8, 0} +func (x *NSRequest_SymlinkRequest) Reset() { + *x = NSRequest_SymlinkRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_Rpc_proto_msgTypes[35] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *NSRequest_SymlinkRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*NSRequest_SymlinkRequest) ProtoMessage() {} + +func (x *NSRequest_SymlinkRequest) ProtoReflect() protoreflect.Message { + mi := &file_Rpc_proto_msgTypes[35] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use NSRequest_SymlinkRequest.ProtoReflect.Descriptor instead. +func (*NSRequest_SymlinkRequest) Descriptor() ([]byte, []int) { + return file_Rpc_proto_rawDescGZIP(), []int{20, 6} } -func (m *NSRequest_RecycleRequest_RestoreFlags) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_NSRequest_RecycleRequest_RestoreFlags.Unmarshal(m, b) +func (x *NSRequest_SymlinkRequest) GetId() *MDId { + if x != nil { + return x.Id + } + return nil } -func (m *NSRequest_RecycleRequest_RestoreFlags) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_NSRequest_RecycleRequest_RestoreFlags.Marshal(b, m, deterministic) + +func (x *NSRequest_SymlinkRequest) GetTarget() []byte { + if x != nil { + return x.Target + } + return nil } -func (m *NSRequest_RecycleRequest_RestoreFlags) XXX_Merge(src proto.Message) { - xxx_messageInfo_NSRequest_RecycleRequest_RestoreFlags.Merge(m, src) + +type NSRequest_VersionRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Id *MDId `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + Cmd NSRequest_VersionRequest_VERSION_CMD `protobuf:"varint,2,opt,name=cmd,proto3,enum=eos.rpc.NSRequest_VersionRequest_VERSION_CMD" json:"cmd,omitempty"` + Maxversion int32 `protobuf:"varint,3,opt,name=maxversion,proto3" json:"maxversion,omitempty"` + Grabversion string `protobuf:"bytes,4,opt,name=grabversion,proto3" json:"grabversion,omitempty"` } -func (m *NSRequest_RecycleRequest_RestoreFlags) XXX_Size() int { - return xxx_messageInfo_NSRequest_RecycleRequest_RestoreFlags.Size(m) + +func (x *NSRequest_VersionRequest) Reset() { + *x = NSRequest_VersionRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_Rpc_proto_msgTypes[36] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } } -func (m *NSRequest_RecycleRequest_RestoreFlags) XXX_DiscardUnknown() { - xxx_messageInfo_NSRequest_RecycleRequest_RestoreFlags.DiscardUnknown(m) + +func (x *NSRequest_VersionRequest) String() string { + return protoimpl.X.MessageStringOf(x) } -var xxx_messageInfo_NSRequest_RecycleRequest_RestoreFlags proto.InternalMessageInfo +func (*NSRequest_VersionRequest) ProtoMessage() {} -func (m *NSRequest_RecycleRequest_RestoreFlags) GetForce() bool { - if m != nil { - return m.Force +func (x *NSRequest_VersionRequest) ProtoReflect() protoreflect.Message { + mi := &file_Rpc_proto_msgTypes[36] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms } - return false + return mi.MessageOf(x) } -func (m *NSRequest_RecycleRequest_RestoreFlags) GetMkpath() bool { - if m != nil { - return m.Mkpath +// Deprecated: Use NSRequest_VersionRequest.ProtoReflect.Descriptor instead. +func (*NSRequest_VersionRequest) Descriptor() ([]byte, []int) { + return file_Rpc_proto_rawDescGZIP(), []int{20, 7} +} + +func (x *NSRequest_VersionRequest) GetId() *MDId { + if x != nil { + return x.Id } - return false + return nil } -func (m *NSRequest_RecycleRequest_RestoreFlags) GetVersions() bool { - if m != nil { - return m.Versions +func (x *NSRequest_VersionRequest) GetCmd() NSRequest_VersionRequest_VERSION_CMD { + if x != nil { + return x.Cmd } - return false + return NSRequest_VersionRequest_CREATE } -type NSRequest_RecycleRequest_PurgeDate struct { - Year int32 `protobuf:"varint,1,opt,name=year,proto3" json:"year,omitempty"` - Month int32 `protobuf:"varint,2,opt,name=month,proto3" json:"month,omitempty"` - Day int32 `protobuf:"varint,3,opt,name=day,proto3" json:"day,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` +func (x *NSRequest_VersionRequest) GetMaxversion() int32 { + if x != nil { + return x.Maxversion + } + return 0 } -func (m *NSRequest_RecycleRequest_PurgeDate) Reset() { *m = NSRequest_RecycleRequest_PurgeDate{} } -func (m *NSRequest_RecycleRequest_PurgeDate) String() string { return proto.CompactTextString(m) } -func (*NSRequest_RecycleRequest_PurgeDate) ProtoMessage() {} -func (*NSRequest_RecycleRequest_PurgeDate) Descriptor() ([]byte, []int) { - return fileDescriptor_979aee4989bceb08, []int{20, 8, 1} +func (x *NSRequest_VersionRequest) GetGrabversion() string { + if x != nil { + return x.Grabversion + } + return "" } -func (m *NSRequest_RecycleRequest_PurgeDate) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_NSRequest_RecycleRequest_PurgeDate.Unmarshal(m, b) +type NSRequest_RecycleRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Key string `protobuf:"bytes,1,opt,name=key,proto3" json:"key,omitempty"` + Cmd NSRequest_RecycleRequest_RECYCLE_CMD `protobuf:"varint,2,opt,name=cmd,proto3,enum=eos.rpc.NSRequest_RecycleRequest_RECYCLE_CMD" json:"cmd,omitempty"` + Restoreflag *NSRequest_RecycleRequest_RestoreFlags `protobuf:"bytes,3,opt,name=restoreflag,proto3" json:"restoreflag,omitempty"` + Purgedate *NSRequest_RecycleRequest_PurgeDate `protobuf:"bytes,4,opt,name=purgedate,proto3" json:"purgedate,omitempty"` } -func (m *NSRequest_RecycleRequest_PurgeDate) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_NSRequest_RecycleRequest_PurgeDate.Marshal(b, m, deterministic) + +func (x *NSRequest_RecycleRequest) Reset() { + *x = NSRequest_RecycleRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_Rpc_proto_msgTypes[37] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } } -func (m *NSRequest_RecycleRequest_PurgeDate) XXX_Merge(src proto.Message) { - xxx_messageInfo_NSRequest_RecycleRequest_PurgeDate.Merge(m, src) + +func (x *NSRequest_RecycleRequest) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *NSRequest_RecycleRequest_PurgeDate) XXX_Size() int { - return xxx_messageInfo_NSRequest_RecycleRequest_PurgeDate.Size(m) + +func (*NSRequest_RecycleRequest) ProtoMessage() {} + +func (x *NSRequest_RecycleRequest) ProtoReflect() protoreflect.Message { + mi := &file_Rpc_proto_msgTypes[37] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) } -func (m *NSRequest_RecycleRequest_PurgeDate) XXX_DiscardUnknown() { - xxx_messageInfo_NSRequest_RecycleRequest_PurgeDate.DiscardUnknown(m) + +// Deprecated: Use NSRequest_RecycleRequest.ProtoReflect.Descriptor instead. +func (*NSRequest_RecycleRequest) Descriptor() ([]byte, []int) { + return file_Rpc_proto_rawDescGZIP(), []int{20, 8} } -var xxx_messageInfo_NSRequest_RecycleRequest_PurgeDate proto.InternalMessageInfo +func (x *NSRequest_RecycleRequest) GetKey() string { + if x != nil { + return x.Key + } + return "" +} -func (m *NSRequest_RecycleRequest_PurgeDate) GetYear() int32 { - if m != nil { - return m.Year +func (x *NSRequest_RecycleRequest) GetCmd() NSRequest_RecycleRequest_RECYCLE_CMD { + if x != nil { + return x.Cmd } - return 0 + return NSRequest_RecycleRequest_RESTORE } -func (m *NSRequest_RecycleRequest_PurgeDate) GetMonth() int32 { - if m != nil { - return m.Month +func (x *NSRequest_RecycleRequest) GetRestoreflag() *NSRequest_RecycleRequest_RestoreFlags { + if x != nil { + return x.Restoreflag } - return 0 + return nil } -func (m *NSRequest_RecycleRequest_PurgeDate) GetDay() int32 { - if m != nil { - return m.Day +func (x *NSRequest_RecycleRequest) GetPurgedate() *NSRequest_RecycleRequest_PurgeDate { + if x != nil { + return x.Purgedate } - return 0 + return nil } type NSRequest_SetXAttrRequest struct { - Id *MDId `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` - Xattrs map[string][]byte `protobuf:"bytes,2,rep,name=xattrs,proto3" json:"xattrs,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` - Recursive bool `protobuf:"varint,3,opt,name=recursive,proto3" json:"recursive,omitempty"` - Keystodelete []string `protobuf:"bytes,4,rep,name=keystodelete,proto3" json:"keystodelete,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *NSRequest_SetXAttrRequest) Reset() { *m = NSRequest_SetXAttrRequest{} } -func (m *NSRequest_SetXAttrRequest) String() string { return proto.CompactTextString(m) } -func (*NSRequest_SetXAttrRequest) ProtoMessage() {} -func (*NSRequest_SetXAttrRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_979aee4989bceb08, []int{20, 9} -} + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields -func (m *NSRequest_SetXAttrRequest) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_NSRequest_SetXAttrRequest.Unmarshal(m, b) + Id *MDId `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + Xattrs map[string][]byte `protobuf:"bytes,2,rep,name=xattrs,proto3" json:"xattrs,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + Recursive bool `protobuf:"varint,3,opt,name=recursive,proto3" json:"recursive,omitempty"` + Keystodelete []string `protobuf:"bytes,4,rep,name=keystodelete,proto3" json:"keystodelete,omitempty"` + Create bool `protobuf:"varint,5,opt,name=create,proto3" json:"create,omitempty"` } -func (m *NSRequest_SetXAttrRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_NSRequest_SetXAttrRequest.Marshal(b, m, deterministic) -} -func (m *NSRequest_SetXAttrRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_NSRequest_SetXAttrRequest.Merge(m, src) + +func (x *NSRequest_SetXAttrRequest) Reset() { + *x = NSRequest_SetXAttrRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_Rpc_proto_msgTypes[38] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } } -func (m *NSRequest_SetXAttrRequest) XXX_Size() int { - return xxx_messageInfo_NSRequest_SetXAttrRequest.Size(m) + +func (x *NSRequest_SetXAttrRequest) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *NSRequest_SetXAttrRequest) XXX_DiscardUnknown() { - xxx_messageInfo_NSRequest_SetXAttrRequest.DiscardUnknown(m) + +func (*NSRequest_SetXAttrRequest) ProtoMessage() {} + +func (x *NSRequest_SetXAttrRequest) ProtoReflect() protoreflect.Message { + mi := &file_Rpc_proto_msgTypes[38] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) } -var xxx_messageInfo_NSRequest_SetXAttrRequest proto.InternalMessageInfo +// Deprecated: Use NSRequest_SetXAttrRequest.ProtoReflect.Descriptor instead. +func (*NSRequest_SetXAttrRequest) Descriptor() ([]byte, []int) { + return file_Rpc_proto_rawDescGZIP(), []int{20, 9} +} -func (m *NSRequest_SetXAttrRequest) GetId() *MDId { - if m != nil { - return m.Id +func (x *NSRequest_SetXAttrRequest) GetId() *MDId { + if x != nil { + return x.Id } return nil } -func (m *NSRequest_SetXAttrRequest) GetXattrs() map[string][]byte { - if m != nil { - return m.Xattrs +func (x *NSRequest_SetXAttrRequest) GetXattrs() map[string][]byte { + if x != nil { + return x.Xattrs } return nil } -func (m *NSRequest_SetXAttrRequest) GetRecursive() bool { - if m != nil { - return m.Recursive +func (x *NSRequest_SetXAttrRequest) GetRecursive() bool { + if x != nil { + return x.Recursive } return false } -func (m *NSRequest_SetXAttrRequest) GetKeystodelete() []string { - if m != nil { - return m.Keystodelete +func (x *NSRequest_SetXAttrRequest) GetKeystodelete() []string { + if x != nil { + return x.Keystodelete } return nil } -type NSRequest_ChownRequest struct { - Id *MDId `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` - Owner *RoleId `protobuf:"bytes,2,opt,name=owner,proto3" json:"owner,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` +func (x *NSRequest_SetXAttrRequest) GetCreate() bool { + if x != nil { + return x.Create + } + return false } -func (m *NSRequest_ChownRequest) Reset() { *m = NSRequest_ChownRequest{} } -func (m *NSRequest_ChownRequest) String() string { return proto.CompactTextString(m) } -func (*NSRequest_ChownRequest) ProtoMessage() {} -func (*NSRequest_ChownRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_979aee4989bceb08, []int{20, 10} -} +type NSRequest_ChownRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields -func (m *NSRequest_ChownRequest) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_NSRequest_ChownRequest.Unmarshal(m, b) -} -func (m *NSRequest_ChownRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_NSRequest_ChownRequest.Marshal(b, m, deterministic) + Id *MDId `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + Owner *RoleId `protobuf:"bytes,2,opt,name=owner,proto3" json:"owner,omitempty"` } -func (m *NSRequest_ChownRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_NSRequest_ChownRequest.Merge(m, src) + +func (x *NSRequest_ChownRequest) Reset() { + *x = NSRequest_ChownRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_Rpc_proto_msgTypes[39] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } } -func (m *NSRequest_ChownRequest) XXX_Size() int { - return xxx_messageInfo_NSRequest_ChownRequest.Size(m) + +func (x *NSRequest_ChownRequest) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *NSRequest_ChownRequest) XXX_DiscardUnknown() { - xxx_messageInfo_NSRequest_ChownRequest.DiscardUnknown(m) + +func (*NSRequest_ChownRequest) ProtoMessage() {} + +func (x *NSRequest_ChownRequest) ProtoReflect() protoreflect.Message { + mi := &file_Rpc_proto_msgTypes[39] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) } -var xxx_messageInfo_NSRequest_ChownRequest proto.InternalMessageInfo +// Deprecated: Use NSRequest_ChownRequest.ProtoReflect.Descriptor instead. +func (*NSRequest_ChownRequest) Descriptor() ([]byte, []int) { + return file_Rpc_proto_rawDescGZIP(), []int{20, 10} +} -func (m *NSRequest_ChownRequest) GetId() *MDId { - if m != nil { - return m.Id +func (x *NSRequest_ChownRequest) GetId() *MDId { + if x != nil { + return x.Id } return nil } -func (m *NSRequest_ChownRequest) GetOwner() *RoleId { - if m != nil { - return m.Owner +func (x *NSRequest_ChownRequest) GetOwner() *RoleId { + if x != nil { + return x.Owner } return nil } type NSRequest_ChmodRequest struct { - Id *MDId `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` - Mode int64 `protobuf:"varint,2,opt,name=mode,proto3" json:"mode,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields -func (m *NSRequest_ChmodRequest) Reset() { *m = NSRequest_ChmodRequest{} } -func (m *NSRequest_ChmodRequest) String() string { return proto.CompactTextString(m) } -func (*NSRequest_ChmodRequest) ProtoMessage() {} -func (*NSRequest_ChmodRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_979aee4989bceb08, []int{20, 11} + Id *MDId `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + Mode int64 `protobuf:"varint,2,opt,name=mode,proto3" json:"mode,omitempty"` } -func (m *NSRequest_ChmodRequest) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_NSRequest_ChmodRequest.Unmarshal(m, b) -} -func (m *NSRequest_ChmodRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_NSRequest_ChmodRequest.Marshal(b, m, deterministic) -} -func (m *NSRequest_ChmodRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_NSRequest_ChmodRequest.Merge(m, src) +func (x *NSRequest_ChmodRequest) Reset() { + *x = NSRequest_ChmodRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_Rpc_proto_msgTypes[40] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } } -func (m *NSRequest_ChmodRequest) XXX_Size() int { - return xxx_messageInfo_NSRequest_ChmodRequest.Size(m) + +func (x *NSRequest_ChmodRequest) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *NSRequest_ChmodRequest) XXX_DiscardUnknown() { - xxx_messageInfo_NSRequest_ChmodRequest.DiscardUnknown(m) + +func (*NSRequest_ChmodRequest) ProtoMessage() {} + +func (x *NSRequest_ChmodRequest) ProtoReflect() protoreflect.Message { + mi := &file_Rpc_proto_msgTypes[40] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) } -var xxx_messageInfo_NSRequest_ChmodRequest proto.InternalMessageInfo +// Deprecated: Use NSRequest_ChmodRequest.ProtoReflect.Descriptor instead. +func (*NSRequest_ChmodRequest) Descriptor() ([]byte, []int) { + return file_Rpc_proto_rawDescGZIP(), []int{20, 11} +} -func (m *NSRequest_ChmodRequest) GetId() *MDId { - if m != nil { - return m.Id +func (x *NSRequest_ChmodRequest) GetId() *MDId { + if x != nil { + return x.Id } return nil } -func (m *NSRequest_ChmodRequest) GetMode() int64 { - if m != nil { - return m.Mode +func (x *NSRequest_ChmodRequest) GetMode() int64 { + if x != nil { + return x.Mode } return 0 } type NSRequest_AclRequest struct { - Id *MDId `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` - Cmd NSRequest_AclRequest_ACL_COMMAND `protobuf:"varint,2,opt,name=cmd,proto3,enum=eos.rpc.NSRequest_AclRequest_ACL_COMMAND" json:"cmd,omitempty"` - Recursive bool `protobuf:"varint,3,opt,name=recursive,proto3" json:"recursive,omitempty"` - Type NSRequest_AclRequest_ACL_TYPE `protobuf:"varint,4,opt,name=type,proto3,enum=eos.rpc.NSRequest_AclRequest_ACL_TYPE" json:"type,omitempty"` - Rule string `protobuf:"bytes,5,opt,name=rule,proto3" json:"rule,omitempty"` - Position uint32 `protobuf:"varint,6,opt,name=position,proto3" json:"position,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *NSRequest_AclRequest) Reset() { *m = NSRequest_AclRequest{} } -func (m *NSRequest_AclRequest) String() string { return proto.CompactTextString(m) } -func (*NSRequest_AclRequest) ProtoMessage() {} -func (*NSRequest_AclRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_979aee4989bceb08, []int{20, 12} -} + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields -func (m *NSRequest_AclRequest) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_NSRequest_AclRequest.Unmarshal(m, b) -} -func (m *NSRequest_AclRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_NSRequest_AclRequest.Marshal(b, m, deterministic) + Id *MDId `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + Cmd NSRequest_AclRequest_ACL_COMMAND `protobuf:"varint,2,opt,name=cmd,proto3,enum=eos.rpc.NSRequest_AclRequest_ACL_COMMAND" json:"cmd,omitempty"` + Recursive bool `protobuf:"varint,3,opt,name=recursive,proto3" json:"recursive,omitempty"` + Type NSRequest_AclRequest_ACL_TYPE `protobuf:"varint,4,opt,name=type,proto3,enum=eos.rpc.NSRequest_AclRequest_ACL_TYPE" json:"type,omitempty"` + Rule string `protobuf:"bytes,5,opt,name=rule,proto3" json:"rule,omitempty"` + Position uint32 `protobuf:"varint,6,opt,name=position,proto3" json:"position,omitempty"` } -func (m *NSRequest_AclRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_NSRequest_AclRequest.Merge(m, src) + +func (x *NSRequest_AclRequest) Reset() { + *x = NSRequest_AclRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_Rpc_proto_msgTypes[41] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } } -func (m *NSRequest_AclRequest) XXX_Size() int { - return xxx_messageInfo_NSRequest_AclRequest.Size(m) + +func (x *NSRequest_AclRequest) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *NSRequest_AclRequest) XXX_DiscardUnknown() { - xxx_messageInfo_NSRequest_AclRequest.DiscardUnknown(m) + +func (*NSRequest_AclRequest) ProtoMessage() {} + +func (x *NSRequest_AclRequest) ProtoReflect() protoreflect.Message { + mi := &file_Rpc_proto_msgTypes[41] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) } -var xxx_messageInfo_NSRequest_AclRequest proto.InternalMessageInfo +// Deprecated: Use NSRequest_AclRequest.ProtoReflect.Descriptor instead. +func (*NSRequest_AclRequest) Descriptor() ([]byte, []int) { + return file_Rpc_proto_rawDescGZIP(), []int{20, 12} +} -func (m *NSRequest_AclRequest) GetId() *MDId { - if m != nil { - return m.Id +func (x *NSRequest_AclRequest) GetId() *MDId { + if x != nil { + return x.Id } return nil } -func (m *NSRequest_AclRequest) GetCmd() NSRequest_AclRequest_ACL_COMMAND { - if m != nil { - return m.Cmd +func (x *NSRequest_AclRequest) GetCmd() NSRequest_AclRequest_ACL_COMMAND { + if x != nil { + return x.Cmd } return NSRequest_AclRequest_NONE } -func (m *NSRequest_AclRequest) GetRecursive() bool { - if m != nil { - return m.Recursive +func (x *NSRequest_AclRequest) GetRecursive() bool { + if x != nil { + return x.Recursive } return false } -func (m *NSRequest_AclRequest) GetType() NSRequest_AclRequest_ACL_TYPE { - if m != nil { - return m.Type +func (x *NSRequest_AclRequest) GetType() NSRequest_AclRequest_ACL_TYPE { + if x != nil { + return x.Type } return NSRequest_AclRequest_USER_ACL } -func (m *NSRequest_AclRequest) GetRule() string { - if m != nil { - return m.Rule +func (x *NSRequest_AclRequest) GetRule() string { + if x != nil { + return x.Rule } return "" } -func (m *NSRequest_AclRequest) GetPosition() uint32 { - if m != nil { - return m.Position +func (x *NSRequest_AclRequest) GetPosition() uint32 { + if x != nil { + return x.Position } return 0 } type NSRequest_TokenRequest struct { - Token *ShareToken `protobuf:"bytes,1,opt,name=token,proto3" json:"token,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields -func (m *NSRequest_TokenRequest) Reset() { *m = NSRequest_TokenRequest{} } -func (m *NSRequest_TokenRequest) String() string { return proto.CompactTextString(m) } -func (*NSRequest_TokenRequest) ProtoMessage() {} -func (*NSRequest_TokenRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_979aee4989bceb08, []int{20, 13} + Token *ShareToken `protobuf:"bytes,1,opt,name=token,proto3" json:"token,omitempty"` } -func (m *NSRequest_TokenRequest) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_NSRequest_TokenRequest.Unmarshal(m, b) -} -func (m *NSRequest_TokenRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_NSRequest_TokenRequest.Marshal(b, m, deterministic) -} -func (m *NSRequest_TokenRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_NSRequest_TokenRequest.Merge(m, src) +func (x *NSRequest_TokenRequest) Reset() { + *x = NSRequest_TokenRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_Rpc_proto_msgTypes[42] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } } -func (m *NSRequest_TokenRequest) XXX_Size() int { - return xxx_messageInfo_NSRequest_TokenRequest.Size(m) + +func (x *NSRequest_TokenRequest) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *NSRequest_TokenRequest) XXX_DiscardUnknown() { - xxx_messageInfo_NSRequest_TokenRequest.DiscardUnknown(m) + +func (*NSRequest_TokenRequest) ProtoMessage() {} + +func (x *NSRequest_TokenRequest) ProtoReflect() protoreflect.Message { + mi := &file_Rpc_proto_msgTypes[42] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) } -var xxx_messageInfo_NSRequest_TokenRequest proto.InternalMessageInfo +// Deprecated: Use NSRequest_TokenRequest.ProtoReflect.Descriptor instead. +func (*NSRequest_TokenRequest) Descriptor() ([]byte, []int) { + return file_Rpc_proto_rawDescGZIP(), []int{20, 13} +} -func (m *NSRequest_TokenRequest) GetToken() *ShareToken { - if m != nil { - return m.Token +func (x *NSRequest_TokenRequest) GetToken() *ShareToken { + if x != nil { + return x.Token } return nil } type NSRequest_QuotaRequest struct { - Path []byte `protobuf:"bytes,1,opt,name=path,proto3" json:"path,omitempty"` - Id *RoleId `protobuf:"bytes,2,opt,name=id,proto3" json:"id,omitempty"` - Op QUOTAOP `protobuf:"varint,3,opt,name=op,proto3,enum=eos.rpc.QUOTAOP" json:"op,omitempty"` - Maxfiles uint64 `protobuf:"varint,4,opt,name=maxfiles,proto3" json:"maxfiles,omitempty"` - Maxbytes uint64 `protobuf:"varint,5,opt,name=maxbytes,proto3" json:"maxbytes,omitempty"` - Entry QUOTAENTRY `protobuf:"varint,6,opt,name=entry,proto3,enum=eos.rpc.QUOTAENTRY" json:"entry,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *NSRequest_QuotaRequest) Reset() { *m = NSRequest_QuotaRequest{} } -func (m *NSRequest_QuotaRequest) String() string { return proto.CompactTextString(m) } -func (*NSRequest_QuotaRequest) ProtoMessage() {} -func (*NSRequest_QuotaRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_979aee4989bceb08, []int{20, 14} -} + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields -func (m *NSRequest_QuotaRequest) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_NSRequest_QuotaRequest.Unmarshal(m, b) -} -func (m *NSRequest_QuotaRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_NSRequest_QuotaRequest.Marshal(b, m, deterministic) + Path []byte `protobuf:"bytes,1,opt,name=path,proto3" json:"path,omitempty"` + Id *RoleId `protobuf:"bytes,2,opt,name=id,proto3" json:"id,omitempty"` + Op QUOTAOP `protobuf:"varint,3,opt,name=op,proto3,enum=eos.rpc.QUOTAOP" json:"op,omitempty"` // get or set, rm or rmnode + Maxfiles uint64 `protobuf:"varint,4,opt,name=maxfiles,proto3" json:"maxfiles,omitempty"` // maximum number of bytes (volume quota) for setting + Maxbytes uint64 `protobuf:"varint,5,opt,name=maxbytes,proto3" json:"maxbytes,omitempty"` // maximum number of bytes (volume quota) for setting + Entry QUOTAENTRY `protobuf:"varint,6,opt,name=entry,proto3,enum=eos.rpc.QUOTAENTRY" json:"entry,omitempty"` // select volume or inode entry for deletion } -func (m *NSRequest_QuotaRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_NSRequest_QuotaRequest.Merge(m, src) + +func (x *NSRequest_QuotaRequest) Reset() { + *x = NSRequest_QuotaRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_Rpc_proto_msgTypes[43] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } } -func (m *NSRequest_QuotaRequest) XXX_Size() int { - return xxx_messageInfo_NSRequest_QuotaRequest.Size(m) + +func (x *NSRequest_QuotaRequest) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *NSRequest_QuotaRequest) XXX_DiscardUnknown() { - xxx_messageInfo_NSRequest_QuotaRequest.DiscardUnknown(m) + +func (*NSRequest_QuotaRequest) ProtoMessage() {} + +func (x *NSRequest_QuotaRequest) ProtoReflect() protoreflect.Message { + mi := &file_Rpc_proto_msgTypes[43] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) } -var xxx_messageInfo_NSRequest_QuotaRequest proto.InternalMessageInfo +// Deprecated: Use NSRequest_QuotaRequest.ProtoReflect.Descriptor instead. +func (*NSRequest_QuotaRequest) Descriptor() ([]byte, []int) { + return file_Rpc_proto_rawDescGZIP(), []int{20, 14} +} -func (m *NSRequest_QuotaRequest) GetPath() []byte { - if m != nil { - return m.Path +func (x *NSRequest_QuotaRequest) GetPath() []byte { + if x != nil { + return x.Path } return nil } -func (m *NSRequest_QuotaRequest) GetId() *RoleId { - if m != nil { - return m.Id +func (x *NSRequest_QuotaRequest) GetId() *RoleId { + if x != nil { + return x.Id } return nil } -func (m *NSRequest_QuotaRequest) GetOp() QUOTAOP { - if m != nil { - return m.Op +func (x *NSRequest_QuotaRequest) GetOp() QUOTAOP { + if x != nil { + return x.Op } return QUOTAOP_GET } -func (m *NSRequest_QuotaRequest) GetMaxfiles() uint64 { - if m != nil { - return m.Maxfiles +func (x *NSRequest_QuotaRequest) GetMaxfiles() uint64 { + if x != nil { + return x.Maxfiles } return 0 } -func (m *NSRequest_QuotaRequest) GetMaxbytes() uint64 { - if m != nil { - return m.Maxbytes +func (x *NSRequest_QuotaRequest) GetMaxbytes() uint64 { + if x != nil { + return x.Maxbytes } return 0 } -func (m *NSRequest_QuotaRequest) GetEntry() QUOTAENTRY { - if m != nil { - return m.Entry +func (x *NSRequest_QuotaRequest) GetEntry() QUOTAENTRY { + if x != nil { + return x.Entry } return QUOTAENTRY_NONE } -type NSResponse struct { - Error *NSResponse_ErrorResponse `protobuf:"bytes,1,opt,name=error,proto3" json:"error,omitempty"` - Version *NSResponse_VersionResponse `protobuf:"bytes,2,opt,name=version,proto3" json:"version,omitempty"` - Recycle *NSResponse_RecycleResponse `protobuf:"bytes,3,opt,name=recycle,proto3" json:"recycle,omitempty"` - Acl *NSResponse_AclResponse `protobuf:"bytes,4,opt,name=acl,proto3" json:"acl,omitempty"` - Quota *NSResponse_QuotaResponse `protobuf:"bytes,5,opt,name=quota,proto3" json:"quota,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *NSResponse) Reset() { *m = NSResponse{} } -func (m *NSResponse) String() string { return proto.CompactTextString(m) } -func (*NSResponse) ProtoMessage() {} -func (*NSResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_979aee4989bceb08, []int{21} -} +type NSRequest_ShareRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields -func (m *NSResponse) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_NSResponse.Unmarshal(m, b) -} -func (m *NSResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_NSResponse.Marshal(b, m, deterministic) + // Types that are assignable to Subcmd: + // *NSRequest_ShareRequest_Ls + // *NSRequest_ShareRequest_Op + Subcmd isNSRequest_ShareRequest_Subcmd `protobuf_oneof:"subcmd"` } -func (m *NSResponse) XXX_Merge(src proto.Message) { - xxx_messageInfo_NSResponse.Merge(m, src) -} -func (m *NSResponse) XXX_Size() int { - return xxx_messageInfo_NSResponse.Size(m) + +func (x *NSRequest_ShareRequest) Reset() { + *x = NSRequest_ShareRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_Rpc_proto_msgTypes[44] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } } -func (m *NSResponse) XXX_DiscardUnknown() { - xxx_messageInfo_NSResponse.DiscardUnknown(m) + +func (x *NSRequest_ShareRequest) String() string { + return protoimpl.X.MessageStringOf(x) } -var xxx_messageInfo_NSResponse proto.InternalMessageInfo +func (*NSRequest_ShareRequest) ProtoMessage() {} -func (m *NSResponse) GetError() *NSResponse_ErrorResponse { - if m != nil { - return m.Error +func (x *NSRequest_ShareRequest) ProtoReflect() protoreflect.Message { + mi := &file_Rpc_proto_msgTypes[44] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms } - return nil + return mi.MessageOf(x) } -func (m *NSResponse) GetVersion() *NSResponse_VersionResponse { - if m != nil { - return m.Version - } - return nil +// Deprecated: Use NSRequest_ShareRequest.ProtoReflect.Descriptor instead. +func (*NSRequest_ShareRequest) Descriptor() ([]byte, []int) { + return file_Rpc_proto_rawDescGZIP(), []int{20, 15} } -func (m *NSResponse) GetRecycle() *NSResponse_RecycleResponse { +func (m *NSRequest_ShareRequest) GetSubcmd() isNSRequest_ShareRequest_Subcmd { if m != nil { - return m.Recycle + return m.Subcmd } return nil } -func (m *NSResponse) GetAcl() *NSResponse_AclResponse { - if m != nil { - return m.Acl +func (x *NSRequest_ShareRequest) GetLs() *NSRequest_ShareRequest_LsShare { + if x, ok := x.GetSubcmd().(*NSRequest_ShareRequest_Ls); ok { + return x.Ls } return nil } -func (m *NSResponse) GetQuota() *NSResponse_QuotaResponse { - if m != nil { - return m.Quota +func (x *NSRequest_ShareRequest) GetOp() *NSRequest_ShareRequest_OperateShare { + if x, ok := x.GetSubcmd().(*NSRequest_ShareRequest_Op); ok { + return x.Op } return nil } -type NSResponse_ErrorResponse struct { - Code int64 `protobuf:"varint,1,opt,name=code,proto3" json:"code,omitempty"` - Msg string `protobuf:"bytes,2,opt,name=msg,proto3" json:"msg,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` +type isNSRequest_ShareRequest_Subcmd interface { + isNSRequest_ShareRequest_Subcmd() } -func (m *NSResponse_ErrorResponse) Reset() { *m = NSResponse_ErrorResponse{} } -func (m *NSResponse_ErrorResponse) String() string { return proto.CompactTextString(m) } -func (*NSResponse_ErrorResponse) ProtoMessage() {} -func (*NSResponse_ErrorResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_979aee4989bceb08, []int{21, 0} +type NSRequest_ShareRequest_Ls struct { + Ls *NSRequest_ShareRequest_LsShare `protobuf:"bytes,1,opt,name=ls,proto3,oneof"` } -func (m *NSResponse_ErrorResponse) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_NSResponse_ErrorResponse.Unmarshal(m, b) -} -func (m *NSResponse_ErrorResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_NSResponse_ErrorResponse.Marshal(b, m, deterministic) -} -func (m *NSResponse_ErrorResponse) XXX_Merge(src proto.Message) { - xxx_messageInfo_NSResponse_ErrorResponse.Merge(m, src) -} -func (m *NSResponse_ErrorResponse) XXX_Size() int { - return xxx_messageInfo_NSResponse_ErrorResponse.Size(m) -} -func (m *NSResponse_ErrorResponse) XXX_DiscardUnknown() { - xxx_messageInfo_NSResponse_ErrorResponse.DiscardUnknown(m) +type NSRequest_ShareRequest_Op struct { + Op *NSRequest_ShareRequest_OperateShare `protobuf:"bytes,2,opt,name=op,proto3,oneof"` } -var xxx_messageInfo_NSResponse_ErrorResponse proto.InternalMessageInfo +func (*NSRequest_ShareRequest_Ls) isNSRequest_ShareRequest_Subcmd() {} -func (m *NSResponse_ErrorResponse) GetCode() int64 { - if m != nil { - return m.Code - } - return 0 -} +func (*NSRequest_ShareRequest_Op) isNSRequest_ShareRequest_Subcmd() {} -func (m *NSResponse_ErrorResponse) GetMsg() string { - if m != nil { - return m.Msg - } - return "" -} +type NSRequest_RecycleRequest_RestoreFlags struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields -type NSResponse_VersionResponse struct { - Code int64 `protobuf:"varint,1,opt,name=code,proto3" json:"code,omitempty"` - Msg string `protobuf:"bytes,2,opt,name=msg,proto3" json:"msg,omitempty"` - Versions []*NSResponse_VersionResponse_VersionInfo `protobuf:"bytes,3,rep,name=versions,proto3" json:"versions,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` + Force bool `protobuf:"varint,1,opt,name=force,proto3" json:"force,omitempty"` + Mkpath bool `protobuf:"varint,2,opt,name=mkpath,proto3" json:"mkpath,omitempty"` + Versions bool `protobuf:"varint,3,opt,name=versions,proto3" json:"versions,omitempty"` } -func (m *NSResponse_VersionResponse) Reset() { *m = NSResponse_VersionResponse{} } -func (m *NSResponse_VersionResponse) String() string { return proto.CompactTextString(m) } -func (*NSResponse_VersionResponse) ProtoMessage() {} -func (*NSResponse_VersionResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_979aee4989bceb08, []int{21, 1} +func (x *NSRequest_RecycleRequest_RestoreFlags) Reset() { + *x = NSRequest_RecycleRequest_RestoreFlags{} + if protoimpl.UnsafeEnabled { + mi := &file_Rpc_proto_msgTypes[45] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } } -func (m *NSResponse_VersionResponse) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_NSResponse_VersionResponse.Unmarshal(m, b) -} -func (m *NSResponse_VersionResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_NSResponse_VersionResponse.Marshal(b, m, deterministic) -} -func (m *NSResponse_VersionResponse) XXX_Merge(src proto.Message) { - xxx_messageInfo_NSResponse_VersionResponse.Merge(m, src) -} -func (m *NSResponse_VersionResponse) XXX_Size() int { - return xxx_messageInfo_NSResponse_VersionResponse.Size(m) -} -func (m *NSResponse_VersionResponse) XXX_DiscardUnknown() { - xxx_messageInfo_NSResponse_VersionResponse.DiscardUnknown(m) +func (x *NSRequest_RecycleRequest_RestoreFlags) String() string { + return protoimpl.X.MessageStringOf(x) } -var xxx_messageInfo_NSResponse_VersionResponse proto.InternalMessageInfo +func (*NSRequest_RecycleRequest_RestoreFlags) ProtoMessage() {} -func (m *NSResponse_VersionResponse) GetCode() int64 { - if m != nil { - return m.Code +func (x *NSRequest_RecycleRequest_RestoreFlags) ProtoReflect() protoreflect.Message { + mi := &file_Rpc_proto_msgTypes[45] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms } - return 0 + return mi.MessageOf(x) } -func (m *NSResponse_VersionResponse) GetMsg() string { - if m != nil { - return m.Msg - } - return "" +// Deprecated: Use NSRequest_RecycleRequest_RestoreFlags.ProtoReflect.Descriptor instead. +func (*NSRequest_RecycleRequest_RestoreFlags) Descriptor() ([]byte, []int) { + return file_Rpc_proto_rawDescGZIP(), []int{20, 8, 0} } -func (m *NSResponse_VersionResponse) GetVersions() []*NSResponse_VersionResponse_VersionInfo { - if m != nil { - return m.Versions +func (x *NSRequest_RecycleRequest_RestoreFlags) GetForce() bool { + if x != nil { + return x.Force } - return nil -} - -type NSResponse_VersionResponse_VersionInfo struct { - Id *MDId `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` - Mtime *Time `protobuf:"bytes,2,opt,name=mtime,proto3" json:"mtime,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *NSResponse_VersionResponse_VersionInfo) Reset() { - *m = NSResponse_VersionResponse_VersionInfo{} -} -func (m *NSResponse_VersionResponse_VersionInfo) String() string { return proto.CompactTextString(m) } -func (*NSResponse_VersionResponse_VersionInfo) ProtoMessage() {} -func (*NSResponse_VersionResponse_VersionInfo) Descriptor() ([]byte, []int) { - return fileDescriptor_979aee4989bceb08, []int{21, 1, 0} -} - -func (m *NSResponse_VersionResponse_VersionInfo) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_NSResponse_VersionResponse_VersionInfo.Unmarshal(m, b) -} -func (m *NSResponse_VersionResponse_VersionInfo) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_NSResponse_VersionResponse_VersionInfo.Marshal(b, m, deterministic) -} -func (m *NSResponse_VersionResponse_VersionInfo) XXX_Merge(src proto.Message) { - xxx_messageInfo_NSResponse_VersionResponse_VersionInfo.Merge(m, src) -} -func (m *NSResponse_VersionResponse_VersionInfo) XXX_Size() int { - return xxx_messageInfo_NSResponse_VersionResponse_VersionInfo.Size(m) -} -func (m *NSResponse_VersionResponse_VersionInfo) XXX_DiscardUnknown() { - xxx_messageInfo_NSResponse_VersionResponse_VersionInfo.DiscardUnknown(m) + return false } -var xxx_messageInfo_NSResponse_VersionResponse_VersionInfo proto.InternalMessageInfo - -func (m *NSResponse_VersionResponse_VersionInfo) GetId() *MDId { - if m != nil { - return m.Id +func (x *NSRequest_RecycleRequest_RestoreFlags) GetMkpath() bool { + if x != nil { + return x.Mkpath } - return nil + return false } -func (m *NSResponse_VersionResponse_VersionInfo) GetMtime() *Time { - if m != nil { - return m.Mtime +func (x *NSRequest_RecycleRequest_RestoreFlags) GetVersions() bool { + if x != nil { + return x.Versions } - return nil -} - -type NSResponse_RecycleResponse struct { - Code int64 `protobuf:"varint,1,opt,name=code,proto3" json:"code,omitempty"` - Msg string `protobuf:"bytes,2,opt,name=msg,proto3" json:"msg,omitempty"` - Recycles []*NSResponse_RecycleResponse_RecycleInfo `protobuf:"bytes,3,rep,name=recycles,proto3" json:"recycles,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *NSResponse_RecycleResponse) Reset() { *m = NSResponse_RecycleResponse{} } -func (m *NSResponse_RecycleResponse) String() string { return proto.CompactTextString(m) } -func (*NSResponse_RecycleResponse) ProtoMessage() {} -func (*NSResponse_RecycleResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_979aee4989bceb08, []int{21, 2} -} - -func (m *NSResponse_RecycleResponse) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_NSResponse_RecycleResponse.Unmarshal(m, b) -} -func (m *NSResponse_RecycleResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_NSResponse_RecycleResponse.Marshal(b, m, deterministic) -} -func (m *NSResponse_RecycleResponse) XXX_Merge(src proto.Message) { - xxx_messageInfo_NSResponse_RecycleResponse.Merge(m, src) -} -func (m *NSResponse_RecycleResponse) XXX_Size() int { - return xxx_messageInfo_NSResponse_RecycleResponse.Size(m) -} -func (m *NSResponse_RecycleResponse) XXX_DiscardUnknown() { - xxx_messageInfo_NSResponse_RecycleResponse.DiscardUnknown(m) + return false } -var xxx_messageInfo_NSResponse_RecycleResponse proto.InternalMessageInfo - -func (m *NSResponse_RecycleResponse) GetCode() int64 { - if m != nil { - return m.Code - } - return 0 -} +type NSRequest_RecycleRequest_PurgeDate struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields -func (m *NSResponse_RecycleResponse) GetMsg() string { - if m != nil { - return m.Msg - } - return "" + Year int32 `protobuf:"varint,1,opt,name=year,proto3" json:"year,omitempty"` + Month int32 `protobuf:"varint,2,opt,name=month,proto3" json:"month,omitempty"` + Day int32 `protobuf:"varint,3,opt,name=day,proto3" json:"day,omitempty"` } -func (m *NSResponse_RecycleResponse) GetRecycles() []*NSResponse_RecycleResponse_RecycleInfo { - if m != nil { - return m.Recycles +func (x *NSRequest_RecycleRequest_PurgeDate) Reset() { + *x = NSRequest_RecycleRequest_PurgeDate{} + if protoimpl.UnsafeEnabled { + mi := &file_Rpc_proto_msgTypes[46] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } - return nil -} - -type NSResponse_RecycleResponse_RecycleInfo struct { - Id *MDId `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` - Owner *RoleId `protobuf:"bytes,2,opt,name=owner,proto3" json:"owner,omitempty"` - Dtime *Time `protobuf:"bytes,3,opt,name=dtime,proto3" json:"dtime,omitempty"` - Size uint64 `protobuf:"varint,4,opt,name=size,proto3" json:"size,omitempty"` - Type NSResponse_RecycleResponse_RecycleInfo_DELETIONTYPE `protobuf:"varint,5,opt,name=type,proto3,enum=eos.rpc.NSResponse_RecycleResponse_RecycleInfo_DELETIONTYPE" json:"type,omitempty"` - Key string `protobuf:"bytes,6,opt,name=key,proto3" json:"key,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *NSResponse_RecycleResponse_RecycleInfo) Reset() { - *m = NSResponse_RecycleResponse_RecycleInfo{} -} -func (m *NSResponse_RecycleResponse_RecycleInfo) String() string { return proto.CompactTextString(m) } -func (*NSResponse_RecycleResponse_RecycleInfo) ProtoMessage() {} -func (*NSResponse_RecycleResponse_RecycleInfo) Descriptor() ([]byte, []int) { - return fileDescriptor_979aee4989bceb08, []int{21, 2, 0} } -func (m *NSResponse_RecycleResponse_RecycleInfo) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_NSResponse_RecycleResponse_RecycleInfo.Unmarshal(m, b) -} -func (m *NSResponse_RecycleResponse_RecycleInfo) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_NSResponse_RecycleResponse_RecycleInfo.Marshal(b, m, deterministic) -} -func (m *NSResponse_RecycleResponse_RecycleInfo) XXX_Merge(src proto.Message) { - xxx_messageInfo_NSResponse_RecycleResponse_RecycleInfo.Merge(m, src) -} -func (m *NSResponse_RecycleResponse_RecycleInfo) XXX_Size() int { - return xxx_messageInfo_NSResponse_RecycleResponse_RecycleInfo.Size(m) -} -func (m *NSResponse_RecycleResponse_RecycleInfo) XXX_DiscardUnknown() { - xxx_messageInfo_NSResponse_RecycleResponse_RecycleInfo.DiscardUnknown(m) +func (x *NSRequest_RecycleRequest_PurgeDate) String() string { + return protoimpl.X.MessageStringOf(x) } -var xxx_messageInfo_NSResponse_RecycleResponse_RecycleInfo proto.InternalMessageInfo +func (*NSRequest_RecycleRequest_PurgeDate) ProtoMessage() {} -func (m *NSResponse_RecycleResponse_RecycleInfo) GetId() *MDId { - if m != nil { - return m.Id +func (x *NSRequest_RecycleRequest_PurgeDate) ProtoReflect() protoreflect.Message { + mi := &file_Rpc_proto_msgTypes[46] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms } - return nil + return mi.MessageOf(x) } -func (m *NSResponse_RecycleResponse_RecycleInfo) GetOwner() *RoleId { - if m != nil { - return m.Owner - } - return nil +// Deprecated: Use NSRequest_RecycleRequest_PurgeDate.ProtoReflect.Descriptor instead. +func (*NSRequest_RecycleRequest_PurgeDate) Descriptor() ([]byte, []int) { + return file_Rpc_proto_rawDescGZIP(), []int{20, 8, 1} } -func (m *NSResponse_RecycleResponse_RecycleInfo) GetDtime() *Time { - if m != nil { - return m.Dtime +func (x *NSRequest_RecycleRequest_PurgeDate) GetYear() int32 { + if x != nil { + return x.Year } - return nil + return 0 } -func (m *NSResponse_RecycleResponse_RecycleInfo) GetSize() uint64 { - if m != nil { - return m.Size +func (x *NSRequest_RecycleRequest_PurgeDate) GetMonth() int32 { + if x != nil { + return x.Month } return 0 } -func (m *NSResponse_RecycleResponse_RecycleInfo) GetType() NSResponse_RecycleResponse_RecycleInfo_DELETIONTYPE { - if m != nil { - return m.Type +func (x *NSRequest_RecycleRequest_PurgeDate) GetDay() int32 { + if x != nil { + return x.Day } - return NSResponse_RecycleResponse_RecycleInfo_FILE + return 0 } -func (m *NSResponse_RecycleResponse_RecycleInfo) GetKey() string { - if m != nil { - return m.Key - } - return "" -} +type NSRequest_ShareRequest_LsShare struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields -type NSResponse_AclResponse struct { - Code int64 `protobuf:"varint,1,opt,name=code,proto3" json:"code,omitempty"` - Msg string `protobuf:"bytes,2,opt,name=msg,proto3" json:"msg,omitempty"` - Rule string `protobuf:"bytes,3,opt,name=rule,proto3" json:"rule,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` + Outformat NSRequest_ShareRequest_LsShare_OutFormat `protobuf:"varint,1,opt,name=outformat,proto3,enum=eos.rpc.NSRequest_ShareRequest_LsShare_OutFormat" json:"outformat,omitempty"` // + Selection string `protobuf:"bytes,2,opt,name=selection,proto3" json:"selection,omitempty"` // } -func (m *NSResponse_AclResponse) Reset() { *m = NSResponse_AclResponse{} } -func (m *NSResponse_AclResponse) String() string { return proto.CompactTextString(m) } -func (*NSResponse_AclResponse) ProtoMessage() {} -func (*NSResponse_AclResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_979aee4989bceb08, []int{21, 3} +func (x *NSRequest_ShareRequest_LsShare) Reset() { + *x = NSRequest_ShareRequest_LsShare{} + if protoimpl.UnsafeEnabled { + mi := &file_Rpc_proto_msgTypes[48] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } } -func (m *NSResponse_AclResponse) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_NSResponse_AclResponse.Unmarshal(m, b) -} -func (m *NSResponse_AclResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_NSResponse_AclResponse.Marshal(b, m, deterministic) -} -func (m *NSResponse_AclResponse) XXX_Merge(src proto.Message) { - xxx_messageInfo_NSResponse_AclResponse.Merge(m, src) -} -func (m *NSResponse_AclResponse) XXX_Size() int { - return xxx_messageInfo_NSResponse_AclResponse.Size(m) -} -func (m *NSResponse_AclResponse) XXX_DiscardUnknown() { - xxx_messageInfo_NSResponse_AclResponse.DiscardUnknown(m) +func (x *NSRequest_ShareRequest_LsShare) String() string { + return protoimpl.X.MessageStringOf(x) } -var xxx_messageInfo_NSResponse_AclResponse proto.InternalMessageInfo +func (*NSRequest_ShareRequest_LsShare) ProtoMessage() {} -func (m *NSResponse_AclResponse) GetCode() int64 { - if m != nil { - return m.Code +func (x *NSRequest_ShareRequest_LsShare) ProtoReflect() protoreflect.Message { + mi := &file_Rpc_proto_msgTypes[48] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms } - return 0 + return mi.MessageOf(x) } -func (m *NSResponse_AclResponse) GetMsg() string { - if m != nil { - return m.Msg +// Deprecated: Use NSRequest_ShareRequest_LsShare.ProtoReflect.Descriptor instead. +func (*NSRequest_ShareRequest_LsShare) Descriptor() ([]byte, []int) { + return file_Rpc_proto_rawDescGZIP(), []int{20, 15, 0} +} + +func (x *NSRequest_ShareRequest_LsShare) GetOutformat() NSRequest_ShareRequest_LsShare_OutFormat { + if x != nil { + return x.Outformat } - return "" + return NSRequest_ShareRequest_LsShare_NONE } -func (m *NSResponse_AclResponse) GetRule() string { - if m != nil { - return m.Rule +func (x *NSRequest_ShareRequest_LsShare) GetSelection() string { + if x != nil { + return x.Selection } return "" } -type NSResponse_QuotaResponse struct { - Code int64 `protobuf:"varint,1,opt,name=code,proto3" json:"code,omitempty"` - Msg string `protobuf:"bytes,2,opt,name=msg,proto3" json:"msg,omitempty"` - Quotanode []*QuotaProto `protobuf:"bytes,3,rep,name=quotanode,proto3" json:"quotanode,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} +type NSRequest_ShareRequest_OperateShare struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields -func (m *NSResponse_QuotaResponse) Reset() { *m = NSResponse_QuotaResponse{} } -func (m *NSResponse_QuotaResponse) String() string { return proto.CompactTextString(m) } -func (*NSResponse_QuotaResponse) ProtoMessage() {} -func (*NSResponse_QuotaResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_979aee4989bceb08, []int{21, 4} + Op NSRequest_ShareRequest_OperateShare_Op `protobuf:"varint,1,opt,name=op,proto3,enum=eos.rpc.NSRequest_ShareRequest_OperateShare_Op" json:"op,omitempty"` + Share string `protobuf:"bytes,2,opt,name=share,proto3" json:"share,omitempty"` + Acl string `protobuf:"bytes,3,opt,name=acl,proto3" json:"acl,omitempty"` + Path string `protobuf:"bytes,4,opt,name=path,proto3" json:"path,omitempty"` + User string `protobuf:"bytes,5,opt,name=user,proto3" json:"user,omitempty"` + Group string `protobuf:"bytes,6,opt,name=group,proto3" json:"group,omitempty"` } -func (m *NSResponse_QuotaResponse) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_NSResponse_QuotaResponse.Unmarshal(m, b) -} -func (m *NSResponse_QuotaResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_NSResponse_QuotaResponse.Marshal(b, m, deterministic) -} -func (m *NSResponse_QuotaResponse) XXX_Merge(src proto.Message) { - xxx_messageInfo_NSResponse_QuotaResponse.Merge(m, src) -} -func (m *NSResponse_QuotaResponse) XXX_Size() int { - return xxx_messageInfo_NSResponse_QuotaResponse.Size(m) +func (x *NSRequest_ShareRequest_OperateShare) Reset() { + *x = NSRequest_ShareRequest_OperateShare{} + if protoimpl.UnsafeEnabled { + mi := &file_Rpc_proto_msgTypes[49] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } } -func (m *NSResponse_QuotaResponse) XXX_DiscardUnknown() { - xxx_messageInfo_NSResponse_QuotaResponse.DiscardUnknown(m) + +func (x *NSRequest_ShareRequest_OperateShare) String() string { + return protoimpl.X.MessageStringOf(x) } -var xxx_messageInfo_NSResponse_QuotaResponse proto.InternalMessageInfo +func (*NSRequest_ShareRequest_OperateShare) ProtoMessage() {} -func (m *NSResponse_QuotaResponse) GetCode() int64 { - if m != nil { - return m.Code +func (x *NSRequest_ShareRequest_OperateShare) ProtoReflect() protoreflect.Message { + mi := &file_Rpc_proto_msgTypes[49] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms } - return 0 + return mi.MessageOf(x) } -func (m *NSResponse_QuotaResponse) GetMsg() string { - if m != nil { - return m.Msg - } - return "" +// Deprecated: Use NSRequest_ShareRequest_OperateShare.ProtoReflect.Descriptor instead. +func (*NSRequest_ShareRequest_OperateShare) Descriptor() ([]byte, []int) { + return file_Rpc_proto_rawDescGZIP(), []int{20, 15, 1} } -func (m *NSResponse_QuotaResponse) GetQuotanode() []*QuotaProto { - if m != nil { - return m.Quotanode +func (x *NSRequest_ShareRequest_OperateShare) GetOp() NSRequest_ShareRequest_OperateShare_Op { + if x != nil { + return x.Op } - return nil + return NSRequest_ShareRequest_OperateShare_CREATE } -type NsStatRequest struct { - Authkey string `protobuf:"bytes,1,opt,name=authkey,proto3" json:"authkey,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` +func (x *NSRequest_ShareRequest_OperateShare) GetShare() string { + if x != nil { + return x.Share + } + return "" } -func (m *NsStatRequest) Reset() { *m = NsStatRequest{} } -func (m *NsStatRequest) String() string { return proto.CompactTextString(m) } -func (*NsStatRequest) ProtoMessage() {} -func (*NsStatRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_979aee4989bceb08, []int{22} +func (x *NSRequest_ShareRequest_OperateShare) GetAcl() string { + if x != nil { + return x.Acl + } + return "" } -func (m *NsStatRequest) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_NsStatRequest.Unmarshal(m, b) -} -func (m *NsStatRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_NsStatRequest.Marshal(b, m, deterministic) -} -func (m *NsStatRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_NsStatRequest.Merge(m, src) -} -func (m *NsStatRequest) XXX_Size() int { - return xxx_messageInfo_NsStatRequest.Size(m) -} -func (m *NsStatRequest) XXX_DiscardUnknown() { - xxx_messageInfo_NsStatRequest.DiscardUnknown(m) +func (x *NSRequest_ShareRequest_OperateShare) GetPath() string { + if x != nil { + return x.Path + } + return "" } -var xxx_messageInfo_NsStatRequest proto.InternalMessageInfo - -func (m *NsStatRequest) GetAuthkey() string { - if m != nil { - return m.Authkey +func (x *NSRequest_ShareRequest_OperateShare) GetUser() string { + if x != nil { + return x.User } return "" } -type NsStatResponse struct { - Code int64 `protobuf:"varint,1,opt,name=code,proto3" json:"code,omitempty"` - Emsg string `protobuf:"bytes,2,opt,name=emsg,proto3" json:"emsg,omitempty"` - State string `protobuf:"bytes,3,opt,name=state,proto3" json:"state,omitempty"` - Nfiles uint64 `protobuf:"varint,4,opt,name=nfiles,proto3" json:"nfiles,omitempty"` - Ncontainers uint64 `protobuf:"varint,5,opt,name=ncontainers,proto3" json:"ncontainers,omitempty"` - BootTime uint64 `protobuf:"varint,6,opt,name=boot_time,json=bootTime,proto3" json:"boot_time,omitempty"` - CurrentFid uint64 `protobuf:"varint,7,opt,name=current_fid,json=currentFid,proto3" json:"current_fid,omitempty"` - CurrentCid uint64 `protobuf:"varint,8,opt,name=current_cid,json=currentCid,proto3" json:"current_cid,omitempty"` - MemVirtual uint64 `protobuf:"varint,9,opt,name=mem_virtual,json=memVirtual,proto3" json:"mem_virtual,omitempty"` - MemResident uint64 `protobuf:"varint,10,opt,name=mem_resident,json=memResident,proto3" json:"mem_resident,omitempty"` - MemShare uint64 `protobuf:"varint,11,opt,name=mem_share,json=memShare,proto3" json:"mem_share,omitempty"` - MemGrowth uint64 `protobuf:"varint,12,opt,name=mem_growth,json=memGrowth,proto3" json:"mem_growth,omitempty"` - Threads uint64 `protobuf:"varint,13,opt,name=threads,proto3" json:"threads,omitempty"` - Fds uint64 `protobuf:"varint,14,opt,name=fds,proto3" json:"fds,omitempty"` - Uptime uint64 `protobuf:"varint,15,opt,name=uptime,proto3" json:"uptime,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *NsStatResponse) Reset() { *m = NsStatResponse{} } -func (m *NsStatResponse) String() string { return proto.CompactTextString(m) } -func (*NsStatResponse) ProtoMessage() {} -func (*NsStatResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_979aee4989bceb08, []int{23} +func (x *NSRequest_ShareRequest_OperateShare) GetGroup() string { + if x != nil { + return x.Group + } + return "" } -func (m *NsStatResponse) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_NsStatResponse.Unmarshal(m, b) -} -func (m *NsStatResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_NsStatResponse.Marshal(b, m, deterministic) +type NSResponse_ErrorResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Code int64 `protobuf:"varint,1,opt,name=code,proto3" json:"code,omitempty"` + Msg string `protobuf:"bytes,2,opt,name=msg,proto3" json:"msg,omitempty"` } -func (m *NsStatResponse) XXX_Merge(src proto.Message) { - xxx_messageInfo_NsStatResponse.Merge(m, src) + +func (x *NSResponse_ErrorResponse) Reset() { + *x = NSResponse_ErrorResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_Rpc_proto_msgTypes[50] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } } -func (m *NsStatResponse) XXX_Size() int { - return xxx_messageInfo_NsStatResponse.Size(m) + +func (x *NSResponse_ErrorResponse) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *NsStatResponse) XXX_DiscardUnknown() { - xxx_messageInfo_NsStatResponse.DiscardUnknown(m) + +func (*NSResponse_ErrorResponse) ProtoMessage() {} + +func (x *NSResponse_ErrorResponse) ProtoReflect() protoreflect.Message { + mi := &file_Rpc_proto_msgTypes[50] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) } -var xxx_messageInfo_NsStatResponse proto.InternalMessageInfo +// Deprecated: Use NSResponse_ErrorResponse.ProtoReflect.Descriptor instead. +func (*NSResponse_ErrorResponse) Descriptor() ([]byte, []int) { + return file_Rpc_proto_rawDescGZIP(), []int{21, 0} +} -func (m *NsStatResponse) GetCode() int64 { - if m != nil { - return m.Code +func (x *NSResponse_ErrorResponse) GetCode() int64 { + if x != nil { + return x.Code } return 0 } -func (m *NsStatResponse) GetEmsg() string { - if m != nil { - return m.Emsg +func (x *NSResponse_ErrorResponse) GetMsg() string { + if x != nil { + return x.Msg } return "" } -func (m *NsStatResponse) GetState() string { - if m != nil { - return m.State - } - return "" +type NSResponse_VersionResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Code int64 `protobuf:"varint,1,opt,name=code,proto3" json:"code,omitempty"` + Msg string `protobuf:"bytes,2,opt,name=msg,proto3" json:"msg,omitempty"` + Versions []*NSResponse_VersionResponse_VersionInfo `protobuf:"bytes,3,rep,name=versions,proto3" json:"versions,omitempty"` } -func (m *NsStatResponse) GetNfiles() uint64 { - if m != nil { - return m.Nfiles +func (x *NSResponse_VersionResponse) Reset() { + *x = NSResponse_VersionResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_Rpc_proto_msgTypes[51] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } - return 0 } -func (m *NsStatResponse) GetNcontainers() uint64 { - if m != nil { - return m.Ncontainers - } - return 0 +func (x *NSResponse_VersionResponse) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *NsStatResponse) GetBootTime() uint64 { - if m != nil { - return m.BootTime +func (*NSResponse_VersionResponse) ProtoMessage() {} + +func (x *NSResponse_VersionResponse) ProtoReflect() protoreflect.Message { + mi := &file_Rpc_proto_msgTypes[51] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms } - return 0 + return mi.MessageOf(x) } -func (m *NsStatResponse) GetCurrentFid() uint64 { - if m != nil { - return m.CurrentFid - } - return 0 +// Deprecated: Use NSResponse_VersionResponse.ProtoReflect.Descriptor instead. +func (*NSResponse_VersionResponse) Descriptor() ([]byte, []int) { + return file_Rpc_proto_rawDescGZIP(), []int{21, 1} } -func (m *NsStatResponse) GetCurrentCid() uint64 { - if m != nil { - return m.CurrentCid +func (x *NSResponse_VersionResponse) GetCode() int64 { + if x != nil { + return x.Code } return 0 } -func (m *NsStatResponse) GetMemVirtual() uint64 { - if m != nil { - return m.MemVirtual +func (x *NSResponse_VersionResponse) GetMsg() string { + if x != nil { + return x.Msg } - return 0 + return "" } -func (m *NsStatResponse) GetMemResident() uint64 { - if m != nil { - return m.MemResident +func (x *NSResponse_VersionResponse) GetVersions() []*NSResponse_VersionResponse_VersionInfo { + if x != nil { + return x.Versions } - return 0 + return nil } -func (m *NsStatResponse) GetMemShare() uint64 { - if m != nil { - return m.MemShare - } - return 0 +type NSResponse_RecycleResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Code int64 `protobuf:"varint,1,opt,name=code,proto3" json:"code,omitempty"` + Msg string `protobuf:"bytes,2,opt,name=msg,proto3" json:"msg,omitempty"` + Recycles []*NSResponse_RecycleResponse_RecycleInfo `protobuf:"bytes,3,rep,name=recycles,proto3" json:"recycles,omitempty"` } -func (m *NsStatResponse) GetMemGrowth() uint64 { - if m != nil { - return m.MemGrowth +func (x *NSResponse_RecycleResponse) Reset() { + *x = NSResponse_RecycleResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_Rpc_proto_msgTypes[52] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } - return 0 } -func (m *NsStatResponse) GetThreads() uint64 { - if m != nil { - return m.Threads - } - return 0 +func (x *NSResponse_RecycleResponse) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *NsStatResponse) GetFds() uint64 { - if m != nil { - return m.Fds +func (*NSResponse_RecycleResponse) ProtoMessage() {} + +func (x *NSResponse_RecycleResponse) ProtoReflect() protoreflect.Message { + mi := &file_Rpc_proto_msgTypes[52] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms } - return 0 + return mi.MessageOf(x) } -func (m *NsStatResponse) GetUptime() uint64 { - if m != nil { - return m.Uptime +// Deprecated: Use NSResponse_RecycleResponse.ProtoReflect.Descriptor instead. +func (*NSResponse_RecycleResponse) Descriptor() ([]byte, []int) { + return file_Rpc_proto_rawDescGZIP(), []int{21, 2} +} + +func (x *NSResponse_RecycleResponse) GetCode() int64 { + if x != nil { + return x.Code } return 0 } -type ManilaRequest struct { - RequestType MANILA_REQUEST_TYPE `protobuf:"varint,1,opt,name=request_type,json=requestType,proto3,enum=eos.rpc.MANILA_REQUEST_TYPE" json:"request_type,omitempty"` - AuthKey string `protobuf:"bytes,2,opt,name=auth_key,json=authKey,proto3" json:"auth_key,omitempty"` - Protocol string `protobuf:"bytes,3,opt,name=protocol,proto3" json:"protocol,omitempty"` - ShareName string `protobuf:"bytes,4,opt,name=share_name,json=shareName,proto3" json:"share_name,omitempty"` - Description string `protobuf:"bytes,5,opt,name=description,proto3" json:"description,omitempty"` - ShareId string `protobuf:"bytes,6,opt,name=share_id,json=shareId,proto3" json:"share_id,omitempty"` - ShareGroupId string `protobuf:"bytes,7,opt,name=share_group_id,json=shareGroupId,proto3" json:"share_group_id,omitempty"` - Quota int32 `protobuf:"varint,8,opt,name=quota,proto3" json:"quota,omitempty"` - Creator string `protobuf:"bytes,9,opt,name=creator,proto3" json:"creator,omitempty"` - Egroup string `protobuf:"bytes,10,opt,name=egroup,proto3" json:"egroup,omitempty"` - AdminEgroup string `protobuf:"bytes,11,opt,name=admin_egroup,json=adminEgroup,proto3" json:"admin_egroup,omitempty"` - ShareHost string `protobuf:"bytes,12,opt,name=share_host,json=shareHost,proto3" json:"share_host,omitempty"` - ShareLocation string `protobuf:"bytes,13,opt,name=share_location,json=shareLocation,proto3" json:"share_location,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *ManilaRequest) Reset() { *m = ManilaRequest{} } -func (m *ManilaRequest) String() string { return proto.CompactTextString(m) } -func (*ManilaRequest) ProtoMessage() {} -func (*ManilaRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_979aee4989bceb08, []int{24} +func (x *NSResponse_RecycleResponse) GetMsg() string { + if x != nil { + return x.Msg + } + return "" } -func (m *ManilaRequest) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_ManilaRequest.Unmarshal(m, b) -} -func (m *ManilaRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_ManilaRequest.Marshal(b, m, deterministic) +func (x *NSResponse_RecycleResponse) GetRecycles() []*NSResponse_RecycleResponse_RecycleInfo { + if x != nil { + return x.Recycles + } + return nil } -func (m *ManilaRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_ManilaRequest.Merge(m, src) + +type NSResponse_AclResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Code int64 `protobuf:"varint,1,opt,name=code,proto3" json:"code,omitempty"` + Msg string `protobuf:"bytes,2,opt,name=msg,proto3" json:"msg,omitempty"` + Rule string `protobuf:"bytes,3,opt,name=rule,proto3" json:"rule,omitempty"` } -func (m *ManilaRequest) XXX_Size() int { - return xxx_messageInfo_ManilaRequest.Size(m) + +func (x *NSResponse_AclResponse) Reset() { + *x = NSResponse_AclResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_Rpc_proto_msgTypes[53] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } } -func (m *ManilaRequest) XXX_DiscardUnknown() { - xxx_messageInfo_ManilaRequest.DiscardUnknown(m) + +func (x *NSResponse_AclResponse) String() string { + return protoimpl.X.MessageStringOf(x) } -var xxx_messageInfo_ManilaRequest proto.InternalMessageInfo +func (*NSResponse_AclResponse) ProtoMessage() {} -func (m *ManilaRequest) GetRequestType() MANILA_REQUEST_TYPE { - if m != nil { - return m.RequestType +func (x *NSResponse_AclResponse) ProtoReflect() protoreflect.Message { + mi := &file_Rpc_proto_msgTypes[53] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms } - return MANILA_REQUEST_TYPE_CREATE_SHARE + return mi.MessageOf(x) } -func (m *ManilaRequest) GetAuthKey() string { - if m != nil { - return m.AuthKey - } - return "" +// Deprecated: Use NSResponse_AclResponse.ProtoReflect.Descriptor instead. +func (*NSResponse_AclResponse) Descriptor() ([]byte, []int) { + return file_Rpc_proto_rawDescGZIP(), []int{21, 3} } -func (m *ManilaRequest) GetProtocol() string { - if m != nil { - return m.Protocol +func (x *NSResponse_AclResponse) GetCode() int64 { + if x != nil { + return x.Code } - return "" + return 0 } -func (m *ManilaRequest) GetShareName() string { - if m != nil { - return m.ShareName +func (x *NSResponse_AclResponse) GetMsg() string { + if x != nil { + return x.Msg } return "" } -func (m *ManilaRequest) GetDescription() string { - if m != nil { - return m.Description +func (x *NSResponse_AclResponse) GetRule() string { + if x != nil { + return x.Rule } return "" } -func (m *ManilaRequest) GetShareId() string { - if m != nil { - return m.ShareId - } - return "" +type NSResponse_QuotaResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Code int64 `protobuf:"varint,1,opt,name=code,proto3" json:"code,omitempty"` + Msg string `protobuf:"bytes,2,opt,name=msg,proto3" json:"msg,omitempty"` + Quotanode []*QuotaProto `protobuf:"bytes,3,rep,name=quotanode,proto3" json:"quotanode,omitempty"` } -func (m *ManilaRequest) GetShareGroupId() string { - if m != nil { - return m.ShareGroupId +func (x *NSResponse_QuotaResponse) Reset() { + *x = NSResponse_QuotaResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_Rpc_proto_msgTypes[54] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } - return "" } -func (m *ManilaRequest) GetQuota() int32 { - if m != nil { - return m.Quota - } - return 0 +func (x *NSResponse_QuotaResponse) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *ManilaRequest) GetCreator() string { - if m != nil { - return m.Creator +func (*NSResponse_QuotaResponse) ProtoMessage() {} + +func (x *NSResponse_QuotaResponse) ProtoReflect() protoreflect.Message { + mi := &file_Rpc_proto_msgTypes[54] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms } - return "" + return mi.MessageOf(x) } -func (m *ManilaRequest) GetEgroup() string { - if m != nil { - return m.Egroup - } - return "" +// Deprecated: Use NSResponse_QuotaResponse.ProtoReflect.Descriptor instead. +func (*NSResponse_QuotaResponse) Descriptor() ([]byte, []int) { + return file_Rpc_proto_rawDescGZIP(), []int{21, 4} } -func (m *ManilaRequest) GetAdminEgroup() string { - if m != nil { - return m.AdminEgroup +func (x *NSResponse_QuotaResponse) GetCode() int64 { + if x != nil { + return x.Code } - return "" + return 0 } -func (m *ManilaRequest) GetShareHost() string { - if m != nil { - return m.ShareHost +func (x *NSResponse_QuotaResponse) GetMsg() string { + if x != nil { + return x.Msg } return "" } -func (m *ManilaRequest) GetShareLocation() string { - if m != nil { - return m.ShareLocation +func (x *NSResponse_QuotaResponse) GetQuotanode() []*QuotaProto { + if x != nil { + return x.Quotanode } - return "" + return nil } -type ManilaResponse struct { - Msg string `protobuf:"bytes,1,opt,name=msg,proto3" json:"msg,omitempty"` - Code int32 `protobuf:"varint,2,opt,name=code,proto3" json:"code,omitempty"` - TotalUsed int64 `protobuf:"varint,3,opt,name=total_used,json=totalUsed,proto3" json:"total_used,omitempty"` - TotalCapacity int64 `protobuf:"varint,4,opt,name=total_capacity,json=totalCapacity,proto3" json:"total_capacity,omitempty"` - NewShareQuota int64 `protobuf:"varint,5,opt,name=new_share_quota,json=newShareQuota,proto3" json:"new_share_quota,omitempty"` - NewSharePath string `protobuf:"bytes,6,opt,name=new_share_path,json=newSharePath,proto3" json:"new_share_path,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *ManilaResponse) Reset() { *m = ManilaResponse{} } -func (m *ManilaResponse) String() string { return proto.CompactTextString(m) } -func (*ManilaResponse) ProtoMessage() {} -func (*ManilaResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_979aee4989bceb08, []int{25} -} +type NSResponse_ShareInfo struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields -func (m *ManilaResponse) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_ManilaResponse.Unmarshal(m, b) -} -func (m *ManilaResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_ManilaResponse.Marshal(b, m, deterministic) + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` + Root string `protobuf:"bytes,2,opt,name=root,proto3" json:"root,omitempty"` + Rule string `protobuf:"bytes,3,opt,name=rule,proto3" json:"rule,omitempty"` + Uid uint64 `protobuf:"varint,4,opt,name=uid,proto3" json:"uid,omitempty"` + Nshared uint64 `protobuf:"varint,5,opt,name=nshared,proto3" json:"nshared,omitempty"` } -func (m *ManilaResponse) XXX_Merge(src proto.Message) { - xxx_messageInfo_ManilaResponse.Merge(m, src) + +func (x *NSResponse_ShareInfo) Reset() { + *x = NSResponse_ShareInfo{} + if protoimpl.UnsafeEnabled { + mi := &file_Rpc_proto_msgTypes[55] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } } -func (m *ManilaResponse) XXX_Size() int { - return xxx_messageInfo_ManilaResponse.Size(m) + +func (x *NSResponse_ShareInfo) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *ManilaResponse) XXX_DiscardUnknown() { - xxx_messageInfo_ManilaResponse.DiscardUnknown(m) + +func (*NSResponse_ShareInfo) ProtoMessage() {} + +func (x *NSResponse_ShareInfo) ProtoReflect() protoreflect.Message { + mi := &file_Rpc_proto_msgTypes[55] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) } -var xxx_messageInfo_ManilaResponse proto.InternalMessageInfo +// Deprecated: Use NSResponse_ShareInfo.ProtoReflect.Descriptor instead. +func (*NSResponse_ShareInfo) Descriptor() ([]byte, []int) { + return file_Rpc_proto_rawDescGZIP(), []int{21, 5} +} -func (m *ManilaResponse) GetMsg() string { - if m != nil { - return m.Msg +func (x *NSResponse_ShareInfo) GetName() string { + if x != nil { + return x.Name } return "" } -func (m *ManilaResponse) GetCode() int32 { - if m != nil { - return m.Code +func (x *NSResponse_ShareInfo) GetRoot() string { + if x != nil { + return x.Root } - return 0 + return "" } -func (m *ManilaResponse) GetTotalUsed() int64 { - if m != nil { - return m.TotalUsed +func (x *NSResponse_ShareInfo) GetRule() string { + if x != nil { + return x.Rule } - return 0 + return "" } -func (m *ManilaResponse) GetTotalCapacity() int64 { - if m != nil { - return m.TotalCapacity +func (x *NSResponse_ShareInfo) GetUid() uint64 { + if x != nil { + return x.Uid } return 0 } -func (m *ManilaResponse) GetNewShareQuota() int64 { - if m != nil { - return m.NewShareQuota +func (x *NSResponse_ShareInfo) GetNshared() uint64 { + if x != nil { + return x.Nshared } return 0 } -func (m *ManilaResponse) GetNewSharePath() string { - if m != nil { - return m.NewSharePath +type NSResponse_ShareAccess struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` + Granted bool `protobuf:"varint,2,opt,name=granted,proto3" json:"granted,omitempty"` +} + +func (x *NSResponse_ShareAccess) Reset() { + *x = NSResponse_ShareAccess{} + if protoimpl.UnsafeEnabled { + mi := &file_Rpc_proto_msgTypes[56] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } - return "" } -func init() { - proto.RegisterEnum("eos.rpc.TYPE", TYPE_name, TYPE_value) - proto.RegisterEnum("eos.rpc.QUOTATYPE", QUOTATYPE_name, QUOTATYPE_value) - proto.RegisterEnum("eos.rpc.QUOTAOP", QUOTAOP_name, QUOTAOP_value) - proto.RegisterEnum("eos.rpc.QUOTAENTRY", QUOTAENTRY_name, QUOTAENTRY_value) - proto.RegisterEnum("eos.rpc.MANILA_REQUEST_TYPE", MANILA_REQUEST_TYPE_name, MANILA_REQUEST_TYPE_value) - proto.RegisterEnum("eos.rpc.NSRequest_VersionRequest_VERSION_CMD", NSRequest_VersionRequest_VERSION_CMD_name, NSRequest_VersionRequest_VERSION_CMD_value) - proto.RegisterEnum("eos.rpc.NSRequest_RecycleRequest_RECYCLE_CMD", NSRequest_RecycleRequest_RECYCLE_CMD_name, NSRequest_RecycleRequest_RECYCLE_CMD_value) - proto.RegisterEnum("eos.rpc.NSRequest_AclRequest_ACL_COMMAND", NSRequest_AclRequest_ACL_COMMAND_name, NSRequest_AclRequest_ACL_COMMAND_value) - proto.RegisterEnum("eos.rpc.NSRequest_AclRequest_ACL_TYPE", NSRequest_AclRequest_ACL_TYPE_name, NSRequest_AclRequest_ACL_TYPE_value) - proto.RegisterEnum("eos.rpc.NSResponse_RecycleResponse_RecycleInfo_DELETIONTYPE", NSResponse_RecycleResponse_RecycleInfo_DELETIONTYPE_name, NSResponse_RecycleResponse_RecycleInfo_DELETIONTYPE_value) - proto.RegisterType((*PingRequest)(nil), "eos.rpc.PingRequest") - proto.RegisterType((*PingReply)(nil), "eos.rpc.PingReply") - proto.RegisterType((*ContainerInsertRequest)(nil), "eos.rpc.ContainerInsertRequest") - proto.RegisterType((*FileInsertRequest)(nil), "eos.rpc.FileInsertRequest") - proto.RegisterType((*InsertReply)(nil), "eos.rpc.InsertReply") - proto.RegisterType((*Time)(nil), "eos.rpc.Time") - proto.RegisterType((*Checksum)(nil), "eos.rpc.Checksum") - proto.RegisterType((*FileMdProto)(nil), "eos.rpc.FileMdProto") - proto.RegisterMapType((map[string][]byte)(nil), "eos.rpc.FileMdProto.XattrsEntry") - proto.RegisterType((*ContainerMdProto)(nil), "eos.rpc.ContainerMdProto") - proto.RegisterMapType((map[string][]byte)(nil), "eos.rpc.ContainerMdProto.XattrsEntry") - proto.RegisterType((*QuotaProto)(nil), "eos.rpc.QuotaProto") - proto.RegisterType((*RoleId)(nil), "eos.rpc.RoleId") - proto.RegisterType((*MDId)(nil), "eos.rpc.MDId") - proto.RegisterType((*Limit)(nil), "eos.rpc.Limit") - proto.RegisterType((*MDSelection)(nil), "eos.rpc.MDSelection") - proto.RegisterMapType((map[string][]byte)(nil), "eos.rpc.MDSelection.XattrEntry") - proto.RegisterType((*MDRequest)(nil), "eos.rpc.MDRequest") - proto.RegisterType((*MDResponse)(nil), "eos.rpc.MDResponse") - proto.RegisterType((*FindRequest)(nil), "eos.rpc.FindRequest") - proto.RegisterType((*ShareAuth)(nil), "eos.rpc.ShareAuth") - proto.RegisterType((*ShareProto)(nil), "eos.rpc.ShareProto") - proto.RegisterType((*ShareToken)(nil), "eos.rpc.ShareToken") - proto.RegisterType((*NSRequest)(nil), "eos.rpc.NSRequest") - proto.RegisterType((*NSRequest_MkdirRequest)(nil), "eos.rpc.NSRequest.MkdirRequest") - proto.RegisterType((*NSRequest_RmdirRequest)(nil), "eos.rpc.NSRequest.RmdirRequest") - proto.RegisterType((*NSRequest_TouchRequest)(nil), "eos.rpc.NSRequest.TouchRequest") - proto.RegisterType((*NSRequest_UnlinkRequest)(nil), "eos.rpc.NSRequest.UnlinkRequest") - proto.RegisterType((*NSRequest_RmRequest)(nil), "eos.rpc.NSRequest.RmRequest") - proto.RegisterType((*NSRequest_RenameRequest)(nil), "eos.rpc.NSRequest.RenameRequest") - proto.RegisterType((*NSRequest_SymlinkRequest)(nil), "eos.rpc.NSRequest.SymlinkRequest") - proto.RegisterType((*NSRequest_VersionRequest)(nil), "eos.rpc.NSRequest.VersionRequest") - proto.RegisterType((*NSRequest_RecycleRequest)(nil), "eos.rpc.NSRequest.RecycleRequest") - proto.RegisterType((*NSRequest_RecycleRequest_RestoreFlags)(nil), "eos.rpc.NSRequest.RecycleRequest.RestoreFlags") - proto.RegisterType((*NSRequest_RecycleRequest_PurgeDate)(nil), "eos.rpc.NSRequest.RecycleRequest.PurgeDate") - proto.RegisterType((*NSRequest_SetXAttrRequest)(nil), "eos.rpc.NSRequest.SetXAttrRequest") - proto.RegisterMapType((map[string][]byte)(nil), "eos.rpc.NSRequest.SetXAttrRequest.XattrsEntry") - proto.RegisterType((*NSRequest_ChownRequest)(nil), "eos.rpc.NSRequest.ChownRequest") - proto.RegisterType((*NSRequest_ChmodRequest)(nil), "eos.rpc.NSRequest.ChmodRequest") - proto.RegisterType((*NSRequest_AclRequest)(nil), "eos.rpc.NSRequest.AclRequest") - proto.RegisterType((*NSRequest_TokenRequest)(nil), "eos.rpc.NSRequest.TokenRequest") - proto.RegisterType((*NSRequest_QuotaRequest)(nil), "eos.rpc.NSRequest.QuotaRequest") - proto.RegisterType((*NSResponse)(nil), "eos.rpc.NSResponse") - proto.RegisterType((*NSResponse_ErrorResponse)(nil), "eos.rpc.NSResponse.ErrorResponse") - proto.RegisterType((*NSResponse_VersionResponse)(nil), "eos.rpc.NSResponse.VersionResponse") - proto.RegisterType((*NSResponse_VersionResponse_VersionInfo)(nil), "eos.rpc.NSResponse.VersionResponse.VersionInfo") - proto.RegisterType((*NSResponse_RecycleResponse)(nil), "eos.rpc.NSResponse.RecycleResponse") - proto.RegisterType((*NSResponse_RecycleResponse_RecycleInfo)(nil), "eos.rpc.NSResponse.RecycleResponse.RecycleInfo") - proto.RegisterType((*NSResponse_AclResponse)(nil), "eos.rpc.NSResponse.AclResponse") - proto.RegisterType((*NSResponse_QuotaResponse)(nil), "eos.rpc.NSResponse.QuotaResponse") - proto.RegisterType((*NsStatRequest)(nil), "eos.rpc.NsStatRequest") - proto.RegisterType((*NsStatResponse)(nil), "eos.rpc.NsStatResponse") - proto.RegisterType((*ManilaRequest)(nil), "eos.rpc.ManilaRequest") - proto.RegisterType((*ManilaResponse)(nil), "eos.rpc.ManilaResponse") -} - -func init() { proto.RegisterFile("Rpc.proto", fileDescriptor_979aee4989bceb08) } - -var fileDescriptor_979aee4989bceb08 = []byte{ - // 3612 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x3a, 0x4b, 0x70, 0x1b, 0xc7, - 0x72, 0x5a, 0x2c, 0x00, 0x62, 0x1b, 0x00, 0x09, 0x8d, 0x14, 0x19, 0x86, 0x24, 0x8b, 0x5e, 0x59, - 0x0e, 0xa5, 0xf7, 0x44, 0xd9, 0x4a, 0x1c, 0xfb, 0xd9, 0x71, 0x39, 0x30, 0x09, 0x52, 0x78, 0x26, - 0x41, 0x7a, 0x00, 0xba, 0xa4, 0x5c, 0x50, 0xab, 0xdd, 0x21, 0xb8, 0x25, 0xec, 0x2e, 0xde, 0xee, - 0x42, 0x22, 0x7d, 0xce, 0x25, 0xef, 0x96, 0xaa, 0x77, 0xcb, 0x2d, 0x87, 0x5c, 0x72, 0xca, 0x35, - 0xa7, 0x1c, 0x5f, 0xe5, 0x90, 0x5c, 0x52, 0x95, 0x5b, 0x8e, 0xb9, 0x24, 0xd7, 0xdc, 0x53, 0xdd, - 0x33, 0xfb, 0x23, 0x41, 0x82, 0xce, 0xf3, 0x65, 0x6b, 0xba, 0xa7, 0xbb, 0x67, 0xa6, 0xa7, 0x7f, - 0x33, 0xb3, 0x60, 0xf0, 0x99, 0xbd, 0x39, 0x0b, 0x83, 0x38, 0x60, 0x2b, 0x22, 0x88, 0x36, 0xc3, - 0x99, 0x6d, 0x76, 0xa1, 0x7e, 0xe8, 0xfa, 0x13, 0x2e, 0x7e, 0x33, 0x17, 0x51, 0xcc, 0xda, 0xb0, - 0x62, 0xcd, 0xe3, 0x93, 0x37, 0xe2, 0xac, 0xad, 0xad, 0x6b, 0x1b, 0x06, 0x4f, 0x40, 0xec, 0xf1, - 0x44, 0x14, 0x59, 0x13, 0xd1, 0x2e, 0xad, 0x6b, 0x1b, 0x0d, 0x9e, 0x80, 0xe6, 0x23, 0x30, 0xa4, - 0x88, 0xd9, 0xb4, 0x40, 0xa6, 0x15, 0xc9, 0x7e, 0xab, 0xc1, 0x9d, 0xad, 0xc0, 0x8f, 0x2d, 0xd7, - 0x17, 0x61, 0xdf, 0x8f, 0x44, 0x18, 0x27, 0xa3, 0x7e, 0x0e, 0x86, 0x9d, 0xf4, 0xb4, 0xb5, 0x75, - 0x7d, 0xa3, 0xfe, 0xfc, 0xfd, 0x4d, 0x35, 0xc3, 0xcd, 0x94, 0x67, 0xdf, 0x39, 0xc4, 0xb9, 0xf3, - 0x8c, 0x36, 0x3f, 0xdd, 0x52, 0x71, 0xba, 0xf7, 0x01, 0x5c, 0xff, 0x44, 0x84, 0x6e, 0x3c, 0xf6, - 0x9c, 0xb6, 0xbe, 0xae, 0x6d, 0xd4, 0xb8, 0xa1, 0x30, 0xfb, 0x8e, 0xf9, 0x0a, 0x6e, 0xee, 0xb8, - 0x53, 0x51, 0x9c, 0xc6, 0x13, 0xa8, 0x1c, 0xbb, 0x53, 0x11, 0xa9, 0x29, 0xdc, 0x4e, 0xa7, 0x80, - 0xa4, 0xc9, 0xe8, 0x92, 0xe4, 0xf2, 0x91, 0xcd, 0xaf, 0xa0, 0x9e, 0x88, 0xbd, 0xa0, 0x10, 0x1d, - 0x09, 0x15, 0xc8, 0x18, 0x94, 0x43, 0x11, 0xdb, 0xed, 0xd2, 0xba, 0xbe, 0xd1, 0xe4, 0xd4, 0x36, - 0x9f, 0x42, 0x79, 0xe4, 0x7a, 0x82, 0xb5, 0x40, 0x8f, 0x84, 0x4d, 0x2a, 0x2c, 0x73, 0x6c, 0xb2, - 0x5b, 0x50, 0xf1, 0xc7, 0x88, 0x2b, 0x11, 0xae, 0xec, 0x0f, 0x85, 0x6d, 0xfe, 0x29, 0xd4, 0xb6, - 0x4e, 0x84, 0xfd, 0x26, 0x9a, 0x7b, 0xec, 0x36, 0x54, 0xde, 0x5a, 0xd3, 0x79, 0xa2, 0x77, 0x09, - 0xe0, 0x20, 0xf1, 0xd9, 0x4c, 0xa8, 0x49, 0x52, 0xdb, 0xfc, 0xc7, 0x32, 0xd4, 0x73, 0x4b, 0x62, - 0xab, 0x50, 0x72, 0x1d, 0x35, 0x56, 0xc9, 0x75, 0xd8, 0x7b, 0xb0, 0x82, 0x2a, 0x1e, 0xbb, 0x8e, - 0x1a, 0xac, 0x8a, 0x60, 0xdf, 0xc1, 0x59, 0xcd, 0x5d, 0xa9, 0xcd, 0x32, 0xc7, 0x26, 0x62, 0x26, - 0xae, 0xd3, 0x2e, 0x4b, 0xcc, 0xc4, 0x75, 0x70, 0xc0, 0xc8, 0xfd, 0x51, 0xb4, 0x2b, 0x72, 0x9a, - 0xd8, 0x66, 0x77, 0xc1, 0x98, 0x5a, 0x67, 0xc1, 0x9c, 0x44, 0x56, 0xd7, 0xb5, 0x8d, 0x26, 0xaf, - 0x49, 0x44, 0xdf, 0xc1, 0x79, 0x1f, 0x4f, 0xad, 0x49, 0xd4, 0x5e, 0xa1, 0x0e, 0x09, 0xa0, 0x18, - 0xdf, 0xf2, 0x44, 0xbb, 0x46, 0x8b, 0xa1, 0x36, 0x89, 0x71, 0xfd, 0x37, 0x63, 0xea, 0x30, 0xa8, - 0xa3, 0x86, 0x88, 0x01, 0x76, 0x3e, 0x84, 0x8a, 0x1d, 0xbb, 0x9e, 0x68, 0xc3, 0xba, 0xb6, 0x51, - 0x7f, 0xde, 0x4c, 0x37, 0x0f, 0xf5, 0xc9, 0x65, 0x1f, 0x12, 0x79, 0x44, 0x54, 0x5f, 0x48, 0x44, - 0x7d, 0xec, 0x29, 0xd4, 0x6c, 0xa5, 0xd4, 0x76, 0x83, 0xe8, 0x6e, 0x66, 0xc6, 0xa8, 0x3a, 0x78, - 0x4a, 0xc2, 0xee, 0x81, 0x31, 0x0d, 0x6c, 0x2b, 0x76, 0x03, 0x3f, 0x6a, 0x37, 0x69, 0x2f, 0x33, - 0x04, 0x7b, 0x0c, 0xad, 0xb9, 0x4f, 0xb3, 0xce, 0x88, 0x56, 0x89, 0x68, 0x4d, 0xe2, 0xf7, 0x52, - 0xd2, 0x2f, 0xa0, 0x7a, 0x6a, 0xc5, 0x71, 0x18, 0xb5, 0xd7, 0xc8, 0xfe, 0xd6, 0x17, 0xd9, 0xdf, - 0xe6, 0x4b, 0x22, 0xe9, 0xf9, 0x71, 0x78, 0xc6, 0x15, 0x3d, 0x2a, 0x6b, 0x66, 0xc5, 0x27, 0xed, - 0x96, 0x54, 0x16, 0xb6, 0x11, 0x27, 0x62, 0x6b, 0xd2, 0xbe, 0x29, 0x37, 0x1e, 0xdb, 0x9d, 0x5f, - 0x41, 0x3d, 0xc7, 0x8e, 0x9b, 0x97, 0x39, 0x3a, 0x36, 0x33, 0x1b, 0x2a, 0xe5, 0x6c, 0xe8, 0xcb, - 0xd2, 0x17, 0x9a, 0xf9, 0x6f, 0x3a, 0xb4, 0xce, 0x7b, 0xe2, 0x05, 0xc3, 0xb9, 0x0b, 0xc6, 0xcc, - 0x0a, 0x45, 0xde, 0x74, 0x6a, 0x12, 0x71, 0x4d, 0xe3, 0xb9, 0x0b, 0x46, 0x1c, 0x0a, 0x31, 0x26, - 0x0b, 0x42, 0x43, 0xd1, 0x79, 0x0d, 0x11, 0x43, 0xb4, 0x22, 0x06, 0x65, 0x2f, 0x70, 0xa4, 0x65, - 0x35, 0x39, 0xb5, 0x7f, 0x82, 0xf1, 0xa4, 0xf6, 0x61, 0x5c, 0xc7, 0x3e, 0xe0, 0x0a, 0xfb, 0x78, - 0x08, 0x95, 0xe8, 0x0a, 0x23, 0xa2, 0x3e, 0xf6, 0x75, 0xba, 0x99, 0x0d, 0xda, 0xcc, 0x47, 0x97, - 0xc6, 0xb3, 0x2b, 0x77, 0xb4, 0xb9, 0x60, 0x47, 0x57, 0x7f, 0x9e, 0x1d, 0xfd, 0x57, 0x1d, 0xe0, - 0xfb, 0x79, 0x10, 0x5b, 0x72, 0x2f, 0x93, 0x11, 0xb5, 0xe2, 0x88, 0xa4, 0x47, 0x15, 0x3c, 0x48, - 0x8f, 0x1f, 0xab, 0x80, 0x82, 0xfb, 0xb8, 0xfa, 0x9c, 0xa5, 0xcb, 0xfa, 0xfe, 0xe8, 0x60, 0xd4, - 0x1d, 0xbd, 0x3a, 0xec, 0xc9, 0x20, 0x83, 0x6e, 0x31, 0x8f, 0x84, 0xf3, 0xfa, 0x2c, 0x16, 0x91, - 0xda, 0xe2, 0x0c, 0xc1, 0x9e, 0x40, 0x0b, 0x81, 0x69, 0x30, 0x71, 0x6d, 0x6b, 0x2a, 0x89, 0x64, - 0xc4, 0xb8, 0x80, 0x4f, 0x24, 0xc9, 0xd0, 0x5c, 0xcd, 0x24, 0xc9, 0x40, 0xdc, 0x81, 0x9a, 0x67, - 0x9d, 0x4a, 0x09, 0x2b, 0xd2, 0xe4, 0x12, 0x98, 0x6d, 0xc0, 0x9a, 0x67, 0x9d, 0x16, 0x06, 0xa9, - 0x11, 0xc9, 0x79, 0xb4, 0x92, 0x22, 0x87, 0x30, 0x52, 0x29, 0x72, 0x84, 0x4f, 0xe0, 0xd6, 0x4c, - 0x84, 0xb6, 0xf0, 0x63, 0x6b, 0x22, 0xb2, 0x35, 0xa1, 0x89, 0x94, 0xf8, 0xa2, 0xae, 0x8b, 0x1c, - 0x52, 0x70, 0x7d, 0x11, 0x87, 0x1c, 0x63, 0x1d, 0xea, 0x51, 0x6c, 0xc5, 0xf3, 0x48, 0xca, 0x6e, - 0x90, 0xc2, 0xf3, 0xa8, 0x8c, 0x42, 0xca, 0x6a, 0xe6, 0x29, 0x08, 0x65, 0x1e, 0x43, 0x95, 0x07, - 0x53, 0x91, 0xb9, 0x9a, 0x76, 0xc1, 0xd5, 0x4a, 0x99, 0xab, 0x75, 0xa0, 0x36, 0x8f, 0x44, 0x48, - 0xfb, 0xab, 0x93, 0xb0, 0x14, 0x46, 0x8d, 0x4f, 0xc2, 0x60, 0x3e, 0xa3, 0xce, 0x32, 0x75, 0x66, - 0x08, 0x73, 0x0c, 0xe5, 0xfd, 0xed, 0xbe, 0xb3, 0xd0, 0x62, 0x64, 0x44, 0xc0, 0x61, 0xaa, 0x14, - 0x11, 0x5a, 0xa0, 0xbb, 0x7e, 0x40, 0x03, 0x54, 0x39, 0x36, 0xd9, 0x87, 0xca, 0x7e, 0xca, 0x64, - 0x3f, 0x39, 0xe7, 0x49, 0x4d, 0xc7, 0xfc, 0x06, 0x2a, 0x7b, 0xae, 0xe7, 0xc6, 0x38, 0xc2, 0x8f, - 0x22, 0x0c, 0x68, 0x84, 0x1a, 0xa7, 0x36, 0x4a, 0xf4, 0x5c, 0x3f, 0x59, 0x89, 0xe7, 0xfa, 0x84, - 0xb1, 0x4e, 0x93, 0xc0, 0xe2, 0x59, 0xa7, 0xe6, 0xdf, 0x57, 0xa1, 0xbe, 0xbf, 0x3d, 0x14, 0x53, - 0x61, 0x63, 0x68, 0x65, 0x77, 0xa0, 0x1a, 0x11, 0xa0, 0x24, 0x29, 0x88, 0x7d, 0x94, 0xc4, 0x84, - 0x12, 0x79, 0xf2, 0x6a, 0x3a, 0x19, 0x1a, 0x3e, 0x09, 0x0a, 0x1f, 0x25, 0x41, 0x41, 0x5f, 0x4c, - 0xe5, 0x25, 0x54, 0x32, 0x2a, 0x94, 0x17, 0x53, 0xc9, 0xb0, 0x60, 0xe6, 0xb2, 0xe3, 0x45, 0x22, - 0x99, 0x2d, 0x9f, 0x00, 0xc5, 0xbc, 0x34, 0x06, 0x5e, 0xa4, 0x4b, 0xfb, 0x91, 0xd6, 0x3e, 0x71, - 0xa7, 0x4e, 0x28, 0x7c, 0xb2, 0xfe, 0x05, 0xb4, 0x49, 0x3f, 0xfb, 0x65, 0x3e, 0x51, 0xd5, 0x16, - 0x12, 0xe7, 0x12, 0xd7, 0xd7, 0xc0, 0x64, 0x82, 0x12, 0x4e, 0x2e, 0x75, 0x19, 0x0b, 0xd9, 0x6e, - 0x26, 0x94, 0x59, 0x32, 0xeb, 0x80, 0xca, 0xf0, 0xae, 0x43, 0x9e, 0x52, 0xe6, 0x29, 0x9c, 0x05, - 0xed, 0x3a, 0x75, 0xa8, 0xa0, 0xdd, 0x86, 0x95, 0xe8, 0xcc, 0x43, 0x39, 0x64, 0xfe, 0x35, 0x9e, - 0x80, 0x85, 0x84, 0xdc, 0x5c, 0x9e, 0x90, 0x6f, 0x43, 0x25, 0x78, 0x87, 0x95, 0xe4, 0xaa, 0xcc, - 0x09, 0x04, 0x20, 0x96, 0x4c, 0xb8, 0xbd, 0x26, 0xb1, 0x04, 0x60, 0x99, 0x48, 0xdd, 0xe3, 0x30, - 0x08, 0x62, 0xca, 0x9f, 0x35, 0x6e, 0x10, 0x86, 0x07, 0x41, 0x8c, 0xdd, 0x44, 0x27, 0xbb, 0x6f, - 0xca, 0x6e, 0xc2, 0x50, 0xf7, 0x1f, 0xc3, 0x5a, 0x28, 0x26, 0xe2, 0x74, 0x36, 0x46, 0x0f, 0x24, - 0x6f, 0x61, 0xe4, 0x0c, 0xab, 0x12, 0xbd, 0xa3, 0xb0, 0xec, 0x11, 0x28, 0xcc, 0xd8, 0x71, 0xa5, - 0xcb, 0xdd, 0x22, 0xba, 0xa6, 0xc4, 0x6e, 0x4b, 0x24, 0xfb, 0x0c, 0x2a, 0x14, 0xff, 0xdb, 0xb7, - 0x29, 0x67, 0x3c, 0x48, 0x57, 0x99, 0x33, 0x66, 0x99, 0x2e, 0x64, 0xb6, 0x90, 0xd4, 0x9d, 0x2f, - 0x00, 0x32, 0xe4, 0x4f, 0xca, 0x01, 0xff, 0xac, 0x81, 0xb1, 0xbf, 0x9d, 0xd4, 0xbf, 0x89, 0x6b, - 0x6a, 0x97, 0xba, 0x26, 0xbb, 0x9f, 0xfa, 0x77, 0x3e, 0xf1, 0x61, 0x38, 0x20, 0x77, 0xcf, 0x55, - 0xc5, 0x7a, 0xb1, 0x1e, 0x7f, 0x08, 0xe5, 0x30, 0x98, 0x26, 0xde, 0xb1, 0x96, 0xb2, 0xca, 0x88, - 0xc5, 0xa9, 0x93, 0x3d, 0x07, 0x23, 0x4a, 0xd6, 0xa9, 0x5c, 0xe4, 0xf6, 0x22, 0x1d, 0xf0, 0x8c, - 0xcc, 0xfc, 0x2b, 0x0d, 0x00, 0x97, 0x10, 0xcd, 0x02, 0x3f, 0x12, 0xd7, 0x59, 0xc3, 0xc7, 0xa0, - 0x1f, 0x7b, 0xc9, 0x22, 0x16, 0x17, 0xf9, 0x48, 0xc0, 0x7e, 0x01, 0xba, 0xad, 0xce, 0x0e, 0x57, - 0x9e, 0x47, 0x90, 0xca, 0xfc, 0x4f, 0x0d, 0x6b, 0x6a, 0xdf, 0xf9, 0xf9, 0x74, 0x99, 0x68, 0x4c, - 0xbf, 0x4a, 0x63, 0x39, 0x85, 0x97, 0x8b, 0x0a, 0x97, 0x19, 0xcd, 0x11, 0xb3, 0xf8, 0x44, 0x65, - 0xd6, 0x14, 0x2e, 0xea, 0xb9, 0x7a, 0x3d, 0x3d, 0xef, 0x82, 0x31, 0x3c, 0xb1, 0x42, 0xd1, 0x9d, - 0xcb, 0xc2, 0x00, 0xcf, 0x91, 0xca, 0xc8, 0xa8, 0xbd, 0xb0, 0x58, 0x60, 0x50, 0x3e, 0x09, 0xa2, - 0x58, 0x19, 0x03, 0xb5, 0xcd, 0xdf, 0x96, 0x00, 0x48, 0x92, 0xac, 0x3b, 0x3e, 0x00, 0x98, 0x89, - 0xd0, 0x73, 0xa3, 0x08, 0x27, 0x23, 0x05, 0xe6, 0x30, 0xb8, 0x42, 0x71, 0x3a, 0x73, 0x43, 0x11, - 0xa9, 0x98, 0x9f, 0x80, 0x99, 0x9f, 0x4b, 0xe9, 0xe7, 0xfd, 0x5c, 0xea, 0x43, 0xf9, 0xf9, 0x07, - 0x00, 0x13, 0xe1, 0x8b, 0xd0, 0x4a, 0x4d, 0xab, 0xcc, 0x73, 0x98, 0x34, 0x97, 0x55, 0xd5, 0x82, - 0x30, 0x97, 0xdd, 0x03, 0xc3, 0x9a, 0x4e, 0x83, 0x77, 0x18, 0x6c, 0x29, 0xb8, 0xd6, 0x78, 0x86, - 0xc0, 0x9c, 0xf2, 0x36, 0x0e, 0xde, 0x08, 0x9f, 0x42, 0xa9, 0xc1, 0x15, 0xc4, 0x7e, 0x09, 0x2b, - 0x41, 0xe8, 0x4e, 0x5c, 0x0a, 0x96, 0xe8, 0xc5, 0x59, 0x89, 0x94, 0xea, 0x8f, 0x27, 0x24, 0xe6, - 0x5f, 0x6b, 0x4a, 0x19, 0x23, 0x62, 0x7e, 0x0c, 0x15, 0x29, 0x53, 0xa3, 0x4d, 0xb9, 0x55, 0x64, - 0x55, 0x07, 0x50, 0x39, 0xce, 0x3d, 0x30, 0x22, 0x77, 0xe2, 0x5b, 0xf1, 0x3c, 0x4c, 0x1c, 0x3b, - 0x43, 0xe0, 0x7a, 0x23, 0x11, 0xba, 0xd6, 0xd4, 0xfd, 0x51, 0x48, 0x13, 0x6e, 0xf0, 0x1c, 0x86, - 0x4e, 0x69, 0x42, 0xc8, 0xda, 0xbb, 0xc2, 0xa9, 0x6d, 0xfe, 0x57, 0x1b, 0x8c, 0xc1, 0x70, 0xf9, - 0x4d, 0x40, 0x62, 0x98, 0xa5, 0xab, 0x0c, 0xf3, 0x73, 0xa8, 0x78, 0x6f, 0x1c, 0x37, 0x6c, 0xff, - 0x11, 0x51, 0x65, 0xa1, 0x2c, 0x1d, 0x61, 0x73, 0x1f, 0xfb, 0x15, 0xf0, 0xe2, 0x06, 0x97, 0xf4, - 0xc8, 0x18, 0x7a, 0xc8, 0x78, 0xe7, 0x52, 0x46, 0xee, 0x15, 0x19, 0x89, 0x1e, 0x19, 0xe3, 0x60, - 0x6e, 0x9f, 0xb4, 0xdf, 0xbb, 0x94, 0x71, 0x84, 0xfd, 0x39, 0x46, 0xa2, 0x67, 0x5f, 0x42, 0x55, - 0xe6, 0xaf, 0x76, 0x9b, 0x38, 0xd7, 0x17, 0x70, 0x1e, 0x11, 0x41, 0xc6, 0xaa, 0x38, 0xd8, 0x26, - 0x94, 0x42, 0xaf, 0xfd, 0x3e, 0xf1, 0xdd, 0x5b, 0x38, 0xd5, 0x8c, 0xa7, 0x14, 0x7a, 0x38, 0x56, - 0x28, 0x13, 0x45, 0xe7, 0xd2, 0xb1, 0x38, 0x11, 0xe4, 0xc6, 0x92, 0x1c, 0xec, 0xeb, 0x2c, 0x41, - 0xde, 0x25, 0xe6, 0x0f, 0x17, 0x30, 0x0f, 0x25, 0x45, 0xc6, 0x9d, 0x66, 0xd1, 0xaf, 0x61, 0xe5, - 0xad, 0x08, 0xc9, 0xcb, 0xee, 0x5d, 0xca, 0xfe, 0x83, 0xa4, 0xc8, 0xb1, 0x2b, 0x1e, 0x64, 0x0f, - 0x85, 0x7d, 0x66, 0x4f, 0x45, 0xfb, 0xfe, 0xa5, 0xec, 0x5c, 0x52, 0xe4, 0xd8, 0x15, 0x0f, 0xfb, - 0x32, 0x49, 0x6d, 0x1f, 0x10, 0xb3, 0xb9, 0x68, 0xea, 0x22, 0x7e, 0xd9, 0x8d, 0xe3, 0xfc, 0xce, - 0x12, 0x0b, 0xee, 0xac, 0x7d, 0x12, 0xbc, 0xf3, 0xdb, 0x0f, 0x2e, 0xdd, 0xd9, 0x2d, 0xec, 0xcf, - 0x31, 0x12, 0xbd, 0x64, 0xf4, 0x02, 0xa7, 0xbd, 0x7e, 0x05, 0xa3, 0x17, 0x38, 0x05, 0x46, 0x2f, - 0x70, 0xd8, 0xa7, 0xa0, 0x5b, 0xf6, 0xb4, 0xfd, 0x21, 0xb1, 0xdd, 0x5f, 0xc0, 0xd6, 0xb5, 0xa7, - 0x19, 0x13, 0xd2, 0x4a, 0xf3, 0x43, 0xd7, 0x35, 0xaf, 0x30, 0xbf, 0x37, 0xc2, 0x2f, 0x98, 0x1f, - 0x3a, 0xf2, 0xe7, 0x50, 0xf9, 0x0d, 0x1e, 0xc3, 0xda, 0x0f, 0x2f, 0x65, 0xa4, 0x63, 0x5a, 0x8e, - 0x91, 0xe8, 0x3b, 0x63, 0x68, 0xe4, 0x5d, 0x48, 0xe5, 0x13, 0xed, 0xb2, 0x7c, 0x72, 0x0f, 0x8c, - 0x50, 0xd8, 0xf3, 0x30, 0x72, 0xdf, 0x4a, 0xdf, 0xad, 0xf1, 0x0c, 0x91, 0x1e, 0xae, 0x75, 0x3a, - 0x74, 0x53, 0xbb, 0xf3, 0x14, 0x1a, 0x79, 0x57, 0x5b, 0x32, 0x00, 0x92, 0xe7, 0x1d, 0x6c, 0x19, - 0xf9, 0x1e, 0x34, 0x0b, 0x5e, 0x75, 0x8d, 0xf9, 0xfb, 0x41, 0x62, 0x82, 0xea, 0x42, 0x2f, 0x45, - 0x74, 0x8e, 0xc1, 0x48, 0x7d, 0xed, 0x0f, 0xd3, 0xc4, 0xd5, 0xe3, 0xec, 0x40, 0xb3, 0xe0, 0x9f, - 0xcb, 0xc6, 0xba, 0x03, 0xd5, 0xd8, 0x0a, 0x27, 0x22, 0x56, 0x31, 0x5a, 0x41, 0x9d, 0x5d, 0x58, - 0x2d, 0xba, 0xea, 0xff, 0x57, 0xd0, 0xff, 0x68, 0xb0, 0x5a, 0xf4, 0xda, 0x65, 0x92, 0xbe, 0x91, - 0x75, 0x4d, 0x89, 0x2a, 0x93, 0xa7, 0x4b, 0x83, 0xc0, 0xe6, 0x0f, 0x3d, 0x3e, 0xec, 0x1f, 0x0c, - 0xc6, 0x5b, 0xfb, 0xdb, 0x54, 0xeb, 0x60, 0x72, 0xf1, 0xac, 0xd3, 0x24, 0x98, 0xe8, 0x94, 0x42, - 0x72, 0x18, 0x3c, 0xaa, 0x4e, 0x42, 0xeb, 0x75, 0x42, 0x20, 0x13, 0x71, 0x1e, 0x65, 0x7e, 0x01, - 0xf5, 0x9c, 0x54, 0x06, 0x50, 0xdd, 0xe2, 0xbd, 0xee, 0xa8, 0xd7, 0xba, 0xc1, 0x0c, 0xa8, 0x1c, - 0x1e, 0xf1, 0xdd, 0x5e, 0x4b, 0x63, 0x35, 0x28, 0xef, 0xf5, 0x87, 0xa3, 0x56, 0x09, 0x5b, 0xbb, - 0xbc, 0xfb, 0x6d, 0x4b, 0xef, 0xfc, 0xbb, 0x0e, 0xab, 0xc5, 0x28, 0xb3, 0xa0, 0xe0, 0x5d, 0xba, - 0xc2, 0xa2, 0x84, 0x4d, 0xde, 0xdb, 0x7a, 0xb5, 0xb5, 0xd7, 0xcb, 0x56, 0x78, 0x08, 0xf5, 0x50, - 0x44, 0x71, 0x10, 0x0a, 0x3c, 0x9b, 0xa8, 0x12, 0x6c, 0xf3, 0x1a, 0x82, 0x24, 0xd3, 0x0e, 0x1e, - 0x68, 0x78, 0x5e, 0x04, 0xeb, 0x83, 0x31, 0x9b, 0x87, 0x13, 0xe1, 0x58, 0x71, 0x52, 0x04, 0xff, - 0x62, 0xb9, 0xbc, 0x43, 0x64, 0xd9, 0xb6, 0x62, 0xc1, 0x33, 0xee, 0xce, 0x4b, 0x68, 0xe4, 0xc7, - 0xa1, 0xe3, 0x54, 0x10, 0xda, 0x42, 0x1d, 0x6e, 0x25, 0x80, 0xf6, 0xe2, 0xbd, 0xa1, 0x9a, 0x46, - 0x5a, 0xb8, 0x82, 0xb0, 0x2e, 0x54, 0xbb, 0x10, 0x29, 0xeb, 0x4e, 0xe1, 0xce, 0x2e, 0x18, 0xe9, - 0x88, 0x18, 0x11, 0xce, 0x84, 0x15, 0x92, 0xd4, 0x0a, 0xa7, 0x36, 0x0e, 0xe5, 0x05, 0xbe, 0x92, - 0x59, 0xe1, 0x12, 0xc0, 0x0d, 0x70, 0xac, 0x33, 0x65, 0x08, 0xd8, 0x34, 0x9f, 0x41, 0x3d, 0xa7, - 0x53, 0x56, 0x87, 0x15, 0xde, 0x1b, 0x8e, 0x0e, 0xf8, 0x65, 0x1b, 0xdc, 0xf9, 0x5f, 0x0d, 0xd6, - 0xce, 0xc5, 0xff, 0x65, 0x66, 0xbc, 0x93, 0xde, 0xb0, 0x95, 0xa8, 0xce, 0xda, 0x5c, 0x9e, 0x52, - 0x16, 0x5e, 0xb5, 0x15, 0xa2, 0x81, 0x7e, 0x3e, 0x1a, 0x98, 0xd0, 0x78, 0x23, 0xce, 0xa2, 0x38, - 0x70, 0xc4, 0x54, 0xd0, 0xd6, 0xe9, 0x1b, 0x06, 0x2f, 0xe0, 0xfe, 0x80, 0x4b, 0xb8, 0xce, 0x08, - 0x1a, 0xf9, 0xd4, 0xb5, 0x6c, 0xcd, 0x8f, 0x92, 0x92, 0xf7, 0x92, 0xda, 0x4b, 0xf6, 0x76, 0xba, - 0x28, 0x35, 0xcb, 0x6b, 0xcb, 0xa4, 0x26, 0xb1, 0xbf, 0x94, 0x8b, 0xfd, 0xbf, 0x2f, 0x01, 0x64, - 0x49, 0x6e, 0x99, 0x84, 0xaf, 0xf2, 0x0e, 0xf7, 0xf8, 0xca, 0x7c, 0xb9, 0xd9, 0xdd, 0xda, 0x1b, - 0x6f, 0x1d, 0xec, 0xef, 0x77, 0x07, 0xca, 0xd9, 0xae, 0xde, 0x80, 0x2f, 0x0b, 0xf7, 0x45, 0x1f, - 0x2f, 0x97, 0x9d, 0x3b, 0x61, 0x31, 0x28, 0x87, 0xf3, 0xa9, 0xbc, 0x6d, 0x31, 0x38, 0xb5, 0xd1, - 0xfe, 0x67, 0x41, 0xe4, 0xa6, 0x47, 0x9f, 0x26, 0x4f, 0x61, 0xf3, 0x29, 0xd4, 0x73, 0xb3, 0x43, - 0xf3, 0x1c, 0x1c, 0x0c, 0xd0, 0x66, 0x01, 0xaa, 0xfb, 0x07, 0xdb, 0xfd, 0x9d, 0x57, 0x79, 0xa3, - 0x35, 0x1f, 0x41, 0x2d, 0x19, 0x90, 0x35, 0xa0, 0x76, 0x34, 0xec, 0xf1, 0x71, 0x77, 0x6b, 0xaf, - 0x75, 0x03, 0x0d, 0x7e, 0xf8, 0x6a, 0x48, 0x80, 0xd6, 0xf9, 0x15, 0xe6, 0xc5, 0x2c, 0xf3, 0x2f, - 0x29, 0xf2, 0x25, 0xa9, 0xa4, 0xe8, 0xfc, 0x5e, 0x83, 0x46, 0x3e, 0xf9, 0x2f, 0xbc, 0x73, 0x7b, - 0x90, 0x3b, 0x47, 0x5e, 0xb0, 0x08, 0xdc, 0x9d, 0x75, 0x28, 0x05, 0x33, 0x75, 0x61, 0xdb, 0x2a, - 0x5e, 0xd8, 0x1e, 0x1c, 0xf2, 0x52, 0x30, 0x2b, 0x5c, 0x7f, 0x96, 0xcf, 0x5d, 0x7f, 0xe6, 0x2f, - 0x58, 0x2b, 0xe7, 0x2e, 0x58, 0x1f, 0x43, 0x45, 0xa0, 0xcd, 0x93, 0x26, 0x57, 0x73, 0x4b, 0x21, - 0xe1, 0xbd, 0xc1, 0x88, 0xbf, 0xe2, 0x92, 0xe2, 0x5b, 0x03, 0x56, 0xec, 0xc0, 0xf3, 0x2c, 0xdf, - 0x31, 0xff, 0xc6, 0x00, 0xc0, 0xed, 0x53, 0x47, 0xf6, 0xcf, 0xa1, 0x22, 0xc2, 0x30, 0x08, 0x95, - 0x3e, 0x8a, 0x75, 0xa5, 0xa4, 0xd9, 0xec, 0x21, 0x41, 0x02, 0x71, 0x49, 0x9f, 0xaf, 0x68, 0xe5, - 0xea, 0x1f, 0x2e, 0x62, 0x4d, 0xb3, 0x99, 0x62, 0x5e, 0x54, 0xd1, 0xea, 0x97, 0xb3, 0xa7, 0x11, - 0x39, 0x61, 0x4f, 0x2a, 0x5a, 0x55, 0x23, 0x96, 0x17, 0x54, 0x6d, 0x8a, 0x95, 0x0c, 0x53, 0xb1, - 0x25, 0x35, 0xa2, 0x2c, 0xf5, 0x2a, 0x97, 0xaf, 0x54, 0x6d, 0x77, 0xb2, 0x52, 0x59, 0xea, 0x7d, - 0x06, 0xcd, 0x82, 0x06, 0xd0, 0x0e, 0x6c, 0x74, 0x59, 0x4d, 0xba, 0x2c, 0xb6, 0xe9, 0x1e, 0x34, - 0x9a, 0xa8, 0xf3, 0x37, 0x36, 0x3b, 0xff, 0xa1, 0xc1, 0xda, 0xb9, 0xe5, 0x5f, 0x8f, 0x93, 0x7d, - 0x57, 0xc8, 0x12, 0x18, 0x5e, 0x9f, 0x5d, 0x43, 0xb7, 0x09, 0xdc, 0xf7, 0x8f, 0x83, 0x5c, 0x5a, - 0xf9, 0x1e, 0xea, 0xb9, 0x8e, 0x65, 0xb1, 0x24, 0x7d, 0x83, 0x29, 0x5d, 0xfe, 0x06, 0xd3, 0xf9, - 0x5b, 0x1d, 0xd6, 0xce, 0xed, 0xcc, 0xf5, 0x57, 0xa6, 0x76, 0xf0, 0xca, 0x95, 0x9d, 0x13, 0x9e, - 0xc0, 0x72, 0x65, 0x89, 0x80, 0xce, 0xef, 0x4a, 0x50, 0xcf, 0xf5, 0xfc, 0x3c, 0xe1, 0x1b, 0x35, - 0xe0, 0xe4, 0x2e, 0x9c, 0xcf, 0x6b, 0x80, 0xfa, 0xd2, 0x77, 0xd6, 0x72, 0xee, 0x9d, 0xf5, 0x50, - 0xc5, 0xca, 0x0a, 0x79, 0xe3, 0x9f, 0xff, 0xc4, 0x75, 0x6d, 0x6e, 0xf7, 0xf6, 0x7a, 0xa3, 0xfe, - 0xc1, 0x20, 0x17, 0x41, 0x55, 0x2e, 0xab, 0xa6, 0xb9, 0xcc, 0x34, 0xa1, 0x91, 0xa7, 0xc3, 0x70, - 0xb8, 0xd3, 0xdf, 0xc3, 0x20, 0x59, 0x83, 0xf2, 0x88, 0xf7, 0x7a, 0x2d, 0xad, 0xb3, 0x0b, 0xf5, - 0x9c, 0xed, 0x5f, 0x73, 0x63, 0x92, 0x60, 0xad, 0x67, 0xc1, 0xba, 0x73, 0x02, 0xcd, 0x82, 0x3f, - 0x5c, 0x53, 0xd4, 0xa7, 0x60, 0x90, 0xdf, 0xf8, 0xf2, 0x44, 0xa3, 0x17, 0xa2, 0x6c, 0xf6, 0xe6, - 0xc5, 0x33, 0x2a, 0xf3, 0x31, 0x34, 0x07, 0xd1, 0x30, 0xb6, 0xe2, 0xa5, 0xf7, 0x1f, 0xe6, 0x3f, - 0xe8, 0xb0, 0x9a, 0xd0, 0x5e, 0x31, 0x2d, 0x06, 0x65, 0x91, 0xcd, 0x8b, 0xda, 0x58, 0x08, 0x44, - 0x31, 0x56, 0x80, 0xea, 0xca, 0x8a, 0x00, 0x2c, 0xd5, 0xfc, 0x7c, 0xec, 0x55, 0x10, 0xd6, 0xd1, - 0x7e, 0xfa, 0xaf, 0x43, 0x12, 0x7c, 0xf3, 0x28, 0x76, 0x17, 0x8c, 0xd7, 0x41, 0x10, 0x8f, 0xc9, - 0x5a, 0xe4, 0xd3, 0x58, 0x0d, 0x11, 0xf4, 0x0f, 0xc1, 0x03, 0xa8, 0xdb, 0xf3, 0x90, 0x9e, 0x63, - 0x8f, 0x5d, 0x47, 0x3d, 0x8e, 0x81, 0x42, 0xed, 0xb8, 0x4e, 0x9e, 0xc0, 0x76, 0x1d, 0xf5, 0x34, - 0x96, 0x10, 0x6c, 0x49, 0x02, 0x4f, 0x78, 0xe3, 0xb7, 0x6e, 0x18, 0xcf, 0xad, 0xa9, 0x7a, 0x18, - 0x03, 0x4f, 0x78, 0x3f, 0x48, 0x0c, 0xfb, 0x10, 0x1a, 0x48, 0x10, 0x8a, 0xc8, 0x75, 0x84, 0x1f, - 0xab, 0x9b, 0x7e, 0x64, 0xe2, 0x0a, 0x85, 0x53, 0x44, 0x92, 0x08, 0x73, 0x9b, 0xba, 0xf0, 0xaf, - 0x79, 0xc2, 0xa3, 0x5c, 0xc7, 0xee, 0x03, 0x4a, 0x1b, 0x4f, 0xc2, 0xe0, 0x5d, 0x7c, 0x42, 0xd7, - 0xfe, 0x65, 0x8e, 0xe4, 0xbb, 0x84, 0xc0, 0x3d, 0x88, 0x4f, 0x42, 0x61, 0x39, 0xf2, 0xbd, 0xab, - 0xcc, 0x13, 0x10, 0xf7, 0xfc, 0xd8, 0x89, 0xe8, 0x86, 0xbf, 0xcc, 0xb1, 0x89, 0x4a, 0x9c, 0xcf, - 0x48, 0x0f, 0x6b, 0x52, 0x89, 0x12, 0x32, 0xff, 0x49, 0x87, 0xe6, 0xbe, 0xe5, 0xbb, 0xd3, 0x34, - 0x87, 0x7e, 0x03, 0x8d, 0x50, 0x36, 0xc7, 0xb9, 0x2b, 0xda, 0xec, 0xf6, 0x66, 0xbf, 0x3b, 0xe8, - 0xef, 0x75, 0xc7, 0xbc, 0xf7, 0xfd, 0x51, 0x6f, 0x38, 0x92, 0xf5, 0x44, 0x5d, 0x71, 0x8c, 0xd0, - 0x29, 0xde, 0x87, 0x1a, 0xda, 0xc2, 0xf8, 0xdc, 0xcf, 0x1f, 0xdf, 0xc9, 0x5b, 0x57, 0xfa, 0xc1, - 0xc6, 0x0e, 0xa6, 0xc9, 0xab, 0x5a, 0x02, 0xe3, 0x62, 0x49, 0x0b, 0xe3, 0xfc, 0xb3, 0x1a, 0x61, - 0xe8, 0x07, 0x86, 0x75, 0xa8, 0x3b, 0x22, 0xb2, 0x43, 0x77, 0x96, 0xde, 0x51, 0x1a, 0x3c, 0x8f, - 0xc2, 0x71, 0xa5, 0x00, 0xf5, 0x17, 0x85, 0xc1, 0x57, 0x08, 0xee, 0x3b, 0xec, 0x23, 0x58, 0x95, - 0x5d, 0xf2, 0xb9, 0x42, 0x6d, 0xb7, 0xc1, 0x1b, 0x84, 0xdd, 0x45, 0xa4, 0xfc, 0xd5, 0x42, 0xe6, - 0x9f, 0x9a, 0x2c, 0xdf, 0x09, 0x40, 0x2d, 0xdb, 0xa1, 0xb0, 0xe2, 0x20, 0xa4, 0x1d, 0x36, 0x78, - 0x02, 0xa2, 0x4e, 0x85, 0xbc, 0x4c, 0x05, 0x79, 0xc7, 0x29, 0x21, 0xdc, 0x76, 0xcb, 0xf1, 0x5c, - 0x7f, 0xac, 0x7a, 0xeb, 0x72, 0xae, 0x84, 0xeb, 0xa5, 0x0f, 0x2b, 0x72, 0x42, 0x74, 0xff, 0xdb, - 0xc8, 0x2d, 0xf6, 0x45, 0x10, 0xc5, 0xec, 0x51, 0x32, 0xdf, 0xe4, 0x69, 0x49, 0x3d, 0x68, 0x36, - 0x09, 0x9b, 0x3c, 0x23, 0x99, 0xff, 0xa2, 0xc1, 0x6a, 0xb2, 0x79, 0xca, 0xd5, 0x94, 0xb7, 0x6b, - 0x85, 0xc0, 0x61, 0x27, 0xe5, 0x6b, 0x45, 0x39, 0xdf, 0x7d, 0x80, 0x38, 0x88, 0xad, 0xe9, 0x78, - 0x1e, 0xa9, 0xfb, 0x4f, 0x9d, 0x1b, 0x84, 0x39, 0x8a, 0x04, 0x06, 0xe2, 0x55, 0xd9, 0x6d, 0x5b, - 0x33, 0xcb, 0x76, 0x63, 0x79, 0x7b, 0xae, 0xf3, 0x26, 0x61, 0xb7, 0x14, 0x92, 0x7d, 0x0c, 0x6b, - 0xbe, 0x78, 0x27, 0x6d, 0x77, 0x9c, 0x65, 0x6e, 0x9d, 0x37, 0x7d, 0xf1, 0x8e, 0x2c, 0x98, 0x82, - 0x09, 0x6a, 0x3f, 0xa3, 0xcb, 0xdd, 0x23, 0x37, 0x12, 0xb2, 0x43, 0x2b, 0x3e, 0x79, 0xf2, 0x67, - 0x50, 0x3e, 0x17, 0x31, 0x9b, 0x60, 0x6c, 0x1d, 0x0c, 0x46, 0xdd, 0xfe, 0xa0, 0xc7, 0x5b, 0x1a, - 0x56, 0x8d, 0x58, 0x59, 0xf6, 0x07, 0xbb, 0xf2, 0xc8, 0x3b, 0x1c, 0x75, 0x47, 0x2d, 0xfd, 0xc9, - 0x53, 0x30, 0xd2, 0xc7, 0x75, 0x44, 0x63, 0x9d, 0x29, 0xcf, 0x51, 0xbb, 0xfc, 0xe0, 0xe8, 0xb0, - 0x55, 0x42, 0xc6, 0x43, 0x7e, 0xf0, 0xeb, 0xde, 0x16, 0x92, 0x3f, 0x83, 0x15, 0x55, 0xda, 0xb1, - 0x15, 0xd0, 0x77, 0x7b, 0xa3, 0xd6, 0x0d, 0x6c, 0x0c, 0x7b, 0xa3, 0x96, 0xc6, 0xaa, 0x50, 0xe2, - 0xfb, 0xad, 0x12, 0x16, 0xb4, 0x7c, 0x7f, 0x70, 0xb0, 0xdd, 0x23, 0xf9, 0x90, 0x95, 0x6b, 0xc5, - 0xa2, 0xf7, 0x87, 0x83, 0xbd, 0xa3, 0x7d, 0x3c, 0xa9, 0x19, 0x50, 0xe9, 0x13, 0x79, 0xe9, 0xc9, - 0xef, 0x34, 0xb8, 0xb5, 0xc0, 0x45, 0x58, 0x0b, 0x1a, 0xf2, 0x10, 0x3f, 0x1e, 0xbe, 0xe8, 0xd2, - 0x49, 0xaf, 0xa5, 0x52, 0x45, 0x82, 0xd1, 0x10, 0xd3, 0x7b, 0x39, 0xea, 0x0d, 0xb6, 0x15, 0xa6, - 0x84, 0x98, 0xe1, 0x0b, 0xde, 0x1f, 0x7c, 0xa7, 0x30, 0x3a, 0xbb, 0x05, 0x6b, 0xfb, 0xdd, 0x41, - 0x77, 0xb7, 0x37, 0xee, 0xbd, 0x54, 0xda, 0x28, 0x53, 0x79, 0x3d, 0x90, 0xe8, 0x56, 0x85, 0x31, - 0x58, 0xdd, 0xed, 0x8d, 0xc6, 0x5b, 0xdd, 0xc3, 0xee, 0x56, 0x7f, 0xd4, 0xef, 0x0d, 0x5b, 0xd5, - 0xe7, 0xff, 0xad, 0x83, 0xde, 0x0b, 0x22, 0xf6, 0x1c, 0xca, 0x87, 0xae, 0x3f, 0x61, 0xd9, 0x83, - 0x46, 0xee, 0xff, 0xb6, 0x0e, 0x3b, 0x87, 0x9d, 0x4d, 0xcf, 0xcc, 0x1b, 0xec, 0x53, 0x28, 0xed, - 0x6f, 0x33, 0x96, 0x4b, 0xd8, 0x09, 0xfd, 0xad, 0x02, 0x4e, 0x9a, 0xa0, 0x79, 0xe3, 0x13, 0x8d, - 0x7d, 0x06, 0xe5, 0x1d, 0xd7, 0x77, 0x58, 0xfe, 0xfd, 0x28, 0x7d, 0xfd, 0xb9, 0x9c, 0xed, 0x2b, - 0xa8, 0xca, 0xd4, 0xc1, 0xee, 0x64, 0xd9, 0x39, 0x9f, 0x77, 0x3a, 0xef, 0x5d, 0xc0, 0x27, 0xec, - 0xec, 0xd7, 0xb0, 0x76, 0xee, 0x07, 0x3a, 0xf6, 0xe0, 0xe2, 0xb3, 0x54, 0xe1, 0x9f, 0xb6, 0x4e, - 0x36, 0xbf, 0xdc, 0x4f, 0x69, 0xe6, 0x0d, 0xf6, 0x17, 0x00, 0xd9, 0x0f, 0x70, 0xac, 0x53, 0x78, - 0x05, 0xbb, 0x9e, 0x84, 0x4f, 0xa1, 0xdc, 0x3b, 0x15, 0x76, 0x4e, 0x6d, 0xe9, 0x91, 0x2c, 0xb7, - 0xfe, 0xac, 0xf4, 0x30, 0x6f, 0xb0, 0x17, 0x70, 0x4b, 0x7a, 0xf3, 0x50, 0x84, 0x6f, 0x45, 0x7a, - 0xd0, 0xcf, 0x54, 0x51, 0x08, 0xd4, 0x39, 0x55, 0x14, 0x63, 0x80, 0x79, 0xe3, 0xdb, 0x23, 0x58, - 0x73, 0x83, 0xcd, 0x09, 0xf6, 0x29, 0x9a, 0x6f, 0x6b, 0xbd, 0x20, 0xa2, 0xb4, 0x7e, 0xa8, 0xfd, - 0xe5, 0x27, 0x13, 0x37, 0x3e, 0x99, 0xbf, 0xde, 0xb4, 0x03, 0xef, 0x99, 0x2d, 0x42, 0xff, 0xa9, - 0x08, 0xa2, 0x67, 0x48, 0xfd, 0x94, 0xa2, 0xf1, 0x33, 0xfa, 0xbe, 0x9e, 0x1f, 0x7f, 0x25, 0x82, - 0x68, 0x8c, 0xf8, 0xbf, 0x2b, 0xe9, 0xbd, 0x83, 0xe1, 0xeb, 0x2a, 0x75, 0xfc, 0xc9, 0xff, 0x05, - 0x00, 0x00, 0xff, 0xff, 0x28, 0x5f, 0x99, 0x96, 0x2a, 0x29, 0x00, 0x00, -} - -// Reference imports to suppress errors if they are not otherwise used. -var _ context.Context -var _ grpc.ClientConn - -// This is a compile-time assertion to ensure that this generated file -// is compatible with the grpc package it is being compiled against. -const _ = grpc.SupportPackageIsVersion4 - -// EosClient is the client API for Eos service. -// -// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream. -type EosClient interface { - // Replies to a ping - Ping(ctx context.Context, in *PingRequest, opts ...grpc.CallOption) (*PingReply, error) - // Replies to MD requests with a stream - MD(ctx context.Context, in *MDRequest, opts ...grpc.CallOption) (Eos_MDClient, error) - // Replies to Find requests with a stream - Find(ctx context.Context, in *FindRequest, opts ...grpc.CallOption) (Eos_FindClient, error) - // Replies to a NsStat operation - NsStat(ctx context.Context, in *NsStatRequest, opts ...grpc.CallOption) (*NsStatResponse, error) - // Replies to an insert - ContainerInsert(ctx context.Context, in *ContainerInsertRequest, opts ...grpc.CallOption) (*InsertReply, error) - FileInsert(ctx context.Context, in *FileInsertRequest, opts ...grpc.CallOption) (*InsertReply, error) - // Replies to a NsRequest operation - Exec(ctx context.Context, in *NSRequest, opts ...grpc.CallOption) (*NSResponse, error) - // Manila Driver - ManilaServerRequest(ctx context.Context, in *ManilaRequest, opts ...grpc.CallOption) (*ManilaResponse, error) +func (x *NSResponse_ShareAccess) String() string { + return protoimpl.X.MessageStringOf(x) } -type eosClient struct { - cc *grpc.ClientConn +func (*NSResponse_ShareAccess) ProtoMessage() {} + +func (x *NSResponse_ShareAccess) ProtoReflect() protoreflect.Message { + mi := &file_Rpc_proto_msgTypes[56] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) } -func NewEosClient(cc *grpc.ClientConn) EosClient { - return &eosClient{cc} +// Deprecated: Use NSResponse_ShareAccess.ProtoReflect.Descriptor instead. +func (*NSResponse_ShareAccess) Descriptor() ([]byte, []int) { + return file_Rpc_proto_rawDescGZIP(), []int{21, 6} } -func (c *eosClient) Ping(ctx context.Context, in *PingRequest, opts ...grpc.CallOption) (*PingReply, error) { - out := new(PingReply) - err := c.cc.Invoke(ctx, "/eos.rpc.Eos/Ping", in, out, opts...) - if err != nil { - return nil, err +func (x *NSResponse_ShareAccess) GetName() string { + if x != nil { + return x.Name } - return out, nil + return "" } -func (c *eosClient) MD(ctx context.Context, in *MDRequest, opts ...grpc.CallOption) (Eos_MDClient, error) { - stream, err := c.cc.NewStream(ctx, &_Eos_serviceDesc.Streams[0], "/eos.rpc.Eos/MD", opts...) - if err != nil { - return nil, err - } - x := &eosMDClient{stream} - if err := x.ClientStream.SendMsg(in); err != nil { - return nil, err +func (x *NSResponse_ShareAccess) GetGranted() bool { + if x != nil { + return x.Granted } - if err := x.ClientStream.CloseSend(); err != nil { - return nil, err - } - return x, nil + return false } -type Eos_MDClient interface { - Recv() (*MDResponse, error) - grpc.ClientStream -} +type NSResponse_ShareResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields -type eosMDClient struct { - grpc.ClientStream + Code int64 `protobuf:"varint,1,opt,name=code,proto3" json:"code,omitempty"` + Msg string `protobuf:"bytes,2,opt,name=msg,proto3" json:"msg,omitempty"` + Shares []*NSResponse_ShareInfo `protobuf:"bytes,3,rep,name=shares,proto3" json:"shares,omitempty"` + Access []*NSResponse_ShareAccess `protobuf:"bytes,4,rep,name=access,proto3" json:"access,omitempty"` } -func (x *eosMDClient) Recv() (*MDResponse, error) { - m := new(MDResponse) - if err := x.ClientStream.RecvMsg(m); err != nil { - return nil, err +func (x *NSResponse_ShareResponse) Reset() { + *x = NSResponse_ShareResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_Rpc_proto_msgTypes[57] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } - return m, nil } -func (c *eosClient) Find(ctx context.Context, in *FindRequest, opts ...grpc.CallOption) (Eos_FindClient, error) { - stream, err := c.cc.NewStream(ctx, &_Eos_serviceDesc.Streams[1], "/eos.rpc.Eos/Find", opts...) - if err != nil { - return nil, err - } - x := &eosFindClient{stream} - if err := x.ClientStream.SendMsg(in); err != nil { - return nil, err - } - if err := x.ClientStream.CloseSend(); err != nil { - return nil, err - } - return x, nil +func (x *NSResponse_ShareResponse) String() string { + return protoimpl.X.MessageStringOf(x) } -type Eos_FindClient interface { - Recv() (*MDResponse, error) - grpc.ClientStream +func (*NSResponse_ShareResponse) ProtoMessage() {} + +func (x *NSResponse_ShareResponse) ProtoReflect() protoreflect.Message { + mi := &file_Rpc_proto_msgTypes[57] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) } -type eosFindClient struct { - grpc.ClientStream +// Deprecated: Use NSResponse_ShareResponse.ProtoReflect.Descriptor instead. +func (*NSResponse_ShareResponse) Descriptor() ([]byte, []int) { + return file_Rpc_proto_rawDescGZIP(), []int{21, 7} } -func (x *eosFindClient) Recv() (*MDResponse, error) { - m := new(MDResponse) - if err := x.ClientStream.RecvMsg(m); err != nil { - return nil, err +func (x *NSResponse_ShareResponse) GetCode() int64 { + if x != nil { + return x.Code } - return m, nil + return 0 } -func (c *eosClient) NsStat(ctx context.Context, in *NsStatRequest, opts ...grpc.CallOption) (*NsStatResponse, error) { - out := new(NsStatResponse) - err := c.cc.Invoke(ctx, "/eos.rpc.Eos/NsStat", in, out, opts...) - if err != nil { - return nil, err +func (x *NSResponse_ShareResponse) GetMsg() string { + if x != nil { + return x.Msg } - return out, nil + return "" } -func (c *eosClient) ContainerInsert(ctx context.Context, in *ContainerInsertRequest, opts ...grpc.CallOption) (*InsertReply, error) { - out := new(InsertReply) - err := c.cc.Invoke(ctx, "/eos.rpc.Eos/ContainerInsert", in, out, opts...) - if err != nil { - return nil, err +func (x *NSResponse_ShareResponse) GetShares() []*NSResponse_ShareInfo { + if x != nil { + return x.Shares } - return out, nil + return nil } -func (c *eosClient) FileInsert(ctx context.Context, in *FileInsertRequest, opts ...grpc.CallOption) (*InsertReply, error) { - out := new(InsertReply) - err := c.cc.Invoke(ctx, "/eos.rpc.Eos/FileInsert", in, out, opts...) - if err != nil { - return nil, err +func (x *NSResponse_ShareResponse) GetAccess() []*NSResponse_ShareAccess { + if x != nil { + return x.Access } - return out, nil + return nil } -func (c *eosClient) Exec(ctx context.Context, in *NSRequest, opts ...grpc.CallOption) (*NSResponse, error) { - out := new(NSResponse) - err := c.cc.Invoke(ctx, "/eos.rpc.Eos/Exec", in, out, opts...) - if err != nil { - return nil, err - } - return out, nil +type NSResponse_VersionResponse_VersionInfo struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Id *MDId `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + Mtime *Time `protobuf:"bytes,2,opt,name=mtime,proto3" json:"mtime,omitempty"` } -func (c *eosClient) ManilaServerRequest(ctx context.Context, in *ManilaRequest, opts ...grpc.CallOption) (*ManilaResponse, error) { - out := new(ManilaResponse) - err := c.cc.Invoke(ctx, "/eos.rpc.Eos/ManilaServerRequest", in, out, opts...) - if err != nil { - return nil, err +func (x *NSResponse_VersionResponse_VersionInfo) Reset() { + *x = NSResponse_VersionResponse_VersionInfo{} + if protoimpl.UnsafeEnabled { + mi := &file_Rpc_proto_msgTypes[58] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } - return out, nil } -// EosServer is the server API for Eos service. -type EosServer interface { - // Replies to a ping - Ping(context.Context, *PingRequest) (*PingReply, error) - // Replies to MD requests with a stream - MD(*MDRequest, Eos_MDServer) error - // Replies to Find requests with a stream - Find(*FindRequest, Eos_FindServer) error - // Replies to a NsStat operation - NsStat(context.Context, *NsStatRequest) (*NsStatResponse, error) - // Replies to an insert - ContainerInsert(context.Context, *ContainerInsertRequest) (*InsertReply, error) - FileInsert(context.Context, *FileInsertRequest) (*InsertReply, error) - // Replies to a NsRequest operation - Exec(context.Context, *NSRequest) (*NSResponse, error) - // Manila Driver - ManilaServerRequest(context.Context, *ManilaRequest) (*ManilaResponse, error) +func (x *NSResponse_VersionResponse_VersionInfo) String() string { + return protoimpl.X.MessageStringOf(x) } -// UnimplementedEosServer can be embedded to have forward compatible implementations. -type UnimplementedEosServer struct { -} +func (*NSResponse_VersionResponse_VersionInfo) ProtoMessage() {} -func (*UnimplementedEosServer) Ping(ctx context.Context, req *PingRequest) (*PingReply, error) { - return nil, status.Errorf(codes.Unimplemented, "method Ping not implemented") -} -func (*UnimplementedEosServer) MD(req *MDRequest, srv Eos_MDServer) error { - return status.Errorf(codes.Unimplemented, "method MD not implemented") -} -func (*UnimplementedEosServer) Find(req *FindRequest, srv Eos_FindServer) error { - return status.Errorf(codes.Unimplemented, "method Find not implemented") -} -func (*UnimplementedEosServer) NsStat(ctx context.Context, req *NsStatRequest) (*NsStatResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method NsStat not implemented") -} -func (*UnimplementedEosServer) ContainerInsert(ctx context.Context, req *ContainerInsertRequest) (*InsertReply, error) { - return nil, status.Errorf(codes.Unimplemented, "method ContainerInsert not implemented") -} -func (*UnimplementedEosServer) FileInsert(ctx context.Context, req *FileInsertRequest) (*InsertReply, error) { - return nil, status.Errorf(codes.Unimplemented, "method FileInsert not implemented") -} -func (*UnimplementedEosServer) Exec(ctx context.Context, req *NSRequest) (*NSResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method Exec not implemented") -} -func (*UnimplementedEosServer) ManilaServerRequest(ctx context.Context, req *ManilaRequest) (*ManilaResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method ManilaServerRequest not implemented") +func (x *NSResponse_VersionResponse_VersionInfo) ProtoReflect() protoreflect.Message { + mi := &file_Rpc_proto_msgTypes[58] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) } -func RegisterEosServer(s *grpc.Server, srv EosServer) { - s.RegisterService(&_Eos_serviceDesc, srv) +// Deprecated: Use NSResponse_VersionResponse_VersionInfo.ProtoReflect.Descriptor instead. +func (*NSResponse_VersionResponse_VersionInfo) Descriptor() ([]byte, []int) { + return file_Rpc_proto_rawDescGZIP(), []int{21, 1, 0} } -func _Eos_Ping_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(PingRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(EosServer).Ping(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/eos.rpc.Eos/Ping", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(EosServer).Ping(ctx, req.(*PingRequest)) +func (x *NSResponse_VersionResponse_VersionInfo) GetId() *MDId { + if x != nil { + return x.Id } - return interceptor(ctx, in, info, handler) + return nil } -func _Eos_MD_Handler(srv interface{}, stream grpc.ServerStream) error { - m := new(MDRequest) - if err := stream.RecvMsg(m); err != nil { - return err +func (x *NSResponse_VersionResponse_VersionInfo) GetMtime() *Time { + if x != nil { + return x.Mtime } - return srv.(EosServer).MD(m, &eosMDServer{stream}) -} - -type Eos_MDServer interface { - Send(*MDResponse) error - grpc.ServerStream + return nil } -type eosMDServer struct { - grpc.ServerStream -} +type NSResponse_RecycleResponse_RecycleInfo struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields -func (x *eosMDServer) Send(m *MDResponse) error { - return x.ServerStream.SendMsg(m) + Id *MDId `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + Owner *RoleId `protobuf:"bytes,2,opt,name=owner,proto3" json:"owner,omitempty"` + Dtime *Time `protobuf:"bytes,3,opt,name=dtime,proto3" json:"dtime,omitempty"` + Size uint64 `protobuf:"varint,4,opt,name=size,proto3" json:"size,omitempty"` + Type NSResponse_RecycleResponse_RecycleInfo_DELETIONTYPE `protobuf:"varint,5,opt,name=type,proto3,enum=eos.rpc.NSResponse_RecycleResponse_RecycleInfo_DELETIONTYPE" json:"type,omitempty"` + Key string `protobuf:"bytes,6,opt,name=key,proto3" json:"key,omitempty"` } -func _Eos_Find_Handler(srv interface{}, stream grpc.ServerStream) error { - m := new(FindRequest) - if err := stream.RecvMsg(m); err != nil { - return err +func (x *NSResponse_RecycleResponse_RecycleInfo) Reset() { + *x = NSResponse_RecycleResponse_RecycleInfo{} + if protoimpl.UnsafeEnabled { + mi := &file_Rpc_proto_msgTypes[59] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } - return srv.(EosServer).Find(m, &eosFindServer{stream}) } -type Eos_FindServer interface { - Send(*MDResponse) error - grpc.ServerStream +func (x *NSResponse_RecycleResponse_RecycleInfo) String() string { + return protoimpl.X.MessageStringOf(x) } -type eosFindServer struct { - grpc.ServerStream +func (*NSResponse_RecycleResponse_RecycleInfo) ProtoMessage() {} + +func (x *NSResponse_RecycleResponse_RecycleInfo) ProtoReflect() protoreflect.Message { + mi := &file_Rpc_proto_msgTypes[59] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) } -func (x *eosFindServer) Send(m *MDResponse) error { - return x.ServerStream.SendMsg(m) +// Deprecated: Use NSResponse_RecycleResponse_RecycleInfo.ProtoReflect.Descriptor instead. +func (*NSResponse_RecycleResponse_RecycleInfo) Descriptor() ([]byte, []int) { + return file_Rpc_proto_rawDescGZIP(), []int{21, 2, 0} } -func _Eos_NsStat_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(NsStatRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(EosServer).NsStat(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/eos.rpc.Eos/NsStat", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(EosServer).NsStat(ctx, req.(*NsStatRequest)) +func (x *NSResponse_RecycleResponse_RecycleInfo) GetId() *MDId { + if x != nil { + return x.Id } - return interceptor(ctx, in, info, handler) + return nil } -func _Eos_ContainerInsert_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(ContainerInsertRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(EosServer).ContainerInsert(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/eos.rpc.Eos/ContainerInsert", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(EosServer).ContainerInsert(ctx, req.(*ContainerInsertRequest)) +func (x *NSResponse_RecycleResponse_RecycleInfo) GetOwner() *RoleId { + if x != nil { + return x.Owner } - return interceptor(ctx, in, info, handler) + return nil } -func _Eos_FileInsert_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(FileInsertRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(EosServer).FileInsert(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/eos.rpc.Eos/FileInsert", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(EosServer).FileInsert(ctx, req.(*FileInsertRequest)) +func (x *NSResponse_RecycleResponse_RecycleInfo) GetDtime() *Time { + if x != nil { + return x.Dtime } - return interceptor(ctx, in, info, handler) + return nil } -func _Eos_Exec_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(NSRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(EosServer).Exec(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/eos.rpc.Eos/Exec", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(EosServer).Exec(ctx, req.(*NSRequest)) +func (x *NSResponse_RecycleResponse_RecycleInfo) GetSize() uint64 { + if x != nil { + return x.Size } - return interceptor(ctx, in, info, handler) + return 0 } -func _Eos_ManilaServerRequest_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(ManilaRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(EosServer).ManilaServerRequest(ctx, in) +func (x *NSResponse_RecycleResponse_RecycleInfo) GetType() NSResponse_RecycleResponse_RecycleInfo_DELETIONTYPE { + if x != nil { + return x.Type } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/eos.rpc.Eos/ManilaServerRequest", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(EosServer).ManilaServerRequest(ctx, req.(*ManilaRequest)) + return NSResponse_RecycleResponse_RecycleInfo_FILE +} + +func (x *NSResponse_RecycleResponse_RecycleInfo) GetKey() string { + if x != nil { + return x.Key } - return interceptor(ctx, in, info, handler) + return "" } -var _Eos_serviceDesc = grpc.ServiceDesc{ - ServiceName: "eos.rpc.Eos", - HandlerType: (*EosServer)(nil), - Methods: []grpc.MethodDesc{ - { - MethodName: "Ping", - Handler: _Eos_Ping_Handler, - }, - { - MethodName: "NsStat", - Handler: _Eos_NsStat_Handler, - }, - { - MethodName: "ContainerInsert", - Handler: _Eos_ContainerInsert_Handler, - }, - { - MethodName: "FileInsert", - Handler: _Eos_FileInsert_Handler, - }, - { - MethodName: "Exec", - Handler: _Eos_Exec_Handler, - }, - { - MethodName: "ManilaServerRequest", - Handler: _Eos_ManilaServerRequest_Handler, - }, - }, - Streams: []grpc.StreamDesc{ - { - StreamName: "MD", - Handler: _Eos_MD_Handler, - ServerStreams: true, - }, - { - StreamName: "Find", - Handler: _Eos_Find_Handler, - ServerStreams: true, +var File_Rpc_proto protoreflect.FileDescriptor + +var file_Rpc_proto_rawDesc = []byte{ + 0x0a, 0x09, 0x52, 0x70, 0x63, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x07, 0x65, 0x6f, 0x73, + 0x2e, 0x72, 0x70, 0x63, 0x22, 0x41, 0x0a, 0x0b, 0x50, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x61, 0x75, 0x74, 0x68, 0x6b, 0x65, 0x79, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x75, 0x74, 0x68, 0x6b, 0x65, 0x79, 0x12, 0x18, 0x0a, + 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x07, + 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x25, 0x0a, 0x09, 0x50, 0x69, 0x6e, 0x67, 0x52, + 0x65, 0x70, 0x6c, 0x79, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x8a, + 0x01, 0x0a, 0x16, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x49, 0x6e, 0x73, 0x65, + 0x72, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x37, 0x0a, 0x09, 0x63, 0x6f, 0x6e, + 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x65, + 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, + 0x4d, 0x64, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x52, 0x09, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, + 0x65, 0x72, 0x12, 0x18, 0x0a, 0x07, 0x61, 0x75, 0x74, 0x68, 0x6b, 0x65, 0x79, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x75, 0x74, 0x68, 0x6b, 0x65, 0x79, 0x12, 0x1d, 0x0a, 0x0a, + 0x69, 0x6e, 0x68, 0x65, 0x72, 0x69, 0x74, 0x5f, 0x6d, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, + 0x52, 0x09, 0x69, 0x6e, 0x68, 0x65, 0x72, 0x69, 0x74, 0x4d, 0x64, 0x22, 0x59, 0x0a, 0x11, 0x46, + 0x69, 0x6c, 0x65, 0x49, 0x6e, 0x73, 0x65, 0x72, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x12, 0x2a, 0x0a, 0x05, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x14, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x46, 0x69, 0x6c, 0x65, 0x4d, 0x64, + 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x52, 0x05, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x12, 0x18, 0x0a, 0x07, + 0x61, 0x75, 0x74, 0x68, 0x6b, 0x65, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, + 0x75, 0x74, 0x68, 0x6b, 0x65, 0x79, 0x22, 0x3b, 0x0a, 0x0b, 0x49, 0x6e, 0x73, 0x65, 0x72, 0x74, + 0x52, 0x65, 0x70, 0x6c, 0x79, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, + 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, + 0x12, 0x0a, 0x04, 0x72, 0x65, 0x74, 0x63, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0d, 0x52, 0x04, 0x72, + 0x65, 0x74, 0x63, 0x22, 0x2d, 0x0a, 0x04, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x73, + 0x65, 0x63, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x03, 0x73, 0x65, 0x63, 0x12, 0x13, 0x0a, + 0x05, 0x6e, 0x5f, 0x73, 0x65, 0x63, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x04, 0x6e, 0x53, + 0x65, 0x63, 0x22, 0x34, 0x0a, 0x08, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x73, 0x75, 0x6d, 0x12, 0x14, + 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x05, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x22, 0xb1, 0x04, 0x0a, 0x0b, 0x46, 0x69, 0x6c, + 0x65, 0x4d, 0x64, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x04, 0x52, 0x02, 0x69, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x63, 0x6f, 0x6e, 0x74, + 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x06, 0x63, 0x6f, 0x6e, 0x74, 0x49, + 0x64, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x03, + 0x75, 0x69, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x67, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x04, + 0x52, 0x03, 0x67, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x05, 0x20, + 0x01, 0x28, 0x04, 0x52, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x6c, 0x61, 0x79, + 0x6f, 0x75, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x08, 0x6c, 0x61, + 0x79, 0x6f, 0x75, 0x74, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x66, 0x6c, 0x61, 0x67, 0x73, 0x18, + 0x07, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x66, 0x6c, 0x61, 0x67, 0x73, 0x12, 0x12, 0x0a, 0x04, + 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, + 0x12, 0x1b, 0x0a, 0x09, 0x6c, 0x69, 0x6e, 0x6b, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x09, 0x20, + 0x01, 0x28, 0x0c, 0x52, 0x08, 0x6c, 0x69, 0x6e, 0x6b, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x23, 0x0a, + 0x05, 0x63, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x65, + 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x52, 0x05, 0x63, 0x74, 0x69, + 0x6d, 0x65, 0x12, 0x23, 0x0a, 0x05, 0x6d, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x0b, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x0d, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x54, 0x69, 0x6d, 0x65, + 0x52, 0x05, 0x6d, 0x74, 0x69, 0x6d, 0x65, 0x12, 0x2d, 0x0a, 0x08, 0x63, 0x68, 0x65, 0x63, 0x6b, + 0x73, 0x75, 0x6d, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x65, 0x6f, 0x73, 0x2e, + 0x72, 0x70, 0x63, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x73, 0x75, 0x6d, 0x52, 0x08, 0x63, 0x68, + 0x65, 0x63, 0x6b, 0x73, 0x75, 0x6d, 0x12, 0x1c, 0x0a, 0x09, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x73, 0x18, 0x0d, 0x20, 0x03, 0x28, 0x0d, 0x52, 0x09, 0x6c, 0x6f, 0x63, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x29, 0x0a, 0x10, 0x75, 0x6e, 0x6c, 0x69, 0x6e, 0x6b, 0x5f, 0x6c, + 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x0e, 0x20, 0x03, 0x28, 0x0d, 0x52, 0x0f, + 0x75, 0x6e, 0x6c, 0x69, 0x6e, 0x6b, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, + 0x38, 0x0a, 0x06, 0x78, 0x61, 0x74, 0x74, 0x72, 0x73, 0x18, 0x0f, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x20, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x46, 0x69, 0x6c, 0x65, 0x4d, 0x64, + 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x58, 0x61, 0x74, 0x74, 0x72, 0x73, 0x45, 0x6e, 0x74, 0x72, + 0x79, 0x52, 0x06, 0x78, 0x61, 0x74, 0x74, 0x72, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x61, 0x74, + 0x68, 0x18, 0x10, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x70, 0x61, 0x74, 0x68, 0x12, 0x12, 0x0a, + 0x04, 0x65, 0x74, 0x61, 0x67, 0x18, 0x11, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x65, 0x74, 0x61, + 0x67, 0x1a, 0x39, 0x0a, 0x0b, 0x58, 0x61, 0x74, 0x74, 0x72, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, + 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, + 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x0c, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xcf, 0x03, 0x0a, + 0x10, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x4d, 0x64, 0x50, 0x72, 0x6f, 0x74, + 0x6f, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x02, 0x69, + 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x12, 0x10, + 0x0a, 0x03, 0x75, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x03, 0x75, 0x69, 0x64, + 0x12, 0x10, 0x0a, 0x03, 0x67, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x04, 0x52, 0x03, 0x67, + 0x69, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x74, 0x72, 0x65, 0x65, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, + 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x74, 0x72, 0x65, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x12, + 0x12, 0x0a, 0x04, 0x6d, 0x6f, 0x64, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x04, 0x6d, + 0x6f, 0x64, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x66, 0x6c, 0x61, 0x67, 0x73, 0x18, 0x07, 0x20, 0x01, + 0x28, 0x0d, 0x52, 0x05, 0x66, 0x6c, 0x61, 0x67, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, + 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x23, 0x0a, + 0x05, 0x63, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x65, + 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x52, 0x05, 0x63, 0x74, 0x69, + 0x6d, 0x65, 0x12, 0x23, 0x0a, 0x05, 0x6d, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x0d, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x54, 0x69, 0x6d, 0x65, + 0x52, 0x05, 0x6d, 0x74, 0x69, 0x6d, 0x65, 0x12, 0x23, 0x0a, 0x05, 0x73, 0x74, 0x69, 0x6d, 0x65, + 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, + 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x52, 0x05, 0x73, 0x74, 0x69, 0x6d, 0x65, 0x12, 0x3d, 0x0a, 0x06, + 0x78, 0x61, 0x74, 0x74, 0x72, 0x73, 0x18, 0x0c, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x65, + 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, + 0x4d, 0x64, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x58, 0x61, 0x74, 0x74, 0x72, 0x73, 0x45, 0x6e, + 0x74, 0x72, 0x79, 0x52, 0x06, 0x78, 0x61, 0x74, 0x74, 0x72, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x70, + 0x61, 0x74, 0x68, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x70, 0x61, 0x74, 0x68, 0x12, + 0x12, 0x0a, 0x04, 0x65, 0x74, 0x61, 0x67, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x65, + 0x74, 0x61, 0x67, 0x1a, 0x39, 0x0a, 0x0b, 0x58, 0x61, 0x74, 0x74, 0x72, 0x73, 0x45, 0x6e, 0x74, + 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x0c, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xce, + 0x03, 0x0a, 0x0a, 0x51, 0x75, 0x6f, 0x74, 0x61, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x12, 0x0a, + 0x04, 0x70, 0x61, 0x74, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x70, 0x61, 0x74, + 0x68, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x26, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x0e, 0x32, 0x12, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x51, 0x55, + 0x4f, 0x54, 0x41, 0x54, 0x59, 0x50, 0x45, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x1c, 0x0a, + 0x09, 0x75, 0x73, 0x65, 0x64, 0x62, 0x79, 0x74, 0x65, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x04, + 0x52, 0x09, 0x75, 0x73, 0x65, 0x64, 0x62, 0x79, 0x74, 0x65, 0x73, 0x12, 0x2a, 0x0a, 0x10, 0x75, + 0x73, 0x65, 0x64, 0x6c, 0x6f, 0x67, 0x69, 0x63, 0x61, 0x6c, 0x62, 0x79, 0x74, 0x65, 0x73, 0x18, + 0x05, 0x20, 0x01, 0x28, 0x04, 0x52, 0x10, 0x75, 0x73, 0x65, 0x64, 0x6c, 0x6f, 0x67, 0x69, 0x63, + 0x61, 0x6c, 0x62, 0x79, 0x74, 0x65, 0x73, 0x12, 0x1c, 0x0a, 0x09, 0x75, 0x73, 0x65, 0x64, 0x66, + 0x69, 0x6c, 0x65, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x04, 0x52, 0x09, 0x75, 0x73, 0x65, 0x64, + 0x66, 0x69, 0x6c, 0x65, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x6d, 0x61, 0x78, 0x62, 0x79, 0x74, 0x65, + 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x6d, 0x61, 0x78, 0x62, 0x79, 0x74, 0x65, + 0x73, 0x12, 0x28, 0x0a, 0x0f, 0x6d, 0x61, 0x78, 0x6c, 0x6f, 0x67, 0x69, 0x63, 0x61, 0x6c, 0x62, + 0x79, 0x74, 0x65, 0x73, 0x18, 0x08, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0f, 0x6d, 0x61, 0x78, 0x6c, + 0x6f, 0x67, 0x69, 0x63, 0x61, 0x6c, 0x62, 0x79, 0x74, 0x65, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x6d, + 0x61, 0x78, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x18, 0x09, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x6d, + 0x61, 0x78, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x12, 0x30, 0x0a, 0x13, 0x70, 0x65, 0x72, 0x63, 0x65, + 0x6e, 0x74, 0x61, 0x67, 0x65, 0x75, 0x73, 0x65, 0x64, 0x62, 0x79, 0x74, 0x65, 0x73, 0x18, 0x0a, + 0x20, 0x01, 0x28, 0x02, 0x52, 0x13, 0x70, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x61, 0x67, 0x65, + 0x75, 0x73, 0x65, 0x64, 0x62, 0x79, 0x74, 0x65, 0x73, 0x12, 0x30, 0x0a, 0x13, 0x70, 0x65, 0x72, + 0x63, 0x65, 0x6e, 0x74, 0x61, 0x67, 0x65, 0x75, 0x73, 0x65, 0x64, 0x66, 0x69, 0x6c, 0x65, 0x73, + 0x18, 0x0b, 0x20, 0x01, 0x28, 0x02, 0x52, 0x13, 0x70, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x61, + 0x67, 0x65, 0x75, 0x73, 0x65, 0x64, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x12, 0x20, 0x0a, 0x0b, 0x73, + 0x74, 0x61, 0x74, 0x75, 0x73, 0x62, 0x79, 0x74, 0x65, 0x73, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x0b, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x62, 0x79, 0x74, 0x65, 0x73, 0x12, 0x20, 0x0a, + 0x0b, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x18, 0x0d, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x0b, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x22, + 0x66, 0x0a, 0x06, 0x52, 0x6f, 0x6c, 0x65, 0x49, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x69, 0x64, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x03, 0x75, 0x69, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x67, + 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x03, 0x67, 0x69, 0x64, 0x12, 0x1a, 0x0a, + 0x08, 0x75, 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x08, 0x75, 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x67, 0x72, 0x6f, + 0x75, 0x70, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x67, 0x72, + 0x6f, 0x75, 0x70, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x5f, 0x0a, 0x04, 0x4d, 0x44, 0x49, 0x64, 0x12, + 0x12, 0x0a, 0x04, 0x70, 0x61, 0x74, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x70, + 0x61, 0x74, 0x68, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x06, 0x52, + 0x02, 0x69, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x69, 0x6e, 0x6f, 0x18, 0x03, 0x20, 0x01, 0x28, 0x06, + 0x52, 0x03, 0x69, 0x6e, 0x6f, 0x12, 0x21, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x04, 0x20, + 0x01, 0x28, 0x0e, 0x32, 0x0d, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x54, 0x59, + 0x50, 0x45, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3f, 0x0a, 0x05, 0x4c, 0x69, 0x6d, 0x69, + 0x74, 0x12, 0x12, 0x0a, 0x04, 0x7a, 0x65, 0x72, 0x6f, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, + 0x04, 0x7a, 0x65, 0x72, 0x6f, 0x12, 0x10, 0x0a, 0x03, 0x6d, 0x69, 0x6e, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x04, 0x52, 0x03, 0x6d, 0x69, 0x6e, 0x12, 0x10, 0x0a, 0x03, 0x6d, 0x61, 0x78, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x04, 0x52, 0x03, 0x6d, 0x61, 0x78, 0x22, 0xa6, 0x06, 0x0a, 0x0b, 0x4d, 0x44, + 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x65, 0x6c, + 0x65, 0x63, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x73, 0x65, 0x6c, 0x65, 0x63, + 0x74, 0x12, 0x24, 0x0a, 0x05, 0x63, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x0e, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4c, 0x69, 0x6d, 0x69, 0x74, + 0x52, 0x05, 0x63, 0x74, 0x69, 0x6d, 0x65, 0x12, 0x24, 0x0a, 0x05, 0x6d, 0x74, 0x69, 0x6d, 0x65, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, + 0x2e, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x52, 0x05, 0x6d, 0x74, 0x69, 0x6d, 0x65, 0x12, 0x24, 0x0a, + 0x05, 0x73, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x65, + 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x52, 0x05, 0x73, 0x74, + 0x69, 0x6d, 0x65, 0x12, 0x22, 0x0a, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x0e, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4c, 0x69, 0x6d, 0x69, + 0x74, 0x52, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x12, 0x2a, 0x0a, 0x08, 0x74, 0x72, 0x65, 0x65, 0x73, + 0x69, 0x7a, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x65, 0x6f, 0x73, 0x2e, + 0x72, 0x70, 0x63, 0x2e, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x52, 0x08, 0x74, 0x72, 0x65, 0x65, 0x73, + 0x69, 0x7a, 0x65, 0x12, 0x2a, 0x0a, 0x08, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x72, 0x65, 0x6e, 0x18, + 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, + 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x52, 0x08, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x72, 0x65, 0x6e, 0x12, + 0x2c, 0x0a, 0x09, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x08, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4c, 0x69, 0x6d, + 0x69, 0x74, 0x52, 0x09, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x3d, 0x0a, + 0x12, 0x75, 0x6e, 0x6c, 0x69, 0x6e, 0x6b, 0x65, 0x64, 0x5f, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x73, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x65, 0x6f, 0x73, 0x2e, + 0x72, 0x70, 0x63, 0x2e, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x52, 0x11, 0x75, 0x6e, 0x6c, 0x69, 0x6e, + 0x6b, 0x65, 0x64, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x1a, 0x0a, 0x08, + 0x6c, 0x61, 0x79, 0x6f, 0x75, 0x74, 0x69, 0x64, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, + 0x6c, 0x61, 0x79, 0x6f, 0x75, 0x74, 0x69, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x66, 0x6c, 0x61, 0x67, + 0x73, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, 0x66, 0x6c, 0x61, 0x67, 0x73, 0x12, 0x18, + 0x0a, 0x07, 0x73, 0x79, 0x6d, 0x6c, 0x69, 0x6e, 0x6b, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x08, 0x52, + 0x07, 0x73, 0x79, 0x6d, 0x6c, 0x69, 0x6e, 0x6b, 0x12, 0x2d, 0x0a, 0x08, 0x63, 0x68, 0x65, 0x63, + 0x6b, 0x73, 0x75, 0x6d, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x65, 0x6f, 0x73, + 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x73, 0x75, 0x6d, 0x52, 0x08, 0x63, + 0x68, 0x65, 0x63, 0x6b, 0x73, 0x75, 0x6d, 0x12, 0x14, 0x0a, 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, + 0x18, 0x0e, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x12, 0x14, 0x0a, + 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x67, 0x72, + 0x6f, 0x75, 0x70, 0x12, 0x1d, 0x0a, 0x0a, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x5f, 0x72, 0x6f, 0x6f, + 0x74, 0x18, 0x10, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x52, 0x6f, + 0x6f, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x72, 0x6f, 0x6f, 0x74, + 0x18, 0x11, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x6f, 0x6f, + 0x74, 0x12, 0x27, 0x0a, 0x0f, 0x72, 0x65, 0x67, 0x65, 0x78, 0x70, 0x5f, 0x66, 0x69, 0x6c, 0x65, + 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x12, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0e, 0x72, 0x65, 0x67, 0x65, + 0x78, 0x70, 0x46, 0x69, 0x6c, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x25, 0x0a, 0x0e, 0x72, 0x65, + 0x67, 0x65, 0x78, 0x70, 0x5f, 0x64, 0x69, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x13, 0x20, 0x01, + 0x28, 0x0c, 0x52, 0x0d, 0x72, 0x65, 0x67, 0x65, 0x78, 0x70, 0x44, 0x69, 0x72, 0x6e, 0x61, 0x6d, + 0x65, 0x12, 0x35, 0x0a, 0x05, 0x78, 0x61, 0x74, 0x74, 0x72, 0x18, 0x14, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x1f, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4d, 0x44, 0x53, 0x65, 0x6c, + 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x58, 0x61, 0x74, 0x74, 0x72, 0x45, 0x6e, 0x74, 0x72, + 0x79, 0x52, 0x05, 0x78, 0x61, 0x74, 0x74, 0x72, 0x1a, 0x38, 0x0a, 0x0a, 0x58, 0x61, 0x74, 0x74, + 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, + 0x38, 0x01, 0x22, 0xc0, 0x01, 0x0a, 0x09, 0x4d, 0x44, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x12, 0x21, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x0d, + 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x54, 0x59, 0x50, 0x45, 0x52, 0x04, 0x74, + 0x79, 0x70, 0x65, 0x12, 0x1d, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x0d, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4d, 0x44, 0x49, 0x64, 0x52, 0x02, + 0x69, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x61, 0x75, 0x74, 0x68, 0x6b, 0x65, 0x79, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x75, 0x74, 0x68, 0x6b, 0x65, 0x79, 0x12, 0x23, 0x0a, 0x04, + 0x72, 0x6f, 0x6c, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x65, 0x6f, 0x73, + 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x52, 0x6f, 0x6c, 0x65, 0x49, 0x64, 0x52, 0x04, 0x72, 0x6f, 0x6c, + 0x65, 0x12, 0x32, 0x0a, 0x09, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x05, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4d, + 0x44, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x09, 0x73, 0x65, 0x6c, 0x65, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x84, 0x01, 0x0a, 0x0a, 0x4d, 0x44, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x21, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0e, 0x32, 0x0d, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x54, 0x59, 0x50, + 0x45, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x26, 0x0a, 0x03, 0x66, 0x6d, 0x64, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x46, + 0x69, 0x6c, 0x65, 0x4d, 0x64, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x52, 0x03, 0x66, 0x6d, 0x64, 0x12, + 0x2b, 0x0a, 0x03, 0x63, 0x6d, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x65, + 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, + 0x4d, 0x64, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x52, 0x03, 0x63, 0x6d, 0x64, 0x22, 0xde, 0x01, 0x0a, + 0x0b, 0x46, 0x69, 0x6e, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x21, 0x0a, 0x04, + 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x0d, 0x2e, 0x65, 0x6f, 0x73, + 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x54, 0x59, 0x50, 0x45, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, + 0x1d, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x65, 0x6f, + 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4d, 0x44, 0x49, 0x64, 0x52, 0x02, 0x69, 0x64, 0x12, 0x23, + 0x0a, 0x04, 0x72, 0x6f, 0x6c, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x65, + 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x52, 0x6f, 0x6c, 0x65, 0x49, 0x64, 0x52, 0x04, 0x72, + 0x6f, 0x6c, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x61, 0x75, 0x74, 0x68, 0x6b, 0x65, 0x79, 0x18, 0x04, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x75, 0x74, 0x68, 0x6b, 0x65, 0x79, 0x12, 0x1a, 0x0a, + 0x08, 0x6d, 0x61, 0x78, 0x64, 0x65, 0x70, 0x74, 0x68, 0x18, 0x05, 0x20, 0x01, 0x28, 0x04, 0x52, + 0x08, 0x6d, 0x61, 0x78, 0x64, 0x65, 0x70, 0x74, 0x68, 0x12, 0x32, 0x0a, 0x09, 0x73, 0x65, 0x6c, + 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x65, + 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4d, 0x44, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x52, 0x09, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x47, 0x0a, + 0x09, 0x53, 0x68, 0x61, 0x72, 0x65, 0x41, 0x75, 0x74, 0x68, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x72, + 0x6f, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x70, 0x72, 0x6f, 0x74, 0x12, 0x12, + 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, + 0x6d, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x68, 0x6f, 0x73, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x04, 0x68, 0x6f, 0x73, 0x74, 0x22, 0x8a, 0x02, 0x0a, 0x0a, 0x53, 0x68, 0x61, 0x72, 0x65, + 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x1e, 0x0a, 0x0a, 0x70, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, + 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x70, 0x65, 0x72, 0x6d, 0x69, + 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x18, 0x0a, 0x07, 0x65, 0x78, 0x70, 0x69, 0x72, 0x65, 0x73, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x07, 0x65, 0x78, 0x70, 0x69, 0x72, 0x65, 0x73, 0x12, + 0x14, 0x0a, 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, + 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x12, 0x14, 0x0a, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x04, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x1e, 0x0a, 0x0a, 0x67, + 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x04, 0x52, + 0x0a, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x70, + 0x61, 0x74, 0x68, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x70, 0x61, 0x74, 0x68, 0x12, + 0x1c, 0x0a, 0x09, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x74, 0x72, 0x65, 0x65, 0x18, 0x07, 0x20, 0x01, + 0x28, 0x08, 0x52, 0x09, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x74, 0x72, 0x65, 0x65, 0x12, 0x16, 0x0a, + 0x06, 0x76, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x76, + 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x2c, 0x0a, 0x07, 0x6f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x73, + 0x18, 0x09, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, + 0x2e, 0x53, 0x68, 0x61, 0x72, 0x65, 0x41, 0x75, 0x74, 0x68, 0x52, 0x07, 0x6f, 0x72, 0x69, 0x67, + 0x69, 0x6e, 0x73, 0x22, 0x89, 0x01, 0x0a, 0x0a, 0x53, 0x68, 0x61, 0x72, 0x65, 0x54, 0x6f, 0x6b, + 0x65, 0x6e, 0x12, 0x29, 0x0a, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x13, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x53, 0x68, 0x61, 0x72, + 0x65, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x52, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x1c, 0x0a, + 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, + 0x52, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x73, + 0x65, 0x72, 0x69, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, + 0x0a, 0x73, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x73, + 0x65, 0x65, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x73, 0x65, 0x65, 0x64, 0x22, + 0x8c, 0x1e, 0x0a, 0x09, 0x4e, 0x53, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x18, 0x0a, + 0x07, 0x61, 0x75, 0x74, 0x68, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, + 0x61, 0x75, 0x74, 0x68, 0x6b, 0x65, 0x79, 0x12, 0x23, 0x0a, 0x04, 0x72, 0x6f, 0x6c, 0x65, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, + 0x52, 0x6f, 0x6c, 0x65, 0x49, 0x64, 0x52, 0x04, 0x72, 0x6f, 0x6c, 0x65, 0x12, 0x37, 0x0a, 0x05, + 0x6d, 0x6b, 0x64, 0x69, 0x72, 0x18, 0x15, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x65, 0x6f, + 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4e, 0x53, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, + 0x4d, 0x6b, 0x64, 0x69, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x00, 0x52, 0x05, + 0x6d, 0x6b, 0x64, 0x69, 0x72, 0x12, 0x37, 0x0a, 0x05, 0x72, 0x6d, 0x64, 0x69, 0x72, 0x18, 0x16, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4e, + 0x53, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x52, 0x6d, 0x64, 0x69, 0x72, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x00, 0x52, 0x05, 0x72, 0x6d, 0x64, 0x69, 0x72, 0x12, 0x37, + 0x0a, 0x05, 0x74, 0x6f, 0x75, 0x63, 0x68, 0x18, 0x17, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, + 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4e, 0x53, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x2e, 0x54, 0x6f, 0x75, 0x63, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x00, + 0x52, 0x05, 0x74, 0x6f, 0x75, 0x63, 0x68, 0x12, 0x3a, 0x0a, 0x06, 0x75, 0x6e, 0x6c, 0x69, 0x6e, + 0x6b, 0x18, 0x18, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, + 0x63, 0x2e, 0x4e, 0x53, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x55, 0x6e, 0x6c, 0x69, + 0x6e, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x00, 0x52, 0x06, 0x75, 0x6e, 0x6c, + 0x69, 0x6e, 0x6b, 0x12, 0x2e, 0x0a, 0x02, 0x72, 0x6d, 0x18, 0x19, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x1c, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4e, 0x53, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x2e, 0x52, 0x6d, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x00, 0x52, + 0x02, 0x72, 0x6d, 0x12, 0x3a, 0x0a, 0x06, 0x72, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x1a, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4e, 0x53, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x52, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x00, 0x52, 0x06, 0x72, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x12, + 0x3d, 0x0a, 0x07, 0x73, 0x79, 0x6d, 0x6c, 0x69, 0x6e, 0x6b, 0x18, 0x1b, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x21, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4e, 0x53, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x2e, 0x53, 0x79, 0x6d, 0x6c, 0x69, 0x6e, 0x6b, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x48, 0x00, 0x52, 0x07, 0x73, 0x79, 0x6d, 0x6c, 0x69, 0x6e, 0x6b, 0x12, 0x3d, + 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x1c, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x21, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4e, 0x53, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x2e, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x48, 0x00, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x3d, 0x0a, + 0x07, 0x72, 0x65, 0x63, 0x79, 0x63, 0x6c, 0x65, 0x18, 0x1d, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, + 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4e, 0x53, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x2e, 0x52, 0x65, 0x63, 0x79, 0x63, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x48, 0x00, 0x52, 0x07, 0x72, 0x65, 0x63, 0x79, 0x63, 0x6c, 0x65, 0x12, 0x3a, 0x0a, 0x05, + 0x78, 0x61, 0x74, 0x74, 0x72, 0x18, 0x1e, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x65, 0x6f, + 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4e, 0x53, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, + 0x53, 0x65, 0x74, 0x58, 0x41, 0x74, 0x74, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, + 0x00, 0x52, 0x05, 0x78, 0x61, 0x74, 0x74, 0x72, 0x12, 0x37, 0x0a, 0x05, 0x63, 0x68, 0x6f, 0x77, + 0x6e, 0x18, 0x1f, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, + 0x63, 0x2e, 0x4e, 0x53, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x43, 0x68, 0x6f, 0x77, + 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x00, 0x52, 0x05, 0x63, 0x68, 0x6f, 0x77, + 0x6e, 0x12, 0x37, 0x0a, 0x05, 0x63, 0x68, 0x6d, 0x6f, 0x64, 0x18, 0x20, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x1f, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4e, 0x53, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x2e, 0x43, 0x68, 0x6d, 0x6f, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x48, 0x00, 0x52, 0x05, 0x63, 0x68, 0x6d, 0x6f, 0x64, 0x12, 0x31, 0x0a, 0x03, 0x61, 0x63, + 0x6c, 0x18, 0x21, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, + 0x63, 0x2e, 0x4e, 0x53, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x41, 0x63, 0x6c, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x00, 0x52, 0x03, 0x61, 0x63, 0x6c, 0x12, 0x37, 0x0a, + 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x22, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x65, + 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4e, 0x53, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x2e, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x00, 0x52, + 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x37, 0x0a, 0x05, 0x71, 0x75, 0x6f, 0x74, 0x61, 0x18, + 0x23, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, + 0x4e, 0x53, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x51, 0x75, 0x6f, 0x74, 0x61, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x00, 0x52, 0x05, 0x71, 0x75, 0x6f, 0x74, 0x61, 0x12, + 0x37, 0x0a, 0x05, 0x73, 0x68, 0x61, 0x72, 0x65, 0x18, 0x24, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, + 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4e, 0x53, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x2e, 0x53, 0x68, 0x61, 0x72, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, + 0x00, 0x52, 0x05, 0x73, 0x68, 0x61, 0x72, 0x65, 0x1a, 0x5f, 0x0a, 0x0c, 0x4d, 0x6b, 0x64, 0x69, + 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4d, + 0x44, 0x49, 0x64, 0x52, 0x02, 0x69, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x72, 0x65, 0x63, 0x75, 0x72, + 0x73, 0x69, 0x76, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x72, 0x65, 0x63, 0x75, + 0x72, 0x73, 0x69, 0x76, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6d, 0x6f, 0x64, 0x65, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x03, 0x52, 0x04, 0x6d, 0x6f, 0x64, 0x65, 0x1a, 0x2d, 0x0a, 0x0c, 0x52, 0x6d, 0x64, + 0x69, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x02, 0x69, 0x64, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, + 0x4d, 0x44, 0x49, 0x64, 0x52, 0x02, 0x69, 0x64, 0x1a, 0x2d, 0x0a, 0x0c, 0x54, 0x6f, 0x75, 0x63, + 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4d, + 0x44, 0x49, 0x64, 0x52, 0x02, 0x69, 0x64, 0x1a, 0x4c, 0x0a, 0x0d, 0x55, 0x6e, 0x6c, 0x69, 0x6e, + 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4d, + 0x44, 0x49, 0x64, 0x52, 0x02, 0x69, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x6e, 0x6f, 0x72, 0x65, 0x63, + 0x79, 0x63, 0x6c, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x6e, 0x6f, 0x72, 0x65, + 0x63, 0x79, 0x63, 0x6c, 0x65, 0x1a, 0x66, 0x0a, 0x09, 0x52, 0x6d, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, + 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4d, 0x44, 0x49, 0x64, 0x52, 0x02, 0x69, + 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x72, 0x65, 0x63, 0x75, 0x72, 0x73, 0x69, 0x76, 0x65, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x72, 0x65, 0x63, 0x75, 0x72, 0x73, 0x69, 0x76, 0x65, 0x12, + 0x1c, 0x0a, 0x09, 0x6e, 0x6f, 0x72, 0x65, 0x63, 0x79, 0x63, 0x6c, 0x65, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x08, 0x52, 0x09, 0x6e, 0x6f, 0x72, 0x65, 0x63, 0x79, 0x63, 0x6c, 0x65, 0x1a, 0x46, 0x0a, + 0x0d, 0x52, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, + 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x65, 0x6f, 0x73, + 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4d, 0x44, 0x49, 0x64, 0x52, 0x02, 0x69, 0x64, 0x12, 0x16, 0x0a, + 0x06, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x06, 0x74, + 0x61, 0x72, 0x67, 0x65, 0x74, 0x1a, 0x47, 0x0a, 0x0e, 0x53, 0x79, 0x6d, 0x6c, 0x69, 0x6e, 0x6b, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4d, 0x44, + 0x49, 0x64, 0x52, 0x02, 0x69, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x06, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x1a, 0xec, + 0x01, 0x0a, 0x0e, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x12, 0x1d, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, + 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4d, 0x44, 0x49, 0x64, 0x52, 0x02, 0x69, 0x64, + 0x12, 0x3f, 0x0a, 0x03, 0x63, 0x6d, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2d, 0x2e, + 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4e, 0x53, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x2e, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x2e, 0x56, 0x45, 0x52, 0x53, 0x49, 0x4f, 0x4e, 0x5f, 0x43, 0x4d, 0x44, 0x52, 0x03, 0x63, 0x6d, + 0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x6d, 0x61, 0x78, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x6d, 0x61, 0x78, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, + 0x6e, 0x12, 0x20, 0x0a, 0x0b, 0x67, 0x72, 0x61, 0x62, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, + 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x67, 0x72, 0x61, 0x62, 0x76, 0x65, 0x72, 0x73, + 0x69, 0x6f, 0x6e, 0x22, 0x38, 0x0a, 0x0b, 0x56, 0x45, 0x52, 0x53, 0x49, 0x4f, 0x4e, 0x5f, 0x43, + 0x4d, 0x44, 0x12, 0x0a, 0x0a, 0x06, 0x43, 0x52, 0x45, 0x41, 0x54, 0x45, 0x10, 0x00, 0x12, 0x09, + 0x0a, 0x05, 0x50, 0x55, 0x52, 0x47, 0x45, 0x10, 0x01, 0x12, 0x08, 0x0a, 0x04, 0x4c, 0x49, 0x53, + 0x54, 0x10, 0x02, 0x12, 0x08, 0x0a, 0x04, 0x47, 0x52, 0x41, 0x42, 0x10, 0x03, 0x1a, 0xd4, 0x03, + 0x0a, 0x0e, 0x52, 0x65, 0x63, 0x79, 0x63, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, + 0x65, 0x79, 0x12, 0x3f, 0x0a, 0x03, 0x63, 0x6d, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, + 0x2d, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4e, 0x53, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x2e, 0x52, 0x65, 0x63, 0x79, 0x63, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x2e, 0x52, 0x45, 0x43, 0x59, 0x43, 0x4c, 0x45, 0x5f, 0x43, 0x4d, 0x44, 0x52, 0x03, + 0x63, 0x6d, 0x64, 0x12, 0x50, 0x0a, 0x0b, 0x72, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x66, 0x6c, + 0x61, 0x67, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, + 0x70, 0x63, 0x2e, 0x4e, 0x53, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x52, 0x65, 0x63, + 0x79, 0x63, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x52, 0x65, 0x73, 0x74, + 0x6f, 0x72, 0x65, 0x46, 0x6c, 0x61, 0x67, 0x73, 0x52, 0x0b, 0x72, 0x65, 0x73, 0x74, 0x6f, 0x72, + 0x65, 0x66, 0x6c, 0x61, 0x67, 0x12, 0x49, 0x0a, 0x09, 0x70, 0x75, 0x72, 0x67, 0x65, 0x64, 0x61, + 0x74, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, + 0x70, 0x63, 0x2e, 0x4e, 0x53, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x52, 0x65, 0x63, + 0x79, 0x63, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x50, 0x75, 0x72, 0x67, + 0x65, 0x44, 0x61, 0x74, 0x65, 0x52, 0x09, 0x70, 0x75, 0x72, 0x67, 0x65, 0x64, 0x61, 0x74, 0x65, + 0x1a, 0x58, 0x0a, 0x0c, 0x52, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x46, 0x6c, 0x61, 0x67, 0x73, + 0x12, 0x14, 0x0a, 0x05, 0x66, 0x6f, 0x72, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, + 0x05, 0x66, 0x6f, 0x72, 0x63, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x6d, 0x6b, 0x70, 0x61, 0x74, 0x68, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x6d, 0x6b, 0x70, 0x61, 0x74, 0x68, 0x12, 0x1a, + 0x0a, 0x08, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, + 0x52, 0x08, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x1a, 0x47, 0x0a, 0x09, 0x50, 0x75, + 0x72, 0x67, 0x65, 0x44, 0x61, 0x74, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x79, 0x65, 0x61, 0x72, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x79, 0x65, 0x61, 0x72, 0x12, 0x14, 0x0a, 0x05, 0x6d, + 0x6f, 0x6e, 0x74, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x6d, 0x6f, 0x6e, 0x74, + 0x68, 0x12, 0x10, 0x0a, 0x03, 0x64, 0x61, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, + 0x64, 0x61, 0x79, 0x22, 0x2f, 0x0a, 0x0b, 0x52, 0x45, 0x43, 0x59, 0x43, 0x4c, 0x45, 0x5f, 0x43, + 0x4d, 0x44, 0x12, 0x0b, 0x0a, 0x07, 0x52, 0x45, 0x53, 0x54, 0x4f, 0x52, 0x45, 0x10, 0x00, 0x12, + 0x09, 0x0a, 0x05, 0x50, 0x55, 0x52, 0x47, 0x45, 0x10, 0x01, 0x12, 0x08, 0x0a, 0x04, 0x4c, 0x49, + 0x53, 0x54, 0x10, 0x02, 0x1a, 0x8d, 0x02, 0x0a, 0x0f, 0x53, 0x65, 0x74, 0x58, 0x41, 0x74, 0x74, + 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4d, + 0x44, 0x49, 0x64, 0x52, 0x02, 0x69, 0x64, 0x12, 0x46, 0x0a, 0x06, 0x78, 0x61, 0x74, 0x74, 0x72, + 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, + 0x63, 0x2e, 0x4e, 0x53, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x53, 0x65, 0x74, 0x58, + 0x41, 0x74, 0x74, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x58, 0x61, 0x74, 0x74, + 0x72, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, 0x78, 0x61, 0x74, 0x74, 0x72, 0x73, 0x12, + 0x1c, 0x0a, 0x09, 0x72, 0x65, 0x63, 0x75, 0x72, 0x73, 0x69, 0x76, 0x65, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x08, 0x52, 0x09, 0x72, 0x65, 0x63, 0x75, 0x72, 0x73, 0x69, 0x76, 0x65, 0x12, 0x22, 0x0a, + 0x0c, 0x6b, 0x65, 0x79, 0x73, 0x74, 0x6f, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x18, 0x04, 0x20, + 0x03, 0x28, 0x09, 0x52, 0x0c, 0x6b, 0x65, 0x79, 0x73, 0x74, 0x6f, 0x64, 0x65, 0x6c, 0x65, 0x74, + 0x65, 0x12, 0x16, 0x0a, 0x06, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, + 0x08, 0x52, 0x06, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x1a, 0x39, 0x0a, 0x0b, 0x58, 0x61, 0x74, + 0x74, 0x72, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x54, 0x0a, 0x0c, 0x43, 0x68, 0x6f, 0x77, 0x6e, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x0d, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4d, 0x44, 0x49, 0x64, 0x52, + 0x02, 0x69, 0x64, 0x12, 0x25, 0x0a, 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x52, 0x6f, 0x6c, + 0x65, 0x49, 0x64, 0x52, 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x1a, 0x41, 0x0a, 0x0c, 0x43, 0x68, + 0x6d, 0x6f, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x02, 0x69, 0x64, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, + 0x2e, 0x4d, 0x44, 0x49, 0x64, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6d, 0x6f, 0x64, + 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x04, 0x6d, 0x6f, 0x64, 0x65, 0x1a, 0xc8, 0x02, + 0x0a, 0x0a, 0x41, 0x63, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x02, + 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, + 0x70, 0x63, 0x2e, 0x4d, 0x44, 0x49, 0x64, 0x52, 0x02, 0x69, 0x64, 0x12, 0x3b, 0x0a, 0x03, 0x63, + 0x6d, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x29, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, + 0x70, 0x63, 0x2e, 0x4e, 0x53, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x41, 0x63, 0x6c, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x41, 0x43, 0x4c, 0x5f, 0x43, 0x4f, 0x4d, 0x4d, + 0x41, 0x4e, 0x44, 0x52, 0x03, 0x63, 0x6d, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x72, 0x65, 0x63, 0x75, + 0x72, 0x73, 0x69, 0x76, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x72, 0x65, 0x63, + 0x75, 0x72, 0x73, 0x69, 0x76, 0x65, 0x12, 0x3a, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x04, + 0x20, 0x01, 0x28, 0x0e, 0x32, 0x26, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4e, + 0x53, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x41, 0x63, 0x6c, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x2e, 0x41, 0x43, 0x4c, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x52, 0x04, 0x74, 0x79, + 0x70, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x72, 0x75, 0x6c, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x04, 0x72, 0x75, 0x6c, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, + 0x6f, 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x08, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, + 0x6f, 0x6e, 0x22, 0x2d, 0x0a, 0x0b, 0x41, 0x43, 0x4c, 0x5f, 0x43, 0x4f, 0x4d, 0x4d, 0x41, 0x4e, + 0x44, 0x12, 0x08, 0x0a, 0x04, 0x4e, 0x4f, 0x4e, 0x45, 0x10, 0x00, 0x12, 0x0a, 0x0a, 0x06, 0x4d, + 0x4f, 0x44, 0x49, 0x46, 0x59, 0x10, 0x01, 0x12, 0x08, 0x0a, 0x04, 0x4c, 0x49, 0x53, 0x54, 0x10, + 0x02, 0x22, 0x25, 0x0a, 0x08, 0x41, 0x43, 0x4c, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x12, 0x0c, 0x0a, + 0x08, 0x55, 0x53, 0x45, 0x52, 0x5f, 0x41, 0x43, 0x4c, 0x10, 0x00, 0x12, 0x0b, 0x0a, 0x07, 0x53, + 0x59, 0x53, 0x5f, 0x41, 0x43, 0x4c, 0x10, 0x01, 0x1a, 0x39, 0x0a, 0x0c, 0x54, 0x6f, 0x6b, 0x65, + 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x29, 0x0a, 0x05, 0x74, 0x6f, 0x6b, 0x65, + 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, + 0x63, 0x2e, 0x53, 0x68, 0x61, 0x72, 0x65, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x05, 0x74, 0x6f, + 0x6b, 0x65, 0x6e, 0x1a, 0xc8, 0x01, 0x0a, 0x0c, 0x51, 0x75, 0x6f, 0x74, 0x61, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x61, 0x74, 0x68, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0c, 0x52, 0x04, 0x70, 0x61, 0x74, 0x68, 0x12, 0x1f, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x52, + 0x6f, 0x6c, 0x65, 0x49, 0x64, 0x52, 0x02, 0x69, 0x64, 0x12, 0x20, 0x0a, 0x02, 0x6f, 0x70, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x10, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, + 0x51, 0x55, 0x4f, 0x54, 0x41, 0x4f, 0x50, 0x52, 0x02, 0x6f, 0x70, 0x12, 0x1a, 0x0a, 0x08, 0x6d, + 0x61, 0x78, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x6d, + 0x61, 0x78, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x6d, 0x61, 0x78, 0x62, 0x79, + 0x74, 0x65, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x6d, 0x61, 0x78, 0x62, 0x79, + 0x74, 0x65, 0x73, 0x12, 0x29, 0x0a, 0x05, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x18, 0x06, 0x20, 0x01, + 0x28, 0x0e, 0x32, 0x13, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x51, 0x55, 0x4f, + 0x54, 0x41, 0x45, 0x4e, 0x54, 0x52, 0x59, 0x52, 0x05, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x1a, 0xd2, + 0x04, 0x0a, 0x0c, 0x53, 0x68, 0x61, 0x72, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, + 0x39, 0x0a, 0x02, 0x6c, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x65, 0x6f, + 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4e, 0x53, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, + 0x53, 0x68, 0x61, 0x72, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x4c, 0x73, 0x53, + 0x68, 0x61, 0x72, 0x65, 0x48, 0x00, 0x52, 0x02, 0x6c, 0x73, 0x12, 0x3e, 0x0a, 0x02, 0x6f, 0x70, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, + 0x2e, 0x4e, 0x53, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x53, 0x68, 0x61, 0x72, 0x65, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x65, 0x53, + 0x68, 0x61, 0x72, 0x65, 0x48, 0x00, 0x52, 0x02, 0x6f, 0x70, 0x1a, 0xb6, 0x01, 0x0a, 0x07, 0x4c, + 0x73, 0x53, 0x68, 0x61, 0x72, 0x65, 0x12, 0x4f, 0x0a, 0x09, 0x6f, 0x75, 0x74, 0x66, 0x6f, 0x72, + 0x6d, 0x61, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x31, 0x2e, 0x65, 0x6f, 0x73, 0x2e, + 0x72, 0x70, 0x63, 0x2e, 0x4e, 0x53, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x53, 0x68, + 0x61, 0x72, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x4c, 0x73, 0x53, 0x68, 0x61, + 0x72, 0x65, 0x2e, 0x4f, 0x75, 0x74, 0x46, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x52, 0x09, 0x6f, 0x75, + 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x73, 0x65, 0x6c, 0x65, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x65, 0x6c, 0x65, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x3c, 0x0a, 0x09, 0x4f, 0x75, 0x74, 0x46, 0x6f, 0x72, 0x6d, + 0x61, 0x74, 0x12, 0x08, 0x0a, 0x04, 0x4e, 0x4f, 0x4e, 0x45, 0x10, 0x00, 0x12, 0x0e, 0x0a, 0x0a, + 0x4d, 0x4f, 0x4e, 0x49, 0x54, 0x4f, 0x52, 0x49, 0x4e, 0x47, 0x10, 0x01, 0x12, 0x0b, 0x0a, 0x07, + 0x4c, 0x49, 0x53, 0x54, 0x49, 0x4e, 0x47, 0x10, 0x02, 0x12, 0x08, 0x0a, 0x04, 0x4a, 0x53, 0x4f, + 0x4e, 0x10, 0x03, 0x1a, 0x83, 0x02, 0x0a, 0x0c, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x65, 0x53, + 0x68, 0x61, 0x72, 0x65, 0x12, 0x3f, 0x0a, 0x02, 0x6f, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, + 0x32, 0x2f, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4e, 0x53, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x2e, 0x53, 0x68, 0x61, 0x72, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x2e, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x65, 0x53, 0x68, 0x61, 0x72, 0x65, 0x2e, 0x4f, + 0x70, 0x52, 0x02, 0x6f, 0x70, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x68, 0x61, 0x72, 0x65, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x73, 0x68, 0x61, 0x72, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x61, + 0x63, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x61, 0x63, 0x6c, 0x12, 0x12, 0x0a, + 0x04, 0x70, 0x61, 0x74, 0x68, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x70, 0x61, 0x74, + 0x68, 0x12, 0x12, 0x0a, 0x04, 0x75, 0x73, 0x65, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x04, 0x75, 0x73, 0x65, 0x72, 0x12, 0x14, 0x0a, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x06, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x22, 0x4c, 0x0a, 0x02, 0x4f, + 0x70, 0x12, 0x0a, 0x0a, 0x06, 0x43, 0x52, 0x45, 0x41, 0x54, 0x45, 0x10, 0x00, 0x12, 0x0a, 0x0a, + 0x06, 0x52, 0x45, 0x4d, 0x4f, 0x56, 0x45, 0x10, 0x01, 0x12, 0x09, 0x0a, 0x05, 0x53, 0x48, 0x41, + 0x52, 0x45, 0x10, 0x02, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x4e, 0x53, 0x48, 0x41, 0x52, 0x45, 0x10, + 0x03, 0x12, 0x0a, 0x0a, 0x06, 0x41, 0x43, 0x43, 0x45, 0x53, 0x53, 0x10, 0x04, 0x12, 0x0a, 0x0a, + 0x06, 0x4d, 0x4f, 0x44, 0x49, 0x46, 0x59, 0x10, 0x05, 0x42, 0x08, 0x0a, 0x06, 0x73, 0x75, 0x62, + 0x63, 0x6d, 0x64, 0x42, 0x09, 0x0a, 0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x22, 0xa4, + 0x0c, 0x0a, 0x0a, 0x4e, 0x53, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x37, 0x0a, + 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x65, + 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4e, 0x53, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x2e, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, + 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x12, 0x3d, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, + 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, + 0x63, 0x2e, 0x4e, 0x53, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x56, 0x65, 0x72, + 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x07, 0x76, 0x65, + 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x3d, 0x0a, 0x07, 0x72, 0x65, 0x63, 0x79, 0x63, 0x6c, 0x65, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, + 0x2e, 0x4e, 0x53, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x52, 0x65, 0x63, 0x79, + 0x63, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x07, 0x72, 0x65, 0x63, + 0x79, 0x63, 0x6c, 0x65, 0x12, 0x31, 0x0a, 0x03, 0x61, 0x63, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x1f, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4e, 0x53, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x41, 0x63, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x52, 0x03, 0x61, 0x63, 0x6c, 0x12, 0x37, 0x0a, 0x05, 0x71, 0x75, 0x6f, 0x74, 0x61, + 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, + 0x2e, 0x4e, 0x53, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x51, 0x75, 0x6f, 0x74, + 0x61, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x05, 0x71, 0x75, 0x6f, 0x74, 0x61, + 0x12, 0x37, 0x0a, 0x05, 0x73, 0x68, 0x61, 0x72, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x21, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4e, 0x53, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x53, 0x68, 0x61, 0x72, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x52, 0x05, 0x73, 0x68, 0x61, 0x72, 0x65, 0x1a, 0x35, 0x0a, 0x0d, 0x45, 0x72, 0x72, + 0x6f, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, + 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x12, 0x10, + 0x0a, 0x03, 0x6d, 0x73, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6d, 0x73, 0x67, + 0x1a, 0xd7, 0x01, 0x0a, 0x0f, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x03, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x6d, 0x73, 0x67, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6d, 0x73, 0x67, 0x12, 0x4b, 0x0a, 0x08, 0x76, 0x65, + 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x65, + 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4e, 0x53, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x2e, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x2e, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x08, 0x76, + 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x1a, 0x51, 0x0a, 0x0b, 0x56, 0x65, 0x72, 0x73, 0x69, + 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x1d, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4d, 0x44, 0x49, + 0x64, 0x52, 0x02, 0x69, 0x64, 0x12, 0x23, 0x0a, 0x05, 0x6d, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x54, + 0x69, 0x6d, 0x65, 0x52, 0x05, 0x6d, 0x74, 0x69, 0x6d, 0x65, 0x1a, 0x9b, 0x03, 0x0a, 0x0f, 0x52, + 0x65, 0x63, 0x79, 0x63, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x12, + 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x04, 0x63, 0x6f, + 0x64, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x6d, 0x73, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x03, 0x6d, 0x73, 0x67, 0x12, 0x4b, 0x0a, 0x08, 0x72, 0x65, 0x63, 0x79, 0x63, 0x6c, 0x65, 0x73, + 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, + 0x2e, 0x4e, 0x53, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x52, 0x65, 0x63, 0x79, + 0x63, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x52, 0x65, 0x63, 0x79, + 0x63, 0x6c, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x08, 0x72, 0x65, 0x63, 0x79, 0x63, 0x6c, 0x65, + 0x73, 0x1a, 0x94, 0x02, 0x0a, 0x0b, 0x52, 0x65, 0x63, 0x79, 0x63, 0x6c, 0x65, 0x49, 0x6e, 0x66, + 0x6f, 0x12, 0x1d, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, + 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4d, 0x44, 0x49, 0x64, 0x52, 0x02, 0x69, 0x64, + 0x12, 0x25, 0x0a, 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x0f, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x52, 0x6f, 0x6c, 0x65, 0x49, 0x64, + 0x52, 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x12, 0x23, 0x0a, 0x05, 0x64, 0x74, 0x69, 0x6d, 0x65, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, + 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x52, 0x05, 0x64, 0x74, 0x69, 0x6d, 0x65, 0x12, 0x12, 0x0a, 0x04, + 0x73, 0x69, 0x7a, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x04, 0x52, 0x04, 0x73, 0x69, 0x7a, 0x65, + 0x12, 0x50, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x3c, + 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4e, 0x53, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x2e, 0x52, 0x65, 0x63, 0x79, 0x63, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x2e, 0x52, 0x65, 0x63, 0x79, 0x63, 0x6c, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x2e, + 0x44, 0x45, 0x4c, 0x45, 0x54, 0x49, 0x4f, 0x4e, 0x54, 0x59, 0x50, 0x45, 0x52, 0x04, 0x74, 0x79, + 0x70, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x03, 0x6b, 0x65, 0x79, 0x22, 0x22, 0x0a, 0x0c, 0x44, 0x45, 0x4c, 0x45, 0x54, 0x49, 0x4f, 0x4e, + 0x54, 0x59, 0x50, 0x45, 0x12, 0x08, 0x0a, 0x04, 0x46, 0x49, 0x4c, 0x45, 0x10, 0x00, 0x12, 0x08, + 0x0a, 0x04, 0x54, 0x52, 0x45, 0x45, 0x10, 0x01, 0x1a, 0x47, 0x0a, 0x0b, 0x41, 0x63, 0x6c, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x6d, + 0x73, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6d, 0x73, 0x67, 0x12, 0x12, 0x0a, + 0x04, 0x72, 0x75, 0x6c, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x72, 0x75, 0x6c, + 0x65, 0x1a, 0x68, 0x0a, 0x0d, 0x51, 0x75, 0x6f, 0x74, 0x61, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, + 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x6d, 0x73, 0x67, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x03, 0x6d, 0x73, 0x67, 0x12, 0x31, 0x0a, 0x09, 0x71, 0x75, 0x6f, 0x74, + 0x61, 0x6e, 0x6f, 0x64, 0x65, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x65, 0x6f, + 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x51, 0x75, 0x6f, 0x74, 0x61, 0x50, 0x72, 0x6f, 0x74, 0x6f, + 0x52, 0x09, 0x71, 0x75, 0x6f, 0x74, 0x61, 0x6e, 0x6f, 0x64, 0x65, 0x1a, 0x73, 0x0a, 0x09, 0x53, + 0x68, 0x61, 0x72, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x12, 0x0a, 0x04, + 0x72, 0x6f, 0x6f, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x72, 0x6f, 0x6f, 0x74, + 0x12, 0x12, 0x0a, 0x04, 0x72, 0x75, 0x6c, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, + 0x72, 0x75, 0x6c, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, + 0x04, 0x52, 0x03, 0x75, 0x69, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x6e, 0x73, 0x68, 0x61, 0x72, 0x65, + 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x04, 0x52, 0x07, 0x6e, 0x73, 0x68, 0x61, 0x72, 0x65, 0x64, + 0x1a, 0x3b, 0x0a, 0x0b, 0x53, 0x68, 0x61, 0x72, 0x65, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x12, + 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, + 0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x67, 0x72, 0x61, 0x6e, 0x74, 0x65, 0x64, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x67, 0x72, 0x61, 0x6e, 0x74, 0x65, 0x64, 0x1a, 0xa5, 0x01, + 0x0a, 0x0d, 0x53, 0x68, 0x61, 0x72, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, + 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x04, 0x63, + 0x6f, 0x64, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x6d, 0x73, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x03, 0x6d, 0x73, 0x67, 0x12, 0x35, 0x0a, 0x06, 0x73, 0x68, 0x61, 0x72, 0x65, 0x73, 0x18, + 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, + 0x4e, 0x53, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x53, 0x68, 0x61, 0x72, 0x65, + 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x06, 0x73, 0x68, 0x61, 0x72, 0x65, 0x73, 0x12, 0x37, 0x0a, 0x06, + 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x65, + 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4e, 0x53, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x2e, 0x53, 0x68, 0x61, 0x72, 0x65, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x52, 0x06, 0x61, + 0x63, 0x63, 0x65, 0x73, 0x73, 0x22, 0x29, 0x0a, 0x0d, 0x4e, 0x73, 0x53, 0x74, 0x61, 0x74, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x61, 0x75, 0x74, 0x68, 0x6b, 0x65, + 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x75, 0x74, 0x68, 0x6b, 0x65, 0x79, + 0x22, 0xab, 0x03, 0x0a, 0x0e, 0x4e, 0x73, 0x53, 0x74, 0x61, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x03, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x65, 0x6d, 0x73, 0x67, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x65, 0x6d, 0x73, 0x67, 0x12, 0x14, 0x0a, 0x05, 0x73, + 0x74, 0x61, 0x74, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, + 0x65, 0x12, 0x16, 0x0a, 0x06, 0x6e, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, + 0x04, 0x52, 0x06, 0x6e, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x12, 0x20, 0x0a, 0x0b, 0x6e, 0x63, 0x6f, + 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0b, + 0x6e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x73, 0x12, 0x1b, 0x0a, 0x09, 0x62, + 0x6f, 0x6f, 0x74, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, + 0x62, 0x6f, 0x6f, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x63, 0x75, 0x72, 0x72, + 0x65, 0x6e, 0x74, 0x5f, 0x66, 0x69, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0a, 0x63, + 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x46, 0x69, 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x63, 0x75, 0x72, + 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x63, 0x69, 0x64, 0x18, 0x08, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0a, + 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x43, 0x69, 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x6d, 0x65, + 0x6d, 0x5f, 0x76, 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, 0x18, 0x09, 0x20, 0x01, 0x28, 0x04, 0x52, + 0x0a, 0x6d, 0x65, 0x6d, 0x56, 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, 0x12, 0x21, 0x0a, 0x0c, 0x6d, + 0x65, 0x6d, 0x5f, 0x72, 0x65, 0x73, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x18, 0x0a, 0x20, 0x01, 0x28, + 0x04, 0x52, 0x0b, 0x6d, 0x65, 0x6d, 0x52, 0x65, 0x73, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x12, 0x1b, + 0x0a, 0x09, 0x6d, 0x65, 0x6d, 0x5f, 0x73, 0x68, 0x61, 0x72, 0x65, 0x18, 0x0b, 0x20, 0x01, 0x28, + 0x04, 0x52, 0x08, 0x6d, 0x65, 0x6d, 0x53, 0x68, 0x61, 0x72, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x6d, + 0x65, 0x6d, 0x5f, 0x67, 0x72, 0x6f, 0x77, 0x74, 0x68, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x04, 0x52, + 0x09, 0x6d, 0x65, 0x6d, 0x47, 0x72, 0x6f, 0x77, 0x74, 0x68, 0x12, 0x18, 0x0a, 0x07, 0x74, 0x68, + 0x72, 0x65, 0x61, 0x64, 0x73, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x04, 0x52, 0x07, 0x74, 0x68, 0x72, + 0x65, 0x61, 0x64, 0x73, 0x12, 0x10, 0x0a, 0x03, 0x66, 0x64, 0x73, 0x18, 0x0e, 0x20, 0x01, 0x28, + 0x04, 0x52, 0x03, 0x66, 0x64, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x75, 0x70, 0x74, 0x69, 0x6d, 0x65, + 0x18, 0x0f, 0x20, 0x01, 0x28, 0x04, 0x52, 0x06, 0x75, 0x70, 0x74, 0x69, 0x6d, 0x65, 0x22, 0xba, + 0x03, 0x0a, 0x0d, 0x4d, 0x61, 0x6e, 0x69, 0x6c, 0x61, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x12, 0x3f, 0x0a, 0x0c, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, 0x74, 0x79, 0x70, 0x65, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1c, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, + 0x2e, 0x4d, 0x41, 0x4e, 0x49, 0x4c, 0x41, 0x5f, 0x52, 0x45, 0x51, 0x55, 0x45, 0x53, 0x54, 0x5f, + 0x54, 0x59, 0x50, 0x45, 0x52, 0x0b, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x54, 0x79, 0x70, + 0x65, 0x12, 0x19, 0x0a, 0x08, 0x61, 0x75, 0x74, 0x68, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x75, 0x74, 0x68, 0x4b, 0x65, 0x79, 0x12, 0x1a, 0x0a, 0x08, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x68, 0x61, 0x72, + 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x68, + 0x61, 0x72, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, + 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, + 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x19, 0x0a, 0x08, 0x73, 0x68, 0x61, + 0x72, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x73, 0x68, 0x61, + 0x72, 0x65, 0x49, 0x64, 0x12, 0x24, 0x0a, 0x0e, 0x73, 0x68, 0x61, 0x72, 0x65, 0x5f, 0x67, 0x72, + 0x6f, 0x75, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x73, 0x68, + 0x61, 0x72, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x71, 0x75, + 0x6f, 0x74, 0x61, 0x18, 0x08, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x71, 0x75, 0x6f, 0x74, 0x61, + 0x12, 0x18, 0x0a, 0x07, 0x63, 0x72, 0x65, 0x61, 0x74, 0x6f, 0x72, 0x18, 0x09, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x07, 0x63, 0x72, 0x65, 0x61, 0x74, 0x6f, 0x72, 0x12, 0x16, 0x0a, 0x06, 0x65, 0x67, + 0x72, 0x6f, 0x75, 0x70, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x65, 0x67, 0x72, 0x6f, + 0x75, 0x70, 0x12, 0x21, 0x0a, 0x0c, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x5f, 0x65, 0x67, 0x72, 0x6f, + 0x75, 0x70, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x45, + 0x67, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x68, 0x61, 0x72, 0x65, 0x5f, 0x68, + 0x6f, 0x73, 0x74, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x68, 0x61, 0x72, 0x65, + 0x48, 0x6f, 0x73, 0x74, 0x12, 0x25, 0x0a, 0x0e, 0x73, 0x68, 0x61, 0x72, 0x65, 0x5f, 0x6c, 0x6f, + 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x73, 0x68, + 0x61, 0x72, 0x65, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0xca, 0x01, 0x0a, 0x0e, + 0x4d, 0x61, 0x6e, 0x69, 0x6c, 0x61, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x10, + 0x0a, 0x03, 0x6d, 0x73, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6d, 0x73, 0x67, + 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, + 0x63, 0x6f, 0x64, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x75, 0x73, + 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x55, + 0x73, 0x65, 0x64, 0x12, 0x25, 0x0a, 0x0e, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x63, 0x61, 0x70, + 0x61, 0x63, 0x69, 0x74, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0d, 0x74, 0x6f, 0x74, + 0x61, 0x6c, 0x43, 0x61, 0x70, 0x61, 0x63, 0x69, 0x74, 0x79, 0x12, 0x26, 0x0a, 0x0f, 0x6e, 0x65, + 0x77, 0x5f, 0x73, 0x68, 0x61, 0x72, 0x65, 0x5f, 0x71, 0x75, 0x6f, 0x74, 0x61, 0x18, 0x05, 0x20, + 0x01, 0x28, 0x03, 0x52, 0x0d, 0x6e, 0x65, 0x77, 0x53, 0x68, 0x61, 0x72, 0x65, 0x51, 0x75, 0x6f, + 0x74, 0x61, 0x12, 0x24, 0x0a, 0x0e, 0x6e, 0x65, 0x77, 0x5f, 0x73, 0x68, 0x61, 0x72, 0x65, 0x5f, + 0x70, 0x61, 0x74, 0x68, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x6e, 0x65, 0x77, 0x53, + 0x68, 0x61, 0x72, 0x65, 0x50, 0x61, 0x74, 0x68, 0x2a, 0x36, 0x0a, 0x04, 0x54, 0x59, 0x50, 0x45, + 0x12, 0x08, 0x0a, 0x04, 0x46, 0x49, 0x4c, 0x45, 0x10, 0x00, 0x12, 0x0d, 0x0a, 0x09, 0x43, 0x4f, + 0x4e, 0x54, 0x41, 0x49, 0x4e, 0x45, 0x52, 0x10, 0x01, 0x12, 0x0b, 0x0a, 0x07, 0x4c, 0x49, 0x53, + 0x54, 0x49, 0x4e, 0x47, 0x10, 0x02, 0x12, 0x08, 0x0a, 0x04, 0x53, 0x54, 0x41, 0x54, 0x10, 0x03, + 0x2a, 0x2d, 0x0a, 0x09, 0x51, 0x55, 0x4f, 0x54, 0x41, 0x54, 0x59, 0x50, 0x45, 0x12, 0x08, 0x0a, + 0x04, 0x55, 0x53, 0x45, 0x52, 0x10, 0x00, 0x12, 0x09, 0x0a, 0x05, 0x47, 0x52, 0x4f, 0x55, 0x50, + 0x10, 0x02, 0x12, 0x0b, 0x0a, 0x07, 0x50, 0x52, 0x4f, 0x4a, 0x45, 0x43, 0x54, 0x10, 0x03, 0x2a, + 0x2f, 0x0a, 0x07, 0x51, 0x55, 0x4f, 0x54, 0x41, 0x4f, 0x50, 0x12, 0x07, 0x0a, 0x03, 0x47, 0x45, + 0x54, 0x10, 0x00, 0x12, 0x07, 0x0a, 0x03, 0x53, 0x45, 0x54, 0x10, 0x01, 0x12, 0x06, 0x0a, 0x02, + 0x52, 0x4d, 0x10, 0x02, 0x12, 0x0a, 0x0a, 0x06, 0x52, 0x4d, 0x4e, 0x4f, 0x44, 0x45, 0x10, 0x03, + 0x2a, 0x2d, 0x0a, 0x0a, 0x51, 0x55, 0x4f, 0x54, 0x41, 0x45, 0x4e, 0x54, 0x52, 0x59, 0x12, 0x08, + 0x0a, 0x04, 0x4e, 0x4f, 0x4e, 0x45, 0x10, 0x00, 0x12, 0x0a, 0x0a, 0x06, 0x56, 0x4f, 0x4c, 0x55, + 0x4d, 0x45, 0x10, 0x01, 0x12, 0x09, 0x0a, 0x05, 0x49, 0x4e, 0x4f, 0x44, 0x45, 0x10, 0x02, 0x2a, + 0x94, 0x01, 0x0a, 0x13, 0x4d, 0x41, 0x4e, 0x49, 0x4c, 0x41, 0x5f, 0x52, 0x45, 0x51, 0x55, 0x45, + 0x53, 0x54, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x12, 0x10, 0x0a, 0x0c, 0x43, 0x52, 0x45, 0x41, 0x54, + 0x45, 0x5f, 0x53, 0x48, 0x41, 0x52, 0x45, 0x10, 0x00, 0x12, 0x10, 0x0a, 0x0c, 0x44, 0x45, 0x4c, + 0x45, 0x54, 0x45, 0x5f, 0x53, 0x48, 0x41, 0x52, 0x45, 0x10, 0x01, 0x12, 0x10, 0x0a, 0x0c, 0x45, + 0x58, 0x54, 0x45, 0x4e, 0x44, 0x5f, 0x53, 0x48, 0x41, 0x52, 0x45, 0x10, 0x02, 0x12, 0x10, 0x0a, + 0x0c, 0x53, 0x48, 0x52, 0x49, 0x4e, 0x4b, 0x5f, 0x53, 0x48, 0x41, 0x52, 0x45, 0x10, 0x03, 0x12, + 0x13, 0x0a, 0x0f, 0x4d, 0x41, 0x4e, 0x41, 0x47, 0x45, 0x5f, 0x45, 0x58, 0x49, 0x53, 0x54, 0x49, + 0x4e, 0x47, 0x10, 0x04, 0x12, 0x0c, 0x0a, 0x08, 0x55, 0x4e, 0x4d, 0x41, 0x4e, 0x41, 0x47, 0x45, + 0x10, 0x05, 0x12, 0x12, 0x0a, 0x0e, 0x47, 0x45, 0x54, 0x5f, 0x43, 0x41, 0x50, 0x41, 0x43, 0x49, + 0x54, 0x49, 0x45, 0x53, 0x10, 0x06, 0x32, 0xeb, 0x03, 0x0a, 0x03, 0x45, 0x6f, 0x73, 0x12, 0x32, + 0x0a, 0x04, 0x50, 0x69, 0x6e, 0x67, 0x12, 0x14, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, + 0x2e, 0x50, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x12, 0x2e, 0x65, + 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x50, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x70, 0x6c, 0x79, + 0x22, 0x00, 0x12, 0x31, 0x0a, 0x02, 0x4d, 0x44, 0x12, 0x12, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, + 0x70, 0x63, 0x2e, 0x4d, 0x44, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x13, 0x2e, 0x65, + 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4d, 0x44, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x22, 0x00, 0x30, 0x01, 0x12, 0x35, 0x0a, 0x04, 0x46, 0x69, 0x6e, 0x64, 0x12, 0x14, 0x2e, + 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x46, 0x69, 0x6e, 0x64, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x13, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4d, 0x44, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x30, 0x01, 0x12, 0x3b, 0x0a, 0x06, + 0x4e, 0x73, 0x53, 0x74, 0x61, 0x74, 0x12, 0x16, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, + 0x2e, 0x4e, 0x73, 0x53, 0x74, 0x61, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x17, + 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4e, 0x73, 0x53, 0x74, 0x61, 0x74, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x4a, 0x0a, 0x0f, 0x43, 0x6f, 0x6e, + 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x49, 0x6e, 0x73, 0x65, 0x72, 0x74, 0x12, 0x1f, 0x2e, 0x65, + 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, + 0x49, 0x6e, 0x73, 0x65, 0x72, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x14, 0x2e, + 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x49, 0x6e, 0x73, 0x65, 0x72, 0x74, 0x52, 0x65, + 0x70, 0x6c, 0x79, 0x22, 0x00, 0x12, 0x40, 0x0a, 0x0a, 0x46, 0x69, 0x6c, 0x65, 0x49, 0x6e, 0x73, + 0x65, 0x72, 0x74, 0x12, 0x1a, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x46, 0x69, + 0x6c, 0x65, 0x49, 0x6e, 0x73, 0x65, 0x72, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x14, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x49, 0x6e, 0x73, 0x65, 0x72, 0x74, + 0x52, 0x65, 0x70, 0x6c, 0x79, 0x22, 0x00, 0x12, 0x31, 0x0a, 0x04, 0x45, 0x78, 0x65, 0x63, 0x12, + 0x12, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4e, 0x53, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x13, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4e, 0x53, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x48, 0x0a, 0x13, 0x4d, 0x61, + 0x6e, 0x69, 0x6c, 0x61, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x12, 0x16, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4d, 0x61, 0x6e, 0x69, + 0x6c, 0x61, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x17, 0x2e, 0x65, 0x6f, 0x73, 0x2e, + 0x72, 0x70, 0x63, 0x2e, 0x4d, 0x61, 0x6e, 0x69, 0x6c, 0x61, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x22, 0x00, 0x42, 0x55, 0x0a, 0x0f, 0x69, 0x6f, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, + 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x42, 0x08, 0x45, 0x6f, 0x73, 0x50, 0x72, 0x6f, 0x74, + 0x6f, 0x50, 0x01, 0x5a, 0x30, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, + 0x63, 0x65, 0x72, 0x6e, 0x2d, 0x65, 0x6f, 0x73, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x3b, 0x65, 0x6f, 0x73, + 0x5f, 0x67, 0x72, 0x70, 0x63, 0xa2, 0x02, 0x03, 0x45, 0x4f, 0x53, 0x62, 0x06, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x33, +} + +var ( + file_Rpc_proto_rawDescOnce sync.Once + file_Rpc_proto_rawDescData = file_Rpc_proto_rawDesc +) + +func file_Rpc_proto_rawDescGZIP() []byte { + file_Rpc_proto_rawDescOnce.Do(func() { + file_Rpc_proto_rawDescData = protoimpl.X.CompressGZIP(file_Rpc_proto_rawDescData) + }) + return file_Rpc_proto_rawDescData +} + +var file_Rpc_proto_enumTypes = make([]protoimpl.EnumInfo, 12) +var file_Rpc_proto_msgTypes = make([]protoimpl.MessageInfo, 60) +var file_Rpc_proto_goTypes = []interface{}{ + (TYPE)(0), // 0: eos.rpc.TYPE + (QUOTATYPE)(0), // 1: eos.rpc.QUOTATYPE + (QUOTAOP)(0), // 2: eos.rpc.QUOTAOP + (QUOTAENTRY)(0), // 3: eos.rpc.QUOTAENTRY + (MANILA_REQUEST_TYPE)(0), // 4: eos.rpc.MANILA_REQUEST_TYPE + (NSRequest_VersionRequest_VERSION_CMD)(0), // 5: eos.rpc.NSRequest.VersionRequest.VERSION_CMD + (NSRequest_RecycleRequest_RECYCLE_CMD)(0), // 6: eos.rpc.NSRequest.RecycleRequest.RECYCLE_CMD + (NSRequest_AclRequest_ACL_COMMAND)(0), // 7: eos.rpc.NSRequest.AclRequest.ACL_COMMAND + (NSRequest_AclRequest_ACL_TYPE)(0), // 8: eos.rpc.NSRequest.AclRequest.ACL_TYPE + (NSRequest_ShareRequest_LsShare_OutFormat)(0), // 9: eos.rpc.NSRequest.ShareRequest.LsShare.OutFormat + (NSRequest_ShareRequest_OperateShare_Op)(0), // 10: eos.rpc.NSRequest.ShareRequest.OperateShare.Op + (NSResponse_RecycleResponse_RecycleInfo_DELETIONTYPE)(0), // 11: eos.rpc.NSResponse.RecycleResponse.RecycleInfo.DELETIONTYPE + (*PingRequest)(nil), // 12: eos.rpc.PingRequest + (*PingReply)(nil), // 13: eos.rpc.PingReply + (*ContainerInsertRequest)(nil), // 14: eos.rpc.ContainerInsertRequest + (*FileInsertRequest)(nil), // 15: eos.rpc.FileInsertRequest + (*InsertReply)(nil), // 16: eos.rpc.InsertReply + (*Time)(nil), // 17: eos.rpc.Time + (*Checksum)(nil), // 18: eos.rpc.Checksum + (*FileMdProto)(nil), // 19: eos.rpc.FileMdProto + (*ContainerMdProto)(nil), // 20: eos.rpc.ContainerMdProto + (*QuotaProto)(nil), // 21: eos.rpc.QuotaProto + (*RoleId)(nil), // 22: eos.rpc.RoleId + (*MDId)(nil), // 23: eos.rpc.MDId + (*Limit)(nil), // 24: eos.rpc.Limit + (*MDSelection)(nil), // 25: eos.rpc.MDSelection + (*MDRequest)(nil), // 26: eos.rpc.MDRequest + (*MDResponse)(nil), // 27: eos.rpc.MDResponse + (*FindRequest)(nil), // 28: eos.rpc.FindRequest + (*ShareAuth)(nil), // 29: eos.rpc.ShareAuth + (*ShareProto)(nil), // 30: eos.rpc.ShareProto + (*ShareToken)(nil), // 31: eos.rpc.ShareToken + (*NSRequest)(nil), // 32: eos.rpc.NSRequest + (*NSResponse)(nil), // 33: eos.rpc.NSResponse + (*NsStatRequest)(nil), // 34: eos.rpc.NsStatRequest + (*NsStatResponse)(nil), // 35: eos.rpc.NsStatResponse + (*ManilaRequest)(nil), // 36: eos.rpc.ManilaRequest + (*ManilaResponse)(nil), // 37: eos.rpc.ManilaResponse + nil, // 38: eos.rpc.FileMdProto.XattrsEntry + nil, // 39: eos.rpc.ContainerMdProto.XattrsEntry + nil, // 40: eos.rpc.MDSelection.XattrEntry + (*NSRequest_MkdirRequest)(nil), // 41: eos.rpc.NSRequest.MkdirRequest + (*NSRequest_RmdirRequest)(nil), // 42: eos.rpc.NSRequest.RmdirRequest + (*NSRequest_TouchRequest)(nil), // 43: eos.rpc.NSRequest.TouchRequest + (*NSRequest_UnlinkRequest)(nil), // 44: eos.rpc.NSRequest.UnlinkRequest + (*NSRequest_RmRequest)(nil), // 45: eos.rpc.NSRequest.RmRequest + (*NSRequest_RenameRequest)(nil), // 46: eos.rpc.NSRequest.RenameRequest + (*NSRequest_SymlinkRequest)(nil), // 47: eos.rpc.NSRequest.SymlinkRequest + (*NSRequest_VersionRequest)(nil), // 48: eos.rpc.NSRequest.VersionRequest + (*NSRequest_RecycleRequest)(nil), // 49: eos.rpc.NSRequest.RecycleRequest + (*NSRequest_SetXAttrRequest)(nil), // 50: eos.rpc.NSRequest.SetXAttrRequest + (*NSRequest_ChownRequest)(nil), // 51: eos.rpc.NSRequest.ChownRequest + (*NSRequest_ChmodRequest)(nil), // 52: eos.rpc.NSRequest.ChmodRequest + (*NSRequest_AclRequest)(nil), // 53: eos.rpc.NSRequest.AclRequest + (*NSRequest_TokenRequest)(nil), // 54: eos.rpc.NSRequest.TokenRequest + (*NSRequest_QuotaRequest)(nil), // 55: eos.rpc.NSRequest.QuotaRequest + (*NSRequest_ShareRequest)(nil), // 56: eos.rpc.NSRequest.ShareRequest + (*NSRequest_RecycleRequest_RestoreFlags)(nil), // 57: eos.rpc.NSRequest.RecycleRequest.RestoreFlags + (*NSRequest_RecycleRequest_PurgeDate)(nil), // 58: eos.rpc.NSRequest.RecycleRequest.PurgeDate + nil, // 59: eos.rpc.NSRequest.SetXAttrRequest.XattrsEntry + (*NSRequest_ShareRequest_LsShare)(nil), // 60: eos.rpc.NSRequest.ShareRequest.LsShare + (*NSRequest_ShareRequest_OperateShare)(nil), // 61: eos.rpc.NSRequest.ShareRequest.OperateShare + (*NSResponse_ErrorResponse)(nil), // 62: eos.rpc.NSResponse.ErrorResponse + (*NSResponse_VersionResponse)(nil), // 63: eos.rpc.NSResponse.VersionResponse + (*NSResponse_RecycleResponse)(nil), // 64: eos.rpc.NSResponse.RecycleResponse + (*NSResponse_AclResponse)(nil), // 65: eos.rpc.NSResponse.AclResponse + (*NSResponse_QuotaResponse)(nil), // 66: eos.rpc.NSResponse.QuotaResponse + (*NSResponse_ShareInfo)(nil), // 67: eos.rpc.NSResponse.ShareInfo + (*NSResponse_ShareAccess)(nil), // 68: eos.rpc.NSResponse.ShareAccess + (*NSResponse_ShareResponse)(nil), // 69: eos.rpc.NSResponse.ShareResponse + (*NSResponse_VersionResponse_VersionInfo)(nil), // 70: eos.rpc.NSResponse.VersionResponse.VersionInfo + (*NSResponse_RecycleResponse_RecycleInfo)(nil), // 71: eos.rpc.NSResponse.RecycleResponse.RecycleInfo +} +var file_Rpc_proto_depIdxs = []int32{ + 20, // 0: eos.rpc.ContainerInsertRequest.container:type_name -> eos.rpc.ContainerMdProto + 19, // 1: eos.rpc.FileInsertRequest.files:type_name -> eos.rpc.FileMdProto + 17, // 2: eos.rpc.FileMdProto.ctime:type_name -> eos.rpc.Time + 17, // 3: eos.rpc.FileMdProto.mtime:type_name -> eos.rpc.Time + 18, // 4: eos.rpc.FileMdProto.checksum:type_name -> eos.rpc.Checksum + 38, // 5: eos.rpc.FileMdProto.xattrs:type_name -> eos.rpc.FileMdProto.XattrsEntry + 17, // 6: eos.rpc.ContainerMdProto.ctime:type_name -> eos.rpc.Time + 17, // 7: eos.rpc.ContainerMdProto.mtime:type_name -> eos.rpc.Time + 17, // 8: eos.rpc.ContainerMdProto.stime:type_name -> eos.rpc.Time + 39, // 9: eos.rpc.ContainerMdProto.xattrs:type_name -> eos.rpc.ContainerMdProto.XattrsEntry + 1, // 10: eos.rpc.QuotaProto.type:type_name -> eos.rpc.QUOTATYPE + 0, // 11: eos.rpc.MDId.type:type_name -> eos.rpc.TYPE + 24, // 12: eos.rpc.MDSelection.ctime:type_name -> eos.rpc.Limit + 24, // 13: eos.rpc.MDSelection.mtime:type_name -> eos.rpc.Limit + 24, // 14: eos.rpc.MDSelection.stime:type_name -> eos.rpc.Limit + 24, // 15: eos.rpc.MDSelection.size:type_name -> eos.rpc.Limit + 24, // 16: eos.rpc.MDSelection.treesize:type_name -> eos.rpc.Limit + 24, // 17: eos.rpc.MDSelection.children:type_name -> eos.rpc.Limit + 24, // 18: eos.rpc.MDSelection.locations:type_name -> eos.rpc.Limit + 24, // 19: eos.rpc.MDSelection.unlinked_locations:type_name -> eos.rpc.Limit + 18, // 20: eos.rpc.MDSelection.checksum:type_name -> eos.rpc.Checksum + 40, // 21: eos.rpc.MDSelection.xattr:type_name -> eos.rpc.MDSelection.XattrEntry + 0, // 22: eos.rpc.MDRequest.type:type_name -> eos.rpc.TYPE + 23, // 23: eos.rpc.MDRequest.id:type_name -> eos.rpc.MDId + 22, // 24: eos.rpc.MDRequest.role:type_name -> eos.rpc.RoleId + 25, // 25: eos.rpc.MDRequest.selection:type_name -> eos.rpc.MDSelection + 0, // 26: eos.rpc.MDResponse.type:type_name -> eos.rpc.TYPE + 19, // 27: eos.rpc.MDResponse.fmd:type_name -> eos.rpc.FileMdProto + 20, // 28: eos.rpc.MDResponse.cmd:type_name -> eos.rpc.ContainerMdProto + 0, // 29: eos.rpc.FindRequest.type:type_name -> eos.rpc.TYPE + 23, // 30: eos.rpc.FindRequest.id:type_name -> eos.rpc.MDId + 22, // 31: eos.rpc.FindRequest.role:type_name -> eos.rpc.RoleId + 25, // 32: eos.rpc.FindRequest.selection:type_name -> eos.rpc.MDSelection + 29, // 33: eos.rpc.ShareProto.origins:type_name -> eos.rpc.ShareAuth + 30, // 34: eos.rpc.ShareToken.token:type_name -> eos.rpc.ShareProto + 22, // 35: eos.rpc.NSRequest.role:type_name -> eos.rpc.RoleId + 41, // 36: eos.rpc.NSRequest.mkdir:type_name -> eos.rpc.NSRequest.MkdirRequest + 42, // 37: eos.rpc.NSRequest.rmdir:type_name -> eos.rpc.NSRequest.RmdirRequest + 43, // 38: eos.rpc.NSRequest.touch:type_name -> eos.rpc.NSRequest.TouchRequest + 44, // 39: eos.rpc.NSRequest.unlink:type_name -> eos.rpc.NSRequest.UnlinkRequest + 45, // 40: eos.rpc.NSRequest.rm:type_name -> eos.rpc.NSRequest.RmRequest + 46, // 41: eos.rpc.NSRequest.rename:type_name -> eos.rpc.NSRequest.RenameRequest + 47, // 42: eos.rpc.NSRequest.symlink:type_name -> eos.rpc.NSRequest.SymlinkRequest + 48, // 43: eos.rpc.NSRequest.version:type_name -> eos.rpc.NSRequest.VersionRequest + 49, // 44: eos.rpc.NSRequest.recycle:type_name -> eos.rpc.NSRequest.RecycleRequest + 50, // 45: eos.rpc.NSRequest.xattr:type_name -> eos.rpc.NSRequest.SetXAttrRequest + 51, // 46: eos.rpc.NSRequest.chown:type_name -> eos.rpc.NSRequest.ChownRequest + 52, // 47: eos.rpc.NSRequest.chmod:type_name -> eos.rpc.NSRequest.ChmodRequest + 53, // 48: eos.rpc.NSRequest.acl:type_name -> eos.rpc.NSRequest.AclRequest + 54, // 49: eos.rpc.NSRequest.token:type_name -> eos.rpc.NSRequest.TokenRequest + 55, // 50: eos.rpc.NSRequest.quota:type_name -> eos.rpc.NSRequest.QuotaRequest + 56, // 51: eos.rpc.NSRequest.share:type_name -> eos.rpc.NSRequest.ShareRequest + 62, // 52: eos.rpc.NSResponse.error:type_name -> eos.rpc.NSResponse.ErrorResponse + 63, // 53: eos.rpc.NSResponse.version:type_name -> eos.rpc.NSResponse.VersionResponse + 64, // 54: eos.rpc.NSResponse.recycle:type_name -> eos.rpc.NSResponse.RecycleResponse + 65, // 55: eos.rpc.NSResponse.acl:type_name -> eos.rpc.NSResponse.AclResponse + 66, // 56: eos.rpc.NSResponse.quota:type_name -> eos.rpc.NSResponse.QuotaResponse + 69, // 57: eos.rpc.NSResponse.share:type_name -> eos.rpc.NSResponse.ShareResponse + 4, // 58: eos.rpc.ManilaRequest.request_type:type_name -> eos.rpc.MANILA_REQUEST_TYPE + 23, // 59: eos.rpc.NSRequest.MkdirRequest.id:type_name -> eos.rpc.MDId + 23, // 60: eos.rpc.NSRequest.RmdirRequest.id:type_name -> eos.rpc.MDId + 23, // 61: eos.rpc.NSRequest.TouchRequest.id:type_name -> eos.rpc.MDId + 23, // 62: eos.rpc.NSRequest.UnlinkRequest.id:type_name -> eos.rpc.MDId + 23, // 63: eos.rpc.NSRequest.RmRequest.id:type_name -> eos.rpc.MDId + 23, // 64: eos.rpc.NSRequest.RenameRequest.id:type_name -> eos.rpc.MDId + 23, // 65: eos.rpc.NSRequest.SymlinkRequest.id:type_name -> eos.rpc.MDId + 23, // 66: eos.rpc.NSRequest.VersionRequest.id:type_name -> eos.rpc.MDId + 5, // 67: eos.rpc.NSRequest.VersionRequest.cmd:type_name -> eos.rpc.NSRequest.VersionRequest.VERSION_CMD + 6, // 68: eos.rpc.NSRequest.RecycleRequest.cmd:type_name -> eos.rpc.NSRequest.RecycleRequest.RECYCLE_CMD + 57, // 69: eos.rpc.NSRequest.RecycleRequest.restoreflag:type_name -> eos.rpc.NSRequest.RecycleRequest.RestoreFlags + 58, // 70: eos.rpc.NSRequest.RecycleRequest.purgedate:type_name -> eos.rpc.NSRequest.RecycleRequest.PurgeDate + 23, // 71: eos.rpc.NSRequest.SetXAttrRequest.id:type_name -> eos.rpc.MDId + 59, // 72: eos.rpc.NSRequest.SetXAttrRequest.xattrs:type_name -> eos.rpc.NSRequest.SetXAttrRequest.XattrsEntry + 23, // 73: eos.rpc.NSRequest.ChownRequest.id:type_name -> eos.rpc.MDId + 22, // 74: eos.rpc.NSRequest.ChownRequest.owner:type_name -> eos.rpc.RoleId + 23, // 75: eos.rpc.NSRequest.ChmodRequest.id:type_name -> eos.rpc.MDId + 23, // 76: eos.rpc.NSRequest.AclRequest.id:type_name -> eos.rpc.MDId + 7, // 77: eos.rpc.NSRequest.AclRequest.cmd:type_name -> eos.rpc.NSRequest.AclRequest.ACL_COMMAND + 8, // 78: eos.rpc.NSRequest.AclRequest.type:type_name -> eos.rpc.NSRequest.AclRequest.ACL_TYPE + 31, // 79: eos.rpc.NSRequest.TokenRequest.token:type_name -> eos.rpc.ShareToken + 22, // 80: eos.rpc.NSRequest.QuotaRequest.id:type_name -> eos.rpc.RoleId + 2, // 81: eos.rpc.NSRequest.QuotaRequest.op:type_name -> eos.rpc.QUOTAOP + 3, // 82: eos.rpc.NSRequest.QuotaRequest.entry:type_name -> eos.rpc.QUOTAENTRY + 60, // 83: eos.rpc.NSRequest.ShareRequest.ls:type_name -> eos.rpc.NSRequest.ShareRequest.LsShare + 61, // 84: eos.rpc.NSRequest.ShareRequest.op:type_name -> eos.rpc.NSRequest.ShareRequest.OperateShare + 9, // 85: eos.rpc.NSRequest.ShareRequest.LsShare.outformat:type_name -> eos.rpc.NSRequest.ShareRequest.LsShare.OutFormat + 10, // 86: eos.rpc.NSRequest.ShareRequest.OperateShare.op:type_name -> eos.rpc.NSRequest.ShareRequest.OperateShare.Op + 70, // 87: eos.rpc.NSResponse.VersionResponse.versions:type_name -> eos.rpc.NSResponse.VersionResponse.VersionInfo + 71, // 88: eos.rpc.NSResponse.RecycleResponse.recycles:type_name -> eos.rpc.NSResponse.RecycleResponse.RecycleInfo + 21, // 89: eos.rpc.NSResponse.QuotaResponse.quotanode:type_name -> eos.rpc.QuotaProto + 67, // 90: eos.rpc.NSResponse.ShareResponse.shares:type_name -> eos.rpc.NSResponse.ShareInfo + 68, // 91: eos.rpc.NSResponse.ShareResponse.access:type_name -> eos.rpc.NSResponse.ShareAccess + 23, // 92: eos.rpc.NSResponse.VersionResponse.VersionInfo.id:type_name -> eos.rpc.MDId + 17, // 93: eos.rpc.NSResponse.VersionResponse.VersionInfo.mtime:type_name -> eos.rpc.Time + 23, // 94: eos.rpc.NSResponse.RecycleResponse.RecycleInfo.id:type_name -> eos.rpc.MDId + 22, // 95: eos.rpc.NSResponse.RecycleResponse.RecycleInfo.owner:type_name -> eos.rpc.RoleId + 17, // 96: eos.rpc.NSResponse.RecycleResponse.RecycleInfo.dtime:type_name -> eos.rpc.Time + 11, // 97: eos.rpc.NSResponse.RecycleResponse.RecycleInfo.type:type_name -> eos.rpc.NSResponse.RecycleResponse.RecycleInfo.DELETIONTYPE + 12, // 98: eos.rpc.Eos.Ping:input_type -> eos.rpc.PingRequest + 26, // 99: eos.rpc.Eos.MD:input_type -> eos.rpc.MDRequest + 28, // 100: eos.rpc.Eos.Find:input_type -> eos.rpc.FindRequest + 34, // 101: eos.rpc.Eos.NsStat:input_type -> eos.rpc.NsStatRequest + 14, // 102: eos.rpc.Eos.ContainerInsert:input_type -> eos.rpc.ContainerInsertRequest + 15, // 103: eos.rpc.Eos.FileInsert:input_type -> eos.rpc.FileInsertRequest + 32, // 104: eos.rpc.Eos.Exec:input_type -> eos.rpc.NSRequest + 36, // 105: eos.rpc.Eos.ManilaServerRequest:input_type -> eos.rpc.ManilaRequest + 13, // 106: eos.rpc.Eos.Ping:output_type -> eos.rpc.PingReply + 27, // 107: eos.rpc.Eos.MD:output_type -> eos.rpc.MDResponse + 27, // 108: eos.rpc.Eos.Find:output_type -> eos.rpc.MDResponse + 35, // 109: eos.rpc.Eos.NsStat:output_type -> eos.rpc.NsStatResponse + 16, // 110: eos.rpc.Eos.ContainerInsert:output_type -> eos.rpc.InsertReply + 16, // 111: eos.rpc.Eos.FileInsert:output_type -> eos.rpc.InsertReply + 33, // 112: eos.rpc.Eos.Exec:output_type -> eos.rpc.NSResponse + 37, // 113: eos.rpc.Eos.ManilaServerRequest:output_type -> eos.rpc.ManilaResponse + 106, // [106:114] is the sub-list for method output_type + 98, // [98:106] is the sub-list for method input_type + 98, // [98:98] is the sub-list for extension type_name + 98, // [98:98] is the sub-list for extension extendee + 0, // [0:98] is the sub-list for field type_name +} + +func init() { file_Rpc_proto_init() } +func file_Rpc_proto_init() { + if File_Rpc_proto != nil { + return + } + if !protoimpl.UnsafeEnabled { + file_Rpc_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*PingRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_Rpc_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*PingReply); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_Rpc_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ContainerInsertRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_Rpc_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*FileInsertRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_Rpc_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*InsertReply); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_Rpc_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Time); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_Rpc_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Checksum); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_Rpc_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*FileMdProto); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_Rpc_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ContainerMdProto); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_Rpc_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*QuotaProto); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_Rpc_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*RoleId); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_Rpc_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*MDId); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_Rpc_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Limit); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_Rpc_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*MDSelection); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_Rpc_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*MDRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_Rpc_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*MDResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_Rpc_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*FindRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_Rpc_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ShareAuth); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_Rpc_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ShareProto); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_Rpc_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ShareToken); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_Rpc_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*NSRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_Rpc_proto_msgTypes[21].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*NSResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_Rpc_proto_msgTypes[22].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*NsStatRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_Rpc_proto_msgTypes[23].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*NsStatResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_Rpc_proto_msgTypes[24].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ManilaRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_Rpc_proto_msgTypes[25].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ManilaResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_Rpc_proto_msgTypes[29].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*NSRequest_MkdirRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_Rpc_proto_msgTypes[30].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*NSRequest_RmdirRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_Rpc_proto_msgTypes[31].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*NSRequest_TouchRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_Rpc_proto_msgTypes[32].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*NSRequest_UnlinkRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_Rpc_proto_msgTypes[33].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*NSRequest_RmRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_Rpc_proto_msgTypes[34].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*NSRequest_RenameRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_Rpc_proto_msgTypes[35].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*NSRequest_SymlinkRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_Rpc_proto_msgTypes[36].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*NSRequest_VersionRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_Rpc_proto_msgTypes[37].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*NSRequest_RecycleRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_Rpc_proto_msgTypes[38].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*NSRequest_SetXAttrRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_Rpc_proto_msgTypes[39].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*NSRequest_ChownRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_Rpc_proto_msgTypes[40].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*NSRequest_ChmodRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_Rpc_proto_msgTypes[41].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*NSRequest_AclRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_Rpc_proto_msgTypes[42].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*NSRequest_TokenRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_Rpc_proto_msgTypes[43].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*NSRequest_QuotaRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_Rpc_proto_msgTypes[44].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*NSRequest_ShareRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_Rpc_proto_msgTypes[45].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*NSRequest_RecycleRequest_RestoreFlags); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_Rpc_proto_msgTypes[46].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*NSRequest_RecycleRequest_PurgeDate); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_Rpc_proto_msgTypes[48].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*NSRequest_ShareRequest_LsShare); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_Rpc_proto_msgTypes[49].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*NSRequest_ShareRequest_OperateShare); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_Rpc_proto_msgTypes[50].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*NSResponse_ErrorResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_Rpc_proto_msgTypes[51].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*NSResponse_VersionResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_Rpc_proto_msgTypes[52].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*NSResponse_RecycleResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_Rpc_proto_msgTypes[53].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*NSResponse_AclResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_Rpc_proto_msgTypes[54].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*NSResponse_QuotaResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_Rpc_proto_msgTypes[55].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*NSResponse_ShareInfo); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_Rpc_proto_msgTypes[56].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*NSResponse_ShareAccess); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_Rpc_proto_msgTypes[57].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*NSResponse_ShareResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_Rpc_proto_msgTypes[58].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*NSResponse_VersionResponse_VersionInfo); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_Rpc_proto_msgTypes[59].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*NSResponse_RecycleResponse_RecycleInfo); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + } + file_Rpc_proto_msgTypes[20].OneofWrappers = []interface{}{ + (*NSRequest_Mkdir)(nil), + (*NSRequest_Rmdir)(nil), + (*NSRequest_Touch)(nil), + (*NSRequest_Unlink)(nil), + (*NSRequest_Rm)(nil), + (*NSRequest_Rename)(nil), + (*NSRequest_Symlink)(nil), + (*NSRequest_Version)(nil), + (*NSRequest_Recycle)(nil), + (*NSRequest_Xattr)(nil), + (*NSRequest_Chown)(nil), + (*NSRequest_Chmod)(nil), + (*NSRequest_Acl)(nil), + (*NSRequest_Token)(nil), + (*NSRequest_Quota)(nil), + (*NSRequest_Share)(nil), + } + file_Rpc_proto_msgTypes[44].OneofWrappers = []interface{}{ + (*NSRequest_ShareRequest_Ls)(nil), + (*NSRequest_ShareRequest_Op)(nil), + } + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: file_Rpc_proto_rawDesc, + NumEnums: 12, + NumMessages: 60, + NumExtensions: 0, + NumServices: 1, }, - }, - Metadata: "Rpc.proto", + GoTypes: file_Rpc_proto_goTypes, + DependencyIndexes: file_Rpc_proto_depIdxs, + EnumInfos: file_Rpc_proto_enumTypes, + MessageInfos: file_Rpc_proto_msgTypes, + }.Build() + File_Rpc_proto = out.File + file_Rpc_proto_rawDesc = nil + file_Rpc_proto_goTypes = nil + file_Rpc_proto_depIdxs = nil } - -// Tue Jul 27 08:22:54 UTC 2021 diff --git a/pkg/eosclient/eosgrpc/eos_grpc/Rpc.proto b/pkg/eosclient/eosgrpc/eos_grpc/Rpc.proto index bc529c75ba..93f0e0be48 100644 --- a/pkg/eosclient/eosgrpc/eos_grpc/Rpc.proto +++ b/pkg/eosclient/eosgrpc/eos_grpc/Rpc.proto @@ -333,6 +333,7 @@ message NSRequest { map xattrs = 2; bool recursive = 3; repeated string keystodelete = 4; + bool create = 5; } message ChownRequest { @@ -378,8 +379,44 @@ message NSRequest { QUOTAENTRY entry = 6; // select volume or inode entry for deletion } + message ShareRequest { + message LsShare { + enum OutFormat { + NONE = 0; // + MONITORING = 1; // [-m] + LISTING = 2; // [-l] + JSON = 3; // [grpc] + } + OutFormat outformat = 1; // + string selection = 2; // + } + + message OperateShare { + enum Op { + CREATE = 0; + REMOVE = 1; + SHARE = 2; + UNSHARE = 3; + ACCESS = 4; + MODIFY = 5; + } + Op op = 1; + string share = 2; + string acl = 3; + string path = 4; + string user = 5; + string group = 6; + } + + oneof subcmd { + LsShare ls = 1; + OperateShare op = 2; + } + } + string authkey = 1; RoleId role = 2; + // Actual request data object oneof command { MkdirRequest mkdir = 21; @@ -397,6 +434,7 @@ message NSRequest { AclRequest acl = 33; TokenRequest token = 34; QuotaRequest quota = 35; + ShareRequest share = 36; } } @@ -447,11 +485,32 @@ message NSResponse { repeated QuotaProto quotanode = 3; } + message ShareInfo { + string name = 1; + string root = 2; + string rule = 3; + uint64 uid = 4; + uint64 nshared = 5; + } + + message ShareAccess { + string name = 1; + bool granted = 2; + } + + message ShareResponse { + int64 code = 1; + string msg = 2; + repeated ShareInfo shares = 3; + repeated ShareAccess access = 4; + } + ErrorResponse error = 1; VersionResponse version = 2; RecycleResponse recycle = 3; AclResponse acl = 4; QuotaResponse quota = 5; + ShareResponse share = 6; } message NsStatRequest { diff --git a/pkg/eosclient/eosgrpc/eos_grpc/Rpc_grpc.pb.go b/pkg/eosclient/eosgrpc/eos_grpc/Rpc_grpc.pb.go new file mode 100644 index 0000000000..93c6a8bd5d --- /dev/null +++ b/pkg/eosclient/eosgrpc/eos_grpc/Rpc_grpc.pb.go @@ -0,0 +1,445 @@ +// Copyright 2018-2021 CERN +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +// In applying this license, CERN does not waive the privileges and immunities +// granted to it by virtue of its status as an Intergovernmental Organization +// or submit itself to any jurisdiction. + +// Code generated by protoc-gen-go-grpc. DO NOT EDIT. +// versions: +// - protoc-gen-go-grpc v1.2.0 +// - protoc v3.19.1 +// source: Rpc.proto + +package eos_grpc + +import ( + context "context" + + grpc "google.golang.org/grpc" + codes "google.golang.org/grpc/codes" + status "google.golang.org/grpc/status" +) + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the grpc package it is being compiled against. +// Requires gRPC-Go v1.32.0 or later. +const _ = grpc.SupportPackageIsVersion7 + +// EosClient is the client API for Eos service. +// +// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream. +type EosClient interface { + // Replies to a ping + Ping(ctx context.Context, in *PingRequest, opts ...grpc.CallOption) (*PingReply, error) + // Replies to MD requests with a stream + MD(ctx context.Context, in *MDRequest, opts ...grpc.CallOption) (Eos_MDClient, error) + // Replies to Find requests with a stream + Find(ctx context.Context, in *FindRequest, opts ...grpc.CallOption) (Eos_FindClient, error) + // Replies to a NsStat operation + NsStat(ctx context.Context, in *NsStatRequest, opts ...grpc.CallOption) (*NsStatResponse, error) + // Replies to an insert + ContainerInsert(ctx context.Context, in *ContainerInsertRequest, opts ...grpc.CallOption) (*InsertReply, error) + FileInsert(ctx context.Context, in *FileInsertRequest, opts ...grpc.CallOption) (*InsertReply, error) + // Replies to a NsRequest operation + Exec(ctx context.Context, in *NSRequest, opts ...grpc.CallOption) (*NSResponse, error) + // Manila Driver + ManilaServerRequest(ctx context.Context, in *ManilaRequest, opts ...grpc.CallOption) (*ManilaResponse, error) +} + +type eosClient struct { + cc grpc.ClientConnInterface +} + +func NewEosClient(cc grpc.ClientConnInterface) EosClient { + return &eosClient{cc} +} + +func (c *eosClient) Ping(ctx context.Context, in *PingRequest, opts ...grpc.CallOption) (*PingReply, error) { + out := new(PingReply) + err := c.cc.Invoke(ctx, "/eos.rpc.Eos/Ping", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *eosClient) MD(ctx context.Context, in *MDRequest, opts ...grpc.CallOption) (Eos_MDClient, error) { + stream, err := c.cc.NewStream(ctx, &Eos_ServiceDesc.Streams[0], "/eos.rpc.Eos/MD", opts...) + if err != nil { + return nil, err + } + x := &eosMDClient{stream} + if err := x.ClientStream.SendMsg(in); err != nil { + return nil, err + } + if err := x.ClientStream.CloseSend(); err != nil { + return nil, err + } + return x, nil +} + +type Eos_MDClient interface { + Recv() (*MDResponse, error) + grpc.ClientStream +} + +type eosMDClient struct { + grpc.ClientStream +} + +func (x *eosMDClient) Recv() (*MDResponse, error) { + m := new(MDResponse) + if err := x.ClientStream.RecvMsg(m); err != nil { + return nil, err + } + return m, nil +} + +func (c *eosClient) Find(ctx context.Context, in *FindRequest, opts ...grpc.CallOption) (Eos_FindClient, error) { + stream, err := c.cc.NewStream(ctx, &Eos_ServiceDesc.Streams[1], "/eos.rpc.Eos/Find", opts...) + if err != nil { + return nil, err + } + x := &eosFindClient{stream} + if err := x.ClientStream.SendMsg(in); err != nil { + return nil, err + } + if err := x.ClientStream.CloseSend(); err != nil { + return nil, err + } + return x, nil +} + +type Eos_FindClient interface { + Recv() (*MDResponse, error) + grpc.ClientStream +} + +type eosFindClient struct { + grpc.ClientStream +} + +func (x *eosFindClient) Recv() (*MDResponse, error) { + m := new(MDResponse) + if err := x.ClientStream.RecvMsg(m); err != nil { + return nil, err + } + return m, nil +} + +func (c *eosClient) NsStat(ctx context.Context, in *NsStatRequest, opts ...grpc.CallOption) (*NsStatResponse, error) { + out := new(NsStatResponse) + err := c.cc.Invoke(ctx, "/eos.rpc.Eos/NsStat", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *eosClient) ContainerInsert(ctx context.Context, in *ContainerInsertRequest, opts ...grpc.CallOption) (*InsertReply, error) { + out := new(InsertReply) + err := c.cc.Invoke(ctx, "/eos.rpc.Eos/ContainerInsert", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *eosClient) FileInsert(ctx context.Context, in *FileInsertRequest, opts ...grpc.CallOption) (*InsertReply, error) { + out := new(InsertReply) + err := c.cc.Invoke(ctx, "/eos.rpc.Eos/FileInsert", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *eosClient) Exec(ctx context.Context, in *NSRequest, opts ...grpc.CallOption) (*NSResponse, error) { + out := new(NSResponse) + err := c.cc.Invoke(ctx, "/eos.rpc.Eos/Exec", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *eosClient) ManilaServerRequest(ctx context.Context, in *ManilaRequest, opts ...grpc.CallOption) (*ManilaResponse, error) { + out := new(ManilaResponse) + err := c.cc.Invoke(ctx, "/eos.rpc.Eos/ManilaServerRequest", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +// EosServer is the server API for Eos service. +// All implementations must embed UnimplementedEosServer +// for forward compatibility +type EosServer interface { + // Replies to a ping + Ping(context.Context, *PingRequest) (*PingReply, error) + // Replies to MD requests with a stream + MD(*MDRequest, Eos_MDServer) error + // Replies to Find requests with a stream + Find(*FindRequest, Eos_FindServer) error + // Replies to a NsStat operation + NsStat(context.Context, *NsStatRequest) (*NsStatResponse, error) + // Replies to an insert + ContainerInsert(context.Context, *ContainerInsertRequest) (*InsertReply, error) + FileInsert(context.Context, *FileInsertRequest) (*InsertReply, error) + // Replies to a NsRequest operation + Exec(context.Context, *NSRequest) (*NSResponse, error) + // Manila Driver + ManilaServerRequest(context.Context, *ManilaRequest) (*ManilaResponse, error) + mustEmbedUnimplementedEosServer() +} + +// UnimplementedEosServer must be embedded to have forward compatible implementations. +type UnimplementedEosServer struct { +} + +func (UnimplementedEosServer) Ping(context.Context, *PingRequest) (*PingReply, error) { + return nil, status.Errorf(codes.Unimplemented, "method Ping not implemented") +} +func (UnimplementedEosServer) MD(*MDRequest, Eos_MDServer) error { + return status.Errorf(codes.Unimplemented, "method MD not implemented") +} +func (UnimplementedEosServer) Find(*FindRequest, Eos_FindServer) error { + return status.Errorf(codes.Unimplemented, "method Find not implemented") +} +func (UnimplementedEosServer) NsStat(context.Context, *NsStatRequest) (*NsStatResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method NsStat not implemented") +} +func (UnimplementedEosServer) ContainerInsert(context.Context, *ContainerInsertRequest) (*InsertReply, error) { + return nil, status.Errorf(codes.Unimplemented, "method ContainerInsert not implemented") +} +func (UnimplementedEosServer) FileInsert(context.Context, *FileInsertRequest) (*InsertReply, error) { + return nil, status.Errorf(codes.Unimplemented, "method FileInsert not implemented") +} +func (UnimplementedEosServer) Exec(context.Context, *NSRequest) (*NSResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method Exec not implemented") +} +func (UnimplementedEosServer) ManilaServerRequest(context.Context, *ManilaRequest) (*ManilaResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method ManilaServerRequest not implemented") +} +func (UnimplementedEosServer) mustEmbedUnimplementedEosServer() {} + +// UnsafeEosServer may be embedded to opt out of forward compatibility for this service. +// Use of this interface is not recommended, as added methods to EosServer will +// result in compilation errors. +type UnsafeEosServer interface { + mustEmbedUnimplementedEosServer() +} + +func RegisterEosServer(s grpc.ServiceRegistrar, srv EosServer) { + s.RegisterService(&Eos_ServiceDesc, srv) +} + +func _Eos_Ping_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(PingRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(EosServer).Ping(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/eos.rpc.Eos/Ping", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(EosServer).Ping(ctx, req.(*PingRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Eos_MD_Handler(srv interface{}, stream grpc.ServerStream) error { + m := new(MDRequest) + if err := stream.RecvMsg(m); err != nil { + return err + } + return srv.(EosServer).MD(m, &eosMDServer{stream}) +} + +type Eos_MDServer interface { + Send(*MDResponse) error + grpc.ServerStream +} + +type eosMDServer struct { + grpc.ServerStream +} + +func (x *eosMDServer) Send(m *MDResponse) error { + return x.ServerStream.SendMsg(m) +} + +func _Eos_Find_Handler(srv interface{}, stream grpc.ServerStream) error { + m := new(FindRequest) + if err := stream.RecvMsg(m); err != nil { + return err + } + return srv.(EosServer).Find(m, &eosFindServer{stream}) +} + +type Eos_FindServer interface { + Send(*MDResponse) error + grpc.ServerStream +} + +type eosFindServer struct { + grpc.ServerStream +} + +func (x *eosFindServer) Send(m *MDResponse) error { + return x.ServerStream.SendMsg(m) +} + +func _Eos_NsStat_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(NsStatRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(EosServer).NsStat(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/eos.rpc.Eos/NsStat", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(EosServer).NsStat(ctx, req.(*NsStatRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Eos_ContainerInsert_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ContainerInsertRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(EosServer).ContainerInsert(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/eos.rpc.Eos/ContainerInsert", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(EosServer).ContainerInsert(ctx, req.(*ContainerInsertRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Eos_FileInsert_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(FileInsertRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(EosServer).FileInsert(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/eos.rpc.Eos/FileInsert", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(EosServer).FileInsert(ctx, req.(*FileInsertRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Eos_Exec_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(NSRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(EosServer).Exec(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/eos.rpc.Eos/Exec", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(EosServer).Exec(ctx, req.(*NSRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Eos_ManilaServerRequest_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ManilaRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(EosServer).ManilaServerRequest(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/eos.rpc.Eos/ManilaServerRequest", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(EosServer).ManilaServerRequest(ctx, req.(*ManilaRequest)) + } + return interceptor(ctx, in, info, handler) +} + +// Eos_ServiceDesc is the grpc.ServiceDesc for Eos service. +// It's only intended for direct use with grpc.RegisterService, +// and not to be introspected or modified (even as a copy) +var Eos_ServiceDesc = grpc.ServiceDesc{ + ServiceName: "eos.rpc.Eos", + HandlerType: (*EosServer)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "Ping", + Handler: _Eos_Ping_Handler, + }, + { + MethodName: "NsStat", + Handler: _Eos_NsStat_Handler, + }, + { + MethodName: "ContainerInsert", + Handler: _Eos_ContainerInsert_Handler, + }, + { + MethodName: "FileInsert", + Handler: _Eos_FileInsert_Handler, + }, + { + MethodName: "Exec", + Handler: _Eos_Exec_Handler, + }, + { + MethodName: "ManilaServerRequest", + Handler: _Eos_ManilaServerRequest_Handler, + }, + }, + Streams: []grpc.StreamDesc{ + { + StreamName: "MD", + Handler: _Eos_MD_Handler, + ServerStreams: true, + }, + { + StreamName: "Find", + Handler: _Eos_Find_Handler, + ServerStreams: true, + }, + }, + Metadata: "Rpc.proto", +} diff --git a/pkg/eosclient/eosgrpc/eosgrpc.go b/pkg/eosclient/eosgrpc/eosgrpc.go index f505334ccf..467c92eb6d 100644 --- a/pkg/eosclient/eosgrpc/eosgrpc.go +++ b/pkg/eosclient/eosgrpc/eosgrpc.go @@ -33,8 +33,8 @@ import ( "syscall" "github.com/cs3org/reva/v2/pkg/appctx" - "github.com/cs3org/reva/v2/pkg/eosclient" + "github.com/cs3org/reva/v2/pkg/eosclient" erpc "github.com/cs3org/reva/v2/pkg/eosclient/eosgrpc/eos_grpc" "github.com/cs3org/reva/v2/pkg/errtypes" "github.com/cs3org/reva/v2/pkg/logger" @@ -513,7 +513,7 @@ func (c *Client) fixupACLs(ctx context.Context, auth eosclient.Authorization, in } // SetAttr sets an extended attributes on a path. -func (c *Client) SetAttr(ctx context.Context, auth eosclient.Authorization, attr *eosclient.Attribute, recursive bool, path string) error { +func (c *Client) SetAttr(ctx context.Context, auth eosclient.Authorization, attr *eosclient.Attribute, errorIfExists, recursive bool, path string) error { log := appctx.GetLogger(ctx) log.Info().Str("func", "SetAttr").Str("uid,gid", auth.Role.UID+","+auth.Role.GID).Str("path", path).Msg("") @@ -532,11 +532,20 @@ func (c *Client) SetAttr(ctx context.Context, auth eosclient.Authorization, attr msg.Id = new(erpc.MDId) msg.Id.Path = []byte(path) + if errorIfExists { + msg.Create = true + } + rq.Command = &erpc.NSRequest_Xattr{Xattr: msg} // Now send the req and see what happens resp, err := c.cl.Exec(ctx, rq) e := c.getRespError(resp, err) + + if resp != nil && resp.Error != nil && resp.Error.Code == 17 { + return eosclient.AttrAlreadyExistsError + } + if e != nil { log.Error().Str("func", "SetAttr").Str("path", path).Str("err", e.Error()).Msg("") return e @@ -578,6 +587,11 @@ func (c *Client) UnsetAttr(ctx context.Context, auth eosclient.Authorization, at // Now send the req and see what happens resp, err := c.cl.Exec(ctx, rq) + + if resp != nil && resp.Error != nil && resp.Error.Code == 61 { + return eosclient.AttrNotExistsError + } + e := c.getRespError(resp, err) if e != nil { log.Error().Str("func", "UnsetAttr").Str("path", path).Str("err", e.Error()).Msg("") @@ -596,8 +610,40 @@ func (c *Client) UnsetAttr(ctx context.Context, auth eosclient.Authorization, at } // GetAttr returns the attribute specified by key -func (c *Client) GetAttr(ctx context.Context, auth eosclient.Authorization, name, path string) (*eosclient.Attribute, error) { - return nil, errtypes.NotSupported("GetAttr function not yet implemented") +func (c *Client) GetAttr(ctx context.Context, auth eosclient.Authorization, key, path string) (*eosclient.Attribute, error) { + info, err := c.GetFileInfoByPath(ctx, auth, path) + if err != nil { + return nil, err + } + + for k, v := range info.Attrs { + if k == key { + attr, err := getAttribute(k, v) + if err != nil { + return nil, errors.Wrap(err, fmt.Sprintf("eosgrpc: cannot parse attribute key=%s value=%s", k, v)) + } + return attr, nil + } + } + return nil, errtypes.NotFound(fmt.Sprintf("key %s not found", key)) +} + +func getAttribute(key, val string) (*eosclient.Attribute, error) { + // key is in the form sys.forced.checksum + type2key := strings.SplitN(key, ".", 2) // type2key = ["sys", "forced.checksum"] + if len(type2key) != 2 { + return nil, errtypes.InternalError("wrong attr format to deserialize") + } + t, err := eosclient.AttrStringToType(type2key[0]) + if err != nil { + return nil, err + } + attr := &eosclient.Attribute{ + Type: t, + Key: type2key[1], + Val: val, + } + return attr, nil } // GetFileInfoByPath returns the FilInfo at the given path diff --git a/pkg/eosclient/utils.go b/pkg/eosclient/utils.go new file mode 100644 index 0000000000..8a3af28996 --- /dev/null +++ b/pkg/eosclient/utils.go @@ -0,0 +1,40 @@ +// Copyright 2018-2021 CERN +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +// In applying this license, CERN does not waive the privileges and immunities +// granted to it by virtue of its status as an Intergovernmental Organization +// or submit itself to any jurisdiction. + +package eosclient + +import "github.com/cs3org/reva/v2/pkg/errtypes" + +const ( + // SystemAttr is the system extended attribute. + SystemAttr AttrType = iota + // UserAttr is the user extended attribute. + UserAttr +) + +// AttrStringToType converts a string to an AttrType +func AttrStringToType(t string) (AttrType, error) { + switch t { + case "sys": + return SystemAttr, nil + case "user": + return UserAttr, nil + default: + return 0, errtypes.InternalError("attr type not existing") + } +} diff --git a/pkg/rgrpc/status/status.go b/pkg/rgrpc/status/status.go index c524c2753a..32b15a28fc 100644 --- a/pkg/rgrpc/status/status.go +++ b/pkg/rgrpc/status/status.go @@ -144,6 +144,17 @@ func NewConflict(ctx context.Context, err error, msg string) *rpc.Status { } } +// NewFailedPrecondition TODO +func NewFailedPrecondition(ctx context.Context, err error, msg string) *rpc.Status { + log := appctx.GetLogger(ctx).With().CallerWithSkipFrameCount(3).Logger() + log.Error().Err(err).Msg(msg) + return &rpc.Status{ + Code: rpc.Code_CODE_FAILED_PRECONDITION, + Message: msg, + Trace: getTrace(ctx), + } +} + // NewStatusFromErrType returns a status that corresponds to the given errtype func NewStatusFromErrType(ctx context.Context, msg string, err error) *rpc.Status { switch e := err.(type) { diff --git a/pkg/sdk/session.go b/pkg/sdk/session.go index f55ed4e318..cfd0b5a8a0 100644 --- a/pkg/sdk/session.go +++ b/pkg/sdk/session.go @@ -28,7 +28,7 @@ import ( gateway "github.com/cs3org/go-cs3apis/cs3/gateway/v1beta1" "google.golang.org/grpc" "google.golang.org/grpc/credentials" - grpcinsecure "google.golang.org/grpc/credentials/insecure" + "google.golang.org/grpc/credentials/insecure" "google.golang.org/grpc/metadata" "github.com/cs3org/reva/v2/pkg/sdk/common" @@ -61,9 +61,9 @@ func (session *Session) Initiate(host string, insecure bool) error { return nil } -func (session *Session) getConnection(host string, insecure bool) (*grpc.ClientConn, error) { - if insecure { - return grpc.Dial(host, grpc.WithTransportCredentials(grpcinsecure.NewCredentials())) +func (session *Session) getConnection(host string, ins bool) (*grpc.ClientConn, error) { + if ins { + return grpc.Dial(host, grpc.WithTransportCredentials(insecure.NewCredentials())) } tlsconf := &tls.Config{InsecureSkipVerify: false} diff --git a/pkg/storage/utils/eosfs/eosfs.go b/pkg/storage/utils/eosfs/eosfs.go index f2373dd983..9056123874 100644 --- a/pkg/storage/utils/eosfs/eosfs.go +++ b/pkg/storage/utils/eosfs/eosfs.go @@ -33,6 +33,8 @@ import ( "strings" "time" + b64 "encoding/base64" + "github.com/bluele/gcache" grouppb "github.com/cs3org/go-cs3apis/cs3/identity/group/v1beta1" userpb "github.com/cs3org/go-cs3apis/cs3/identity/user/v1beta1" @@ -71,6 +73,15 @@ const ( UserAttr ) +// LockPayloadKey is the key in the xattr for lock payload +const LockPayloadKey = "reva.lock.payload" + +// LockExpirationKey is the key in the xattr for lock expiration +const LockExpirationKey = "reva.lock.expiration" + +// LockTypeKey is the key in the xattr for lock payload +const LockTypeKey = "reva.lock.type" + var hiddenReg = regexp.MustCompile(`\.sys\..#.`) func (c *Config) init() { @@ -531,6 +542,11 @@ func (fs *eosfs) SetArbitraryMetadata(ctx context.Context, ref *provider.Referen return errtypes.BadRequest(fmt.Sprintf("eosfs: key or value is empty: key:%s, value:%s", k, v)) } + // do not allow to set a lock key attr + if k == LockPayloadKey || k == LockExpirationKey || k == LockTypeKey { + return errtypes.BadRequest(fmt.Sprintf("eosfs: key %s not allowed", k)) + } + attr := &eosclient.Attribute{ Type: UserAttr, Key: k, @@ -539,7 +555,7 @@ func (fs *eosfs) SetArbitraryMetadata(ctx context.Context, ref *provider.Referen // TODO(labkode): SetArbitraryMetadata does not have semantics for recursivity. // We set it to false - err := fs.c.SetAttr(ctx, auth, attr, false, fn) + err := fs.c.SetAttr(ctx, auth, attr, false, false, fn) if err != nil { return errors.Wrap(err, "eosfs: error setting xattr in eos driver") } @@ -577,24 +593,417 @@ func (fs *eosfs) UnsetArbitraryMetadata(ctx context.Context, ref *provider.Refer return nil } +func (fs *eosfs) getLockExpiration(ctx context.Context, auth eosclient.Authorization, path string) (*types.Timestamp, bool, error) { + expiration, err := fs.c.GetAttr(ctx, auth, "sys."+LockExpirationKey, path) + if err != nil { + // since the expiration is optional, if we do not find it in the attr + // just return a nil value, without reporting the error + if _, ok := err.(errtypes.NotFound); ok { + return nil, true, nil + } + return nil, false, err + } + // the expiration value should be unix time encoded + unixTime, err := strconv.ParseInt(expiration.Val, 10, 64) + if err != nil { + return nil, false, errors.Wrap(err, "eosfs: error converting unix time") + } + t := time.Unix(unixTime, 0) + timestamp := &types.Timestamp{ + Seconds: uint64(unixTime), + } + return timestamp, t.After(time.Now()), nil +} + +func (fs *eosfs) getLockContent(ctx context.Context, auth eosclient.Authorization, path string, expiration *types.Timestamp) (*provider.Lock, error) { + t, err := fs.c.GetAttr(ctx, auth, "sys."+LockTypeKey, path) + if err != nil { + return nil, err + } + lockType, err := strconv.ParseInt(t.Val, 10, 32) + if err != nil { + return nil, errors.Wrap(err, "eosfs: error decoding lock type") + } + + d, err := fs.c.GetAttr(ctx, auth, "sys."+LockPayloadKey, path) + if err != nil { + return nil, err + } + + data, err := b64.StdEncoding.DecodeString(d.Val) + if err != nil { + return nil, err + } + l := new(provider.Lock) + err = json.Unmarshal(data, l) + if err != nil { + return nil, err + } + + l.Type = provider.LockType(lockType) + l.Expiration = expiration + + return l, nil + +} + +func (fs *eosfs) removeLockAttrs(ctx context.Context, auth eosclient.Authorization, path string) error { + err := fs.c.UnsetAttr(ctx, auth, &eosclient.Attribute{ + Type: SystemAttr, + Key: LockExpirationKey, + }, false, path) + if err != nil { + // as the expiration time in the lock is optional + // we will discard the error if the attr is not set + if !errors.Is(err, eosclient.AttrNotExistsError) { + return errors.Wrap(err, "eosfs: error unsetting the lock expiration") + } + } + + err = fs.c.UnsetAttr(ctx, auth, &eosclient.Attribute{ + Type: SystemAttr, + Key: LockTypeKey, + }, false, path) + if err != nil { + return errors.Wrap(err, "eosfs: error unsetting the lock type") + } + + err = fs.c.UnsetAttr(ctx, auth, &eosclient.Attribute{ + Type: SystemAttr, + Key: LockPayloadKey, + }, false, path) + if err != nil { + return errors.Wrap(err, "eosfs: error unsetting the lock payload") + } + + return nil +} + +func (fs *eosfs) getLock(ctx context.Context, auth eosclient.Authorization, user *userpb.User, path string, ref *provider.Reference) (*provider.Lock, error) { + // the cs3apis require to have the read permission on the resource + // to get the eventual lock. + has, err := fs.userHasReadAccess(ctx, user, ref) + if err != nil { + return nil, errors.Wrap(err, "eosfs: error checking read access to resource") + } + if !has { + return nil, errtypes.BadRequest("user has not read access on resource") + } + + expiration, valid, err := fs.getLockExpiration(ctx, auth, path) + if err != nil { + return nil, err + } + + if !valid { + // the previous lock expired + if err := fs.removeLockAttrs(ctx, auth, path); err != nil { + return nil, err + } + return nil, errtypes.NotFound("lock not found for ref") + } + + l, err := fs.getLockContent(ctx, auth, path, expiration) + if err != nil { + if !errors.Is(err, eosclient.AttrNotExistsError) { + return nil, errtypes.NotFound("lock not found for ref") + } + } + return l, nil +} + // GetLock returns an existing lock on the given reference func (fs *eosfs) GetLock(ctx context.Context, ref *provider.Reference) (*provider.Lock, error) { - return nil, errtypes.NotSupported("unimplemented") + path, err := fs.resolve(ctx, ref) + if err != nil { + return nil, errors.Wrap(err, "eosfs: error resolving reference") + } + path = fs.wrap(ctx, path) + + user, err := getUser(ctx) + if err != nil { + return nil, errors.Wrap(err, "eosfs: no user in ctx") + } + auth, err := fs.getUserAuth(ctx, user, path) + if err != nil { + return nil, errors.Wrap(err, "eosfs: error getting uid and gid for user") + } + + return fs.getLock(ctx, auth, user, path, ref) +} + +func (fs *eosfs) setLock(ctx context.Context, auth eosclient.Authorization, lock *provider.Lock, path string, check bool) error { + encodedLock, err := encodeLock(lock) + if err != nil { + return errors.Wrap(err, "eosfs: error encoding lock") + } + + if lock.Expiration != nil { + // set expiration + err = fs.c.SetAttr(ctx, auth, &eosclient.Attribute{ + Type: SystemAttr, + Key: LockExpirationKey, + Val: strconv.FormatUint(lock.Expiration.Seconds, 10), + }, check, false, path) + switch { + case errors.Is(err, eosclient.AttrAlreadyExistsError): + return errtypes.BadRequest("lock already set") + case err != nil: + return err + } + } + + // set lock type + err = fs.c.SetAttr(ctx, auth, &eosclient.Attribute{ + Type: SystemAttr, + Key: LockTypeKey, + Val: strconv.FormatUint(uint64(lock.Type), 10), + }, false, false, path) + if err != nil { + return errors.Wrap(err, "eosfs: error setting lock type") + } + + // set payload + err = fs.c.SetAttr(ctx, auth, &eosclient.Attribute{ + Type: SystemAttr, + Key: LockPayloadKey, + Val: encodedLock, + }, false, false, path) + if err != nil { + return errors.Wrap(err, "eosfs: error setting lock payload") + } + return nil } // SetLock puts a lock on the given reference -func (fs *eosfs) SetLock(ctx context.Context, ref *provider.Reference, lock *provider.Lock) error { - return errtypes.NotSupported("unimplemented") +func (fs *eosfs) SetLock(ctx context.Context, ref *provider.Reference, l *provider.Lock) error { + if l.Type == provider.LockType_LOCK_TYPE_SHARED { + return errtypes.NotSupported("shared lock not yet implemented") + } + + path, err := fs.resolve(ctx, ref) + if err != nil { + return errors.Wrap(err, "eosfs: error resolving reference") + } + path = fs.wrap(ctx, path) + + user, err := getUser(ctx) + if err != nil { + return errors.Wrap(err, "eosfs: no user in ctx") + } + auth, err := fs.getUserAuth(ctx, user, path) + if err != nil { + return errors.Wrap(err, "eosfs: error getting uid and gid for user") + } + + _, err = fs.getLock(ctx, auth, user, path, ref) + if err != nil { + // if the err is NotFound it is fine, otherwise we have to return + if _, ok := err.(errtypes.NotFound); !ok { + return err + } + } + if err == nil { + // the resource is already locked + return errtypes.BadRequest("resource already locked") + } + + // the cs3apis require to have the write permission on the resource + // to set a lock. because in eos we can set attrs even if the user does + // not have the write permission, we need to check if the user that made + // the request has it + has, err := fs.userHasWriteAccess(ctx, user, ref) + if err != nil { + return errors.Wrap(err, fmt.Sprintf("eosfs: cannot check if user %s has write access on resource", user.Username)) + } + if !has { + return errtypes.PermissionDenied(fmt.Sprintf("user %s has not write access on resource", user.Username)) + } + + // the user in the lock could differ from the user in the context + // in that case, also the user in the lock MUST have the write permission + if l.User != nil && !utils.UserEqual(user.Id, l.User) { + has, err := fs.userIDHasWriteAccess(ctx, l.User, ref) + if err != nil { + return errors.Wrap(err, "eosfs: cannot check if user has write access on resource") + } + if !has { + return errtypes.PermissionDenied(fmt.Sprintf("user %s has not write access on resource", user.Username)) + } + } + + return fs.setLock(ctx, auth, l, path, true) +} + +func (fs *eosfs) getUserFromID(ctx context.Context, userID *userpb.UserId) (*userpb.User, error) { + client, err := pool.GetGatewayServiceClient(fs.conf.GatewaySvc) + if err != nil { + return nil, err + } + res, err := client.GetUser(ctx, &userpb.GetUserRequest{ + UserId: userID, + }) + + if err != nil { + return nil, err + } + if res.Status.Code != rpc.Code_CODE_OK { + return nil, errtypes.InternalError(res.Status.Message) + } + return res.User, nil +} + +func (fs *eosfs) userHasWriteAccess(ctx context.Context, user *userpb.User, ref *provider.Reference) (bool, error) { + ctx = ctxpkg.ContextSetUser(ctx, user) + resInfo, err := fs.GetMD(ctx, ref, nil) + if err != nil { + return false, err + } + return resInfo.PermissionSet.InitiateFileUpload, nil +} + +func (fs *eosfs) userIDHasWriteAccess(ctx context.Context, userID *userpb.UserId, ref *provider.Reference) (bool, error) { + user, err := fs.getUserFromID(ctx, userID) + if err != nil { + return false, nil + } + return fs.userHasWriteAccess(ctx, user, ref) +} + +func (fs *eosfs) userHasReadAccess(ctx context.Context, user *userpb.User, ref *provider.Reference) (bool, error) { + ctx = ctxpkg.ContextSetUser(ctx, user) + resInfo, err := fs.GetMD(ctx, ref, nil) + if err != nil { + return false, err + } + return resInfo.PermissionSet.InitiateFileDownload, nil +} + +func encodeLock(l *provider.Lock) (string, error) { + data, err := json.Marshal(l) + if err != nil { + return "", err + } + return b64.StdEncoding.EncodeToString(data), nil } // RefreshLock refreshes an existing lock on the given reference -func (fs *eosfs) RefreshLock(ctx context.Context, ref *provider.Reference, lock *provider.Lock, existingLockID string) error { - return errtypes.NotSupported("unimplemented") +func (fs *eosfs) RefreshLock(ctx context.Context, ref *provider.Reference, newLock *provider.Lock) error { + // TODO (gdelmont): check if the new lock is already expired? + + if newLock.Type == provider.LockType_LOCK_TYPE_SHARED { + return errtypes.NotSupported("shared lock not yet implemented") + } + + oldLock, err := fs.GetLock(ctx, ref) + if err != nil { + switch err.(type) { + case errtypes.NotFound: + // the lock does not exist + return errtypes.BadRequest("file was not locked") + default: + return err + } + } + + user, err := getUser(ctx) + if err != nil { + return errors.Wrap(err, "eosfs: error getting user") + } + + // check if the holder is the same of the new lock + if !sameHolder(oldLock, newLock) { + return errtypes.BadRequest("caller does not hold the lock") + } + + path, err := fs.resolve(ctx, ref) + if err != nil { + return errors.Wrap(err, "eosfs: error resolving reference") + } + path = fs.wrap(ctx, path) + + // the cs3apis require to have the write permission on the resource + // to set a lock + has, err := fs.userHasWriteAccess(ctx, user, ref) + if err != nil { + return errors.Wrap(err, "eosfs: cannot check if user has write access on resource") + } + if !has { + return errtypes.PermissionDenied(fmt.Sprintf("user %s has not write access on resource", user.Username)) + } + + // set the xattr with the new value + auth, err := fs.getUserAuth(ctx, user, path) + if err != nil { + return errors.Wrap(err, "eosfs: error getting uid and gid for user") + } + + return fs.setLock(ctx, auth, newLock, path, false) +} + +func sameHolder(l1, l2 *provider.Lock) bool { + same := true + if l1.User != nil || l2.User != nil { + same = utils.UserEqual(l1.User, l2.User) + } + if l1.AppName != "" || l2.AppName != "" { + same = l1.AppName == l2.AppName + } + return same } // Unlock removes an existing lock from the given reference func (fs *eosfs) Unlock(ctx context.Context, ref *provider.Reference, lock *provider.Lock) error { - return errtypes.NotSupported("unimplemented") + if lock.Type == provider.LockType_LOCK_TYPE_SHARED { + return errtypes.NotSupported("shared lock not yet implemented") + } + + oldLock, err := fs.GetLock(ctx, ref) + if err != nil { + switch err.(type) { + case errtypes.NotFound: + // the lock does not exist + return errtypes.BadRequest("file was not locked") + default: + return err + } + } + + // check if the lock id of the lock corresponds to the stored lock + if oldLock.LockId != lock.LockId { + return errtypes.BadRequest("lock id does not match") + } + + if !sameHolder(oldLock, lock) { + return errtypes.BadRequest("caller does not hold the lock") + } + + user, err := getUser(ctx) + if err != nil { + return errors.Wrap(err, "eosfs: error getting user") + } + + // the cs3apis require to have the write permission on the resource + // to remove the lock + has, err := fs.userHasWriteAccess(ctx, user, ref) + if err != nil { + return errors.Wrap(err, "eosfs: cannot check if user has write access on resource") + } + if !has { + return errtypes.PermissionDenied(fmt.Sprintf("user %s has not write access on resource", user.Username)) + } + + path, err := fs.resolve(ctx, ref) + if err != nil { + return errors.Wrap(err, "eosfs: error resolving reference") + } + path = fs.wrap(ctx, path) + + auth, err := fs.getUserAuth(ctx, user, path) + if err != nil { + return errors.Wrap(err, "eosfs: error getting uid and gid for user") + } + return fs.removeLockAttrs(ctx, auth, path) } func (fs *eosfs) AddGrant(ctx context.Context, ref *provider.Reference, g *provider.Grant) error { @@ -1225,7 +1634,7 @@ func (fs *eosfs) createUserDir(ctx context.Context, u *userpb.User, path string, } for _, attr := range attrs { - err = fs.c.SetAttr(ctx, rootAuth, attr, recursiveAttr, path) + err = fs.c.SetAttr(ctx, rootAuth, attr, false, recursiveAttr, path) if err != nil { return errors.Wrap(err, "eosfs: error setting attribute") } @@ -1308,7 +1717,7 @@ func (fs *eosfs) CreateReference(ctx context.Context, p string, targetURI *url.U Val: targetURI.String(), } - if err := fs.c.SetAttr(ctx, rootAuth, attr, false, tmp); err != nil { + if err := fs.c.SetAttr(ctx, rootAuth, attr, false, false, tmp); err != nil { err = errors.Wrapf(err, "eosfs: error setting reva.ref attr on file: %q", tmp) return err } @@ -1812,7 +2221,7 @@ func (fs *eosfs) convert(ctx context.Context, eosFileInfo *eosclient.FileInfo) ( } } - // filter 'sys' attrs + // filter 'sys' attrs and the reserved lock filteredAttrs := make(map[string]string) for k, v := range eosFileInfo.Attrs { if !strings.HasPrefix(k, "sys") { From 1e612bc99247563dfa29e1311eda228796735125 Mon Sep 17 00:00:00 2001 From: Gianmaria Del Monte <39946305+gmgigi96@users.noreply.github.com> Date: Tue, 29 Nov 2022 15:11:15 +0100 Subject: [PATCH 2/3] EOS grpc fixes (#3420) * return inode in fileinfo * fix log * fix eos grpc parsing * stat as a root * workaround for inode (revert me) * set parent id in eosfs * Revert "stat as a root" This reverts commit 81ce7b3e66f79d2401549d8ec67c1fa15a187f7b. * set storage id to parent id in storage provider * fix file path * clean path returned by eos * set xattrs for lock as root * fix key when setting attribute * stat as root * Revert "stat as root" This reverts commit e865e6e2f8d75d3759f2e3e0c8ca657a2c6ade6b. * trim prefix for user attrs * do not filter sys attrs * fix add acl * fix initiate file upload reference resolution * fix initiate file upload * Revert "fix initiate file upload" This reverts commit 265d09187d3ab4d646ace20df2ceaf925788e39f. * set sys acl as root * workaround for adding acl * fix unset attr * unset lock as root * Avoid crash when getting checksum in a stat request * fix * add changelog * fix linter * fix license Co-authored-by: Fabrizio Furano --- changelog/unreleased/eos-grpc-fixes.md | 6 + pkg/eosclient/eosgrpc/eos_grpc/Rpc.pb.go | 1346 +++++++++++----------- pkg/eosclient/eosgrpc/eos_grpc/Rpc.proto | 370 +++--- pkg/eosclient/eosgrpc/eosgrpc.go | 207 ++-- pkg/eosclient/utils.go | 23 +- pkg/storage/utils/eosfs/eosfs.go | 20 +- pkg/storage/utils/eosfs/upload.go | 9 +- 7 files changed, 1004 insertions(+), 977 deletions(-) create mode 100644 changelog/unreleased/eos-grpc-fixes.md diff --git a/changelog/unreleased/eos-grpc-fixes.md b/changelog/unreleased/eos-grpc-fixes.md new file mode 100644 index 0000000000..911b7a7fdf --- /dev/null +++ b/changelog/unreleased/eos-grpc-fixes.md @@ -0,0 +1,6 @@ +Bugfix: EOS grpc fixes + +The shares and the applications were not working +with the EOS grpc storage driver. This fixes both. + +https://github.com/cs3org/reva/pull/3420 \ No newline at end of file diff --git a/pkg/eosclient/eosgrpc/eos_grpc/Rpc.pb.go b/pkg/eosclient/eosgrpc/eos_grpc/Rpc.pb.go index 6f5502ee18..962b9a0e00 100644 --- a/pkg/eosclient/eosgrpc/eos_grpc/Rpc.pb.go +++ b/pkg/eosclient/eosgrpc/eos_grpc/Rpc.pb.go @@ -19,36 +19,38 @@ // @project The CERN Tape Archive (CTA) // @brief CTA-EOS gRPC API for CASTOR-EOS migration // @copyright Copyright 2019 CERN -// @license This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. +// @license This program is free software: you can redistribute it and/or +// modify +// it under the terms of the GNU General Public License as +// published by the Free Software Foundation, either version 3 +// of the License, or (at your option) any later version. // -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. +// This program is distributed in the hope that it will be +// useful, but WITHOUT ANY WARRANTY; without even the implied +// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR +// PURPOSE. See the GNU General Public License for more +// details. // -// You should have received a copy of the GNU General Public License -// along with this program. If not, see . +// You should have received a copy of the GNU General Public +// License along with this program. If not, see +// . // NOTE: Compile for Go with: // protoc ./eos_grpc.proto --go_out=plugins=grpc:. // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.26.0 -// protoc v3.19.1 +// protoc-gen-go v1.28.1 +// protoc v3.21.7 // source: Rpc.proto package eos_grpc import ( - reflect "reflect" - sync "sync" - protoreflect "google.golang.org/protobuf/reflect/protoreflect" protoimpl "google.golang.org/protobuf/runtime/protoimpl" + reflect "reflect" + sync "sync" ) const ( @@ -1080,6 +1082,7 @@ type FileMdProto struct { Xattrs map[string][]byte `protobuf:"bytes,15,rep,name=xattrs,proto3" json:"xattrs,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` Path []byte `protobuf:"bytes,16,opt,name=path,proto3" json:"path,omitempty"` Etag string `protobuf:"bytes,17,opt,name=etag,proto3" json:"etag,omitempty"` + Inode uint64 `protobuf:"varint,18,opt,name=inode,proto3" json:"inode,omitempty"` } func (x *FileMdProto) Reset() { @@ -1233,6 +1236,13 @@ func (x *FileMdProto) GetEtag() string { return "" } +func (x *FileMdProto) GetInode() uint64 { + if x != nil { + return x.Inode + } + return 0 +} + type ContainerMdProto struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -1252,6 +1262,7 @@ type ContainerMdProto struct { Xattrs map[string][]byte `protobuf:"bytes,12,rep,name=xattrs,proto3" json:"xattrs,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` Path []byte `protobuf:"bytes,13,opt,name=path,proto3" json:"path,omitempty"` Etag string `protobuf:"bytes,14,opt,name=etag,proto3" json:"etag,omitempty"` + Inode uint64 `protobuf:"varint,15,opt,name=inode,proto3" json:"inode,omitempty"` } func (x *ContainerMdProto) Reset() { @@ -1384,6 +1395,13 @@ func (x *ContainerMdProto) GetEtag() string { return "" } +func (x *ContainerMdProto) GetInode() uint64 { + if x != nil { + return x.Inode + } + return 0 +} + type QuotaProto struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -2415,6 +2433,7 @@ type NSRequest struct { // Actual request data object // // Types that are assignable to Command: + // // *NSRequest_Mkdir // *NSRequest_Rmdir // *NSRequest_Touch @@ -3140,7 +3159,7 @@ type ManilaResponse struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Msg string `protobuf:"bytes,1,opt,name=msg,proto3" json:"msg,omitempty"` //for generic messages + Msg string `protobuf:"bytes,1,opt,name=msg,proto3" json:"msg,omitempty"` // for generic messages Code int32 `protobuf:"varint,2,opt,name=code,proto3" json:"code,omitempty"` // < 1 is an error -- > 1 is OK TotalUsed int64 `protobuf:"varint,3,opt,name=total_used,json=totalUsed,proto3" json:"total_used,omitempty"` TotalCapacity int64 `protobuf:"varint,4,opt,name=total_capacity,json=totalCapacity,proto3" json:"total_capacity,omitempty"` @@ -4165,6 +4184,7 @@ type NSRequest_ShareRequest struct { unknownFields protoimpl.UnknownFields // Types that are assignable to Subcmd: + // // *NSRequest_ShareRequest_Ls // *NSRequest_ShareRequest_Op Subcmd isNSRequest_ShareRequest_Subcmd `protobuf_oneof:"subcmd"` @@ -5196,7 +5216,7 @@ var file_Rpc_proto_rawDesc = []byte{ 0x65, 0x63, 0x22, 0x34, 0x0a, 0x08, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x73, 0x75, 0x6d, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x22, 0xb1, 0x04, 0x0a, 0x0b, 0x46, 0x69, 0x6c, + 0x28, 0x09, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x22, 0xc7, 0x04, 0x0a, 0x0b, 0x46, 0x69, 0x6c, 0x65, 0x4d, 0x64, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x02, 0x69, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x06, 0x63, 0x6f, 0x6e, 0x74, 0x49, @@ -5228,669 +5248,671 @@ var file_Rpc_proto_rawDesc = []byte{ 0x79, 0x52, 0x06, 0x78, 0x61, 0x74, 0x74, 0x72, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x61, 0x74, 0x68, 0x18, 0x10, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x70, 0x61, 0x74, 0x68, 0x12, 0x12, 0x0a, 0x04, 0x65, 0x74, 0x61, 0x67, 0x18, 0x11, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x65, 0x74, 0x61, - 0x67, 0x1a, 0x39, 0x0a, 0x0b, 0x58, 0x61, 0x74, 0x74, 0x72, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, - 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, - 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x0c, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xcf, 0x03, 0x0a, - 0x10, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x4d, 0x64, 0x50, 0x72, 0x6f, 0x74, - 0x6f, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x02, 0x69, - 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x12, 0x10, - 0x0a, 0x03, 0x75, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x03, 0x75, 0x69, 0x64, - 0x12, 0x10, 0x0a, 0x03, 0x67, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x04, 0x52, 0x03, 0x67, - 0x69, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x74, 0x72, 0x65, 0x65, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, - 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x74, 0x72, 0x65, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x12, - 0x12, 0x0a, 0x04, 0x6d, 0x6f, 0x64, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x04, 0x6d, - 0x6f, 0x64, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x66, 0x6c, 0x61, 0x67, 0x73, 0x18, 0x07, 0x20, 0x01, - 0x28, 0x0d, 0x52, 0x05, 0x66, 0x6c, 0x61, 0x67, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, - 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x23, 0x0a, - 0x05, 0x63, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x65, - 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x52, 0x05, 0x63, 0x74, 0x69, - 0x6d, 0x65, 0x12, 0x23, 0x0a, 0x05, 0x6d, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x0d, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x54, 0x69, 0x6d, 0x65, - 0x52, 0x05, 0x6d, 0x74, 0x69, 0x6d, 0x65, 0x12, 0x23, 0x0a, 0x05, 0x73, 0x74, 0x69, 0x6d, 0x65, - 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, - 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x52, 0x05, 0x73, 0x74, 0x69, 0x6d, 0x65, 0x12, 0x3d, 0x0a, 0x06, - 0x78, 0x61, 0x74, 0x74, 0x72, 0x73, 0x18, 0x0c, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x65, - 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, - 0x4d, 0x64, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x58, 0x61, 0x74, 0x74, 0x72, 0x73, 0x45, 0x6e, - 0x74, 0x72, 0x79, 0x52, 0x06, 0x78, 0x61, 0x74, 0x74, 0x72, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x70, - 0x61, 0x74, 0x68, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x70, 0x61, 0x74, 0x68, 0x12, - 0x12, 0x0a, 0x04, 0x65, 0x74, 0x61, 0x67, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x65, - 0x74, 0x61, 0x67, 0x1a, 0x39, 0x0a, 0x0b, 0x58, 0x61, 0x74, 0x74, 0x72, 0x73, 0x45, 0x6e, 0x74, - 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x0c, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xce, - 0x03, 0x0a, 0x0a, 0x51, 0x75, 0x6f, 0x74, 0x61, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x12, 0x0a, - 0x04, 0x70, 0x61, 0x74, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x70, 0x61, 0x74, - 0x68, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x26, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x0e, 0x32, 0x12, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x51, 0x55, - 0x4f, 0x54, 0x41, 0x54, 0x59, 0x50, 0x45, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x1c, 0x0a, - 0x09, 0x75, 0x73, 0x65, 0x64, 0x62, 0x79, 0x74, 0x65, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x04, - 0x52, 0x09, 0x75, 0x73, 0x65, 0x64, 0x62, 0x79, 0x74, 0x65, 0x73, 0x12, 0x2a, 0x0a, 0x10, 0x75, - 0x73, 0x65, 0x64, 0x6c, 0x6f, 0x67, 0x69, 0x63, 0x61, 0x6c, 0x62, 0x79, 0x74, 0x65, 0x73, 0x18, - 0x05, 0x20, 0x01, 0x28, 0x04, 0x52, 0x10, 0x75, 0x73, 0x65, 0x64, 0x6c, 0x6f, 0x67, 0x69, 0x63, - 0x61, 0x6c, 0x62, 0x79, 0x74, 0x65, 0x73, 0x12, 0x1c, 0x0a, 0x09, 0x75, 0x73, 0x65, 0x64, 0x66, - 0x69, 0x6c, 0x65, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x04, 0x52, 0x09, 0x75, 0x73, 0x65, 0x64, - 0x66, 0x69, 0x6c, 0x65, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x6d, 0x61, 0x78, 0x62, 0x79, 0x74, 0x65, - 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x6d, 0x61, 0x78, 0x62, 0x79, 0x74, 0x65, - 0x73, 0x12, 0x28, 0x0a, 0x0f, 0x6d, 0x61, 0x78, 0x6c, 0x6f, 0x67, 0x69, 0x63, 0x61, 0x6c, 0x62, - 0x79, 0x74, 0x65, 0x73, 0x18, 0x08, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0f, 0x6d, 0x61, 0x78, 0x6c, - 0x6f, 0x67, 0x69, 0x63, 0x61, 0x6c, 0x62, 0x79, 0x74, 0x65, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x6d, - 0x61, 0x78, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x18, 0x09, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x6d, - 0x61, 0x78, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x12, 0x30, 0x0a, 0x13, 0x70, 0x65, 0x72, 0x63, 0x65, - 0x6e, 0x74, 0x61, 0x67, 0x65, 0x75, 0x73, 0x65, 0x64, 0x62, 0x79, 0x74, 0x65, 0x73, 0x18, 0x0a, - 0x20, 0x01, 0x28, 0x02, 0x52, 0x13, 0x70, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x61, 0x67, 0x65, - 0x75, 0x73, 0x65, 0x64, 0x62, 0x79, 0x74, 0x65, 0x73, 0x12, 0x30, 0x0a, 0x13, 0x70, 0x65, 0x72, - 0x63, 0x65, 0x6e, 0x74, 0x61, 0x67, 0x65, 0x75, 0x73, 0x65, 0x64, 0x66, 0x69, 0x6c, 0x65, 0x73, - 0x18, 0x0b, 0x20, 0x01, 0x28, 0x02, 0x52, 0x13, 0x70, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x61, - 0x67, 0x65, 0x75, 0x73, 0x65, 0x64, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x12, 0x20, 0x0a, 0x0b, 0x73, - 0x74, 0x61, 0x74, 0x75, 0x73, 0x62, 0x79, 0x74, 0x65, 0x73, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x0b, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x62, 0x79, 0x74, 0x65, 0x73, 0x12, 0x20, 0x0a, - 0x0b, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x18, 0x0d, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x0b, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x22, - 0x66, 0x0a, 0x06, 0x52, 0x6f, 0x6c, 0x65, 0x49, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x69, 0x64, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x03, 0x75, 0x69, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x67, - 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x03, 0x67, 0x69, 0x64, 0x12, 0x1a, 0x0a, - 0x08, 0x75, 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x08, 0x75, 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x67, 0x72, 0x6f, - 0x75, 0x70, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x67, 0x72, - 0x6f, 0x75, 0x70, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x5f, 0x0a, 0x04, 0x4d, 0x44, 0x49, 0x64, 0x12, - 0x12, 0x0a, 0x04, 0x70, 0x61, 0x74, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x70, - 0x61, 0x74, 0x68, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x06, 0x52, - 0x02, 0x69, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x69, 0x6e, 0x6f, 0x18, 0x03, 0x20, 0x01, 0x28, 0x06, - 0x52, 0x03, 0x69, 0x6e, 0x6f, 0x12, 0x21, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x04, 0x20, - 0x01, 0x28, 0x0e, 0x32, 0x0d, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x54, 0x59, - 0x50, 0x45, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3f, 0x0a, 0x05, 0x4c, 0x69, 0x6d, 0x69, - 0x74, 0x12, 0x12, 0x0a, 0x04, 0x7a, 0x65, 0x72, 0x6f, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, - 0x04, 0x7a, 0x65, 0x72, 0x6f, 0x12, 0x10, 0x0a, 0x03, 0x6d, 0x69, 0x6e, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x04, 0x52, 0x03, 0x6d, 0x69, 0x6e, 0x12, 0x10, 0x0a, 0x03, 0x6d, 0x61, 0x78, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x04, 0x52, 0x03, 0x6d, 0x61, 0x78, 0x22, 0xa6, 0x06, 0x0a, 0x0b, 0x4d, 0x44, - 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x65, 0x6c, - 0x65, 0x63, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x73, 0x65, 0x6c, 0x65, 0x63, - 0x74, 0x12, 0x24, 0x0a, 0x05, 0x63, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x0e, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4c, 0x69, 0x6d, 0x69, 0x74, - 0x52, 0x05, 0x63, 0x74, 0x69, 0x6d, 0x65, 0x12, 0x24, 0x0a, 0x05, 0x6d, 0x74, 0x69, 0x6d, 0x65, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, - 0x2e, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x52, 0x05, 0x6d, 0x74, 0x69, 0x6d, 0x65, 0x12, 0x24, 0x0a, - 0x05, 0x73, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x65, - 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x52, 0x05, 0x73, 0x74, - 0x69, 0x6d, 0x65, 0x12, 0x22, 0x0a, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x0e, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4c, 0x69, 0x6d, 0x69, - 0x74, 0x52, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x12, 0x2a, 0x0a, 0x08, 0x74, 0x72, 0x65, 0x65, 0x73, - 0x69, 0x7a, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x65, 0x6f, 0x73, 0x2e, - 0x72, 0x70, 0x63, 0x2e, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x52, 0x08, 0x74, 0x72, 0x65, 0x65, 0x73, - 0x69, 0x7a, 0x65, 0x12, 0x2a, 0x0a, 0x08, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x72, 0x65, 0x6e, 0x18, - 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, - 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x52, 0x08, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x72, 0x65, 0x6e, 0x12, - 0x2c, 0x0a, 0x09, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x08, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4c, 0x69, 0x6d, - 0x69, 0x74, 0x52, 0x09, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x3d, 0x0a, - 0x12, 0x75, 0x6e, 0x6c, 0x69, 0x6e, 0x6b, 0x65, 0x64, 0x5f, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x73, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x65, 0x6f, 0x73, 0x2e, - 0x72, 0x70, 0x63, 0x2e, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x52, 0x11, 0x75, 0x6e, 0x6c, 0x69, 0x6e, - 0x6b, 0x65, 0x64, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x1a, 0x0a, 0x08, - 0x6c, 0x61, 0x79, 0x6f, 0x75, 0x74, 0x69, 0x64, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, - 0x6c, 0x61, 0x79, 0x6f, 0x75, 0x74, 0x69, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x66, 0x6c, 0x61, 0x67, - 0x73, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, 0x66, 0x6c, 0x61, 0x67, 0x73, 0x12, 0x18, - 0x0a, 0x07, 0x73, 0x79, 0x6d, 0x6c, 0x69, 0x6e, 0x6b, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x08, 0x52, - 0x07, 0x73, 0x79, 0x6d, 0x6c, 0x69, 0x6e, 0x6b, 0x12, 0x2d, 0x0a, 0x08, 0x63, 0x68, 0x65, 0x63, - 0x6b, 0x73, 0x75, 0x6d, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x65, 0x6f, 0x73, - 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x73, 0x75, 0x6d, 0x52, 0x08, 0x63, - 0x68, 0x65, 0x63, 0x6b, 0x73, 0x75, 0x6d, 0x12, 0x14, 0x0a, 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, - 0x18, 0x0e, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x12, 0x14, 0x0a, - 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x67, 0x72, - 0x6f, 0x75, 0x70, 0x12, 0x1d, 0x0a, 0x0a, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x5f, 0x72, 0x6f, 0x6f, - 0x74, 0x18, 0x10, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x52, 0x6f, - 0x6f, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x72, 0x6f, 0x6f, 0x74, - 0x18, 0x11, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x6f, 0x6f, - 0x74, 0x12, 0x27, 0x0a, 0x0f, 0x72, 0x65, 0x67, 0x65, 0x78, 0x70, 0x5f, 0x66, 0x69, 0x6c, 0x65, - 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x12, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0e, 0x72, 0x65, 0x67, 0x65, - 0x78, 0x70, 0x46, 0x69, 0x6c, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x25, 0x0a, 0x0e, 0x72, 0x65, - 0x67, 0x65, 0x78, 0x70, 0x5f, 0x64, 0x69, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x13, 0x20, 0x01, - 0x28, 0x0c, 0x52, 0x0d, 0x72, 0x65, 0x67, 0x65, 0x78, 0x70, 0x44, 0x69, 0x72, 0x6e, 0x61, 0x6d, - 0x65, 0x12, 0x35, 0x0a, 0x05, 0x78, 0x61, 0x74, 0x74, 0x72, 0x18, 0x14, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x1f, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4d, 0x44, 0x53, 0x65, 0x6c, - 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x58, 0x61, 0x74, 0x74, 0x72, 0x45, 0x6e, 0x74, 0x72, - 0x79, 0x52, 0x05, 0x78, 0x61, 0x74, 0x74, 0x72, 0x1a, 0x38, 0x0a, 0x0a, 0x58, 0x61, 0x74, 0x74, - 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, + 0x67, 0x12, 0x14, 0x0a, 0x05, 0x69, 0x6e, 0x6f, 0x64, 0x65, 0x18, 0x12, 0x20, 0x01, 0x28, 0x04, + 0x52, 0x05, 0x69, 0x6e, 0x6f, 0x64, 0x65, 0x1a, 0x39, 0x0a, 0x0b, 0x58, 0x61, 0x74, 0x74, 0x72, + 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, - 0x38, 0x01, 0x22, 0xc0, 0x01, 0x0a, 0x09, 0x4d, 0x44, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x12, 0x21, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x0d, - 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x54, 0x59, 0x50, 0x45, 0x52, 0x04, 0x74, - 0x79, 0x70, 0x65, 0x12, 0x1d, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x0d, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4d, 0x44, 0x49, 0x64, 0x52, 0x02, - 0x69, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x61, 0x75, 0x74, 0x68, 0x6b, 0x65, 0x79, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x75, 0x74, 0x68, 0x6b, 0x65, 0x79, 0x12, 0x23, 0x0a, 0x04, - 0x72, 0x6f, 0x6c, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x65, 0x6f, 0x73, - 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x52, 0x6f, 0x6c, 0x65, 0x49, 0x64, 0x52, 0x04, 0x72, 0x6f, 0x6c, - 0x65, 0x12, 0x32, 0x0a, 0x09, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x05, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4d, - 0x44, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x09, 0x73, 0x65, 0x6c, 0x65, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x84, 0x01, 0x0a, 0x0a, 0x4d, 0x44, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x21, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0e, 0x32, 0x0d, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x54, 0x59, 0x50, - 0x45, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x26, 0x0a, 0x03, 0x66, 0x6d, 0x64, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x46, - 0x69, 0x6c, 0x65, 0x4d, 0x64, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x52, 0x03, 0x66, 0x6d, 0x64, 0x12, - 0x2b, 0x0a, 0x03, 0x63, 0x6d, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x65, - 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, - 0x4d, 0x64, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x52, 0x03, 0x63, 0x6d, 0x64, 0x22, 0xde, 0x01, 0x0a, - 0x0b, 0x46, 0x69, 0x6e, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x21, 0x0a, 0x04, + 0x38, 0x01, 0x22, 0xe5, 0x03, 0x0a, 0x10, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, + 0x4d, 0x64, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x04, 0x52, 0x02, 0x69, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x70, 0x61, 0x72, 0x65, 0x6e, + 0x74, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x70, 0x61, 0x72, 0x65, + 0x6e, 0x74, 0x49, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x04, 0x52, 0x03, 0x75, 0x69, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x67, 0x69, 0x64, 0x18, 0x04, 0x20, + 0x01, 0x28, 0x04, 0x52, 0x03, 0x67, 0x69, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x74, 0x72, 0x65, 0x65, + 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x74, 0x72, 0x65, + 0x65, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6d, 0x6f, 0x64, 0x65, 0x18, 0x05, 0x20, + 0x01, 0x28, 0x0d, 0x52, 0x04, 0x6d, 0x6f, 0x64, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x66, 0x6c, 0x61, + 0x67, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x66, 0x6c, 0x61, 0x67, 0x73, 0x12, + 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x6e, + 0x61, 0x6d, 0x65, 0x12, 0x23, 0x0a, 0x05, 0x63, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x09, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x54, 0x69, 0x6d, + 0x65, 0x52, 0x05, 0x63, 0x74, 0x69, 0x6d, 0x65, 0x12, 0x23, 0x0a, 0x05, 0x6d, 0x74, 0x69, 0x6d, + 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, + 0x63, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x52, 0x05, 0x6d, 0x74, 0x69, 0x6d, 0x65, 0x12, 0x23, 0x0a, + 0x05, 0x73, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x65, + 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x52, 0x05, 0x73, 0x74, 0x69, + 0x6d, 0x65, 0x12, 0x3d, 0x0a, 0x06, 0x78, 0x61, 0x74, 0x74, 0x72, 0x73, 0x18, 0x0c, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x43, 0x6f, 0x6e, + 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x4d, 0x64, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x58, 0x61, + 0x74, 0x74, 0x72, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, 0x78, 0x61, 0x74, 0x74, 0x72, + 0x73, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x61, 0x74, 0x68, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x0c, 0x52, + 0x04, 0x70, 0x61, 0x74, 0x68, 0x12, 0x12, 0x0a, 0x04, 0x65, 0x74, 0x61, 0x67, 0x18, 0x0e, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x04, 0x65, 0x74, 0x61, 0x67, 0x12, 0x14, 0x0a, 0x05, 0x69, 0x6e, 0x6f, + 0x64, 0x65, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, 0x69, 0x6e, 0x6f, 0x64, 0x65, 0x1a, + 0x39, 0x0a, 0x0b, 0x58, 0x61, 0x74, 0x74, 0x72, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, + 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, + 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, + 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xce, 0x03, 0x0a, 0x0a, 0x51, + 0x75, 0x6f, 0x74, 0x61, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x61, 0x74, + 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x70, 0x61, 0x74, 0x68, 0x12, 0x12, 0x0a, + 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, + 0x65, 0x12, 0x26, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, + 0x12, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x51, 0x55, 0x4f, 0x54, 0x41, 0x54, + 0x59, 0x50, 0x45, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x75, 0x73, 0x65, + 0x64, 0x62, 0x79, 0x74, 0x65, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x04, 0x52, 0x09, 0x75, 0x73, + 0x65, 0x64, 0x62, 0x79, 0x74, 0x65, 0x73, 0x12, 0x2a, 0x0a, 0x10, 0x75, 0x73, 0x65, 0x64, 0x6c, + 0x6f, 0x67, 0x69, 0x63, 0x61, 0x6c, 0x62, 0x79, 0x74, 0x65, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, + 0x04, 0x52, 0x10, 0x75, 0x73, 0x65, 0x64, 0x6c, 0x6f, 0x67, 0x69, 0x63, 0x61, 0x6c, 0x62, 0x79, + 0x74, 0x65, 0x73, 0x12, 0x1c, 0x0a, 0x09, 0x75, 0x73, 0x65, 0x64, 0x66, 0x69, 0x6c, 0x65, 0x73, + 0x18, 0x06, 0x20, 0x01, 0x28, 0x04, 0x52, 0x09, 0x75, 0x73, 0x65, 0x64, 0x66, 0x69, 0x6c, 0x65, + 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x6d, 0x61, 0x78, 0x62, 0x79, 0x74, 0x65, 0x73, 0x18, 0x07, 0x20, + 0x01, 0x28, 0x04, 0x52, 0x08, 0x6d, 0x61, 0x78, 0x62, 0x79, 0x74, 0x65, 0x73, 0x12, 0x28, 0x0a, + 0x0f, 0x6d, 0x61, 0x78, 0x6c, 0x6f, 0x67, 0x69, 0x63, 0x61, 0x6c, 0x62, 0x79, 0x74, 0x65, 0x73, + 0x18, 0x08, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0f, 0x6d, 0x61, 0x78, 0x6c, 0x6f, 0x67, 0x69, 0x63, + 0x61, 0x6c, 0x62, 0x79, 0x74, 0x65, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x6d, 0x61, 0x78, 0x66, 0x69, + 0x6c, 0x65, 0x73, 0x18, 0x09, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x6d, 0x61, 0x78, 0x66, 0x69, + 0x6c, 0x65, 0x73, 0x12, 0x30, 0x0a, 0x13, 0x70, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x61, 0x67, + 0x65, 0x75, 0x73, 0x65, 0x64, 0x62, 0x79, 0x74, 0x65, 0x73, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x02, + 0x52, 0x13, 0x70, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x61, 0x67, 0x65, 0x75, 0x73, 0x65, 0x64, + 0x62, 0x79, 0x74, 0x65, 0x73, 0x12, 0x30, 0x0a, 0x13, 0x70, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, + 0x61, 0x67, 0x65, 0x75, 0x73, 0x65, 0x64, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x18, 0x0b, 0x20, 0x01, + 0x28, 0x02, 0x52, 0x13, 0x70, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x61, 0x67, 0x65, 0x75, 0x73, + 0x65, 0x64, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x12, 0x20, 0x0a, 0x0b, 0x73, 0x74, 0x61, 0x74, 0x75, + 0x73, 0x62, 0x79, 0x74, 0x65, 0x73, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x73, 0x74, + 0x61, 0x74, 0x75, 0x73, 0x62, 0x79, 0x74, 0x65, 0x73, 0x12, 0x20, 0x0a, 0x0b, 0x73, 0x74, 0x61, + 0x74, 0x75, 0x73, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, + 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x22, 0x66, 0x0a, 0x06, 0x52, + 0x6f, 0x6c, 0x65, 0x49, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x04, 0x52, 0x03, 0x75, 0x69, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x67, 0x69, 0x64, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x04, 0x52, 0x03, 0x67, 0x69, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x75, 0x73, 0x65, + 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x75, 0x73, 0x65, + 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x6e, 0x61, + 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x6e, + 0x61, 0x6d, 0x65, 0x22, 0x5f, 0x0a, 0x04, 0x4d, 0x44, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x70, + 0x61, 0x74, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x70, 0x61, 0x74, 0x68, 0x12, + 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x06, 0x52, 0x02, 0x69, 0x64, 0x12, + 0x10, 0x0a, 0x03, 0x69, 0x6e, 0x6f, 0x18, 0x03, 0x20, 0x01, 0x28, 0x06, 0x52, 0x03, 0x69, 0x6e, + 0x6f, 0x12, 0x21, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, + 0x0d, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x54, 0x59, 0x50, 0x45, 0x52, 0x04, + 0x74, 0x79, 0x70, 0x65, 0x22, 0x3f, 0x0a, 0x05, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x12, 0x0a, + 0x04, 0x7a, 0x65, 0x72, 0x6f, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x04, 0x7a, 0x65, 0x72, + 0x6f, 0x12, 0x10, 0x0a, 0x03, 0x6d, 0x69, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x03, + 0x6d, 0x69, 0x6e, 0x12, 0x10, 0x0a, 0x03, 0x6d, 0x61, 0x78, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, + 0x52, 0x03, 0x6d, 0x61, 0x78, 0x22, 0xa6, 0x06, 0x0a, 0x0b, 0x4d, 0x44, 0x53, 0x65, 0x6c, 0x65, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x12, 0x24, 0x0a, + 0x05, 0x63, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x65, + 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x52, 0x05, 0x63, 0x74, + 0x69, 0x6d, 0x65, 0x12, 0x24, 0x0a, 0x05, 0x6d, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4c, 0x69, 0x6d, + 0x69, 0x74, 0x52, 0x05, 0x6d, 0x74, 0x69, 0x6d, 0x65, 0x12, 0x24, 0x0a, 0x05, 0x73, 0x74, 0x69, + 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, + 0x70, 0x63, 0x2e, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x52, 0x05, 0x73, 0x74, 0x69, 0x6d, 0x65, 0x12, + 0x22, 0x0a, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, + 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x52, 0x04, 0x73, + 0x69, 0x7a, 0x65, 0x12, 0x2a, 0x0a, 0x08, 0x74, 0x72, 0x65, 0x65, 0x73, 0x69, 0x7a, 0x65, 0x18, + 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, + 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x52, 0x08, 0x74, 0x72, 0x65, 0x65, 0x73, 0x69, 0x7a, 0x65, 0x12, + 0x2a, 0x0a, 0x08, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x72, 0x65, 0x6e, 0x18, 0x07, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x0e, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4c, 0x69, 0x6d, 0x69, + 0x74, 0x52, 0x08, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x72, 0x65, 0x6e, 0x12, 0x2c, 0x0a, 0x09, 0x6c, + 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, + 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x52, 0x09, + 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x3d, 0x0a, 0x12, 0x75, 0x6e, 0x6c, + 0x69, 0x6e, 0x6b, 0x65, 0x64, 0x5f, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, + 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, + 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x52, 0x11, 0x75, 0x6e, 0x6c, 0x69, 0x6e, 0x6b, 0x65, 0x64, 0x4c, + 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x6c, 0x61, 0x79, 0x6f, + 0x75, 0x74, 0x69, 0x64, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x6c, 0x61, 0x79, 0x6f, + 0x75, 0x74, 0x69, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x66, 0x6c, 0x61, 0x67, 0x73, 0x18, 0x0b, 0x20, + 0x01, 0x28, 0x04, 0x52, 0x05, 0x66, 0x6c, 0x61, 0x67, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x73, 0x79, + 0x6d, 0x6c, 0x69, 0x6e, 0x6b, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x73, 0x79, 0x6d, + 0x6c, 0x69, 0x6e, 0x6b, 0x12, 0x2d, 0x0a, 0x08, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x73, 0x75, 0x6d, + 0x18, 0x0d, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, + 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x73, 0x75, 0x6d, 0x52, 0x08, 0x63, 0x68, 0x65, 0x63, 0x6b, + 0x73, 0x75, 0x6d, 0x12, 0x14, 0x0a, 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x18, 0x0e, 0x20, 0x01, + 0x28, 0x0d, 0x52, 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x12, 0x14, 0x0a, 0x05, 0x67, 0x72, 0x6f, + 0x75, 0x70, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x12, + 0x1d, 0x0a, 0x0a, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x5f, 0x72, 0x6f, 0x6f, 0x74, 0x18, 0x10, 0x20, + 0x01, 0x28, 0x08, 0x52, 0x09, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x52, 0x6f, 0x6f, 0x74, 0x12, 0x1d, + 0x0a, 0x0a, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x72, 0x6f, 0x6f, 0x74, 0x18, 0x11, 0x20, 0x01, + 0x28, 0x08, 0x52, 0x09, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x6f, 0x6f, 0x74, 0x12, 0x27, 0x0a, + 0x0f, 0x72, 0x65, 0x67, 0x65, 0x78, 0x70, 0x5f, 0x66, 0x69, 0x6c, 0x65, 0x6e, 0x61, 0x6d, 0x65, + 0x18, 0x12, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0e, 0x72, 0x65, 0x67, 0x65, 0x78, 0x70, 0x46, 0x69, + 0x6c, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x25, 0x0a, 0x0e, 0x72, 0x65, 0x67, 0x65, 0x78, 0x70, + 0x5f, 0x64, 0x69, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x13, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0d, + 0x72, 0x65, 0x67, 0x65, 0x78, 0x70, 0x44, 0x69, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x35, 0x0a, + 0x05, 0x78, 0x61, 0x74, 0x74, 0x72, 0x18, 0x14, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x65, + 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4d, 0x44, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x2e, 0x58, 0x61, 0x74, 0x74, 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x05, 0x78, + 0x61, 0x74, 0x74, 0x72, 0x1a, 0x38, 0x0a, 0x0a, 0x58, 0x61, 0x74, 0x74, 0x72, 0x45, 0x6e, 0x74, + 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x0c, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xc0, + 0x01, 0x0a, 0x09, 0x4d, 0x44, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x21, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x0d, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x54, 0x59, 0x50, 0x45, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x1d, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x65, 0x6f, - 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4d, 0x44, 0x49, 0x64, 0x52, 0x02, 0x69, 0x64, 0x12, 0x23, - 0x0a, 0x04, 0x72, 0x6f, 0x6c, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x65, - 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x52, 0x6f, 0x6c, 0x65, 0x49, 0x64, 0x52, 0x04, 0x72, - 0x6f, 0x6c, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x61, 0x75, 0x74, 0x68, 0x6b, 0x65, 0x79, 0x18, 0x04, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x75, 0x74, 0x68, 0x6b, 0x65, 0x79, 0x12, 0x1a, 0x0a, - 0x08, 0x6d, 0x61, 0x78, 0x64, 0x65, 0x70, 0x74, 0x68, 0x18, 0x05, 0x20, 0x01, 0x28, 0x04, 0x52, - 0x08, 0x6d, 0x61, 0x78, 0x64, 0x65, 0x70, 0x74, 0x68, 0x12, 0x32, 0x0a, 0x09, 0x73, 0x65, 0x6c, - 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x65, - 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4d, 0x44, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x52, 0x09, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x47, 0x0a, - 0x09, 0x53, 0x68, 0x61, 0x72, 0x65, 0x41, 0x75, 0x74, 0x68, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x72, - 0x6f, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x70, 0x72, 0x6f, 0x74, 0x12, 0x12, - 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, - 0x6d, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x68, 0x6f, 0x73, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x04, 0x68, 0x6f, 0x73, 0x74, 0x22, 0x8a, 0x02, 0x0a, 0x0a, 0x53, 0x68, 0x61, 0x72, 0x65, - 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x1e, 0x0a, 0x0a, 0x70, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, - 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x70, 0x65, 0x72, 0x6d, 0x69, - 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x18, 0x0a, 0x07, 0x65, 0x78, 0x70, 0x69, 0x72, 0x65, 0x73, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x07, 0x65, 0x78, 0x70, 0x69, 0x72, 0x65, 0x73, 0x12, - 0x14, 0x0a, 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, - 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x12, 0x14, 0x0a, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x04, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x1e, 0x0a, 0x0a, 0x67, - 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x04, 0x52, - 0x0a, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x70, - 0x61, 0x74, 0x68, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x70, 0x61, 0x74, 0x68, 0x12, - 0x1c, 0x0a, 0x09, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x74, 0x72, 0x65, 0x65, 0x18, 0x07, 0x20, 0x01, - 0x28, 0x08, 0x52, 0x09, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x74, 0x72, 0x65, 0x65, 0x12, 0x16, 0x0a, - 0x06, 0x76, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x76, - 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x2c, 0x0a, 0x07, 0x6f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x73, - 0x18, 0x09, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, - 0x2e, 0x53, 0x68, 0x61, 0x72, 0x65, 0x41, 0x75, 0x74, 0x68, 0x52, 0x07, 0x6f, 0x72, 0x69, 0x67, - 0x69, 0x6e, 0x73, 0x22, 0x89, 0x01, 0x0a, 0x0a, 0x53, 0x68, 0x61, 0x72, 0x65, 0x54, 0x6f, 0x6b, - 0x65, 0x6e, 0x12, 0x29, 0x0a, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x13, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x53, 0x68, 0x61, 0x72, - 0x65, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x52, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x1c, 0x0a, - 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, - 0x52, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x73, - 0x65, 0x72, 0x69, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, - 0x0a, 0x73, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x73, - 0x65, 0x65, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x73, 0x65, 0x65, 0x64, 0x22, - 0x8c, 0x1e, 0x0a, 0x09, 0x4e, 0x53, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x18, 0x0a, - 0x07, 0x61, 0x75, 0x74, 0x68, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, - 0x61, 0x75, 0x74, 0x68, 0x6b, 0x65, 0x79, 0x12, 0x23, 0x0a, 0x04, 0x72, 0x6f, 0x6c, 0x65, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, - 0x52, 0x6f, 0x6c, 0x65, 0x49, 0x64, 0x52, 0x04, 0x72, 0x6f, 0x6c, 0x65, 0x12, 0x37, 0x0a, 0x05, - 0x6d, 0x6b, 0x64, 0x69, 0x72, 0x18, 0x15, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x65, 0x6f, - 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4e, 0x53, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, - 0x4d, 0x6b, 0x64, 0x69, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x00, 0x52, 0x05, - 0x6d, 0x6b, 0x64, 0x69, 0x72, 0x12, 0x37, 0x0a, 0x05, 0x72, 0x6d, 0x64, 0x69, 0x72, 0x18, 0x16, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4e, - 0x53, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x52, 0x6d, 0x64, 0x69, 0x72, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x00, 0x52, 0x05, 0x72, 0x6d, 0x64, 0x69, 0x72, 0x12, 0x37, - 0x0a, 0x05, 0x74, 0x6f, 0x75, 0x63, 0x68, 0x18, 0x17, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, - 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4e, 0x53, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x2e, 0x54, 0x6f, 0x75, 0x63, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x00, - 0x52, 0x05, 0x74, 0x6f, 0x75, 0x63, 0x68, 0x12, 0x3a, 0x0a, 0x06, 0x75, 0x6e, 0x6c, 0x69, 0x6e, - 0x6b, 0x18, 0x18, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, - 0x63, 0x2e, 0x4e, 0x53, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x55, 0x6e, 0x6c, 0x69, - 0x6e, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x00, 0x52, 0x06, 0x75, 0x6e, 0x6c, - 0x69, 0x6e, 0x6b, 0x12, 0x2e, 0x0a, 0x02, 0x72, 0x6d, 0x18, 0x19, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x1c, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4e, 0x53, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x2e, 0x52, 0x6d, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x00, 0x52, - 0x02, 0x72, 0x6d, 0x12, 0x3a, 0x0a, 0x06, 0x72, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x1a, 0x20, + 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4d, 0x44, 0x49, 0x64, 0x52, 0x02, 0x69, 0x64, 0x12, 0x18, + 0x0a, 0x07, 0x61, 0x75, 0x74, 0x68, 0x6b, 0x65, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x07, 0x61, 0x75, 0x74, 0x68, 0x6b, 0x65, 0x79, 0x12, 0x23, 0x0a, 0x04, 0x72, 0x6f, 0x6c, 0x65, + 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, + 0x2e, 0x52, 0x6f, 0x6c, 0x65, 0x49, 0x64, 0x52, 0x04, 0x72, 0x6f, 0x6c, 0x65, 0x12, 0x32, 0x0a, + 0x09, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x14, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4d, 0x44, 0x53, 0x65, 0x6c, + 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x09, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x22, 0x84, 0x01, 0x0a, 0x0a, 0x4d, 0x44, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x12, 0x21, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x0d, + 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x54, 0x59, 0x50, 0x45, 0x52, 0x04, 0x74, + 0x79, 0x70, 0x65, 0x12, 0x26, 0x0a, 0x03, 0x66, 0x6d, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x14, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x46, 0x69, 0x6c, 0x65, 0x4d, + 0x64, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x52, 0x03, 0x66, 0x6d, 0x64, 0x12, 0x2b, 0x0a, 0x03, 0x63, + 0x6d, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, + 0x70, 0x63, 0x2e, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x4d, 0x64, 0x50, 0x72, + 0x6f, 0x74, 0x6f, 0x52, 0x03, 0x63, 0x6d, 0x64, 0x22, 0xde, 0x01, 0x0a, 0x0b, 0x46, 0x69, 0x6e, + 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x21, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x0d, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, + 0x2e, 0x54, 0x59, 0x50, 0x45, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x1d, 0x0a, 0x02, 0x69, + 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, + 0x63, 0x2e, 0x4d, 0x44, 0x49, 0x64, 0x52, 0x02, 0x69, 0x64, 0x12, 0x23, 0x0a, 0x04, 0x72, 0x6f, + 0x6c, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, + 0x70, 0x63, 0x2e, 0x52, 0x6f, 0x6c, 0x65, 0x49, 0x64, 0x52, 0x04, 0x72, 0x6f, 0x6c, 0x65, 0x12, + 0x18, 0x0a, 0x07, 0x61, 0x75, 0x74, 0x68, 0x6b, 0x65, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x07, 0x61, 0x75, 0x74, 0x68, 0x6b, 0x65, 0x79, 0x12, 0x1a, 0x0a, 0x08, 0x6d, 0x61, 0x78, + 0x64, 0x65, 0x70, 0x74, 0x68, 0x18, 0x05, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x6d, 0x61, 0x78, + 0x64, 0x65, 0x70, 0x74, 0x68, 0x12, 0x32, 0x0a, 0x09, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, + 0x70, 0x63, 0x2e, 0x4d, 0x44, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x09, + 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x47, 0x0a, 0x09, 0x53, 0x68, 0x61, + 0x72, 0x65, 0x41, 0x75, 0x74, 0x68, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x72, 0x6f, 0x74, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x70, 0x72, 0x6f, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, + 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x12, + 0x0a, 0x04, 0x68, 0x6f, 0x73, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x68, 0x6f, + 0x73, 0x74, 0x22, 0x8a, 0x02, 0x0a, 0x0a, 0x53, 0x68, 0x61, 0x72, 0x65, 0x50, 0x72, 0x6f, 0x74, + 0x6f, 0x12, 0x1e, 0x0a, 0x0a, 0x70, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x70, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, + 0x6e, 0x12, 0x18, 0x0a, 0x07, 0x65, 0x78, 0x70, 0x69, 0x72, 0x65, 0x73, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x04, 0x52, 0x07, 0x65, 0x78, 0x70, 0x69, 0x72, 0x65, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x6f, + 0x77, 0x6e, 0x65, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x6f, 0x77, 0x6e, 0x65, + 0x72, 0x12, 0x14, 0x0a, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x1e, 0x0a, 0x0a, 0x67, 0x65, 0x6e, 0x65, 0x72, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0a, 0x67, 0x65, 0x6e, + 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x61, 0x74, 0x68, 0x18, + 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x70, 0x61, 0x74, 0x68, 0x12, 0x1c, 0x0a, 0x09, 0x61, + 0x6c, 0x6c, 0x6f, 0x77, 0x74, 0x72, 0x65, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, + 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x74, 0x72, 0x65, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x76, 0x74, 0x6f, + 0x6b, 0x65, 0x6e, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x76, 0x74, 0x6f, 0x6b, 0x65, + 0x6e, 0x12, 0x2c, 0x0a, 0x07, 0x6f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x73, 0x18, 0x09, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x53, 0x68, 0x61, + 0x72, 0x65, 0x41, 0x75, 0x74, 0x68, 0x52, 0x07, 0x6f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x73, 0x22, + 0x89, 0x01, 0x0a, 0x0a, 0x53, 0x68, 0x61, 0x72, 0x65, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x29, + 0x0a, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, + 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x53, 0x68, 0x61, 0x72, 0x65, 0x50, 0x72, 0x6f, + 0x74, 0x6f, 0x52, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x1c, 0x0a, 0x09, 0x73, 0x69, 0x67, + 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x09, 0x73, 0x69, + 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x73, 0x65, 0x72, 0x69, 0x61, + 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0a, 0x73, 0x65, 0x72, + 0x69, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x73, 0x65, 0x65, 0x64, 0x18, + 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x73, 0x65, 0x65, 0x64, 0x22, 0x8c, 0x1e, 0x0a, 0x09, + 0x4e, 0x53, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x61, 0x75, 0x74, + 0x68, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x75, 0x74, 0x68, + 0x6b, 0x65, 0x79, 0x12, 0x23, 0x0a, 0x04, 0x72, 0x6f, 0x6c, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x0f, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x52, 0x6f, 0x6c, 0x65, + 0x49, 0x64, 0x52, 0x04, 0x72, 0x6f, 0x6c, 0x65, 0x12, 0x37, 0x0a, 0x05, 0x6d, 0x6b, 0x64, 0x69, + 0x72, 0x18, 0x15, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, + 0x63, 0x2e, 0x4e, 0x53, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x4d, 0x6b, 0x64, 0x69, + 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x00, 0x52, 0x05, 0x6d, 0x6b, 0x64, 0x69, + 0x72, 0x12, 0x37, 0x0a, 0x05, 0x72, 0x6d, 0x64, 0x69, 0x72, 0x18, 0x16, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x1f, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4e, 0x53, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x2e, 0x52, 0x6d, 0x64, 0x69, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x48, 0x00, 0x52, 0x05, 0x72, 0x6d, 0x64, 0x69, 0x72, 0x12, 0x37, 0x0a, 0x05, 0x74, 0x6f, + 0x75, 0x63, 0x68, 0x18, 0x17, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x65, 0x6f, 0x73, 0x2e, + 0x72, 0x70, 0x63, 0x2e, 0x4e, 0x53, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x54, 0x6f, + 0x75, 0x63, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x00, 0x52, 0x05, 0x74, 0x6f, + 0x75, 0x63, 0x68, 0x12, 0x3a, 0x0a, 0x06, 0x75, 0x6e, 0x6c, 0x69, 0x6e, 0x6b, 0x18, 0x18, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4e, 0x53, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x52, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x00, 0x52, 0x06, 0x72, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x12, - 0x3d, 0x0a, 0x07, 0x73, 0x79, 0x6d, 0x6c, 0x69, 0x6e, 0x6b, 0x18, 0x1b, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x21, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4e, 0x53, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x2e, 0x53, 0x79, 0x6d, 0x6c, 0x69, 0x6e, 0x6b, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x48, 0x00, 0x52, 0x07, 0x73, 0x79, 0x6d, 0x6c, 0x69, 0x6e, 0x6b, 0x12, 0x3d, - 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x1c, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x21, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4e, 0x53, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x2e, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x48, 0x00, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x3d, 0x0a, - 0x07, 0x72, 0x65, 0x63, 0x79, 0x63, 0x6c, 0x65, 0x18, 0x1d, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, - 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4e, 0x53, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x2e, 0x52, 0x65, 0x63, 0x79, 0x63, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x48, 0x00, 0x52, 0x07, 0x72, 0x65, 0x63, 0x79, 0x63, 0x6c, 0x65, 0x12, 0x3a, 0x0a, 0x05, - 0x78, 0x61, 0x74, 0x74, 0x72, 0x18, 0x1e, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x65, 0x6f, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x55, 0x6e, 0x6c, 0x69, 0x6e, 0x6b, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x00, 0x52, 0x06, 0x75, 0x6e, 0x6c, 0x69, 0x6e, 0x6b, 0x12, + 0x2e, 0x0a, 0x02, 0x72, 0x6d, 0x18, 0x19, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4e, 0x53, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, - 0x53, 0x65, 0x74, 0x58, 0x41, 0x74, 0x74, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, - 0x00, 0x52, 0x05, 0x78, 0x61, 0x74, 0x74, 0x72, 0x12, 0x37, 0x0a, 0x05, 0x63, 0x68, 0x6f, 0x77, - 0x6e, 0x18, 0x1f, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, - 0x63, 0x2e, 0x4e, 0x53, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x43, 0x68, 0x6f, 0x77, - 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x00, 0x52, 0x05, 0x63, 0x68, 0x6f, 0x77, - 0x6e, 0x12, 0x37, 0x0a, 0x05, 0x63, 0x68, 0x6d, 0x6f, 0x64, 0x18, 0x20, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x1f, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4e, 0x53, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x2e, 0x43, 0x68, 0x6d, 0x6f, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x48, 0x00, 0x52, 0x05, 0x63, 0x68, 0x6d, 0x6f, 0x64, 0x12, 0x31, 0x0a, 0x03, 0x61, 0x63, - 0x6c, 0x18, 0x21, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, - 0x63, 0x2e, 0x4e, 0x53, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x41, 0x63, 0x6c, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x00, 0x52, 0x03, 0x61, 0x63, 0x6c, 0x12, 0x37, 0x0a, - 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x22, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x65, + 0x52, 0x6d, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x00, 0x52, 0x02, 0x72, 0x6d, 0x12, + 0x3a, 0x0a, 0x06, 0x72, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x1a, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x20, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4e, 0x53, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x2e, 0x52, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x48, 0x00, 0x52, 0x06, 0x72, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x3d, 0x0a, 0x07, 0x73, + 0x79, 0x6d, 0x6c, 0x69, 0x6e, 0x6b, 0x18, 0x1b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4e, 0x53, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x2e, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x00, 0x52, - 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x37, 0x0a, 0x05, 0x71, 0x75, 0x6f, 0x74, 0x61, 0x18, - 0x23, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, - 0x4e, 0x53, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x51, 0x75, 0x6f, 0x74, 0x61, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x00, 0x52, 0x05, 0x71, 0x75, 0x6f, 0x74, 0x61, 0x12, - 0x37, 0x0a, 0x05, 0x73, 0x68, 0x61, 0x72, 0x65, 0x18, 0x24, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, - 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4e, 0x53, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x2e, 0x53, 0x68, 0x61, 0x72, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, - 0x00, 0x52, 0x05, 0x73, 0x68, 0x61, 0x72, 0x65, 0x1a, 0x5f, 0x0a, 0x0c, 0x4d, 0x6b, 0x64, 0x69, - 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4d, - 0x44, 0x49, 0x64, 0x52, 0x02, 0x69, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x72, 0x65, 0x63, 0x75, 0x72, - 0x73, 0x69, 0x76, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x72, 0x65, 0x63, 0x75, - 0x72, 0x73, 0x69, 0x76, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6d, 0x6f, 0x64, 0x65, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x03, 0x52, 0x04, 0x6d, 0x6f, 0x64, 0x65, 0x1a, 0x2d, 0x0a, 0x0c, 0x52, 0x6d, 0x64, - 0x69, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x02, 0x69, 0x64, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, - 0x4d, 0x44, 0x49, 0x64, 0x52, 0x02, 0x69, 0x64, 0x1a, 0x2d, 0x0a, 0x0c, 0x54, 0x6f, 0x75, 0x63, - 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4d, - 0x44, 0x49, 0x64, 0x52, 0x02, 0x69, 0x64, 0x1a, 0x4c, 0x0a, 0x0d, 0x55, 0x6e, 0x6c, 0x69, 0x6e, - 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4d, - 0x44, 0x49, 0x64, 0x52, 0x02, 0x69, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x6e, 0x6f, 0x72, 0x65, 0x63, - 0x79, 0x63, 0x6c, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x6e, 0x6f, 0x72, 0x65, - 0x63, 0x79, 0x63, 0x6c, 0x65, 0x1a, 0x66, 0x0a, 0x09, 0x52, 0x6d, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, - 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4d, 0x44, 0x49, 0x64, 0x52, 0x02, 0x69, - 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x72, 0x65, 0x63, 0x75, 0x72, 0x73, 0x69, 0x76, 0x65, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x72, 0x65, 0x63, 0x75, 0x72, 0x73, 0x69, 0x76, 0x65, 0x12, - 0x1c, 0x0a, 0x09, 0x6e, 0x6f, 0x72, 0x65, 0x63, 0x79, 0x63, 0x6c, 0x65, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x08, 0x52, 0x09, 0x6e, 0x6f, 0x72, 0x65, 0x63, 0x79, 0x63, 0x6c, 0x65, 0x1a, 0x46, 0x0a, - 0x0d, 0x52, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, - 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x65, 0x6f, 0x73, - 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4d, 0x44, 0x49, 0x64, 0x52, 0x02, 0x69, 0x64, 0x12, 0x16, 0x0a, - 0x06, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x06, 0x74, - 0x61, 0x72, 0x67, 0x65, 0x74, 0x1a, 0x47, 0x0a, 0x0e, 0x53, 0x79, 0x6d, 0x6c, 0x69, 0x6e, 0x6b, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4d, 0x44, - 0x49, 0x64, 0x52, 0x02, 0x69, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x06, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x1a, 0xec, - 0x01, 0x0a, 0x0e, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x12, 0x1d, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, - 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4d, 0x44, 0x49, 0x64, 0x52, 0x02, 0x69, 0x64, - 0x12, 0x3f, 0x0a, 0x03, 0x63, 0x6d, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2d, 0x2e, - 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4e, 0x53, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x2e, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x2e, 0x56, 0x45, 0x52, 0x53, 0x49, 0x4f, 0x4e, 0x5f, 0x43, 0x4d, 0x44, 0x52, 0x03, 0x63, 0x6d, - 0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x6d, 0x61, 0x78, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x6d, 0x61, 0x78, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, - 0x6e, 0x12, 0x20, 0x0a, 0x0b, 0x67, 0x72, 0x61, 0x62, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, - 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x67, 0x72, 0x61, 0x62, 0x76, 0x65, 0x72, 0x73, - 0x69, 0x6f, 0x6e, 0x22, 0x38, 0x0a, 0x0b, 0x56, 0x45, 0x52, 0x53, 0x49, 0x4f, 0x4e, 0x5f, 0x43, - 0x4d, 0x44, 0x12, 0x0a, 0x0a, 0x06, 0x43, 0x52, 0x45, 0x41, 0x54, 0x45, 0x10, 0x00, 0x12, 0x09, - 0x0a, 0x05, 0x50, 0x55, 0x52, 0x47, 0x45, 0x10, 0x01, 0x12, 0x08, 0x0a, 0x04, 0x4c, 0x49, 0x53, - 0x54, 0x10, 0x02, 0x12, 0x08, 0x0a, 0x04, 0x47, 0x52, 0x41, 0x42, 0x10, 0x03, 0x1a, 0xd4, 0x03, - 0x0a, 0x0e, 0x52, 0x65, 0x63, 0x79, 0x63, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, - 0x65, 0x79, 0x12, 0x3f, 0x0a, 0x03, 0x63, 0x6d, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, - 0x2d, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4e, 0x53, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x2e, 0x52, 0x65, 0x63, 0x79, 0x63, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x2e, 0x52, 0x45, 0x43, 0x59, 0x43, 0x4c, 0x45, 0x5f, 0x43, 0x4d, 0x44, 0x52, 0x03, - 0x63, 0x6d, 0x64, 0x12, 0x50, 0x0a, 0x0b, 0x72, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x66, 0x6c, - 0x61, 0x67, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, - 0x70, 0x63, 0x2e, 0x4e, 0x53, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x52, 0x65, 0x63, - 0x79, 0x63, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x52, 0x65, 0x73, 0x74, - 0x6f, 0x72, 0x65, 0x46, 0x6c, 0x61, 0x67, 0x73, 0x52, 0x0b, 0x72, 0x65, 0x73, 0x74, 0x6f, 0x72, - 0x65, 0x66, 0x6c, 0x61, 0x67, 0x12, 0x49, 0x0a, 0x09, 0x70, 0x75, 0x72, 0x67, 0x65, 0x64, 0x61, - 0x74, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, - 0x70, 0x63, 0x2e, 0x4e, 0x53, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x52, 0x65, 0x63, - 0x79, 0x63, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x50, 0x75, 0x72, 0x67, - 0x65, 0x44, 0x61, 0x74, 0x65, 0x52, 0x09, 0x70, 0x75, 0x72, 0x67, 0x65, 0x64, 0x61, 0x74, 0x65, - 0x1a, 0x58, 0x0a, 0x0c, 0x52, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x46, 0x6c, 0x61, 0x67, 0x73, - 0x12, 0x14, 0x0a, 0x05, 0x66, 0x6f, 0x72, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, - 0x05, 0x66, 0x6f, 0x72, 0x63, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x6d, 0x6b, 0x70, 0x61, 0x74, 0x68, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x6d, 0x6b, 0x70, 0x61, 0x74, 0x68, 0x12, 0x1a, - 0x0a, 0x08, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, - 0x52, 0x08, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x1a, 0x47, 0x0a, 0x09, 0x50, 0x75, - 0x72, 0x67, 0x65, 0x44, 0x61, 0x74, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x79, 0x65, 0x61, 0x72, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x79, 0x65, 0x61, 0x72, 0x12, 0x14, 0x0a, 0x05, 0x6d, - 0x6f, 0x6e, 0x74, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x6d, 0x6f, 0x6e, 0x74, - 0x68, 0x12, 0x10, 0x0a, 0x03, 0x64, 0x61, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, - 0x64, 0x61, 0x79, 0x22, 0x2f, 0x0a, 0x0b, 0x52, 0x45, 0x43, 0x59, 0x43, 0x4c, 0x45, 0x5f, 0x43, - 0x4d, 0x44, 0x12, 0x0b, 0x0a, 0x07, 0x52, 0x45, 0x53, 0x54, 0x4f, 0x52, 0x45, 0x10, 0x00, 0x12, - 0x09, 0x0a, 0x05, 0x50, 0x55, 0x52, 0x47, 0x45, 0x10, 0x01, 0x12, 0x08, 0x0a, 0x04, 0x4c, 0x49, - 0x53, 0x54, 0x10, 0x02, 0x1a, 0x8d, 0x02, 0x0a, 0x0f, 0x53, 0x65, 0x74, 0x58, 0x41, 0x74, 0x74, - 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4d, - 0x44, 0x49, 0x64, 0x52, 0x02, 0x69, 0x64, 0x12, 0x46, 0x0a, 0x06, 0x78, 0x61, 0x74, 0x74, 0x72, - 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, + 0x2e, 0x53, 0x79, 0x6d, 0x6c, 0x69, 0x6e, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, + 0x00, 0x52, 0x07, 0x73, 0x79, 0x6d, 0x6c, 0x69, 0x6e, 0x6b, 0x12, 0x3d, 0x0a, 0x07, 0x76, 0x65, + 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x1c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x65, 0x6f, + 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4e, 0x53, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, + 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x00, + 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x3d, 0x0a, 0x07, 0x72, 0x65, 0x63, + 0x79, 0x63, 0x6c, 0x65, 0x18, 0x1d, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x65, 0x6f, 0x73, + 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4e, 0x53, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x52, + 0x65, 0x63, 0x79, 0x63, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x00, 0x52, + 0x07, 0x72, 0x65, 0x63, 0x79, 0x63, 0x6c, 0x65, 0x12, 0x3a, 0x0a, 0x05, 0x78, 0x61, 0x74, 0x74, + 0x72, 0x18, 0x1e, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4e, 0x53, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x53, 0x65, 0x74, 0x58, - 0x41, 0x74, 0x74, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x58, 0x61, 0x74, 0x74, - 0x72, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, 0x78, 0x61, 0x74, 0x74, 0x72, 0x73, 0x12, - 0x1c, 0x0a, 0x09, 0x72, 0x65, 0x63, 0x75, 0x72, 0x73, 0x69, 0x76, 0x65, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x08, 0x52, 0x09, 0x72, 0x65, 0x63, 0x75, 0x72, 0x73, 0x69, 0x76, 0x65, 0x12, 0x22, 0x0a, - 0x0c, 0x6b, 0x65, 0x79, 0x73, 0x74, 0x6f, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x18, 0x04, 0x20, - 0x03, 0x28, 0x09, 0x52, 0x0c, 0x6b, 0x65, 0x79, 0x73, 0x74, 0x6f, 0x64, 0x65, 0x6c, 0x65, 0x74, - 0x65, 0x12, 0x16, 0x0a, 0x06, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, - 0x08, 0x52, 0x06, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x1a, 0x39, 0x0a, 0x0b, 0x58, 0x61, 0x74, - 0x74, 0x72, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, - 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x54, 0x0a, 0x0c, 0x43, 0x68, 0x6f, 0x77, 0x6e, 0x52, 0x65, 0x71, + 0x41, 0x74, 0x74, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x00, 0x52, 0x05, 0x78, + 0x61, 0x74, 0x74, 0x72, 0x12, 0x37, 0x0a, 0x05, 0x63, 0x68, 0x6f, 0x77, 0x6e, 0x18, 0x1f, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4e, 0x53, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x43, 0x68, 0x6f, 0x77, 0x6e, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x48, 0x00, 0x52, 0x05, 0x63, 0x68, 0x6f, 0x77, 0x6e, 0x12, 0x37, 0x0a, + 0x05, 0x63, 0x68, 0x6d, 0x6f, 0x64, 0x18, 0x20, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x65, + 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4e, 0x53, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x2e, 0x43, 0x68, 0x6d, 0x6f, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x00, 0x52, + 0x05, 0x63, 0x68, 0x6d, 0x6f, 0x64, 0x12, 0x31, 0x0a, 0x03, 0x61, 0x63, 0x6c, 0x18, 0x21, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4e, 0x53, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x41, 0x63, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x48, 0x00, 0x52, 0x03, 0x61, 0x63, 0x6c, 0x12, 0x37, 0x0a, 0x05, 0x74, 0x6f, 0x6b, + 0x65, 0x6e, 0x18, 0x22, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, + 0x70, 0x63, 0x2e, 0x4e, 0x53, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x54, 0x6f, 0x6b, + 0x65, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x00, 0x52, 0x05, 0x74, 0x6f, 0x6b, + 0x65, 0x6e, 0x12, 0x37, 0x0a, 0x05, 0x71, 0x75, 0x6f, 0x74, 0x61, 0x18, 0x23, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x1f, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4e, 0x53, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x51, 0x75, 0x6f, 0x74, 0x61, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x48, 0x00, 0x52, 0x05, 0x71, 0x75, 0x6f, 0x74, 0x61, 0x12, 0x37, 0x0a, 0x05, 0x73, + 0x68, 0x61, 0x72, 0x65, 0x18, 0x24, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x65, 0x6f, 0x73, + 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4e, 0x53, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x53, + 0x68, 0x61, 0x72, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x00, 0x52, 0x05, 0x73, + 0x68, 0x61, 0x72, 0x65, 0x1a, 0x5f, 0x0a, 0x0c, 0x4d, 0x6b, 0x64, 0x69, 0x72, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x0d, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4d, 0x44, 0x49, 0x64, 0x52, + 0x02, 0x69, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x72, 0x65, 0x63, 0x75, 0x72, 0x73, 0x69, 0x76, 0x65, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x72, 0x65, 0x63, 0x75, 0x72, 0x73, 0x69, 0x76, + 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6d, 0x6f, 0x64, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, + 0x04, 0x6d, 0x6f, 0x64, 0x65, 0x1a, 0x2d, 0x0a, 0x0c, 0x52, 0x6d, 0x64, 0x69, 0x72, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x0d, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4d, 0x44, 0x49, 0x64, + 0x52, 0x02, 0x69, 0x64, 0x1a, 0x2d, 0x0a, 0x0c, 0x54, 0x6f, 0x75, 0x63, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4d, 0x44, 0x49, 0x64, 0x52, - 0x02, 0x69, 0x64, 0x12, 0x25, 0x0a, 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x52, 0x6f, 0x6c, - 0x65, 0x49, 0x64, 0x52, 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x1a, 0x41, 0x0a, 0x0c, 0x43, 0x68, - 0x6d, 0x6f, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x02, 0x69, 0x64, + 0x02, 0x69, 0x64, 0x1a, 0x4c, 0x0a, 0x0d, 0x55, 0x6e, 0x6c, 0x69, 0x6e, 0x6b, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x0d, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4d, 0x44, 0x49, 0x64, 0x52, + 0x02, 0x69, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x6e, 0x6f, 0x72, 0x65, 0x63, 0x79, 0x63, 0x6c, 0x65, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x6e, 0x6f, 0x72, 0x65, 0x63, 0x79, 0x63, 0x6c, + 0x65, 0x1a, 0x66, 0x0a, 0x09, 0x52, 0x6d, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, + 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x65, 0x6f, 0x73, + 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4d, 0x44, 0x49, 0x64, 0x52, 0x02, 0x69, 0x64, 0x12, 0x1c, 0x0a, + 0x09, 0x72, 0x65, 0x63, 0x75, 0x72, 0x73, 0x69, 0x76, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, + 0x52, 0x09, 0x72, 0x65, 0x63, 0x75, 0x72, 0x73, 0x69, 0x76, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x6e, + 0x6f, 0x72, 0x65, 0x63, 0x79, 0x63, 0x6c, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, + 0x6e, 0x6f, 0x72, 0x65, 0x63, 0x79, 0x63, 0x6c, 0x65, 0x1a, 0x46, 0x0a, 0x0d, 0x52, 0x65, 0x6e, + 0x61, 0x6d, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, - 0x2e, 0x4d, 0x44, 0x49, 0x64, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6d, 0x6f, 0x64, - 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x04, 0x6d, 0x6f, 0x64, 0x65, 0x1a, 0xc8, 0x02, - 0x0a, 0x0a, 0x41, 0x63, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x02, - 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, - 0x70, 0x63, 0x2e, 0x4d, 0x44, 0x49, 0x64, 0x52, 0x02, 0x69, 0x64, 0x12, 0x3b, 0x0a, 0x03, 0x63, - 0x6d, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x29, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, - 0x70, 0x63, 0x2e, 0x4e, 0x53, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x41, 0x63, 0x6c, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x41, 0x43, 0x4c, 0x5f, 0x43, 0x4f, 0x4d, 0x4d, - 0x41, 0x4e, 0x44, 0x52, 0x03, 0x63, 0x6d, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x72, 0x65, 0x63, 0x75, - 0x72, 0x73, 0x69, 0x76, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x72, 0x65, 0x63, - 0x75, 0x72, 0x73, 0x69, 0x76, 0x65, 0x12, 0x3a, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x04, - 0x20, 0x01, 0x28, 0x0e, 0x32, 0x26, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4e, - 0x53, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x41, 0x63, 0x6c, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x2e, 0x41, 0x43, 0x4c, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x52, 0x04, 0x74, 0x79, - 0x70, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x72, 0x75, 0x6c, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x04, 0x72, 0x75, 0x6c, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, - 0x6f, 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x08, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, - 0x6f, 0x6e, 0x22, 0x2d, 0x0a, 0x0b, 0x41, 0x43, 0x4c, 0x5f, 0x43, 0x4f, 0x4d, 0x4d, 0x41, 0x4e, - 0x44, 0x12, 0x08, 0x0a, 0x04, 0x4e, 0x4f, 0x4e, 0x45, 0x10, 0x00, 0x12, 0x0a, 0x0a, 0x06, 0x4d, - 0x4f, 0x44, 0x49, 0x46, 0x59, 0x10, 0x01, 0x12, 0x08, 0x0a, 0x04, 0x4c, 0x49, 0x53, 0x54, 0x10, - 0x02, 0x22, 0x25, 0x0a, 0x08, 0x41, 0x43, 0x4c, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x12, 0x0c, 0x0a, - 0x08, 0x55, 0x53, 0x45, 0x52, 0x5f, 0x41, 0x43, 0x4c, 0x10, 0x00, 0x12, 0x0b, 0x0a, 0x07, 0x53, - 0x59, 0x53, 0x5f, 0x41, 0x43, 0x4c, 0x10, 0x01, 0x1a, 0x39, 0x0a, 0x0c, 0x54, 0x6f, 0x6b, 0x65, - 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x29, 0x0a, 0x05, 0x74, 0x6f, 0x6b, 0x65, - 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, - 0x63, 0x2e, 0x53, 0x68, 0x61, 0x72, 0x65, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x05, 0x74, 0x6f, - 0x6b, 0x65, 0x6e, 0x1a, 0xc8, 0x01, 0x0a, 0x0c, 0x51, 0x75, 0x6f, 0x74, 0x61, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x61, 0x74, 0x68, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0c, 0x52, 0x04, 0x70, 0x61, 0x74, 0x68, 0x12, 0x1f, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x52, - 0x6f, 0x6c, 0x65, 0x49, 0x64, 0x52, 0x02, 0x69, 0x64, 0x12, 0x20, 0x0a, 0x02, 0x6f, 0x70, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x10, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, - 0x51, 0x55, 0x4f, 0x54, 0x41, 0x4f, 0x50, 0x52, 0x02, 0x6f, 0x70, 0x12, 0x1a, 0x0a, 0x08, 0x6d, - 0x61, 0x78, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x6d, - 0x61, 0x78, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x6d, 0x61, 0x78, 0x62, 0x79, - 0x74, 0x65, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x6d, 0x61, 0x78, 0x62, 0x79, - 0x74, 0x65, 0x73, 0x12, 0x29, 0x0a, 0x05, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x18, 0x06, 0x20, 0x01, - 0x28, 0x0e, 0x32, 0x13, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x51, 0x55, 0x4f, - 0x54, 0x41, 0x45, 0x4e, 0x54, 0x52, 0x59, 0x52, 0x05, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x1a, 0xd2, - 0x04, 0x0a, 0x0c, 0x53, 0x68, 0x61, 0x72, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, - 0x39, 0x0a, 0x02, 0x6c, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x65, 0x6f, + 0x2e, 0x4d, 0x44, 0x49, 0x64, 0x52, 0x02, 0x69, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x74, 0x61, 0x72, + 0x67, 0x65, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x06, 0x74, 0x61, 0x72, 0x67, 0x65, + 0x74, 0x1a, 0x47, 0x0a, 0x0e, 0x53, 0x79, 0x6d, 0x6c, 0x69, 0x6e, 0x6b, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x0d, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4d, 0x44, 0x49, 0x64, 0x52, 0x02, + 0x69, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x0c, 0x52, 0x06, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x1a, 0xec, 0x01, 0x0a, 0x0e, 0x56, + 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, + 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x65, 0x6f, 0x73, 0x2e, + 0x72, 0x70, 0x63, 0x2e, 0x4d, 0x44, 0x49, 0x64, 0x52, 0x02, 0x69, 0x64, 0x12, 0x3f, 0x0a, 0x03, + 0x63, 0x6d, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2d, 0x2e, 0x65, 0x6f, 0x73, 0x2e, + 0x72, 0x70, 0x63, 0x2e, 0x4e, 0x53, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x56, 0x65, + 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x56, 0x45, 0x52, + 0x53, 0x49, 0x4f, 0x4e, 0x5f, 0x43, 0x4d, 0x44, 0x52, 0x03, 0x63, 0x6d, 0x64, 0x12, 0x1e, 0x0a, + 0x0a, 0x6d, 0x61, 0x78, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x05, 0x52, 0x0a, 0x6d, 0x61, 0x78, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x20, 0x0a, + 0x0b, 0x67, 0x72, 0x61, 0x62, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x0b, 0x67, 0x72, 0x61, 0x62, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x22, + 0x38, 0x0a, 0x0b, 0x56, 0x45, 0x52, 0x53, 0x49, 0x4f, 0x4e, 0x5f, 0x43, 0x4d, 0x44, 0x12, 0x0a, + 0x0a, 0x06, 0x43, 0x52, 0x45, 0x41, 0x54, 0x45, 0x10, 0x00, 0x12, 0x09, 0x0a, 0x05, 0x50, 0x55, + 0x52, 0x47, 0x45, 0x10, 0x01, 0x12, 0x08, 0x0a, 0x04, 0x4c, 0x49, 0x53, 0x54, 0x10, 0x02, 0x12, + 0x08, 0x0a, 0x04, 0x47, 0x52, 0x41, 0x42, 0x10, 0x03, 0x1a, 0xd4, 0x03, 0x0a, 0x0e, 0x52, 0x65, + 0x63, 0x79, 0x63, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x10, 0x0a, 0x03, + 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x3f, + 0x0a, 0x03, 0x63, 0x6d, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2d, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4e, 0x53, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, - 0x53, 0x68, 0x61, 0x72, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x4c, 0x73, 0x53, - 0x68, 0x61, 0x72, 0x65, 0x48, 0x00, 0x52, 0x02, 0x6c, 0x73, 0x12, 0x3e, 0x0a, 0x02, 0x6f, 0x70, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, - 0x2e, 0x4e, 0x53, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x53, 0x68, 0x61, 0x72, 0x65, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x65, 0x53, - 0x68, 0x61, 0x72, 0x65, 0x48, 0x00, 0x52, 0x02, 0x6f, 0x70, 0x1a, 0xb6, 0x01, 0x0a, 0x07, 0x4c, - 0x73, 0x53, 0x68, 0x61, 0x72, 0x65, 0x12, 0x4f, 0x0a, 0x09, 0x6f, 0x75, 0x74, 0x66, 0x6f, 0x72, - 0x6d, 0x61, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x31, 0x2e, 0x65, 0x6f, 0x73, 0x2e, - 0x72, 0x70, 0x63, 0x2e, 0x4e, 0x53, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x53, 0x68, - 0x61, 0x72, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x4c, 0x73, 0x53, 0x68, 0x61, - 0x72, 0x65, 0x2e, 0x4f, 0x75, 0x74, 0x46, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x52, 0x09, 0x6f, 0x75, - 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x73, 0x65, 0x6c, 0x65, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x65, 0x6c, 0x65, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x3c, 0x0a, 0x09, 0x4f, 0x75, 0x74, 0x46, 0x6f, 0x72, 0x6d, - 0x61, 0x74, 0x12, 0x08, 0x0a, 0x04, 0x4e, 0x4f, 0x4e, 0x45, 0x10, 0x00, 0x12, 0x0e, 0x0a, 0x0a, - 0x4d, 0x4f, 0x4e, 0x49, 0x54, 0x4f, 0x52, 0x49, 0x4e, 0x47, 0x10, 0x01, 0x12, 0x0b, 0x0a, 0x07, - 0x4c, 0x49, 0x53, 0x54, 0x49, 0x4e, 0x47, 0x10, 0x02, 0x12, 0x08, 0x0a, 0x04, 0x4a, 0x53, 0x4f, - 0x4e, 0x10, 0x03, 0x1a, 0x83, 0x02, 0x0a, 0x0c, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x65, 0x53, - 0x68, 0x61, 0x72, 0x65, 0x12, 0x3f, 0x0a, 0x02, 0x6f, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, - 0x32, 0x2f, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4e, 0x53, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x2e, 0x53, 0x68, 0x61, 0x72, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x2e, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x65, 0x53, 0x68, 0x61, 0x72, 0x65, 0x2e, 0x4f, - 0x70, 0x52, 0x02, 0x6f, 0x70, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x68, 0x61, 0x72, 0x65, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x73, 0x68, 0x61, 0x72, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x61, - 0x63, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x61, 0x63, 0x6c, 0x12, 0x12, 0x0a, - 0x04, 0x70, 0x61, 0x74, 0x68, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x70, 0x61, 0x74, - 0x68, 0x12, 0x12, 0x0a, 0x04, 0x75, 0x73, 0x65, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x04, 0x75, 0x73, 0x65, 0x72, 0x12, 0x14, 0x0a, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x06, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x22, 0x4c, 0x0a, 0x02, 0x4f, - 0x70, 0x12, 0x0a, 0x0a, 0x06, 0x43, 0x52, 0x45, 0x41, 0x54, 0x45, 0x10, 0x00, 0x12, 0x0a, 0x0a, - 0x06, 0x52, 0x45, 0x4d, 0x4f, 0x56, 0x45, 0x10, 0x01, 0x12, 0x09, 0x0a, 0x05, 0x53, 0x48, 0x41, - 0x52, 0x45, 0x10, 0x02, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x4e, 0x53, 0x48, 0x41, 0x52, 0x45, 0x10, - 0x03, 0x12, 0x0a, 0x0a, 0x06, 0x41, 0x43, 0x43, 0x45, 0x53, 0x53, 0x10, 0x04, 0x12, 0x0a, 0x0a, - 0x06, 0x4d, 0x4f, 0x44, 0x49, 0x46, 0x59, 0x10, 0x05, 0x42, 0x08, 0x0a, 0x06, 0x73, 0x75, 0x62, - 0x63, 0x6d, 0x64, 0x42, 0x09, 0x0a, 0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x22, 0xa4, - 0x0c, 0x0a, 0x0a, 0x4e, 0x53, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x37, 0x0a, - 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x65, - 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4e, 0x53, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x2e, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, - 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x12, 0x3d, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, - 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, - 0x63, 0x2e, 0x4e, 0x53, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x56, 0x65, 0x72, - 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x07, 0x76, 0x65, - 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x3d, 0x0a, 0x07, 0x72, 0x65, 0x63, 0x79, 0x63, 0x6c, 0x65, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, - 0x2e, 0x4e, 0x53, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x52, 0x65, 0x63, 0x79, - 0x63, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x07, 0x72, 0x65, 0x63, - 0x79, 0x63, 0x6c, 0x65, 0x12, 0x31, 0x0a, 0x03, 0x61, 0x63, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x1f, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4e, 0x53, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x41, 0x63, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x52, 0x03, 0x61, 0x63, 0x6c, 0x12, 0x37, 0x0a, 0x05, 0x71, 0x75, 0x6f, 0x74, 0x61, - 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, - 0x2e, 0x4e, 0x53, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x51, 0x75, 0x6f, 0x74, - 0x61, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x05, 0x71, 0x75, 0x6f, 0x74, 0x61, - 0x12, 0x37, 0x0a, 0x05, 0x73, 0x68, 0x61, 0x72, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x21, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4e, 0x53, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x53, 0x68, 0x61, 0x72, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x52, 0x05, 0x73, 0x68, 0x61, 0x72, 0x65, 0x1a, 0x35, 0x0a, 0x0d, 0x45, 0x72, 0x72, - 0x6f, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, + 0x52, 0x65, 0x63, 0x79, 0x63, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x52, + 0x45, 0x43, 0x59, 0x43, 0x4c, 0x45, 0x5f, 0x43, 0x4d, 0x44, 0x52, 0x03, 0x63, 0x6d, 0x64, 0x12, + 0x50, 0x0a, 0x0b, 0x72, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x66, 0x6c, 0x61, 0x67, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4e, + 0x53, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x52, 0x65, 0x63, 0x79, 0x63, 0x6c, 0x65, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x52, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x46, + 0x6c, 0x61, 0x67, 0x73, 0x52, 0x0b, 0x72, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x66, 0x6c, 0x61, + 0x67, 0x12, 0x49, 0x0a, 0x09, 0x70, 0x75, 0x72, 0x67, 0x65, 0x64, 0x61, 0x74, 0x65, 0x18, 0x04, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4e, + 0x53, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x52, 0x65, 0x63, 0x79, 0x63, 0x6c, 0x65, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x50, 0x75, 0x72, 0x67, 0x65, 0x44, 0x61, 0x74, + 0x65, 0x52, 0x09, 0x70, 0x75, 0x72, 0x67, 0x65, 0x64, 0x61, 0x74, 0x65, 0x1a, 0x58, 0x0a, 0x0c, + 0x52, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x46, 0x6c, 0x61, 0x67, 0x73, 0x12, 0x14, 0x0a, 0x05, + 0x66, 0x6f, 0x72, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x66, 0x6f, 0x72, + 0x63, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x6d, 0x6b, 0x70, 0x61, 0x74, 0x68, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x08, 0x52, 0x06, 0x6d, 0x6b, 0x70, 0x61, 0x74, 0x68, 0x12, 0x1a, 0x0a, 0x08, 0x76, 0x65, + 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x76, 0x65, + 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x1a, 0x47, 0x0a, 0x09, 0x50, 0x75, 0x72, 0x67, 0x65, 0x44, + 0x61, 0x74, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x79, 0x65, 0x61, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x05, 0x52, 0x04, 0x79, 0x65, 0x61, 0x72, 0x12, 0x14, 0x0a, 0x05, 0x6d, 0x6f, 0x6e, 0x74, 0x68, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x6d, 0x6f, 0x6e, 0x74, 0x68, 0x12, 0x10, 0x0a, + 0x03, 0x64, 0x61, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x64, 0x61, 0x79, 0x22, + 0x2f, 0x0a, 0x0b, 0x52, 0x45, 0x43, 0x59, 0x43, 0x4c, 0x45, 0x5f, 0x43, 0x4d, 0x44, 0x12, 0x0b, + 0x0a, 0x07, 0x52, 0x45, 0x53, 0x54, 0x4f, 0x52, 0x45, 0x10, 0x00, 0x12, 0x09, 0x0a, 0x05, 0x50, + 0x55, 0x52, 0x47, 0x45, 0x10, 0x01, 0x12, 0x08, 0x0a, 0x04, 0x4c, 0x49, 0x53, 0x54, 0x10, 0x02, + 0x1a, 0x8d, 0x02, 0x0a, 0x0f, 0x53, 0x65, 0x74, 0x58, 0x41, 0x74, 0x74, 0x72, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x0d, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4d, 0x44, 0x49, 0x64, 0x52, + 0x02, 0x69, 0x64, 0x12, 0x46, 0x0a, 0x06, 0x78, 0x61, 0x74, 0x74, 0x72, 0x73, 0x18, 0x02, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4e, 0x53, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x53, 0x65, 0x74, 0x58, 0x41, 0x74, 0x74, 0x72, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x58, 0x61, 0x74, 0x74, 0x72, 0x73, 0x45, 0x6e, + 0x74, 0x72, 0x79, 0x52, 0x06, 0x78, 0x61, 0x74, 0x74, 0x72, 0x73, 0x12, 0x1c, 0x0a, 0x09, 0x72, + 0x65, 0x63, 0x75, 0x72, 0x73, 0x69, 0x76, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, + 0x72, 0x65, 0x63, 0x75, 0x72, 0x73, 0x69, 0x76, 0x65, 0x12, 0x22, 0x0a, 0x0c, 0x6b, 0x65, 0x79, + 0x73, 0x74, 0x6f, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x18, 0x04, 0x20, 0x03, 0x28, 0x09, 0x52, + 0x0c, 0x6b, 0x65, 0x79, 0x73, 0x74, 0x6f, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x12, 0x16, 0x0a, + 0x06, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x63, + 0x72, 0x65, 0x61, 0x74, 0x65, 0x1a, 0x39, 0x0a, 0x0b, 0x58, 0x61, 0x74, 0x74, 0x72, 0x73, 0x45, + 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, + 0x1a, 0x54, 0x0a, 0x0c, 0x43, 0x68, 0x6f, 0x77, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x12, 0x1d, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x65, + 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4d, 0x44, 0x49, 0x64, 0x52, 0x02, 0x69, 0x64, 0x12, + 0x25, 0x0a, 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, + 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x52, 0x6f, 0x6c, 0x65, 0x49, 0x64, 0x52, + 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x1a, 0x41, 0x0a, 0x0c, 0x43, 0x68, 0x6d, 0x6f, 0x64, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4d, 0x44, 0x49, + 0x64, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6d, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x03, 0x52, 0x04, 0x6d, 0x6f, 0x64, 0x65, 0x1a, 0xc8, 0x02, 0x0a, 0x0a, 0x41, 0x63, + 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4d, + 0x44, 0x49, 0x64, 0x52, 0x02, 0x69, 0x64, 0x12, 0x3b, 0x0a, 0x03, 0x63, 0x6d, 0x64, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x0e, 0x32, 0x29, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4e, + 0x53, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x41, 0x63, 0x6c, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x2e, 0x41, 0x43, 0x4c, 0x5f, 0x43, 0x4f, 0x4d, 0x4d, 0x41, 0x4e, 0x44, 0x52, + 0x03, 0x63, 0x6d, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x72, 0x65, 0x63, 0x75, 0x72, 0x73, 0x69, 0x76, + 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x72, 0x65, 0x63, 0x75, 0x72, 0x73, 0x69, + 0x76, 0x65, 0x12, 0x3a, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, + 0x32, 0x26, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4e, 0x53, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x2e, 0x41, 0x63, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, + 0x41, 0x43, 0x4c, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x12, + 0x0a, 0x04, 0x72, 0x75, 0x6c, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x72, 0x75, + 0x6c, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x06, + 0x20, 0x01, 0x28, 0x0d, 0x52, 0x08, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x2d, + 0x0a, 0x0b, 0x41, 0x43, 0x4c, 0x5f, 0x43, 0x4f, 0x4d, 0x4d, 0x41, 0x4e, 0x44, 0x12, 0x08, 0x0a, + 0x04, 0x4e, 0x4f, 0x4e, 0x45, 0x10, 0x00, 0x12, 0x0a, 0x0a, 0x06, 0x4d, 0x4f, 0x44, 0x49, 0x46, + 0x59, 0x10, 0x01, 0x12, 0x08, 0x0a, 0x04, 0x4c, 0x49, 0x53, 0x54, 0x10, 0x02, 0x22, 0x25, 0x0a, + 0x08, 0x41, 0x43, 0x4c, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x12, 0x0c, 0x0a, 0x08, 0x55, 0x53, 0x45, + 0x52, 0x5f, 0x41, 0x43, 0x4c, 0x10, 0x00, 0x12, 0x0b, 0x0a, 0x07, 0x53, 0x59, 0x53, 0x5f, 0x41, + 0x43, 0x4c, 0x10, 0x01, 0x1a, 0x39, 0x0a, 0x0c, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x12, 0x29, 0x0a, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x53, 0x68, + 0x61, 0x72, 0x65, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x1a, + 0xc8, 0x01, 0x0a, 0x0c, 0x51, 0x75, 0x6f, 0x74, 0x61, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x12, 0x12, 0x0a, 0x04, 0x70, 0x61, 0x74, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, + 0x70, 0x61, 0x74, 0x68, 0x12, 0x1f, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x0f, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x52, 0x6f, 0x6c, 0x65, 0x49, + 0x64, 0x52, 0x02, 0x69, 0x64, 0x12, 0x20, 0x0a, 0x02, 0x6f, 0x70, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x0e, 0x32, 0x10, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x51, 0x55, 0x4f, 0x54, + 0x41, 0x4f, 0x50, 0x52, 0x02, 0x6f, 0x70, 0x12, 0x1a, 0x0a, 0x08, 0x6d, 0x61, 0x78, 0x66, 0x69, + 0x6c, 0x65, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x6d, 0x61, 0x78, 0x66, 0x69, + 0x6c, 0x65, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x6d, 0x61, 0x78, 0x62, 0x79, 0x74, 0x65, 0x73, 0x18, + 0x05, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x6d, 0x61, 0x78, 0x62, 0x79, 0x74, 0x65, 0x73, 0x12, + 0x29, 0x0a, 0x05, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x13, + 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x51, 0x55, 0x4f, 0x54, 0x41, 0x45, 0x4e, + 0x54, 0x52, 0x59, 0x52, 0x05, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x1a, 0xd2, 0x04, 0x0a, 0x0c, 0x53, + 0x68, 0x61, 0x72, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x39, 0x0a, 0x02, 0x6c, + 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, + 0x63, 0x2e, 0x4e, 0x53, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x53, 0x68, 0x61, 0x72, + 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x4c, 0x73, 0x53, 0x68, 0x61, 0x72, 0x65, + 0x48, 0x00, 0x52, 0x02, 0x6c, 0x73, 0x12, 0x3e, 0x0a, 0x02, 0x6f, 0x70, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4e, 0x53, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x53, 0x68, 0x61, 0x72, 0x65, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x2e, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x65, 0x53, 0x68, 0x61, 0x72, 0x65, + 0x48, 0x00, 0x52, 0x02, 0x6f, 0x70, 0x1a, 0xb6, 0x01, 0x0a, 0x07, 0x4c, 0x73, 0x53, 0x68, 0x61, + 0x72, 0x65, 0x12, 0x4f, 0x0a, 0x09, 0x6f, 0x75, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x31, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, + 0x4e, 0x53, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x53, 0x68, 0x61, 0x72, 0x65, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x4c, 0x73, 0x53, 0x68, 0x61, 0x72, 0x65, 0x2e, 0x4f, + 0x75, 0x74, 0x46, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x52, 0x09, 0x6f, 0x75, 0x74, 0x66, 0x6f, 0x72, + 0x6d, 0x61, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x22, 0x3c, 0x0a, 0x09, 0x4f, 0x75, 0x74, 0x46, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x12, 0x08, + 0x0a, 0x04, 0x4e, 0x4f, 0x4e, 0x45, 0x10, 0x00, 0x12, 0x0e, 0x0a, 0x0a, 0x4d, 0x4f, 0x4e, 0x49, + 0x54, 0x4f, 0x52, 0x49, 0x4e, 0x47, 0x10, 0x01, 0x12, 0x0b, 0x0a, 0x07, 0x4c, 0x49, 0x53, 0x54, + 0x49, 0x4e, 0x47, 0x10, 0x02, 0x12, 0x08, 0x0a, 0x04, 0x4a, 0x53, 0x4f, 0x4e, 0x10, 0x03, 0x1a, + 0x83, 0x02, 0x0a, 0x0c, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x65, 0x53, 0x68, 0x61, 0x72, 0x65, + 0x12, 0x3f, 0x0a, 0x02, 0x6f, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2f, 0x2e, 0x65, + 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4e, 0x53, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x2e, 0x53, 0x68, 0x61, 0x72, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x4f, 0x70, + 0x65, 0x72, 0x61, 0x74, 0x65, 0x53, 0x68, 0x61, 0x72, 0x65, 0x2e, 0x4f, 0x70, 0x52, 0x02, 0x6f, + 0x70, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x68, 0x61, 0x72, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x05, 0x73, 0x68, 0x61, 0x72, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x61, 0x63, 0x6c, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x61, 0x63, 0x6c, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x61, 0x74, + 0x68, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x70, 0x61, 0x74, 0x68, 0x12, 0x12, 0x0a, + 0x04, 0x75, 0x73, 0x65, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x75, 0x73, 0x65, + 0x72, 0x12, 0x14, 0x0a, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x22, 0x4c, 0x0a, 0x02, 0x4f, 0x70, 0x12, 0x0a, 0x0a, + 0x06, 0x43, 0x52, 0x45, 0x41, 0x54, 0x45, 0x10, 0x00, 0x12, 0x0a, 0x0a, 0x06, 0x52, 0x45, 0x4d, + 0x4f, 0x56, 0x45, 0x10, 0x01, 0x12, 0x09, 0x0a, 0x05, 0x53, 0x48, 0x41, 0x52, 0x45, 0x10, 0x02, + 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x4e, 0x53, 0x48, 0x41, 0x52, 0x45, 0x10, 0x03, 0x12, 0x0a, 0x0a, + 0x06, 0x41, 0x43, 0x43, 0x45, 0x53, 0x53, 0x10, 0x04, 0x12, 0x0a, 0x0a, 0x06, 0x4d, 0x4f, 0x44, + 0x49, 0x46, 0x59, 0x10, 0x05, 0x42, 0x08, 0x0a, 0x06, 0x73, 0x75, 0x62, 0x63, 0x6d, 0x64, 0x42, + 0x09, 0x0a, 0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x22, 0xa4, 0x0c, 0x0a, 0x0a, 0x4e, + 0x53, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x37, 0x0a, 0x05, 0x65, 0x72, 0x72, + 0x6f, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, + 0x70, 0x63, 0x2e, 0x4e, 0x53, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x45, 0x72, + 0x72, 0x6f, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x05, 0x65, 0x72, 0x72, + 0x6f, 0x72, 0x12, 0x3d, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4e, 0x53, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, + 0x6e, 0x12, 0x3d, 0x0a, 0x07, 0x72, 0x65, 0x63, 0x79, 0x63, 0x6c, 0x65, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4e, 0x53, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x52, 0x65, 0x63, 0x79, 0x63, 0x6c, 0x65, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x07, 0x72, 0x65, 0x63, 0x79, 0x63, 0x6c, 0x65, + 0x12, 0x31, 0x0a, 0x03, 0x61, 0x63, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, + 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4e, 0x53, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x2e, 0x41, 0x63, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x03, + 0x61, 0x63, 0x6c, 0x12, 0x37, 0x0a, 0x05, 0x71, 0x75, 0x6f, 0x74, 0x61, 0x18, 0x05, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4e, 0x53, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x51, 0x75, 0x6f, 0x74, 0x61, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x05, 0x71, 0x75, 0x6f, 0x74, 0x61, 0x12, 0x37, 0x0a, 0x05, + 0x73, 0x68, 0x61, 0x72, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x65, 0x6f, + 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4e, 0x53, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x2e, 0x53, 0x68, 0x61, 0x72, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x05, + 0x73, 0x68, 0x61, 0x72, 0x65, 0x1a, 0x35, 0x0a, 0x0d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x03, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x6d, 0x73, + 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6d, 0x73, 0x67, 0x1a, 0xd7, 0x01, 0x0a, + 0x0f, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x04, + 0x63, 0x6f, 0x64, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x6d, 0x73, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x03, 0x6d, 0x73, 0x67, 0x12, 0x4b, 0x0a, 0x08, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, + 0x6e, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, + 0x70, 0x63, 0x2e, 0x4e, 0x53, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x56, 0x65, + 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x56, 0x65, + 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x08, 0x76, 0x65, 0x72, 0x73, 0x69, + 0x6f, 0x6e, 0x73, 0x1a, 0x51, 0x0a, 0x0b, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x6e, + 0x66, 0x6f, 0x12, 0x1d, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, + 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4d, 0x44, 0x49, 0x64, 0x52, 0x02, 0x69, + 0x64, 0x12, 0x23, 0x0a, 0x05, 0x6d, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x0d, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x52, + 0x05, 0x6d, 0x74, 0x69, 0x6d, 0x65, 0x1a, 0x9b, 0x03, 0x0a, 0x0f, 0x52, 0x65, 0x63, 0x79, 0x63, + 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x6d, 0x73, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6d, 0x73, 0x67, - 0x1a, 0xd7, 0x01, 0x0a, 0x0f, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x03, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x6d, 0x73, 0x67, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6d, 0x73, 0x67, 0x12, 0x4b, 0x0a, 0x08, 0x76, 0x65, - 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x65, - 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4e, 0x53, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x2e, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x2e, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x08, 0x76, - 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x1a, 0x51, 0x0a, 0x0b, 0x56, 0x65, 0x72, 0x73, 0x69, - 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x1d, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4d, 0x44, 0x49, - 0x64, 0x52, 0x02, 0x69, 0x64, 0x12, 0x23, 0x0a, 0x05, 0x6d, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x54, - 0x69, 0x6d, 0x65, 0x52, 0x05, 0x6d, 0x74, 0x69, 0x6d, 0x65, 0x1a, 0x9b, 0x03, 0x0a, 0x0f, 0x52, - 0x65, 0x63, 0x79, 0x63, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x12, + 0x12, 0x4b, 0x0a, 0x08, 0x72, 0x65, 0x63, 0x79, 0x63, 0x6c, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4e, 0x53, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x52, 0x65, 0x63, 0x79, 0x63, 0x6c, 0x65, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x52, 0x65, 0x63, 0x79, 0x63, 0x6c, 0x65, 0x49, + 0x6e, 0x66, 0x6f, 0x52, 0x08, 0x72, 0x65, 0x63, 0x79, 0x63, 0x6c, 0x65, 0x73, 0x1a, 0x94, 0x02, + 0x0a, 0x0b, 0x52, 0x65, 0x63, 0x79, 0x63, 0x6c, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x1d, 0x0a, + 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x65, 0x6f, 0x73, 0x2e, + 0x72, 0x70, 0x63, 0x2e, 0x4d, 0x44, 0x49, 0x64, 0x52, 0x02, 0x69, 0x64, 0x12, 0x25, 0x0a, 0x05, + 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x65, 0x6f, + 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x52, 0x6f, 0x6c, 0x65, 0x49, 0x64, 0x52, 0x05, 0x6f, 0x77, + 0x6e, 0x65, 0x72, 0x12, 0x23, 0x0a, 0x05, 0x64, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x54, 0x69, 0x6d, + 0x65, 0x52, 0x05, 0x64, 0x74, 0x69, 0x6d, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x73, 0x69, 0x7a, 0x65, + 0x18, 0x04, 0x20, 0x01, 0x28, 0x04, 0x52, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x12, 0x50, 0x0a, 0x04, + 0x74, 0x79, 0x70, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x3c, 0x2e, 0x65, 0x6f, 0x73, + 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4e, 0x53, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, + 0x52, 0x65, 0x63, 0x79, 0x63, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, + 0x52, 0x65, 0x63, 0x79, 0x63, 0x6c, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x2e, 0x44, 0x45, 0x4c, 0x45, + 0x54, 0x49, 0x4f, 0x4e, 0x54, 0x59, 0x50, 0x45, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x10, + 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, + 0x22, 0x22, 0x0a, 0x0c, 0x44, 0x45, 0x4c, 0x45, 0x54, 0x49, 0x4f, 0x4e, 0x54, 0x59, 0x50, 0x45, + 0x12, 0x08, 0x0a, 0x04, 0x46, 0x49, 0x4c, 0x45, 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, 0x54, 0x52, + 0x45, 0x45, 0x10, 0x01, 0x1a, 0x47, 0x0a, 0x0b, 0x41, 0x63, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x03, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x6d, 0x73, 0x67, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6d, 0x73, 0x67, 0x12, 0x12, 0x0a, 0x04, 0x72, 0x75, 0x6c, + 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x72, 0x75, 0x6c, 0x65, 0x1a, 0x68, 0x0a, + 0x0d, 0x51, 0x75, 0x6f, 0x74, 0x61, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x6d, 0x73, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x03, 0x6d, 0x73, 0x67, 0x12, 0x4b, 0x0a, 0x08, 0x72, 0x65, 0x63, 0x79, 0x63, 0x6c, 0x65, 0x73, - 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, - 0x2e, 0x4e, 0x53, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x52, 0x65, 0x63, 0x79, - 0x63, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x52, 0x65, 0x63, 0x79, - 0x63, 0x6c, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x08, 0x72, 0x65, 0x63, 0x79, 0x63, 0x6c, 0x65, - 0x73, 0x1a, 0x94, 0x02, 0x0a, 0x0b, 0x52, 0x65, 0x63, 0x79, 0x63, 0x6c, 0x65, 0x49, 0x6e, 0x66, - 0x6f, 0x12, 0x1d, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, - 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4d, 0x44, 0x49, 0x64, 0x52, 0x02, 0x69, 0x64, - 0x12, 0x25, 0x0a, 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x0f, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x52, 0x6f, 0x6c, 0x65, 0x49, 0x64, - 0x52, 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x12, 0x23, 0x0a, 0x05, 0x64, 0x74, 0x69, 0x6d, 0x65, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, - 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x52, 0x05, 0x64, 0x74, 0x69, 0x6d, 0x65, 0x12, 0x12, 0x0a, 0x04, - 0x73, 0x69, 0x7a, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x04, 0x52, 0x04, 0x73, 0x69, 0x7a, 0x65, - 0x12, 0x50, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x3c, - 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4e, 0x53, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x2e, 0x52, 0x65, 0x63, 0x79, 0x63, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x2e, 0x52, 0x65, 0x63, 0x79, 0x63, 0x6c, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x2e, - 0x44, 0x45, 0x4c, 0x45, 0x54, 0x49, 0x4f, 0x4e, 0x54, 0x59, 0x50, 0x45, 0x52, 0x04, 0x74, 0x79, - 0x70, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x03, 0x6b, 0x65, 0x79, 0x22, 0x22, 0x0a, 0x0c, 0x44, 0x45, 0x4c, 0x45, 0x54, 0x49, 0x4f, 0x4e, - 0x54, 0x59, 0x50, 0x45, 0x12, 0x08, 0x0a, 0x04, 0x46, 0x49, 0x4c, 0x45, 0x10, 0x00, 0x12, 0x08, - 0x0a, 0x04, 0x54, 0x52, 0x45, 0x45, 0x10, 0x01, 0x1a, 0x47, 0x0a, 0x0b, 0x41, 0x63, 0x6c, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x6d, - 0x73, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6d, 0x73, 0x67, 0x12, 0x12, 0x0a, - 0x04, 0x72, 0x75, 0x6c, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x72, 0x75, 0x6c, - 0x65, 0x1a, 0x68, 0x0a, 0x0d, 0x51, 0x75, 0x6f, 0x74, 0x61, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, - 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x6d, 0x73, 0x67, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x03, 0x6d, 0x73, 0x67, 0x12, 0x31, 0x0a, 0x09, 0x71, 0x75, 0x6f, 0x74, - 0x61, 0x6e, 0x6f, 0x64, 0x65, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x65, 0x6f, - 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x51, 0x75, 0x6f, 0x74, 0x61, 0x50, 0x72, 0x6f, 0x74, 0x6f, - 0x52, 0x09, 0x71, 0x75, 0x6f, 0x74, 0x61, 0x6e, 0x6f, 0x64, 0x65, 0x1a, 0x73, 0x0a, 0x09, 0x53, - 0x68, 0x61, 0x72, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x12, 0x0a, 0x04, - 0x72, 0x6f, 0x6f, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x72, 0x6f, 0x6f, 0x74, - 0x12, 0x12, 0x0a, 0x04, 0x72, 0x75, 0x6c, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, - 0x72, 0x75, 0x6c, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, - 0x04, 0x52, 0x03, 0x75, 0x69, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x6e, 0x73, 0x68, 0x61, 0x72, 0x65, - 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x04, 0x52, 0x07, 0x6e, 0x73, 0x68, 0x61, 0x72, 0x65, 0x64, - 0x1a, 0x3b, 0x0a, 0x0b, 0x53, 0x68, 0x61, 0x72, 0x65, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x12, - 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, - 0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x67, 0x72, 0x61, 0x6e, 0x74, 0x65, 0x64, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x67, 0x72, 0x61, 0x6e, 0x74, 0x65, 0x64, 0x1a, 0xa5, 0x01, - 0x0a, 0x0d, 0x53, 0x68, 0x61, 0x72, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, + 0x03, 0x6d, 0x73, 0x67, 0x12, 0x31, 0x0a, 0x09, 0x71, 0x75, 0x6f, 0x74, 0x61, 0x6e, 0x6f, 0x64, + 0x65, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, + 0x63, 0x2e, 0x51, 0x75, 0x6f, 0x74, 0x61, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x52, 0x09, 0x71, 0x75, + 0x6f, 0x74, 0x61, 0x6e, 0x6f, 0x64, 0x65, 0x1a, 0x73, 0x0a, 0x09, 0x53, 0x68, 0x61, 0x72, 0x65, + 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x72, 0x6f, 0x6f, 0x74, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x72, 0x6f, 0x6f, 0x74, 0x12, 0x12, 0x0a, 0x04, + 0x72, 0x75, 0x6c, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x72, 0x75, 0x6c, 0x65, + 0x12, 0x10, 0x0a, 0x03, 0x75, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x04, 0x52, 0x03, 0x75, + 0x69, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x6e, 0x73, 0x68, 0x61, 0x72, 0x65, 0x64, 0x18, 0x05, 0x20, + 0x01, 0x28, 0x04, 0x52, 0x07, 0x6e, 0x73, 0x68, 0x61, 0x72, 0x65, 0x64, 0x1a, 0x3b, 0x0a, 0x0b, + 0x53, 0x68, 0x61, 0x72, 0x65, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x6e, + 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, + 0x18, 0x0a, 0x07, 0x67, 0x72, 0x61, 0x6e, 0x74, 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, + 0x52, 0x07, 0x67, 0x72, 0x61, 0x6e, 0x74, 0x65, 0x64, 0x1a, 0xa5, 0x01, 0x0a, 0x0d, 0x53, 0x68, + 0x61, 0x72, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x63, + 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x12, + 0x10, 0x0a, 0x03, 0x6d, 0x73, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6d, 0x73, + 0x67, 0x12, 0x35, 0x0a, 0x06, 0x73, 0x68, 0x61, 0x72, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x1d, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4e, 0x53, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x53, 0x68, 0x61, 0x72, 0x65, 0x49, 0x6e, 0x66, 0x6f, + 0x52, 0x06, 0x73, 0x68, 0x61, 0x72, 0x65, 0x73, 0x12, 0x37, 0x0a, 0x06, 0x61, 0x63, 0x63, 0x65, + 0x73, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, + 0x70, 0x63, 0x2e, 0x4e, 0x53, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x53, 0x68, + 0x61, 0x72, 0x65, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x52, 0x06, 0x61, 0x63, 0x63, 0x65, 0x73, + 0x73, 0x22, 0x29, 0x0a, 0x0d, 0x4e, 0x73, 0x53, 0x74, 0x61, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x61, 0x75, 0x74, 0x68, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x75, 0x74, 0x68, 0x6b, 0x65, 0x79, 0x22, 0xab, 0x03, 0x0a, + 0x0e, 0x4e, 0x73, 0x53, 0x74, 0x61, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x04, 0x63, - 0x6f, 0x64, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x6d, 0x73, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x03, 0x6d, 0x73, 0x67, 0x12, 0x35, 0x0a, 0x06, 0x73, 0x68, 0x61, 0x72, 0x65, 0x73, 0x18, - 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, - 0x4e, 0x53, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x53, 0x68, 0x61, 0x72, 0x65, - 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x06, 0x73, 0x68, 0x61, 0x72, 0x65, 0x73, 0x12, 0x37, 0x0a, 0x06, - 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x65, - 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4e, 0x53, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x2e, 0x53, 0x68, 0x61, 0x72, 0x65, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x52, 0x06, 0x61, - 0x63, 0x63, 0x65, 0x73, 0x73, 0x22, 0x29, 0x0a, 0x0d, 0x4e, 0x73, 0x53, 0x74, 0x61, 0x74, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x61, 0x75, 0x74, 0x68, 0x6b, 0x65, - 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x75, 0x74, 0x68, 0x6b, 0x65, 0x79, - 0x22, 0xab, 0x03, 0x0a, 0x0e, 0x4e, 0x73, 0x53, 0x74, 0x61, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x03, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x65, 0x6d, 0x73, 0x67, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x65, 0x6d, 0x73, 0x67, 0x12, 0x14, 0x0a, 0x05, 0x73, - 0x74, 0x61, 0x74, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, - 0x65, 0x12, 0x16, 0x0a, 0x06, 0x6e, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, - 0x04, 0x52, 0x06, 0x6e, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x12, 0x20, 0x0a, 0x0b, 0x6e, 0x63, 0x6f, - 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0b, - 0x6e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x73, 0x12, 0x1b, 0x0a, 0x09, 0x62, - 0x6f, 0x6f, 0x74, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, - 0x62, 0x6f, 0x6f, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x63, 0x75, 0x72, 0x72, - 0x65, 0x6e, 0x74, 0x5f, 0x66, 0x69, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0a, 0x63, - 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x46, 0x69, 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x63, 0x75, 0x72, - 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x63, 0x69, 0x64, 0x18, 0x08, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0a, - 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x43, 0x69, 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x6d, 0x65, - 0x6d, 0x5f, 0x76, 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, 0x18, 0x09, 0x20, 0x01, 0x28, 0x04, 0x52, - 0x0a, 0x6d, 0x65, 0x6d, 0x56, 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, 0x12, 0x21, 0x0a, 0x0c, 0x6d, - 0x65, 0x6d, 0x5f, 0x72, 0x65, 0x73, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x18, 0x0a, 0x20, 0x01, 0x28, - 0x04, 0x52, 0x0b, 0x6d, 0x65, 0x6d, 0x52, 0x65, 0x73, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x12, 0x1b, - 0x0a, 0x09, 0x6d, 0x65, 0x6d, 0x5f, 0x73, 0x68, 0x61, 0x72, 0x65, 0x18, 0x0b, 0x20, 0x01, 0x28, - 0x04, 0x52, 0x08, 0x6d, 0x65, 0x6d, 0x53, 0x68, 0x61, 0x72, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x6d, - 0x65, 0x6d, 0x5f, 0x67, 0x72, 0x6f, 0x77, 0x74, 0x68, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x04, 0x52, - 0x09, 0x6d, 0x65, 0x6d, 0x47, 0x72, 0x6f, 0x77, 0x74, 0x68, 0x12, 0x18, 0x0a, 0x07, 0x74, 0x68, - 0x72, 0x65, 0x61, 0x64, 0x73, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x04, 0x52, 0x07, 0x74, 0x68, 0x72, - 0x65, 0x61, 0x64, 0x73, 0x12, 0x10, 0x0a, 0x03, 0x66, 0x64, 0x73, 0x18, 0x0e, 0x20, 0x01, 0x28, - 0x04, 0x52, 0x03, 0x66, 0x64, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x75, 0x70, 0x74, 0x69, 0x6d, 0x65, - 0x18, 0x0f, 0x20, 0x01, 0x28, 0x04, 0x52, 0x06, 0x75, 0x70, 0x74, 0x69, 0x6d, 0x65, 0x22, 0xba, - 0x03, 0x0a, 0x0d, 0x4d, 0x61, 0x6e, 0x69, 0x6c, 0x61, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x12, 0x3f, 0x0a, 0x0c, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, 0x74, 0x79, 0x70, 0x65, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1c, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, - 0x2e, 0x4d, 0x41, 0x4e, 0x49, 0x4c, 0x41, 0x5f, 0x52, 0x45, 0x51, 0x55, 0x45, 0x53, 0x54, 0x5f, - 0x54, 0x59, 0x50, 0x45, 0x52, 0x0b, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x54, 0x79, 0x70, - 0x65, 0x12, 0x19, 0x0a, 0x08, 0x61, 0x75, 0x74, 0x68, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x75, 0x74, 0x68, 0x4b, 0x65, 0x79, 0x12, 0x1a, 0x0a, 0x08, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x68, 0x61, 0x72, - 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x68, - 0x61, 0x72, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, - 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, - 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x19, 0x0a, 0x08, 0x73, 0x68, 0x61, - 0x72, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x73, 0x68, 0x61, - 0x72, 0x65, 0x49, 0x64, 0x12, 0x24, 0x0a, 0x0e, 0x73, 0x68, 0x61, 0x72, 0x65, 0x5f, 0x67, 0x72, - 0x6f, 0x75, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x73, 0x68, - 0x61, 0x72, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x71, 0x75, - 0x6f, 0x74, 0x61, 0x18, 0x08, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x71, 0x75, 0x6f, 0x74, 0x61, - 0x12, 0x18, 0x0a, 0x07, 0x63, 0x72, 0x65, 0x61, 0x74, 0x6f, 0x72, 0x18, 0x09, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x07, 0x63, 0x72, 0x65, 0x61, 0x74, 0x6f, 0x72, 0x12, 0x16, 0x0a, 0x06, 0x65, 0x67, - 0x72, 0x6f, 0x75, 0x70, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x65, 0x67, 0x72, 0x6f, - 0x75, 0x70, 0x12, 0x21, 0x0a, 0x0c, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x5f, 0x65, 0x67, 0x72, 0x6f, - 0x75, 0x70, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x45, - 0x67, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x68, 0x61, 0x72, 0x65, 0x5f, 0x68, - 0x6f, 0x73, 0x74, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x68, 0x61, 0x72, 0x65, - 0x48, 0x6f, 0x73, 0x74, 0x12, 0x25, 0x0a, 0x0e, 0x73, 0x68, 0x61, 0x72, 0x65, 0x5f, 0x6c, 0x6f, - 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x73, 0x68, - 0x61, 0x72, 0x65, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0xca, 0x01, 0x0a, 0x0e, - 0x4d, 0x61, 0x6e, 0x69, 0x6c, 0x61, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x10, - 0x0a, 0x03, 0x6d, 0x73, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6d, 0x73, 0x67, - 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, - 0x63, 0x6f, 0x64, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x75, 0x73, - 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x55, - 0x73, 0x65, 0x64, 0x12, 0x25, 0x0a, 0x0e, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x63, 0x61, 0x70, - 0x61, 0x63, 0x69, 0x74, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0d, 0x74, 0x6f, 0x74, - 0x61, 0x6c, 0x43, 0x61, 0x70, 0x61, 0x63, 0x69, 0x74, 0x79, 0x12, 0x26, 0x0a, 0x0f, 0x6e, 0x65, - 0x77, 0x5f, 0x73, 0x68, 0x61, 0x72, 0x65, 0x5f, 0x71, 0x75, 0x6f, 0x74, 0x61, 0x18, 0x05, 0x20, - 0x01, 0x28, 0x03, 0x52, 0x0d, 0x6e, 0x65, 0x77, 0x53, 0x68, 0x61, 0x72, 0x65, 0x51, 0x75, 0x6f, - 0x74, 0x61, 0x12, 0x24, 0x0a, 0x0e, 0x6e, 0x65, 0x77, 0x5f, 0x73, 0x68, 0x61, 0x72, 0x65, 0x5f, - 0x70, 0x61, 0x74, 0x68, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x6e, 0x65, 0x77, 0x53, - 0x68, 0x61, 0x72, 0x65, 0x50, 0x61, 0x74, 0x68, 0x2a, 0x36, 0x0a, 0x04, 0x54, 0x59, 0x50, 0x45, - 0x12, 0x08, 0x0a, 0x04, 0x46, 0x49, 0x4c, 0x45, 0x10, 0x00, 0x12, 0x0d, 0x0a, 0x09, 0x43, 0x4f, - 0x4e, 0x54, 0x41, 0x49, 0x4e, 0x45, 0x52, 0x10, 0x01, 0x12, 0x0b, 0x0a, 0x07, 0x4c, 0x49, 0x53, - 0x54, 0x49, 0x4e, 0x47, 0x10, 0x02, 0x12, 0x08, 0x0a, 0x04, 0x53, 0x54, 0x41, 0x54, 0x10, 0x03, - 0x2a, 0x2d, 0x0a, 0x09, 0x51, 0x55, 0x4f, 0x54, 0x41, 0x54, 0x59, 0x50, 0x45, 0x12, 0x08, 0x0a, - 0x04, 0x55, 0x53, 0x45, 0x52, 0x10, 0x00, 0x12, 0x09, 0x0a, 0x05, 0x47, 0x52, 0x4f, 0x55, 0x50, - 0x10, 0x02, 0x12, 0x0b, 0x0a, 0x07, 0x50, 0x52, 0x4f, 0x4a, 0x45, 0x43, 0x54, 0x10, 0x03, 0x2a, - 0x2f, 0x0a, 0x07, 0x51, 0x55, 0x4f, 0x54, 0x41, 0x4f, 0x50, 0x12, 0x07, 0x0a, 0x03, 0x47, 0x45, - 0x54, 0x10, 0x00, 0x12, 0x07, 0x0a, 0x03, 0x53, 0x45, 0x54, 0x10, 0x01, 0x12, 0x06, 0x0a, 0x02, - 0x52, 0x4d, 0x10, 0x02, 0x12, 0x0a, 0x0a, 0x06, 0x52, 0x4d, 0x4e, 0x4f, 0x44, 0x45, 0x10, 0x03, - 0x2a, 0x2d, 0x0a, 0x0a, 0x51, 0x55, 0x4f, 0x54, 0x41, 0x45, 0x4e, 0x54, 0x52, 0x59, 0x12, 0x08, - 0x0a, 0x04, 0x4e, 0x4f, 0x4e, 0x45, 0x10, 0x00, 0x12, 0x0a, 0x0a, 0x06, 0x56, 0x4f, 0x4c, 0x55, - 0x4d, 0x45, 0x10, 0x01, 0x12, 0x09, 0x0a, 0x05, 0x49, 0x4e, 0x4f, 0x44, 0x45, 0x10, 0x02, 0x2a, - 0x94, 0x01, 0x0a, 0x13, 0x4d, 0x41, 0x4e, 0x49, 0x4c, 0x41, 0x5f, 0x52, 0x45, 0x51, 0x55, 0x45, - 0x53, 0x54, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x12, 0x10, 0x0a, 0x0c, 0x43, 0x52, 0x45, 0x41, 0x54, - 0x45, 0x5f, 0x53, 0x48, 0x41, 0x52, 0x45, 0x10, 0x00, 0x12, 0x10, 0x0a, 0x0c, 0x44, 0x45, 0x4c, - 0x45, 0x54, 0x45, 0x5f, 0x53, 0x48, 0x41, 0x52, 0x45, 0x10, 0x01, 0x12, 0x10, 0x0a, 0x0c, 0x45, - 0x58, 0x54, 0x45, 0x4e, 0x44, 0x5f, 0x53, 0x48, 0x41, 0x52, 0x45, 0x10, 0x02, 0x12, 0x10, 0x0a, - 0x0c, 0x53, 0x48, 0x52, 0x49, 0x4e, 0x4b, 0x5f, 0x53, 0x48, 0x41, 0x52, 0x45, 0x10, 0x03, 0x12, - 0x13, 0x0a, 0x0f, 0x4d, 0x41, 0x4e, 0x41, 0x47, 0x45, 0x5f, 0x45, 0x58, 0x49, 0x53, 0x54, 0x49, - 0x4e, 0x47, 0x10, 0x04, 0x12, 0x0c, 0x0a, 0x08, 0x55, 0x4e, 0x4d, 0x41, 0x4e, 0x41, 0x47, 0x45, - 0x10, 0x05, 0x12, 0x12, 0x0a, 0x0e, 0x47, 0x45, 0x54, 0x5f, 0x43, 0x41, 0x50, 0x41, 0x43, 0x49, - 0x54, 0x49, 0x45, 0x53, 0x10, 0x06, 0x32, 0xeb, 0x03, 0x0a, 0x03, 0x45, 0x6f, 0x73, 0x12, 0x32, - 0x0a, 0x04, 0x50, 0x69, 0x6e, 0x67, 0x12, 0x14, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, - 0x2e, 0x50, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x12, 0x2e, 0x65, - 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x50, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x70, 0x6c, 0x79, - 0x22, 0x00, 0x12, 0x31, 0x0a, 0x02, 0x4d, 0x44, 0x12, 0x12, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, - 0x70, 0x63, 0x2e, 0x4d, 0x44, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x13, 0x2e, 0x65, - 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4d, 0x44, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x22, 0x00, 0x30, 0x01, 0x12, 0x35, 0x0a, 0x04, 0x46, 0x69, 0x6e, 0x64, 0x12, 0x14, 0x2e, - 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x46, 0x69, 0x6e, 0x64, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x13, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4d, 0x44, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x30, 0x01, 0x12, 0x3b, 0x0a, 0x06, - 0x4e, 0x73, 0x53, 0x74, 0x61, 0x74, 0x12, 0x16, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, - 0x2e, 0x4e, 0x73, 0x53, 0x74, 0x61, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x17, - 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4e, 0x73, 0x53, 0x74, 0x61, 0x74, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x4a, 0x0a, 0x0f, 0x43, 0x6f, 0x6e, - 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x49, 0x6e, 0x73, 0x65, 0x72, 0x74, 0x12, 0x1f, 0x2e, 0x65, - 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, - 0x49, 0x6e, 0x73, 0x65, 0x72, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x14, 0x2e, - 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x49, 0x6e, 0x73, 0x65, 0x72, 0x74, 0x52, 0x65, - 0x70, 0x6c, 0x79, 0x22, 0x00, 0x12, 0x40, 0x0a, 0x0a, 0x46, 0x69, 0x6c, 0x65, 0x49, 0x6e, 0x73, - 0x65, 0x72, 0x74, 0x12, 0x1a, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x46, 0x69, - 0x6c, 0x65, 0x49, 0x6e, 0x73, 0x65, 0x72, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x14, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x49, 0x6e, 0x73, 0x65, 0x72, 0x74, - 0x52, 0x65, 0x70, 0x6c, 0x79, 0x22, 0x00, 0x12, 0x31, 0x0a, 0x04, 0x45, 0x78, 0x65, 0x63, 0x12, - 0x12, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4e, 0x53, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x13, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4e, 0x53, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x48, 0x0a, 0x13, 0x4d, 0x61, - 0x6e, 0x69, 0x6c, 0x61, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x12, 0x16, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4d, 0x61, 0x6e, 0x69, - 0x6c, 0x61, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x17, 0x2e, 0x65, 0x6f, 0x73, 0x2e, - 0x72, 0x70, 0x63, 0x2e, 0x4d, 0x61, 0x6e, 0x69, 0x6c, 0x61, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x22, 0x00, 0x42, 0x55, 0x0a, 0x0f, 0x69, 0x6f, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, - 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x42, 0x08, 0x45, 0x6f, 0x73, 0x50, 0x72, 0x6f, 0x74, - 0x6f, 0x50, 0x01, 0x5a, 0x30, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, - 0x63, 0x65, 0x72, 0x6e, 0x2d, 0x65, 0x6f, 0x73, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x3b, 0x65, 0x6f, 0x73, - 0x5f, 0x67, 0x72, 0x70, 0x63, 0xa2, 0x02, 0x03, 0x45, 0x4f, 0x53, 0x62, 0x06, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x33, + 0x6f, 0x64, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x65, 0x6d, 0x73, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x04, 0x65, 0x6d, 0x73, 0x67, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x12, 0x16, 0x0a, + 0x06, 0x6e, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x04, 0x52, 0x06, 0x6e, + 0x66, 0x69, 0x6c, 0x65, 0x73, 0x12, 0x20, 0x0a, 0x0b, 0x6e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, + 0x6e, 0x65, 0x72, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0b, 0x6e, 0x63, 0x6f, 0x6e, + 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x73, 0x12, 0x1b, 0x0a, 0x09, 0x62, 0x6f, 0x6f, 0x74, 0x5f, + 0x74, 0x69, 0x6d, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x62, 0x6f, 0x6f, 0x74, + 0x54, 0x69, 0x6d, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x5f, + 0x66, 0x69, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0a, 0x63, 0x75, 0x72, 0x72, 0x65, + 0x6e, 0x74, 0x46, 0x69, 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, + 0x5f, 0x63, 0x69, 0x64, 0x18, 0x08, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0a, 0x63, 0x75, 0x72, 0x72, + 0x65, 0x6e, 0x74, 0x43, 0x69, 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x6d, 0x65, 0x6d, 0x5f, 0x76, 0x69, + 0x72, 0x74, 0x75, 0x61, 0x6c, 0x18, 0x09, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0a, 0x6d, 0x65, 0x6d, + 0x56, 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, 0x12, 0x21, 0x0a, 0x0c, 0x6d, 0x65, 0x6d, 0x5f, 0x72, + 0x65, 0x73, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0b, 0x6d, + 0x65, 0x6d, 0x52, 0x65, 0x73, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x6d, 0x65, + 0x6d, 0x5f, 0x73, 0x68, 0x61, 0x72, 0x65, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x6d, + 0x65, 0x6d, 0x53, 0x68, 0x61, 0x72, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x6d, 0x65, 0x6d, 0x5f, 0x67, + 0x72, 0x6f, 0x77, 0x74, 0x68, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x04, 0x52, 0x09, 0x6d, 0x65, 0x6d, + 0x47, 0x72, 0x6f, 0x77, 0x74, 0x68, 0x12, 0x18, 0x0a, 0x07, 0x74, 0x68, 0x72, 0x65, 0x61, 0x64, + 0x73, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x04, 0x52, 0x07, 0x74, 0x68, 0x72, 0x65, 0x61, 0x64, 0x73, + 0x12, 0x10, 0x0a, 0x03, 0x66, 0x64, 0x73, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x04, 0x52, 0x03, 0x66, + 0x64, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x75, 0x70, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x0f, 0x20, 0x01, + 0x28, 0x04, 0x52, 0x06, 0x75, 0x70, 0x74, 0x69, 0x6d, 0x65, 0x22, 0xba, 0x03, 0x0a, 0x0d, 0x4d, + 0x61, 0x6e, 0x69, 0x6c, 0x61, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x3f, 0x0a, 0x0c, + 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0e, 0x32, 0x1c, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4d, 0x41, 0x4e, + 0x49, 0x4c, 0x41, 0x5f, 0x52, 0x45, 0x51, 0x55, 0x45, 0x53, 0x54, 0x5f, 0x54, 0x59, 0x50, 0x45, + 0x52, 0x0b, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x19, 0x0a, + 0x08, 0x61, 0x75, 0x74, 0x68, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x07, 0x61, 0x75, 0x74, 0x68, 0x4b, 0x65, 0x79, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x63, 0x6f, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x63, 0x6f, 0x6c, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x68, 0x61, 0x72, 0x65, 0x5f, 0x6e, 0x61, + 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x68, 0x61, 0x72, 0x65, 0x4e, + 0x61, 0x6d, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, + 0x6f, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, + 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x19, 0x0a, 0x08, 0x73, 0x68, 0x61, 0x72, 0x65, 0x5f, 0x69, + 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x73, 0x68, 0x61, 0x72, 0x65, 0x49, 0x64, + 0x12, 0x24, 0x0a, 0x0e, 0x73, 0x68, 0x61, 0x72, 0x65, 0x5f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, + 0x69, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x73, 0x68, 0x61, 0x72, 0x65, 0x47, + 0x72, 0x6f, 0x75, 0x70, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x71, 0x75, 0x6f, 0x74, 0x61, 0x18, + 0x08, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x71, 0x75, 0x6f, 0x74, 0x61, 0x12, 0x18, 0x0a, 0x07, + 0x63, 0x72, 0x65, 0x61, 0x74, 0x6f, 0x72, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, + 0x72, 0x65, 0x61, 0x74, 0x6f, 0x72, 0x12, 0x16, 0x0a, 0x06, 0x65, 0x67, 0x72, 0x6f, 0x75, 0x70, + 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x65, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x21, + 0x0a, 0x0c, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x5f, 0x65, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x0b, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x45, 0x67, 0x72, 0x6f, 0x75, + 0x70, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x68, 0x61, 0x72, 0x65, 0x5f, 0x68, 0x6f, 0x73, 0x74, 0x18, + 0x0c, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x68, 0x61, 0x72, 0x65, 0x48, 0x6f, 0x73, 0x74, + 0x12, 0x25, 0x0a, 0x0e, 0x73, 0x68, 0x61, 0x72, 0x65, 0x5f, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x73, 0x68, 0x61, 0x72, 0x65, 0x4c, + 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0xca, 0x01, 0x0a, 0x0e, 0x4d, 0x61, 0x6e, 0x69, + 0x6c, 0x61, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x6d, 0x73, + 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6d, 0x73, 0x67, 0x12, 0x12, 0x0a, 0x04, + 0x63, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, + 0x12, 0x1d, 0x0a, 0x0a, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x75, 0x73, 0x65, 0x64, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x55, 0x73, 0x65, 0x64, 0x12, + 0x25, 0x0a, 0x0e, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x63, 0x61, 0x70, 0x61, 0x63, 0x69, 0x74, + 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0d, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x43, 0x61, + 0x70, 0x61, 0x63, 0x69, 0x74, 0x79, 0x12, 0x26, 0x0a, 0x0f, 0x6e, 0x65, 0x77, 0x5f, 0x73, 0x68, + 0x61, 0x72, 0x65, 0x5f, 0x71, 0x75, 0x6f, 0x74, 0x61, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, + 0x0d, 0x6e, 0x65, 0x77, 0x53, 0x68, 0x61, 0x72, 0x65, 0x51, 0x75, 0x6f, 0x74, 0x61, 0x12, 0x24, + 0x0a, 0x0e, 0x6e, 0x65, 0x77, 0x5f, 0x73, 0x68, 0x61, 0x72, 0x65, 0x5f, 0x70, 0x61, 0x74, 0x68, + 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x6e, 0x65, 0x77, 0x53, 0x68, 0x61, 0x72, 0x65, + 0x50, 0x61, 0x74, 0x68, 0x2a, 0x36, 0x0a, 0x04, 0x54, 0x59, 0x50, 0x45, 0x12, 0x08, 0x0a, 0x04, + 0x46, 0x49, 0x4c, 0x45, 0x10, 0x00, 0x12, 0x0d, 0x0a, 0x09, 0x43, 0x4f, 0x4e, 0x54, 0x41, 0x49, + 0x4e, 0x45, 0x52, 0x10, 0x01, 0x12, 0x0b, 0x0a, 0x07, 0x4c, 0x49, 0x53, 0x54, 0x49, 0x4e, 0x47, + 0x10, 0x02, 0x12, 0x08, 0x0a, 0x04, 0x53, 0x54, 0x41, 0x54, 0x10, 0x03, 0x2a, 0x2d, 0x0a, 0x09, + 0x51, 0x55, 0x4f, 0x54, 0x41, 0x54, 0x59, 0x50, 0x45, 0x12, 0x08, 0x0a, 0x04, 0x55, 0x53, 0x45, + 0x52, 0x10, 0x00, 0x12, 0x09, 0x0a, 0x05, 0x47, 0x52, 0x4f, 0x55, 0x50, 0x10, 0x02, 0x12, 0x0b, + 0x0a, 0x07, 0x50, 0x52, 0x4f, 0x4a, 0x45, 0x43, 0x54, 0x10, 0x03, 0x2a, 0x2f, 0x0a, 0x07, 0x51, + 0x55, 0x4f, 0x54, 0x41, 0x4f, 0x50, 0x12, 0x07, 0x0a, 0x03, 0x47, 0x45, 0x54, 0x10, 0x00, 0x12, + 0x07, 0x0a, 0x03, 0x53, 0x45, 0x54, 0x10, 0x01, 0x12, 0x06, 0x0a, 0x02, 0x52, 0x4d, 0x10, 0x02, + 0x12, 0x0a, 0x0a, 0x06, 0x52, 0x4d, 0x4e, 0x4f, 0x44, 0x45, 0x10, 0x03, 0x2a, 0x2d, 0x0a, 0x0a, + 0x51, 0x55, 0x4f, 0x54, 0x41, 0x45, 0x4e, 0x54, 0x52, 0x59, 0x12, 0x08, 0x0a, 0x04, 0x4e, 0x4f, + 0x4e, 0x45, 0x10, 0x00, 0x12, 0x0a, 0x0a, 0x06, 0x56, 0x4f, 0x4c, 0x55, 0x4d, 0x45, 0x10, 0x01, + 0x12, 0x09, 0x0a, 0x05, 0x49, 0x4e, 0x4f, 0x44, 0x45, 0x10, 0x02, 0x2a, 0x94, 0x01, 0x0a, 0x13, + 0x4d, 0x41, 0x4e, 0x49, 0x4c, 0x41, 0x5f, 0x52, 0x45, 0x51, 0x55, 0x45, 0x53, 0x54, 0x5f, 0x54, + 0x59, 0x50, 0x45, 0x12, 0x10, 0x0a, 0x0c, 0x43, 0x52, 0x45, 0x41, 0x54, 0x45, 0x5f, 0x53, 0x48, + 0x41, 0x52, 0x45, 0x10, 0x00, 0x12, 0x10, 0x0a, 0x0c, 0x44, 0x45, 0x4c, 0x45, 0x54, 0x45, 0x5f, + 0x53, 0x48, 0x41, 0x52, 0x45, 0x10, 0x01, 0x12, 0x10, 0x0a, 0x0c, 0x45, 0x58, 0x54, 0x45, 0x4e, + 0x44, 0x5f, 0x53, 0x48, 0x41, 0x52, 0x45, 0x10, 0x02, 0x12, 0x10, 0x0a, 0x0c, 0x53, 0x48, 0x52, + 0x49, 0x4e, 0x4b, 0x5f, 0x53, 0x48, 0x41, 0x52, 0x45, 0x10, 0x03, 0x12, 0x13, 0x0a, 0x0f, 0x4d, + 0x41, 0x4e, 0x41, 0x47, 0x45, 0x5f, 0x45, 0x58, 0x49, 0x53, 0x54, 0x49, 0x4e, 0x47, 0x10, 0x04, + 0x12, 0x0c, 0x0a, 0x08, 0x55, 0x4e, 0x4d, 0x41, 0x4e, 0x41, 0x47, 0x45, 0x10, 0x05, 0x12, 0x12, + 0x0a, 0x0e, 0x47, 0x45, 0x54, 0x5f, 0x43, 0x41, 0x50, 0x41, 0x43, 0x49, 0x54, 0x49, 0x45, 0x53, + 0x10, 0x06, 0x32, 0xeb, 0x03, 0x0a, 0x03, 0x45, 0x6f, 0x73, 0x12, 0x32, 0x0a, 0x04, 0x50, 0x69, + 0x6e, 0x67, 0x12, 0x14, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x50, 0x69, 0x6e, + 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x12, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, + 0x70, 0x63, 0x2e, 0x50, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x22, 0x00, 0x12, 0x31, + 0x0a, 0x02, 0x4d, 0x44, 0x12, 0x12, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4d, + 0x44, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x13, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, + 0x70, 0x63, 0x2e, 0x4d, 0x44, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x30, + 0x01, 0x12, 0x35, 0x0a, 0x04, 0x46, 0x69, 0x6e, 0x64, 0x12, 0x14, 0x2e, 0x65, 0x6f, 0x73, 0x2e, + 0x72, 0x70, 0x63, 0x2e, 0x46, 0x69, 0x6e, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x13, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4d, 0x44, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x30, 0x01, 0x12, 0x3b, 0x0a, 0x06, 0x4e, 0x73, 0x53, 0x74, + 0x61, 0x74, 0x12, 0x16, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4e, 0x73, 0x53, + 0x74, 0x61, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x17, 0x2e, 0x65, 0x6f, 0x73, + 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4e, 0x73, 0x53, 0x74, 0x61, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x4a, 0x0a, 0x0f, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, + 0x65, 0x72, 0x49, 0x6e, 0x73, 0x65, 0x72, 0x74, 0x12, 0x1f, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, + 0x70, 0x63, 0x2e, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x49, 0x6e, 0x73, 0x65, + 0x72, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x14, 0x2e, 0x65, 0x6f, 0x73, 0x2e, + 0x72, 0x70, 0x63, 0x2e, 0x49, 0x6e, 0x73, 0x65, 0x72, 0x74, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x22, + 0x00, 0x12, 0x40, 0x0a, 0x0a, 0x46, 0x69, 0x6c, 0x65, 0x49, 0x6e, 0x73, 0x65, 0x72, 0x74, 0x12, + 0x1a, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x46, 0x69, 0x6c, 0x65, 0x49, 0x6e, + 0x73, 0x65, 0x72, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x14, 0x2e, 0x65, 0x6f, + 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x49, 0x6e, 0x73, 0x65, 0x72, 0x74, 0x52, 0x65, 0x70, 0x6c, + 0x79, 0x22, 0x00, 0x12, 0x31, 0x0a, 0x04, 0x45, 0x78, 0x65, 0x63, 0x12, 0x12, 0x2e, 0x65, 0x6f, + 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4e, 0x53, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x13, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4e, 0x53, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x48, 0x0a, 0x13, 0x4d, 0x61, 0x6e, 0x69, 0x6c, 0x61, + 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x16, 0x2e, + 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4d, 0x61, 0x6e, 0x69, 0x6c, 0x61, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x17, 0x2e, 0x65, 0x6f, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, + 0x4d, 0x61, 0x6e, 0x69, 0x6c, 0x61, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, + 0x42, 0x55, 0x0a, 0x0f, 0x69, 0x6f, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x65, 0x6f, 0x73, 0x2e, + 0x72, 0x70, 0x63, 0x42, 0x08, 0x45, 0x6f, 0x73, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, + 0x30, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x65, 0x72, 0x6e, + 0x2d, 0x65, 0x6f, 0x73, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x3b, 0x65, 0x6f, 0x73, 0x5f, 0x67, 0x72, 0x70, + 0x63, 0xa2, 0x02, 0x03, 0x45, 0x4f, 0x53, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( diff --git a/pkg/eosclient/eosgrpc/eos_grpc/Rpc.proto b/pkg/eosclient/eosgrpc/eos_grpc/Rpc.proto index 93f0e0be48..97c68bdaa5 100644 --- a/pkg/eosclient/eosgrpc/eos_grpc/Rpc.proto +++ b/pkg/eosclient/eosgrpc/eos_grpc/Rpc.proto @@ -1,24 +1,25 @@ // @project The CERN Tape Archive (CTA) // @brief CTA-EOS gRPC API for CASTOR-EOS migration // @copyright Copyright 2019 CERN -// @license This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. +// @license This program is free software: you can redistribute it and/or +// modify +// it under the terms of the GNU General Public License as +// published by the Free Software Foundation, either version 3 +// of the License, or (at your option) any later version. // -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. +// This program is distributed in the hope that it will be +// useful, but WITHOUT ANY WARRANTY; without even the implied +// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR +// PURPOSE. See the GNU General Public License for more +// details. // -// You should have received a copy of the GNU General Public License -// along with this program. If not, see . - +// You should have received a copy of the GNU General Public +// License along with this program. If not, see +// . // NOTE: Compile for Go with: // protoc ./eos_grpc.proto --go_out=plugins=grpc:. - syntax = "proto3"; package eos.rpc; @@ -29,37 +30,36 @@ option java_outer_classname = "EosProto"; option objc_class_prefix = "EOS"; option go_package = "github.com/cern-eos/grpc-proto/protobuf;eos_grpc"; - service Eos { // Replies to a ping - rpc Ping (PingRequest) returns (PingReply) {} + rpc Ping(PingRequest) returns (PingReply) {} // --------------------------------------------------------------------- // NAMESPACE // --------------------------------------------------------------------- - // Replies to MD requests with a stream - rpc MD (MDRequest) returns (stream MDResponse) {} + // Replies to MD requests with a stream + rpc MD(MDRequest) returns (stream MDResponse) {} // Replies to Find requests with a stream - rpc Find (FindRequest) returns (stream MDResponse) {} + rpc Find(FindRequest) returns (stream MDResponse) {} // Replies to a NsStat operation - rpc NsStat (NsStatRequest) returns (NsStatResponse) {} + rpc NsStat(NsStatRequest) returns (NsStatResponse) {} // Replies to an insert - rpc ContainerInsert (ContainerInsertRequest) returns (InsertReply) {} - rpc FileInsert (FileInsertRequest) returns (InsertReply) {} + rpc ContainerInsert(ContainerInsertRequest) returns (InsertReply) {} + rpc FileInsert(FileInsertRequest) returns (InsertReply) {} // Replies to a NsRequest operation - rpc Exec (NSRequest) returns (NSResponse) {} + rpc Exec(NSRequest) returns (NSResponse) {} // --------------------------------------------------------------------- // OPENSTACK // --------------------------------------------------------------------- // Manila Driver - rpc ManilaServerRequest (ManilaRequest) returns (ManilaResponse) {} + rpc ManilaServerRequest(ManilaRequest) returns (ManilaResponse) {} } message PingRequest { @@ -67,9 +67,7 @@ message PingRequest { bytes message = 2; } -message PingReply { - bytes message = 1; -} +message PingReply { bytes message = 1; } // --------------------------------------------------------------------- // NAMESPACE @@ -113,12 +111,13 @@ message FileMdProto { bytes link_name = 9; Time ctime = 10; // change time Time mtime = 11; // modification time - Checksum checksum =12; + Checksum checksum = 12; repeated uint32 locations = 13; repeated uint32 unlink_locations = 14; map xattrs = 15; bytes path = 16; string etag = 17; + uint64 inode = 18; } message ContainerMdProto { @@ -136,32 +135,53 @@ message ContainerMdProto { map xattrs = 12; bytes path = 13; string etag = 14; + uint64 inode = 15; +} + +enum TYPE { + FILE = 0; + CONTAINER = 1; + LISTING = 2; + STAT = 3; +} + +enum QUOTATYPE { + USER = 0; + GROUP = 2; + PROJECT = 3; +} + +enum QUOTAOP { + GET = 0; + SET = 1; + RM = 2; + RMNODE = 3; } -enum TYPE { FILE = 0; CONTAINER = 1; LISTING = 2; STAT = 3;} - -enum QUOTATYPE { USER = 0; GROUP = 2; PROJECT = 3;} - -enum QUOTAOP { GET = 0; SET = 1; RM = 2; RMNODE = 3;} - -enum QUOTAENTRY { NONE = 0; VOLUME = 1; INODE = 2;} - -message QuotaProto { - bytes path = 1; // quota node path - string name = 2; // associated name for the given type - QUOTATYPE type = 3; // user,group,project or all quota - uint64 usedbytes = 4; // bytes used physical - uint64 usedlogicalbytes = 5; // bytes used logical - uint64 usedfiles = 6; // number of files used - uint64 maxbytes = 7; // maximum number of bytes (volume quota) - uint64 maxlogicalbytes = 8; // maximum number of logical bytes (logical volume quota) - uint64 maxfiles = 9; // maximum number of files (inode quota) - float percentageusedbytes = 10; // percentage of volume quota used from 0 to 100 +enum QUOTAENTRY { + NONE = 0; + VOLUME = 1; + INODE = 2; +} + +message QuotaProto { + bytes path = 1; // quota node path + string name = 2; // associated name for the given type + QUOTATYPE type = 3; // user,group,project or all quota + uint64 usedbytes = 4; // bytes used physical + uint64 usedlogicalbytes = 5; // bytes used logical + uint64 usedfiles = 6; // number of files used + uint64 maxbytes = 7; // maximum number of bytes (volume quota) + uint64 maxlogicalbytes = + 8; // maximum number of logical bytes (logical volume quota) + uint64 maxfiles = 9; // maximum number of files (inode quota) + float percentageusedbytes = + 10; // percentage of volume quota used from 0 to 100 float percentageusedfiles = 11; // percentag of inode quota used from 0 to 100 - string statusbytes = 12; // status string for volume quota ok,warning,exceeded - string statusfiles = 13; // status string for inode quota ok,warning,exceeded + string statusbytes = 12; // status string for volume quota ok,warning,exceeded + string statusfiles = 13; // status string for inode quota ok,warning,exceeded } - + message RoleId { uint64 uid = 1; uint64 gid = 2; @@ -222,26 +242,25 @@ message MDResponse { message FindRequest { TYPE type = 1; MDId id = 2; - RoleId role = 3; + RoleId role = 3; string authkey = 4; uint64 maxdepth = 5; MDSelection selection = 6; } message ShareAuth { - string prot = 1; - string name = 2; - string host = 3; + string prot = 1; + string name = 2; + string host = 3; } - message ShareProto { string permission = 1; - uint64 expires = 2; - string owner = 3; - string group = 4; + uint64 expires = 2; + string owner = 3; + string group = 4; uint64 generation = 5; - string path = 6; + string path = 6; bool allowtree = 7; string vtoken = 8; repeated ShareAuth origins = 9; @@ -260,14 +279,10 @@ message NSRequest { bool recursive = 2; int64 mode = 3; } - - message RmdirRequest { - MDId id = 1; - } - - message TouchRequest { - MDId id = 1; - } + + message RmdirRequest { MDId id = 1; } + + message TouchRequest { MDId id = 1; } message UnlinkRequest { MDId id = 1; @@ -292,19 +307,19 @@ message NSRequest { message VersionRequest { enum VERSION_CMD { - CREATE= 0; - PURGE = 1; - LIST = 2; - GRAB = 3; - } - MDId id = 1; - VERSION_CMD cmd = 2; - int32 maxversion = 3; - string grabversion = 4; + CREATE = 0; + PURGE = 1; + LIST = 2; + GRAB = 3; + } + MDId id = 1; + VERSION_CMD cmd = 2; + int32 maxversion = 3; + string grabversion = 4; } message RecycleRequest { - string key = 1; + string key = 1; enum RECYCLE_CMD { RESTORE = 0; PURGE = 1; @@ -338,7 +353,7 @@ message NSRequest { message ChownRequest { MDId id = 1; - RoleId owner = 2; + RoleId owner = 2; } message ChmodRequest { @@ -350,7 +365,7 @@ message NSRequest { enum ACL_COMMAND { NONE = 0; MODIFY = 1; - LIST = 2; + LIST = 2; } enum ACL_TYPE { @@ -362,40 +377,38 @@ message NSRequest { ACL_COMMAND cmd = 2; bool recursive = 3; ACL_TYPE type = 4; - string rule = 5; + string rule = 5; uint32 position = 6; } - message TokenRequest { - ShareToken token = 1; - } + message TokenRequest { ShareToken token = 1; } message QuotaRequest { bytes path = 1; RoleId id = 2; - QUOTAOP op = 3; // get or set, rm or rmnode - uint64 maxfiles = 4; // maximum number of bytes (volume quota) for setting - uint64 maxbytes = 5; // maximum number of bytes (volume quota) for setting + QUOTAOP op = 3; // get or set, rm or rmnode + uint64 maxfiles = 4; // maximum number of bytes (volume quota) for setting + uint64 maxbytes = 5; // maximum number of bytes (volume quota) for setting QUOTAENTRY entry = 6; // select volume or inode entry for deletion } message ShareRequest { message LsShare { enum OutFormat { - NONE = 0; // - MONITORING = 1; // [-m] - LISTING = 2; // [-l] - JSON = 3; // [grpc] + NONE = 0; // + MONITORING = 1; // [-m] + LISTING = 2; // [-l] + JSON = 3; // [grpc] } - OutFormat outformat = 1; // - string selection = 2; // + OutFormat outformat = 1; // + string selection = 2; // } message OperateShare { enum Op { CREATE = 0; REMOVE = 1; - SHARE = 2; + SHARE = 2; UNSHARE = 3; ACCESS = 4; MODIFY = 5; @@ -409,7 +422,7 @@ message NSRequest { } oneof subcmd { - LsShare ls = 1; + LsShare ls = 1; OperateShare op = 2; } } @@ -419,69 +432,70 @@ message NSRequest { // Actual request data object oneof command { - MkdirRequest mkdir = 21; - RmdirRequest rmdir = 22; - TouchRequest touch = 23; - UnlinkRequest unlink = 24; - RmRequest rm = 25; - RenameRequest rename = 26; - SymlinkRequest symlink = 27; - VersionRequest version = 28; - RecycleRequest recycle = 29; - SetXAttrRequest xattr = 30; - ChownRequest chown = 31; - ChmodRequest chmod = 32; - AclRequest acl = 33; - TokenRequest token = 34; - QuotaRequest quota = 35; - ShareRequest share = 36; + MkdirRequest mkdir = 21; + RmdirRequest rmdir = 22; + TouchRequest touch = 23; + UnlinkRequest unlink = 24; + RmRequest rm = 25; + RenameRequest rename = 26; + SymlinkRequest symlink = 27; + VersionRequest version = 28; + RecycleRequest recycle = 29; + SetXAttrRequest xattr = 30; + ChownRequest chown = 31; + ChmodRequest chmod = 32; + AclRequest acl = 33; + TokenRequest token = 34; + QuotaRequest quota = 35; + ShareRequest share = 36; } } - - message NSResponse { message ErrorResponse { int64 code = 1; - string msg = 2; + string msg = 2; } message VersionResponse { message VersionInfo { - MDId id = 1; - Time mtime = 2; + MDId id = 1; + Time mtime = 2; } int64 code = 1; - string msg = 2; + string msg = 2; repeated VersionInfo versions = 3; } message RecycleResponse { int64 code = 1; - string msg = 2; - + string msg = 2; + message RecycleInfo { - enum DELETIONTYPE { FILE = 0; TREE = 1; } - MDId id = 1; + enum DELETIONTYPE { + FILE = 0; + TREE = 1; + } + MDId id = 1; RoleId owner = 2; - Time dtime = 3; + Time dtime = 3; uint64 size = 4; DELETIONTYPE type = 5; string key = 6; - } - + } + repeated RecycleInfo recycles = 3; } message AclResponse { int64 code = 1; - string msg = 2; + string msg = 2; string rule = 3; } message QuotaResponse { - int64 code = 1; - string msg = 2; + int64 code = 1; + string msg = 2; repeated QuotaProto quotanode = 3; } @@ -500,22 +514,20 @@ message NSResponse { message ShareResponse { int64 code = 1; - string msg = 2; + string msg = 2; repeated ShareInfo shares = 3; repeated ShareAccess access = 4; } - ErrorResponse error = 1; - VersionResponse version = 2; - RecycleResponse recycle = 3; - AclResponse acl = 4; - QuotaResponse quota = 5; - ShareResponse share = 6; + ErrorResponse error = 1; + VersionResponse version = 2; + RecycleResponse recycle = 3; + AclResponse acl = 4; + QuotaResponse quota = 5; + ShareResponse share = 6; } -message NsStatRequest { - string authkey = 1; -} +message NsStatRequest { string authkey = 1; } message NsStatResponse { int64 code = 1; @@ -540,57 +552,53 @@ message NsStatResponse { // --------------------------------------------------------------------- enum MANILA_REQUEST_TYPE { - CREATE_SHARE = 0; - DELETE_SHARE = 1; - EXTEND_SHARE = 2; - SHRINK_SHARE = 3; - MANAGE_EXISTING = 4; - UNMANAGE = 5; - GET_CAPACITIES = 6; -/* EXTRA FUNCTIONS NOT IMPLEMENTED */ - /* - CREATE_SNAPSHOT = 7; - DELETE_SNAPSHOT = 8; - CREATE_SHARE_FROM_SNAPSHOT = 9; - ENSURE_SHARE = 10; - ALLOW_ACCESS = 11; - DENY_ACCESS = 12; - GET_SHARE_STATS = 13; - DO_SETUP = 14; - SETUP_SERVER = 15; - TEARDOWN_SERVER = 16; - GET_NETWORK_ALLOCATIONS_NUMBER = 17; - VERIFY_SHARE_SERVER_HANDLING = 18; - CREATE_SHARE_GROUP = 19; - DELETE_SHARE_GROUP = 20; - */ - + CREATE_SHARE = 0; + DELETE_SHARE = 1; + EXTEND_SHARE = 2; + SHRINK_SHARE = 3; + MANAGE_EXISTING = 4; + UNMANAGE = 5; + GET_CAPACITIES = 6; + /* EXTRA FUNCTIONS NOT IMPLEMENTED */ + /* + CREATE_SNAPSHOT = 7; + DELETE_SNAPSHOT = 8; + CREATE_SHARE_FROM_SNAPSHOT = 9; + ENSURE_SHARE = 10; + ALLOW_ACCESS = 11; + DENY_ACCESS = 12; + GET_SHARE_STATS = 13; + DO_SETUP = 14; + SETUP_SERVER = 15; + TEARDOWN_SERVER = 16; + GET_NETWORK_ALLOCATIONS_NUMBER = 17; + VERIFY_SHARE_SERVER_HANDLING = 18; + CREATE_SHARE_GROUP = 19; + DELETE_SHARE_GROUP = 20; + */ } message ManilaRequest { - MANILA_REQUEST_TYPE request_type = 1; - string auth_key = 2; - string protocol = 3; - string share_name = 4; - string description = 5; - string share_id = 6; - string share_group_id = 7; - int32 quota = 8; - string creator = 9; - string egroup = 10; - string admin_egroup = 11; - string share_host = 12; - string share_location = 13; + MANILA_REQUEST_TYPE request_type = 1; + string auth_key = 2; + string protocol = 3; + string share_name = 4; + string description = 5; + string share_id = 6; + string share_group_id = 7; + int32 quota = 8; + string creator = 9; + string egroup = 10; + string admin_egroup = 11; + string share_host = 12; + string share_location = 13; } message ManilaResponse { - string msg = 1; //for generic messages - int32 code = 2; // < 1 is an error -- > 1 is OK - int64 total_used = 3; - int64 total_capacity = 4; - int64 new_share_quota = 5; - string new_share_path = 6; - + string msg = 1; // for generic messages + int32 code = 2; // < 1 is an error -- > 1 is OK + int64 total_used = 3; + int64 total_capacity = 4; + int64 new_share_quota = 5; + string new_share_path = 6; } - - diff --git a/pkg/eosclient/eosgrpc/eosgrpc.go b/pkg/eosclient/eosgrpc/eosgrpc.go index 467c92eb6d..d57a2a6349 100644 --- a/pkg/eosclient/eosgrpc/eosgrpc.go +++ b/pkg/eosclient/eosgrpc/eosgrpc.go @@ -27,7 +27,6 @@ import ( "os" "os/exec" "path" - "path/filepath" "strconv" "strings" "syscall" @@ -252,28 +251,21 @@ func (c *Client) AddACL(ctx context.Context, auth, rootAuth eosclient.Authorizat log := appctx.GetLogger(ctx) log.Info().Str("func", "AddACL").Str("uid,gid", auth.Role.UID+","+auth.Role.GID).Str("path", path).Msg("") - acls, err := c.getACLForPath(ctx, auth, path) - if err != nil { - return err - } - - err = acls.SetEntry(a.Type, a.Qualifier, a.Permissions) - if err != nil { - return err - } - sysACL := acls.Serialize() - // Init a new NSRequest - rq, err := c.initNSRequest(ctx, auth) + rq, err := c.initNSRequest(ctx, rootAuth) if err != nil { return err } + // workaround to be root + // TODO: removed once fixed in eos grpc + rq.Role.Gid = 1 + msg := new(erpc.NSRequest_AclRequest) msg.Cmd = erpc.NSRequest_AclRequest_ACL_COMMAND(erpc.NSRequest_AclRequest_ACL_COMMAND_value["MODIFY"]) msg.Type = erpc.NSRequest_AclRequest_ACL_TYPE(erpc.NSRequest_AclRequest_ACL_TYPE_value["SYS_ACL"]) msg.Recursive = true - msg.Rule = sysACL + msg.Rule = a.CitrineSerialize() msg.Id = new(erpc.MDId) msg.Id.Path = []byte(path) @@ -472,7 +464,7 @@ func (c *Client) GetFileInfoByInode(ctx context.Context, auth eosclient.Authoriz log.Debug().Uint64("inode", inode).Str("rsp:", fmt.Sprintf("%#v", rsp)).Msg("grpc response") - info, err := c.grpcMDResponseToFileInfo(rsp, "") + info, err := c.grpcMDResponseToFileInfo(rsp) if err != nil { return nil, err } @@ -525,7 +517,7 @@ func (c *Client) SetAttr(ctx context.Context, auth eosclient.Authorization, attr msg := new(erpc.NSRequest_SetXAttrRequest) - var m = map[string][]byte{attr.Key: []byte(attr.Val)} + var m = map[string][]byte{attr.GetKey(): []byte(attr.Val)} msg.Xattrs = m msg.Recursive = recursive @@ -576,7 +568,7 @@ func (c *Client) UnsetAttr(ctx context.Context, auth eosclient.Authorization, at msg := new(erpc.NSRequest_SetXAttrRequest) - var ktd = []string{attr.Key} + var ktd = []string{attr.GetKey()} msg.Keystodelete = ktd msg.Recursive = recursive @@ -664,13 +656,13 @@ func (c *Client) GetFileInfoByPath(ctx context.Context, auth eosclient.Authoriza // Now send the req and see what happens resp, err := c.cl.MD(ctx, mdrq) if err != nil { - log.Error().Str("func", "GetFileInfoByPath").Err(err).Str("path", path).Str("err", err.Error()) + log.Error().Str("func", "GetFileInfoByPath").Err(err).Str("path", path).Str("err", err.Error()).Msg("") return nil, err } rsp, err := resp.Recv() if err != nil { - log.Error().Str("func", "GetFileInfoByPath").Err(err).Str("path", path).Str("err", err.Error()) + log.Error().Str("func", "GetFileInfoByPath").Err(err).Str("path", path).Str("err", err.Error()).Msg("") // FIXME: this is very very bad and poisonous for the project!!!!!!! // Apparently here we have to assume that an error in Recv() means "file not found" @@ -686,7 +678,7 @@ func (c *Client) GetFileInfoByPath(ctx context.Context, auth eosclient.Authoriza log.Debug().Str("func", "GetFileInfoByPath").Str("path", path).Str("rsp:", fmt.Sprintf("%#v", rsp)).Msg("grpc response") - info, err := c.grpcMDResponseToFileInfo(rsp, filepath.Dir(path)) + info, err := c.grpcMDResponseToFileInfo(rsp) if err != nil { return nil, err } @@ -783,66 +775,64 @@ func (c *Client) GetQuota(ctx context.Context, username string, rootAuth eosclie // SetQuota sets the quota of a user on the quota node defined by path func (c *Client) SetQuota(ctx context.Context, rootAuth eosclient.Authorization, info *eosclient.SetQuotaInfo) error { - { - log := appctx.GetLogger(ctx) - log.Info().Str("func", "SetQuota").Str("info:", fmt.Sprintf("%#v", info)).Msg("") + log := appctx.GetLogger(ctx) + log.Info().Str("func", "SetQuota").Str("info:", fmt.Sprintf("%#v", info)).Msg("") - // EOS does not have yet this command... work in progress, this is a draft piece of code - // return errtypes.NotSupported("eosgrpc: SetQuota not implemented") + // EOS does not have yet this command... work in progress, this is a draft piece of code + // return errtypes.NotSupported("eosgrpc: SetQuota not implemented") - // Initialize the common fields of the NSReq - rq, err := c.initNSRequest(ctx, rootAuth) - if err != nil { - return err - } - - msg := new(erpc.NSRequest_QuotaRequest) - msg.Path = []byte(info.QuotaNode) - msg.Id = new(erpc.RoleId) - uidInt, err := strconv.ParseUint(info.UID, 10, 64) - if err != nil { - return err - } + // Initialize the common fields of the NSReq + rq, err := c.initNSRequest(ctx, rootAuth) + if err != nil { + return err - // We set a quota for an user, not a group! - msg.Id.Uid = uidInt - msg.Id.Gid = 0 - msg.Id.Username = info.Username - msg.Op = erpc.QUOTAOP_SET - msg.Maxbytes = info.MaxBytes - msg.Maxfiles = info.MaxFiles - rq.Command = &erpc.NSRequest_Quota{Quota: msg} - - // Now send the req and see what happens - resp, err := c.cl.Exec(ctx, rq) - e := c.getRespError(resp, err) - if e != nil { - return e - } + } - if resp == nil { - return errtypes.InternalError(fmt.Sprintf("nil response for info: '%#v'", info)) - } + msg := new(erpc.NSRequest_QuotaRequest) + msg.Path = []byte(info.QuotaNode) + msg.Id = new(erpc.RoleId) + uidInt, err := strconv.ParseUint(info.UID, 10, 64) + if err != nil { + return err + } - if resp.GetError() != nil { - log.Error().Str("func", "SetQuota").Str("info:", fmt.Sprintf("%#v", resp)).Int64("errcode", resp.GetError().Code).Str("errmsg", resp.GetError().Msg).Msg("EOS negative resp") - } else { - log.Debug().Str("func", "SetQuota").Str("info:", fmt.Sprintf("%#v", resp)).Msg("grpc response") - } + // We set a quota for an user, not a group! + msg.Id.Uid = uidInt + msg.Id.Gid = 0 + msg.Id.Username = info.Username + msg.Op = erpc.QUOTAOP_SET + msg.Maxbytes = info.MaxBytes + msg.Maxfiles = info.MaxFiles + rq.Command = &erpc.NSRequest_Quota{Quota: msg} - if resp.Quota == nil { - return errtypes.InternalError(fmt.Sprintf("nil quota response? info: '%#v'", info)) - } + // Now send the req and see what happens + resp, err := c.cl.Exec(ctx, rq) + e := c.getRespError(resp, err) + if e != nil { + return e + } - if resp.Quota.Code != 0 { - return errtypes.InternalError(fmt.Sprintf("Quota error from eos. quota: '%#v'", resp.Quota)) - } + if resp == nil { + return errtypes.InternalError(fmt.Sprintf("nil response for info: '%#v'", info)) + } - log.Debug().Str("func", "GetQuota").Str("quotanodes", fmt.Sprintf("%d", len(resp.Quota.Quotanode))).Msg("grpc response") + if resp.GetError() != nil { + log.Error().Str("func", "SetQuota").Str("info:", fmt.Sprintf("%#v", resp)).Int64("errcode", resp.GetError().Code).Str("errmsg", resp.GetError().Msg).Msg("EOS negative resp") + } else { + log.Debug().Str("func", "SetQuota").Str("info:", fmt.Sprintf("%#v", resp)).Msg("grpc response") + } - return err + if resp.Quota == nil { + return errtypes.InternalError(fmt.Sprintf("nil quota response? info: '%#v'", info)) + } + if resp.Quota.Code != 0 { + return errtypes.InternalError(fmt.Sprintf("Quota error from eos. quota: '%#v'", resp.Quota)) } + + log.Debug().Str("func", "GetQuota").Str("quotanodes", fmt.Sprintf("%d", len(resp.Quota.Quotanode))).Msg("grpc response") + + return err } // Touch creates a 0-size,0-replica file in the EOS namespace. @@ -1199,7 +1189,7 @@ func (c *Client) List(ctx context.Context, auth eosclient.Authorization, dpath s log.Debug().Str("func", "List").Str("path", dpath).Str("item resp:", fmt.Sprintf("%#v", rsp)).Msg("grpc response") - myitem, err := c.grpcMDResponseToFileInfo(rsp, dpath) + myitem, err := c.grpcMDResponseToFileInfo(rsp) if err != nil { log.Error().Err(err).Str("func", "List").Str("path", dpath).Str("could not convert item:", fmt.Sprintf("%#v", rsp)).Str("err", err.Error()).Msg("") @@ -1563,71 +1553,56 @@ func getFileFromVersionFolder(p string) string { return path.Join(path.Dir(p), strings.TrimPrefix(path.Base(p), versionPrefix)) } -func (c *Client) grpcMDResponseToFileInfo(st *erpc.MDResponse, namepfx string) (*eosclient.FileInfo, error) { +func (c *Client) grpcMDResponseToFileInfo(st *erpc.MDResponse) (*eosclient.FileInfo, error) { if st.Cmd == nil && st.Fmd == nil { return nil, errors.Wrap(errtypes.NotSupported(""), "Invalid response (st.Cmd and st.Fmd are nil)") } fi := new(eosclient.FileInfo) - if st.Type != 0 { + if st.Type == erpc.TYPE_CONTAINER { fi.IsDir = true - } - if st.Fmd != nil { - fi.Inode = st.Fmd.Id + fi.Inode = st.Fmd.Inode + fi.FID = st.Cmd.ParentId + fi.UID = st.Cmd.Uid + fi.GID = st.Cmd.Gid + fi.MTimeSec = st.Cmd.Mtime.Sec + fi.ETag = st.Cmd.Etag + fi.File = path.Clean(string(st.Cmd.Path)) + + fi.Attrs = make(map[string]string) + for k, v := range st.Cmd.Xattrs { + fi.Attrs[strings.TrimPrefix(k, "user.")] = string(v) + } + + fi.Size = uint64(st.Cmd.TreeSize) + + log.Debug().Str("stat info - path", fi.File).Uint64("inode", fi.Inode).Uint64("uid", fi.UID).Uint64("gid", fi.GID).Str("etag", fi.ETag).Msg("grpc response") + } else { + fi.Inode = st.Fmd.Inode + fi.FID = st.Fmd.ContId fi.UID = st.Fmd.Uid fi.GID = st.Fmd.Gid fi.MTimeSec = st.Fmd.Mtime.Sec fi.ETag = st.Fmd.Etag - if namepfx == "" { - fi.File = string(st.Fmd.Name) - } else { - fi.File = namepfx + "/" + string(st.Fmd.Name) - } + fi.File = path.Clean(string(st.Fmd.Path)) + fi.Attrs = make(map[string]string) for k, v := range st.Fmd.Xattrs { - if fi.Attrs == nil { - fi.Attrs = make(map[string]string) - } - fi.Attrs[k] = string(v) + fi.Attrs[strings.TrimPrefix(k, "user.")] = string(v) } fi.Size = st.Fmd.Size - xs := &eosclient.Checksum{ - XSSum: hex.EncodeToString(st.Fmd.Checksum.Value), - XSType: st.Fmd.Checksum.Type, - } - fi.XS = xs - - log.Debug().Str("stat info - path", fi.File).Uint64("inode", fi.Inode).Uint64("uid", fi.UID).Uint64("gid", fi.GID).Str("etag", fi.ETag).Str("checksum", fi.XS.XSType+":"+fi.XS.XSSum).Msg("grpc response") - - } else { - fi.Inode = st.Cmd.Id - fi.UID = st.Cmd.Uid - fi.GID = st.Cmd.Gid - fi.MTimeSec = st.Cmd.Mtime.Sec - fi.ETag = st.Cmd.Etag - if namepfx == "" { - fi.File = string(st.Cmd.Name) - } else { - fi.File = namepfx + "/" + string(st.Cmd.Name) - } - - var allattrs = "" - for k, v := range st.Cmd.Xattrs { - if fi.Attrs == nil { - fi.Attrs = make(map[string]string) + if st.Fmd.Checksum != nil { + xs := &eosclient.Checksum{ + XSSum: hex.EncodeToString(st.Fmd.Checksum.Value), + XSType: st.Fmd.Checksum.Type, } - fi.Attrs[k] = string(v) - allattrs += string(v) - allattrs += "," - } - - fi.Size = 0 + fi.XS = xs - log.Debug().Str("stat info - path", fi.File).Uint64("inode", fi.Inode).Uint64("uid", fi.UID).Uint64("gid", fi.GID).Str("etag", fi.ETag).Msg("grpc response") + log.Debug().Str("stat info - path", fi.File).Uint64("inode", fi.Inode).Uint64("uid", fi.UID).Uint64("gid", fi.GID).Str("etag", fi.ETag).Str("checksum", fi.XS.XSType+":"+fi.XS.XSSum).Msg("grpc response") + } } - return fi, nil } diff --git a/pkg/eosclient/utils.go b/pkg/eosclient/utils.go index 8a3af28996..169c0dc0f2 100644 --- a/pkg/eosclient/utils.go +++ b/pkg/eosclient/utils.go @@ -18,7 +18,11 @@ package eosclient -import "github.com/cs3org/reva/v2/pkg/errtypes" +import ( + "fmt" + + "github.com/cs3org/reva/v2/pkg/errtypes" +) const ( // SystemAttr is the system extended attribute. @@ -38,3 +42,20 @@ func AttrStringToType(t string) (AttrType, error) { return 0, errtypes.InternalError("attr type not existing") } } + +// AttrTypeToString converts a type to a string representation. +func AttrTypeToString(at AttrType) string { + switch at { + case SystemAttr: + return "sys" + case UserAttr: + return "user" + default: + return "invalid" + } +} + +// GetKey returns the key considering the type of attribute. +func (a *Attribute) GetKey() string { + return fmt.Sprintf("%s.%s", AttrTypeToString(a.Type), a.Key) +} diff --git a/pkg/storage/utils/eosfs/eosfs.go b/pkg/storage/utils/eosfs/eosfs.go index 9056123874..18d64868c3 100644 --- a/pkg/storage/utils/eosfs/eosfs.go +++ b/pkg/storage/utils/eosfs/eosfs.go @@ -732,7 +732,12 @@ func (fs *eosfs) GetLock(ctx context.Context, ref *provider.Reference) (*provide return fs.getLock(ctx, auth, user, path, ref) } -func (fs *eosfs) setLock(ctx context.Context, auth eosclient.Authorization, lock *provider.Lock, path string, check bool) error { +func (fs *eosfs) setLock(ctx context.Context, lock *provider.Lock, path string, check bool) error { + auth, err := fs.getRootAuth(ctx) + if err != nil { + return err + } + encodedLock, err := encodeLock(lock) if err != nil { return errors.Wrap(err, "eosfs: error encoding lock") @@ -832,7 +837,7 @@ func (fs *eosfs) SetLock(ctx context.Context, ref *provider.Reference, l *provid } } - return fs.setLock(ctx, auth, l, path, true) + return fs.setLock(ctx, l, path, true) } func (fs *eosfs) getUserFromID(ctx context.Context, userID *userpb.UserId) (*userpb.User, error) { @@ -932,13 +937,7 @@ func (fs *eosfs) RefreshLock(ctx context.Context, ref *provider.Reference, newLo return errtypes.PermissionDenied(fmt.Sprintf("user %s has not write access on resource", user.Username)) } - // set the xattr with the new value - auth, err := fs.getUserAuth(ctx, user, path) - if err != nil { - return errors.Wrap(err, "eosfs: error getting uid and gid for user") - } - - return fs.setLock(ctx, auth, newLock, path, false) + return fs.setLock(ctx, newLock, path, false) } func sameHolder(l1, l2 *provider.Lock) bool { @@ -999,7 +998,7 @@ func (fs *eosfs) Unlock(ctx context.Context, ref *provider.Reference, lock *prov } path = fs.wrap(ctx, path) - auth, err := fs.getUserAuth(ctx, user, path) + auth, err := fs.getRootAuth(ctx) if err != nil { return errors.Wrap(err, "eosfs: error getting uid and gid for user") } @@ -2236,6 +2235,7 @@ func (fs *eosfs) convert(ctx context.Context, eosFileInfo *eosclient.FileInfo) ( Etag: fmt.Sprintf("\"%s\"", strings.Trim(eosFileInfo.ETag, "\"")), MimeType: mime.Detect(eosFileInfo.IsDir, path), Size: size, + ParentId: &provider.ResourceId{OpaqueId: fmt.Sprintf("%d", eosFileInfo.FID)}, PermissionSet: fs.permissionSet(ctx, eosFileInfo, owner), Checksum: &xs, Type: getResourceType(eosFileInfo.IsDir), diff --git a/pkg/storage/utils/eosfs/upload.go b/pkg/storage/utils/eosfs/upload.go index c3601d8b56..42f698af2d 100644 --- a/pkg/storage/utils/eosfs/upload.go +++ b/pkg/storage/utils/eosfs/upload.go @@ -91,16 +91,11 @@ func (fs *eosfs) Upload(ctx context.Context, ref *provider.Reference, r io.ReadC } func (fs *eosfs) InitiateUpload(ctx context.Context, ref *provider.Reference, uploadLength int64, metadata map[string]string) (map[string]string, error) { - fn, _, err := fs.resolveRefAndGetAuth(ctx, ref) - if err != nil { - return nil, err - } - fn, err = fs.unwrap(ctx, fn) + p, err := fs.resolve(ctx, ref) if err != nil { return nil, err } - return map[string]string{ - "simple": fn, + "simple": p, }, nil } From f07595507609824cb64ec9c4c249269f6c593ae4 Mon Sep 17 00:00:00 2001 From: jkoberg Date: Wed, 30 Nov 2022 15:35:05 +0100 Subject: [PATCH 3/3] after merge conflicts Signed-off-by: jkoberg --- pkg/rgrpc/status/status.go | 11 ----------- pkg/storage/utils/eosfs/eosfs.go | 7 ++++--- 2 files changed, 4 insertions(+), 14 deletions(-) diff --git a/pkg/rgrpc/status/status.go b/pkg/rgrpc/status/status.go index 32b15a28fc..c524c2753a 100644 --- a/pkg/rgrpc/status/status.go +++ b/pkg/rgrpc/status/status.go @@ -144,17 +144,6 @@ func NewConflict(ctx context.Context, err error, msg string) *rpc.Status { } } -// NewFailedPrecondition TODO -func NewFailedPrecondition(ctx context.Context, err error, msg string) *rpc.Status { - log := appctx.GetLogger(ctx).With().CallerWithSkipFrameCount(3).Logger() - log.Error().Err(err).Msg(msg) - return &rpc.Status{ - Code: rpc.Code_CODE_FAILED_PRECONDITION, - Message: msg, - Trace: getTrace(ctx), - } -} - // NewStatusFromErrType returns a status that corresponds to the given errtype func NewStatusFromErrType(ctx context.Context, msg string, err error) *rpc.Status { switch e := err.(type) { diff --git a/pkg/storage/utils/eosfs/eosfs.go b/pkg/storage/utils/eosfs/eosfs.go index 18d64868c3..d0b252274a 100644 --- a/pkg/storage/utils/eosfs/eosfs.go +++ b/pkg/storage/utils/eosfs/eosfs.go @@ -860,7 +860,7 @@ func (fs *eosfs) getUserFromID(ctx context.Context, userID *userpb.UserId) (*use func (fs *eosfs) userHasWriteAccess(ctx context.Context, user *userpb.User, ref *provider.Reference) (bool, error) { ctx = ctxpkg.ContextSetUser(ctx, user) - resInfo, err := fs.GetMD(ctx, ref, nil) + resInfo, err := fs.GetMD(ctx, ref, nil, nil) if err != nil { return false, err } @@ -877,7 +877,7 @@ func (fs *eosfs) userIDHasWriteAccess(ctx context.Context, userID *userpb.UserId func (fs *eosfs) userHasReadAccess(ctx context.Context, user *userpb.User, ref *provider.Reference) (bool, error) { ctx = ctxpkg.ContextSetUser(ctx, user) - resInfo, err := fs.GetMD(ctx, ref, nil) + resInfo, err := fs.GetMD(ctx, ref, nil, nil) if err != nil { return false, err } @@ -893,7 +893,8 @@ func encodeLock(l *provider.Lock) (string, error) { } // RefreshLock refreshes an existing lock on the given reference -func (fs *eosfs) RefreshLock(ctx context.Context, ref *provider.Reference, newLock *provider.Lock) error { +// TODO: use existingLockId. See https://github.com/cs3org/reva/pull/3286 +func (fs *eosfs) RefreshLock(ctx context.Context, ref *provider.Reference, newLock *provider.Lock, _ string) error { // TODO (gdelmont): check if the new lock is already expired? if newLock.Type == provider.LockType_LOCK_TYPE_SHARED {