diff --git a/.mockery.yaml b/.mockery.yaml index 5ad2fa0a0..0e4baa1bc 100644 --- a/.mockery.yaml +++ b/.mockery.yaml @@ -9,6 +9,9 @@ packages: ActionService: config: filename: "action_service.go" + ActivityService: + config: + filename: "activity_service.go" GroupService: config: filename: "group_service.go" diff --git a/Makefile b/Makefile index 58246abd7..e5e2cdd81 100644 --- a/Makefile +++ b/Makefile @@ -2,7 +2,7 @@ GOVERSION := $(shell go version | cut -d ' ' -f 3 | cut -d '.' -f 2) .PHONY: build check fmt lint test test-race vet test-cover-html help install proto .DEFAULT_GOAL := build -PROTON_COMMIT := "253aa80d6a65c575cdf4a6a1433867fd4d8092ca" +PROTON_COMMIT := "8a9467fbc5539da13276eb858b4d91245fb43edd" install: @echo "Clean up imports..." diff --git a/cmd/serve.go b/cmd/serve.go index b81a0729e..3453b828f 100644 --- a/cmd/serve.go +++ b/cmd/serve.go @@ -94,6 +94,7 @@ func StartServer(logger *log.Zap, cfg *config.Shield) error { schemaMigrationConfig := schema.NewSchemaMigrationConfig(cfg.App.DefaultSystemEmail) + appConfig := activity.AppConfig{Version: config.Version} var activityRepository activity.Repository switch cfg.Log.Activity.Sink { case activity.SinkTypeDB: @@ -107,7 +108,7 @@ func StartServer(logger *log.Zap, cfg *config.Shield) error { default: activityRepository = activity.NewStdoutRepository(io.Discard) } - activityService := activity.NewService(activityRepository) + activityService := activity.NewService(appConfig, activityRepository) userRepository := postgres.NewUserRepository(dbClient) userService := user.NewService(logger, userRepository, activityService) @@ -184,7 +185,8 @@ func BuildAPIDependencies( dbc *db.Client, sdb *spicedb.SpiceDB, ) (api.Deps, error) { - activityService := activity.NewService(activityRepository) + appConfig := activity.AppConfig{Version: config.Version} + activityService := activity.NewService(appConfig, activityRepository) userRepository := postgres.NewUserRepository(dbc) userService := user.NewService(logger, userRepository, activityService) @@ -232,6 +234,7 @@ func BuildAPIDependencies( ActionService: actionService, NamespaceService: namespaceService, RelationAdapter: relationAdapter, + ActivityService: activityService, } return dependencies, nil } diff --git a/core/activity/activity.go b/core/activity/activity.go index e8528c45f..6b01540ce 100644 --- a/core/activity/activity.go +++ b/core/activity/activity.go @@ -2,6 +2,7 @@ package activity import ( "context" + "time" "github.com/goto/salt/audit" ) @@ -14,4 +15,25 @@ const ( type Repository interface { Insert(ctx context.Context, log *audit.Log) error + List(ctx context.Context, filter Filter) ([]audit.Log, error) +} + +type AppConfig struct { + Version string +} + +type Filter struct { + Actor string + Action string + Data map[string]string + Metadata map[string]string + StartTime time.Time + EndTime time.Time + Limit int32 + Page int32 +} + +type PagedActivity struct { + Count int32 + Activities []audit.Log } diff --git a/core/activity/errors.go b/core/activity/errors.go index db0bc18ae..735e85e45 100644 --- a/core/activity/errors.go +++ b/core/activity/errors.go @@ -3,6 +3,8 @@ package activity import "errors" var ( - ErrInvalidUUID = errors.New("invalid syntax of uuid") - ErrInvalidData = errors.New("invalid log data") + ErrInvalidUUID = errors.New("invalid syntax of uuid") + ErrInvalidData = errors.New("invalid log data") + ErrInvalidFilter = errors.New("invalid activity filter") + ErrNotFound = errors.New("activities not found") ) diff --git a/core/activity/service.go b/core/activity/service.go index fd0c0260c..d71604d88 100644 --- a/core/activity/service.go +++ b/core/activity/service.go @@ -5,16 +5,17 @@ import ( "time" "github.com/goto/salt/audit" - "github.com/goto/shield/config" "github.com/mitchellh/mapstructure" ) type Service struct { + appConfig AppConfig repository Repository } -func NewService(repository Repository) *Service { +func NewService(appConfig AppConfig, repository Repository) *Service { return &Service{ + appConfig: appConfig, repository: repository, } } @@ -31,7 +32,7 @@ func (s Service) Log(ctx context.Context, action string, actor string, data any) metadata := map[string]string{ "app_name": "shield", - "app_version": config.Version, + "app_version": s.appConfig.Version, } log := &audit.Log{ @@ -44,3 +45,19 @@ func (s Service) Log(ctx context.Context, action string, actor string, data any) return s.repository.Insert(ctx, log) } + +func (s Service) List(ctx context.Context, filter Filter) (PagedActivity, error) { + if !filter.EndTime.IsZero() && !filter.StartTime.IsZero() && filter.EndTime.Before(filter.StartTime) { + return PagedActivity{}, ErrInvalidFilter + } + + activities, err := s.repository.List(ctx, filter) + if err != nil { + return PagedActivity{}, err + } + + return PagedActivity{ + Count: int32(len(activities)), + Activities: activities, + }, nil +} diff --git a/core/activity/stdout_repository.go b/core/activity/stdout_repository.go index 7a899b377..1946754ac 100644 --- a/core/activity/stdout_repository.go +++ b/core/activity/stdout_repository.go @@ -21,3 +21,7 @@ func NewStdoutRepository(writer io.Writer) *StdoutRepository { func (r StdoutRepository) Insert(ctx context.Context, log *audit.Log) error { return json.NewEncoder(r.writer).Encode(log) } + +func (r StdoutRepository) List(ctx context.Context, filter Filter) ([]audit.Log, error) { + return []audit.Log{}, ErrNotFound +} diff --git a/core/user/service.go b/core/user/service.go index 0f38e8af9..9b9f74f3f 100644 --- a/core/user/service.go +++ b/core/user/service.go @@ -6,7 +6,6 @@ import ( "strings" "github.com/goto/salt/log" - pkgctx "github.com/goto/shield/pkg/context" "github.com/goto/shield/pkg/uuid" ) diff --git a/internal/api/api.go b/internal/api/api.go index ebef131d3..9b0873672 100644 --- a/internal/api/api.go +++ b/internal/api/api.go @@ -2,6 +2,7 @@ package api import ( "github.com/goto/shield/core/action" + "github.com/goto/shield/core/activity" "github.com/goto/shield/core/group" "github.com/goto/shield/core/namespace" "github.com/goto/shield/core/organization" @@ -28,4 +29,5 @@ type Deps struct { RelationAdapter *adapter.Relation ResourceService *resource.Service RuleService *rule.Service + ActivityService *activity.Service } diff --git a/internal/api/v1beta1/activity.go b/internal/api/v1beta1/activity.go new file mode 100644 index 000000000..593addef5 --- /dev/null +++ b/internal/api/v1beta1/activity.go @@ -0,0 +1,146 @@ +package v1beta1 + +import ( + "context" + "encoding/json" + "errors" + "fmt" + "strconv" + "time" + + "github.com/goto/salt/audit" + "github.com/goto/shield/core/activity" + "github.com/goto/shield/core/user" + "github.com/goto/shield/pkg/uuid" + shieldv1beta1 "github.com/goto/shield/proto/v1beta1" + grpczap "github.com/grpc-ecosystem/go-grpc-middleware/logging/zap/ctxzap" + "google.golang.org/protobuf/types/known/timestamppb" +) + +type ActivityService interface { + List(ctx context.Context, filter activity.Filter) (activity.PagedActivity, error) +} + +func (h Handler) ListActivities(ctx context.Context, request *shieldv1beta1.ListActivitiesRequest) (*shieldv1beta1.ListActivitiesResponse, error) { + logger := grpczap.Extract(ctx) + var activities []*shieldv1beta1.Activity + + startTime := time.Time{} + endTime := time.Time{} + + if request.StartTime != "" { + parseStartTime, err := strconv.ParseInt(request.StartTime, 10, 64) + if err != nil { + logger.Error(err.Error()) + return nil, grpcBadBodyError + } + startTime = time.Unix(parseStartTime, 0) + } + + if request.EndTime != "" { + parseEndTime, err := strconv.ParseInt(request.EndTime, 10, 64) + if err != nil { + logger.Error(err.Error()) + return nil, grpcBadBodyError + } + endTime = time.Unix(parseEndTime, 0) + } + + if request.Actor != "" && !uuid.IsValid(request.Actor) { + actor, err := h.userService.GetByEmail(ctx, request.Actor) + if err != nil { + logger.Error(err.Error()) + switch { + case errors.Is(err, user.ErrInvalidEmail), errors.Is(err, user.ErrNotExist): + return nil, grpcBadBodyError + default: + return nil, grpcInternalServerError + } + } + request.Actor = actor.ID + } + + filter := activity.Filter{ + Actor: request.Actor, + Action: request.Action, + Data: request.Data, + Metadata: request.Metadata, + StartTime: startTime, + EndTime: endTime, + Limit: request.PageSize, + Page: request.PageNum, + } + + activityResp, err := h.activityService.List(ctx, filter) + if err != nil { + logger.Error(err.Error()) + return nil, grpcInternalServerError + } + + for _, activity := range activityResp.Activities { + activityPB, err := transformActivityToPB(activity) + if err != nil { + logger.Error(err.Error()) + return nil, grpcInternalServerError + } + activities = append(activities, &activityPB) + } + + return &shieldv1beta1.ListActivitiesResponse{ + Count: int32(len(activities)), + Activities: activities, + }, nil +} + +func transformActivityToPB(from audit.Log) (shieldv1beta1.Activity, error) { + var dataMapString map[string]string + if from.Data != nil { + var dataMap map[string]interface{} + if err := json.Unmarshal(from.Data.([]uint8), &dataMap); err != nil { + return shieldv1beta1.Activity{}, err + } + var err error + dataMapString, err = mapInterfaceToMapString(dataMap) + if err != nil { + return shieldv1beta1.Activity{}, err + } + } + + var metadataMapString map[string]string + if from.Metadata != nil { + var metadataMap map[string]interface{} + if err := json.Unmarshal(from.Metadata.([]uint8), &metadataMap); err != nil { + return shieldv1beta1.Activity{}, err + } + var err error + metadataMapString, err = mapInterfaceToMapString(metadataMap) + if err != nil { + return shieldv1beta1.Activity{}, err + } + } + + return shieldv1beta1.Activity{ + Actor: from.Actor, + Action: from.Action, + Data: dataMapString, + Metadata: metadataMapString, + Timestamp: timestamppb.New(from.Timestamp), + }, nil +} + +func mapInterfaceToMapString(from map[string]interface{}) (map[string]string, error) { + to := make(map[string]string) + + for k, v := range from { + switch v.(type) { + case string: + to[k] = v.(string) + case []interface{}: + to[k] = fmt.Sprintf("%v", v) + default: + return map[string]string{}, ErrInternalServer + } + } + + return to, nil +} diff --git a/internal/api/v1beta1/activity_test.go b/internal/api/v1beta1/activity_test.go new file mode 100644 index 000000000..afafa05a4 --- /dev/null +++ b/internal/api/v1beta1/activity_test.go @@ -0,0 +1,122 @@ +package v1beta1 + +import ( + "context" + "errors" + "testing" + "time" + + "github.com/goto/salt/audit" + "github.com/goto/shield/core/activity" + "github.com/goto/shield/core/user" + "github.com/goto/shield/internal/api/v1beta1/mocks" + "github.com/goto/shield/pkg/uuid" + shieldv1beta1 "github.com/goto/shield/proto/v1beta1" + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/mock" +) + +var ( + testActorID = uuid.NewString() + testActorEmail = "test@gotocompany.com" + testActivity = audit.Log{ + Actor: testActorID, + Action: "user.create", + Timestamp: time.Time{}, + } + testActivityPB, _ = transformActivityToPB(testActivity) +) + +func TestHandler_ListActivity(t *testing.T) { + tests := []struct { + name string + setup func(as *mocks.ActivityService, us *mocks.UserService) + request *shieldv1beta1.ListActivitiesRequest + want *shieldv1beta1.ListActivitiesResponse + wantErr error + }{ + { + name: "should return internal error if activity service return error", + setup: func(as *mocks.ActivityService, _ *mocks.UserService) { + as.EXPECT().List(mock.AnythingOfType("context.todoCtx"), activity.Filter{}).Return(activity.PagedActivity{}, errors.New("some error")) + }, + request: &shieldv1beta1.ListActivitiesRequest{}, + want: nil, + wantErr: grpcInternalServerError, + }, + { + name: "should return bad request error if start time parsing return error", + request: &shieldv1beta1.ListActivitiesRequest{ + StartTime: "invalid-start-time", + }, + want: nil, + wantErr: grpcBadBodyError, + }, + { + name: "should return bad request error if end time parsing return error", + request: &shieldv1beta1.ListActivitiesRequest{ + EndTime: "invalid-end-time", + }, + want: nil, + wantErr: grpcBadBodyError, + }, + { + name: "should return bad request error if uuid is invalid", + setup: func(_ *mocks.ActivityService, us *mocks.UserService) { + us.EXPECT().GetByEmail(mock.AnythingOfType("context.todoCtx"), "invalid-uuid").Return(user.User{}, user.ErrInvalidEmail) + }, + request: &shieldv1beta1.ListActivitiesRequest{ + Actor: "invalid-uuid", + }, + want: nil, + wantErr: grpcBadBodyError, + }, + { + name: "should return bad request error if email is not found", + setup: func(_ *mocks.ActivityService, us *mocks.UserService) { + us.EXPECT().GetByEmail(mock.AnythingOfType("context.todoCtx"), testActorEmail).Return(user.User{}, user.ErrNotExist) + }, + request: &shieldv1beta1.ListActivitiesRequest{ + Actor: testActorEmail, + }, + want: nil, + wantErr: grpcBadBodyError, + }, + { + name: "should return activities if activity service return none error", + setup: func(as *mocks.ActivityService, _ *mocks.UserService) { + testActivityList := []audit.Log{testActivity} + as.EXPECT().List(mock.AnythingOfType("context.todoCtx"), activity.Filter{}).Return( + activity.PagedActivity{ + Count: int32(len(testActivityList)), + Activities: testActivityList, + }, nil) + }, + request: &shieldv1beta1.ListActivitiesRequest{}, + want: &shieldv1beta1.ListActivitiesResponse{ + Count: int32(len([]*shieldv1beta1.Activity{ + &testActivityPB, + })), + Activities: []*shieldv1beta1.Activity{&testActivityPB}, + }, + wantErr: nil, + }, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + mockActivitySvc := new(mocks.ActivityService) + mockUserSvc := new(mocks.UserService) + if tt.setup != nil { + tt.setup(mockActivitySvc, mockUserSvc) + } + h := Handler{ + activityService: mockActivitySvc, + userService: mockUserSvc, + } + got, err := h.ListActivities(context.TODO(), tt.request) + assert.EqualValues(t, got, tt.want) + assert.EqualValues(t, err, tt.wantErr) + }) + } +} diff --git a/internal/api/v1beta1/mocks/activity_service.go b/internal/api/v1beta1/mocks/activity_service.go new file mode 100644 index 000000000..8d7eeb001 --- /dev/null +++ b/internal/api/v1beta1/mocks/activity_service.go @@ -0,0 +1,95 @@ +// Code generated by mockery v2.42.1. DO NOT EDIT. + +package mocks + +import ( + context "context" + + activity "github.com/goto/shield/core/activity" + + mock "github.com/stretchr/testify/mock" +) + +// ActivityService is an autogenerated mock type for the ActivityService type +type ActivityService struct { + mock.Mock +} + +type ActivityService_Expecter struct { + mock *mock.Mock +} + +func (_m *ActivityService) EXPECT() *ActivityService_Expecter { + return &ActivityService_Expecter{mock: &_m.Mock} +} + +// List provides a mock function with given fields: ctx, filter +func (_m *ActivityService) List(ctx context.Context, filter activity.Filter) (activity.PagedActivity, error) { + ret := _m.Called(ctx, filter) + + if len(ret) == 0 { + panic("no return value specified for List") + } + + var r0 activity.PagedActivity + var r1 error + if rf, ok := ret.Get(0).(func(context.Context, activity.Filter) (activity.PagedActivity, error)); ok { + return rf(ctx, filter) + } + if rf, ok := ret.Get(0).(func(context.Context, activity.Filter) activity.PagedActivity); ok { + r0 = rf(ctx, filter) + } else { + r0 = ret.Get(0).(activity.PagedActivity) + } + + if rf, ok := ret.Get(1).(func(context.Context, activity.Filter) error); ok { + r1 = rf(ctx, filter) + } else { + r1 = ret.Error(1) + } + + return r0, r1 +} + +// ActivityService_List_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'List' +type ActivityService_List_Call struct { + *mock.Call +} + +// List is a helper method to define mock.On call +// - ctx context.Context +// - filter activity.Filter +func (_e *ActivityService_Expecter) List(ctx interface{}, filter interface{}) *ActivityService_List_Call { + return &ActivityService_List_Call{Call: _e.mock.On("List", ctx, filter)} +} + +func (_c *ActivityService_List_Call) Run(run func(ctx context.Context, filter activity.Filter)) *ActivityService_List_Call { + _c.Call.Run(func(args mock.Arguments) { + run(args[0].(context.Context), args[1].(activity.Filter)) + }) + return _c +} + +func (_c *ActivityService_List_Call) Return(_a0 activity.PagedActivity, _a1 error) *ActivityService_List_Call { + _c.Call.Return(_a0, _a1) + return _c +} + +func (_c *ActivityService_List_Call) RunAndReturn(run func(context.Context, activity.Filter) (activity.PagedActivity, error)) *ActivityService_List_Call { + _c.Call.Return(run) + return _c +} + +// NewActivityService creates a new instance of ActivityService. It also registers a testing interface on the mock and a cleanup function to assert the mocks expectations. +// The first argument is typically a *testing.T value. +func NewActivityService(t interface { + mock.TestingT + Cleanup(func()) +}) *ActivityService { + mock := &ActivityService{} + mock.Mock.Test(t) + + t.Cleanup(func() { mock.AssertExpectations(t) }) + + return mock +} diff --git a/internal/api/v1beta1/v1beta1.go b/internal/api/v1beta1/v1beta1.go index 2c5951a08..01fb50845 100644 --- a/internal/api/v1beta1/v1beta1.go +++ b/internal/api/v1beta1/v1beta1.go @@ -26,6 +26,7 @@ type Handler struct { relationService RelationService resourceService ResourceService ruleService RuleService + activityService ActivityService relationAdapter RelationTransformer checkAPILimit int } @@ -45,6 +46,7 @@ func Register(ctx context.Context, s *grpc.Server, deps api.Deps, checkAPILimit relationService: deps.RelationService, resourceService: deps.ResourceService, ruleService: deps.RuleService, + activityService: deps.ActivityService, relationAdapter: deps.RelationAdapter, checkAPILimit: checkAPILimit, }, diff --git a/internal/store/postgres/activity_repository.go b/internal/store/postgres/activity_repository.go index af0ca234a..18beeefe5 100644 --- a/internal/store/postgres/activity_repository.go +++ b/internal/store/postgres/activity_repository.go @@ -2,11 +2,15 @@ package postgres import ( "context" + "database/sql" "encoding/json" + "errors" "fmt" + "time" "github.com/doug-martin/goqu/v9" "github.com/goto/salt/audit" + "github.com/goto/shield/core/activity" "github.com/goto/shield/pkg/db" newrelic "github.com/newrelic/go-agent" ) @@ -63,3 +67,74 @@ func (r ActivityRepository) Insert(ctx context.Context, log *audit.Log) error { return nil } + +func (r ActivityRepository) List(ctx context.Context, filter activity.Filter) ([]audit.Log, error) { + var fetchedActivity []audit.Log + + var defaultLimit int32 = 50 + var defaultPage int32 = 1 + if filter.Limit < 1 { + filter.Limit = defaultLimit + } + if filter.Page < 1 { + filter.Page = defaultPage + } + + offset := (filter.Page - 1) * filter.Limit + + sqlStatement := dialect.From(TABLE_ACTIVITY) + if filter.Actor != "" { + sqlStatement = sqlStatement.Where(goqu.Ex{"actor": filter.Actor}) + } + if filter.Action != "" { + sqlStatement = sqlStatement.Where(goqu.Ex{"action": goqu.Op{"like": fmt.Sprintf("%%%s%%", filter.Action)}}) + } + if filter.Data != nil { + for key, value := range filter.Data { + dataQuery := fmt.Sprintf("data->>'%s' = '%s'", key, value) + sqlStatement = sqlStatement.Where(goqu.L(dataQuery)) + } + } + if filter.Metadata != nil { + for key, value := range filter.Metadata { + dataQuery := fmt.Sprintf("metadata->>'%s' = '%s'", key, value) + sqlStatement = sqlStatement.Where(goqu.L(dataQuery)) + } + } + + if filter.EndTime.IsZero() { + filter.EndTime = time.Now() + } + + sqlStatement = sqlStatement.Where( + goqu.Ex{"timestamp": goqu.Op{"between": goqu.Range(filter.StartTime, filter.EndTime)}}, + ).Limit(uint(filter.Limit)).Offset(uint(offset)).Order(goqu.I("timestamp").Desc()) + query, params, err := sqlStatement.ToSQL() + if err != nil { + return nil, err + } + + if err = r.dbc.WithTimeout(ctx, func(ctx context.Context) error { + nrCtx := newrelic.FromContext(ctx) + if nrCtx != nil { + nr := newrelic.DatastoreSegment{ + Product: newrelic.DatastorePostgres, + Collection: TABLE_ACTIVITY, + Operation: "List", + StartTime: nrCtx.StartSegmentNow(), + } + defer nr.End() + } + + return r.dbc.SelectContext(ctx, &fetchedActivity, query, params...) + }); err != nil { + err = checkPostgresError(err) + if errors.Is(err, sql.ErrNoRows) { + return []audit.Log{}, nil + } + + return []audit.Log{}, fmt.Errorf("%w: %s", dbErr, err) + } + + return fetchedActivity, nil +} diff --git a/internal/store/postgres/activity_repository_test.go b/internal/store/postgres/activity_repository_test.go index bc2d3523f..71bc17315 100644 --- a/internal/store/postgres/activity_repository_test.go +++ b/internal/store/postgres/activity_repository_test.go @@ -6,8 +6,10 @@ import ( "testing" "time" + "github.com/google/go-cmp/cmp" "github.com/goto/salt/audit" "github.com/goto/salt/log" + "github.com/goto/shield/core/activity" "github.com/goto/shield/internal/store/postgres" "github.com/goto/shield/pkg/db" "github.com/ory/dockertest" @@ -21,6 +23,7 @@ type ActivityRepositoryTestSuite struct { pool *dockertest.Pool resource *dockertest.Resource repository *postgres.ActivityRepository + activities []audit.Log } func (s *ActivityRepositoryTestSuite) SetupSuite() { @@ -36,6 +39,14 @@ func (s *ActivityRepositoryTestSuite) SetupSuite() { s.repository = postgres.NewActivityRepository(s.client) } +func (s *ActivityRepositoryTestSuite) SetupTest() { + var err error + s.activities, err = bootstrapActivity(s.client) + if err != nil { + s.T().Fatal(err) + } +} + func (s *ActivityRepositoryTestSuite) TearDownSuite() { if err := purgeDocker(s.pool, s.resource); err != nil { s.T().Fatal(err) @@ -118,6 +129,117 @@ func (s *ActivityRepositoryTestSuite) TestInsert() { } } +func (s *ActivityRepositoryTestSuite) TestList() { + type testCase struct { + Description string + Filter activity.Filter + ExpectedActivities []audit.Log + ErrString string + } + + var testCases = []testCase{ + { + Description: "should get all activity", + ExpectedActivities: s.activities, + }, + { + Description: "should return maximum 50 activities if limit is set < 1", + Filter: activity.Filter{ + Limit: 0, + }, + ExpectedActivities: s.activities, + }, + { + Description: "should return maximum specified activities if limit is set >= 1", + Filter: activity.Filter{ + Limit: 2, + }, + ExpectedActivities: []audit.Log{ + s.activities[0], s.activities[1], + }, + }, + { + Description: "should return the first page if page is set < 1", + Filter: activity.Filter{ + Page: 0, + }, + ExpectedActivities: s.activities, + }, + { + Description: "should return the specified page if page is set >= 1", + Filter: activity.Filter{ + Page: 2, + Limit: 1, + }, + ExpectedActivities: []audit.Log{s.activities[1]}, + }, + { + Description: "should return activities between start time and end time", + Filter: activity.Filter{ + StartTime: time.Date(2024, time.January, 10, 15, 0, 0, 0, time.UTC), + EndTime: time.Date(2024, time.January, 10, 25, 0, 0, 0, time.UTC), + }, + ExpectedActivities: []audit.Log{s.activities[1]}, + }, + { + Description: "should return filtered activities by actor", + Filter: activity.Filter{ + Actor: s.activities[0].Actor, + }, + ExpectedActivities: []audit.Log{s.activities[0]}, + }, + { + Description: "should return filtered activity by action", + Filter: activity.Filter{ + Action: s.activities[1].Action, + }, + ExpectedActivities: []audit.Log{s.activities[1]}, + }, + { + Description: "should return filtered activity by data", + Filter: activity.Filter{ + Data: map[string]string{ + "entity": "user", + }, + }, + ExpectedActivities: []audit.Log{s.activities[0]}, + }, + { + Description: "should return filtered activity by metadata", + Filter: activity.Filter{ + Metadata: map[string]string{ + "version": "v0.1.3", + }, + }, + ExpectedActivities: []audit.Log{s.activities[2]}, + }, + { + Description: "should return empty activities if all filtered out", + Filter: activity.Filter{ + Actor: s.activities[0].Actor, + Action: s.activities[1].Action, + StartTime: time.Date(2024, time.January, 20, 0, 0, 0, 0, time.UTC), + EndTime: time.Date(2024, time.January, 30, 0, 0, 0, 0, time.UTC), + Data: map[string]string{"entity": "project"}, + }, + }, + } + + for _, tc := range testCases { + s.Run(tc.Description, func() { + got, err := s.repository.List(s.ctx, tc.Filter) + if tc.ErrString != "" { + if err.Error() != tc.ErrString { + s.T().Fatalf("got error %s, expected was %s", err.Error(), tc.ErrString) + } + } + if !cmp.Equal(got, tc.ExpectedActivities) { + s.T().Fatalf("got result %+v, expected was %+v", got, tc.ExpectedActivities) + } + }) + } +} + func TestActivityRepository(t *testing.T) { suite.Run(t, new(ActivityRepositoryTestSuite)) } diff --git a/internal/store/postgres/postgres_test.go b/internal/store/postgres/postgres_test.go index cdf43b0b2..32c705f9d 100644 --- a/internal/store/postgres/postgres_test.go +++ b/internal/store/postgres/postgres_test.go @@ -8,8 +8,10 @@ import ( "io/ioutil" "time" + "github.com/goto/salt/audit" "github.com/goto/salt/log" "github.com/goto/shield/core/action" + "github.com/goto/shield/core/activity" "github.com/goto/shield/core/group" "github.com/goto/shield/core/namespace" "github.com/goto/shield/core/organization" @@ -460,3 +462,36 @@ func bootstrapResource( return insertedData, nil } + +func bootstrapActivity( + client *db.Client, +) ([]audit.Log, error) { + activityRepository := postgres.NewActivityRepository(client) + testFixtureJSON, err := ioutil.ReadFile("./testdata/mock-activity.json") + if err != nil { + return nil, err + } + + var data []audit.Log + if err = json.Unmarshal(testFixtureJSON, &data); err != nil { + return nil, err + } + + data[2].Timestamp = time.Date(2024, time.January, 10, 10, 0, 0, 0, time.UTC) + data[1].Timestamp = time.Date(2024, time.January, 10, 20, 0, 0, 0, time.UTC) + data[0].Timestamp = time.Date(2024, time.January, 10, 30, 0, 0, 0, time.UTC) + + for _, d := range data { + err := activityRepository.Insert(context.Background(), &d) + if err != nil { + return nil, err + } + } + + returnData, err := activityRepository.List(context.Background(), activity.Filter{EndTime: time.Now()}) + if err != nil { + return nil, err + } + + return returnData, nil +} diff --git a/internal/store/postgres/testdata/mock-activity.json b/internal/store/postgres/testdata/mock-activity.json new file mode 100644 index 000000000..e319db626 --- /dev/null +++ b/internal/store/postgres/testdata/mock-activity.json @@ -0,0 +1,38 @@ +[ + { + "actor": "actor-1-uuid", + "action": "user.create", + "data": { + "id": "actor-1-id", + "entity": "user" + }, + "metadata": { + "app_name": "shield", + "version": "v0.1.1" + } + }, + { + "actor": "actor-2-uuid", + "action": "project.update", + "data": { + "id": "project-1-id", + "entity": "project" + }, + "metadata": { + "app_name": "shield", + "version": "v0.1.2" + } + }, + { + "actor": "actor-3-uuid", + "action": "role.create", + "data": { + "id": "role-1-id", + "entity": "role" + }, + "metadata": { + "app_name": "shield", + "version": "v0.1.3" + } + } +] \ No newline at end of file diff --git a/proto/shield.swagger.yaml b/proto/shield.swagger.yaml index 7e506993e..cdb7d3835 100644 --- a/proto/shield.swagger.yaml +++ b/proto/shield.swagger.yaml @@ -46,6 +46,58 @@ paths: $ref: '#/definitions/ActionRequestBody' tags: - Action + /v1beta1/activities: + get: + summary: Get all Activities + operationId: ShieldService_ListActivities + responses: + "200": + description: A successful response. + schema: + $ref: '#/definitions/ListActivitiesResponse' + default: + description: An unexpected error response. + schema: + $ref: '#/definitions/Status' + parameters: + - name: actor + in: query + required: false + type: string + - name: action + in: query + required: false + type: string + - name: data[string] + description: This is a request variable of the map type. The query format is "map_name[key]=value", e.g. If the map name is Age, the key type is string, and the value type is integer, the query parameter is expressed as Age["bob"]=18 + in: query + required: false + type: string + - name: metadata[string] + description: This is a request variable of the map type. The query format is "map_name[key]=value", e.g. If the map name is Age, the key type is string, and the value type is integer, the query parameter is expressed as Age["bob"]=18 + in: query + required: false + type: string + - name: start_time + in: query + required: false + type: string + - name: end_time + in: query + required: false + type: string + - name: page_size + in: query + required: false + type: integer + format: int32 + - name: page_num + in: query + required: false + type: integer + format: int32 + tags: + - Activity /v1beta1/check: post: summary: check permission for action on a resource by an user @@ -945,6 +997,24 @@ definitions: type: string namespace_id: type: string + Activity: + type: object + properties: + actor: + type: string + action: + type: string + data: + type: object + additionalProperties: + type: string + metadata: + type: object + additionalProperties: + type: string + timestamp: + type: string + format: date-time Any: type: object properties: @@ -1165,6 +1235,17 @@ definitions: items: type: object $ref: '#/definitions/Action' + ListActivitiesResponse: + type: object + properties: + count: + type: integer + format: int32 + activities: + type: array + items: + type: object + $ref: '#/definitions/Activity' ListGroupRelationsResponse: type: object properties: diff --git a/proto/v1beta1/shield.pb.go b/proto/v1beta1/shield.pb.go index e3feb073a..909b7bbca 100644 --- a/proto/v1beta1/shield.pb.go +++ b/proto/v1beta1/shield.pb.go @@ -6803,6 +6803,243 @@ func (x *CheckResourceUserPermissionResponse) GetResourcePermissions() []*CheckR return nil } +type Activity struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Actor string `protobuf:"bytes,1,opt,name=actor,proto3" json:"actor,omitempty"` + Action string `protobuf:"bytes,2,opt,name=action,proto3" json:"action,omitempty"` + Data map[string]string `protobuf:"bytes,3,rep,name=data,proto3" json:"data,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + Metadata map[string]string `protobuf:"bytes,4,rep,name=metadata,proto3" json:"metadata,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + Timestamp *timestamppb.Timestamp `protobuf:"bytes,5,opt,name=timestamp,proto3" json:"timestamp,omitempty"` +} + +func (x *Activity) Reset() { + *x = Activity{} + if protoimpl.UnsafeEnabled { + mi := &file_gotocompany_shield_v1beta1_shield_proto_msgTypes[124] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Activity) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Activity) ProtoMessage() {} + +func (x *Activity) ProtoReflect() protoreflect.Message { + mi := &file_gotocompany_shield_v1beta1_shield_proto_msgTypes[124] + 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 Activity.ProtoReflect.Descriptor instead. +func (*Activity) Descriptor() ([]byte, []int) { + return file_gotocompany_shield_v1beta1_shield_proto_rawDescGZIP(), []int{124} +} + +func (x *Activity) GetActor() string { + if x != nil { + return x.Actor + } + return "" +} + +func (x *Activity) GetAction() string { + if x != nil { + return x.Action + } + return "" +} + +func (x *Activity) GetData() map[string]string { + if x != nil { + return x.Data + } + return nil +} + +func (x *Activity) GetMetadata() map[string]string { + if x != nil { + return x.Metadata + } + return nil +} + +func (x *Activity) GetTimestamp() *timestamppb.Timestamp { + if x != nil { + return x.Timestamp + } + return nil +} + +type ListActivitiesRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Actor string `protobuf:"bytes,1,opt,name=actor,proto3" json:"actor,omitempty"` + Action string `protobuf:"bytes,2,opt,name=action,proto3" json:"action,omitempty"` + Data map[string]string `protobuf:"bytes,3,rep,name=data,proto3" json:"data,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + Metadata map[string]string `protobuf:"bytes,4,rep,name=metadata,proto3" json:"metadata,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + StartTime string `protobuf:"bytes,5,opt,name=start_time,json=startTime,proto3" json:"start_time,omitempty"` + EndTime string `protobuf:"bytes,6,opt,name=end_time,json=endTime,proto3" json:"end_time,omitempty"` + PageSize int32 `protobuf:"varint,7,opt,name=page_size,json=pageSize,proto3" json:"page_size,omitempty"` + PageNum int32 `protobuf:"varint,8,opt,name=page_num,json=pageNum,proto3" json:"page_num,omitempty"` +} + +func (x *ListActivitiesRequest) Reset() { + *x = ListActivitiesRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_gotocompany_shield_v1beta1_shield_proto_msgTypes[125] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ListActivitiesRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ListActivitiesRequest) ProtoMessage() {} + +func (x *ListActivitiesRequest) ProtoReflect() protoreflect.Message { + mi := &file_gotocompany_shield_v1beta1_shield_proto_msgTypes[125] + 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 ListActivitiesRequest.ProtoReflect.Descriptor instead. +func (*ListActivitiesRequest) Descriptor() ([]byte, []int) { + return file_gotocompany_shield_v1beta1_shield_proto_rawDescGZIP(), []int{125} +} + +func (x *ListActivitiesRequest) GetActor() string { + if x != nil { + return x.Actor + } + return "" +} + +func (x *ListActivitiesRequest) GetAction() string { + if x != nil { + return x.Action + } + return "" +} + +func (x *ListActivitiesRequest) GetData() map[string]string { + if x != nil { + return x.Data + } + return nil +} + +func (x *ListActivitiesRequest) GetMetadata() map[string]string { + if x != nil { + return x.Metadata + } + return nil +} + +func (x *ListActivitiesRequest) GetStartTime() string { + if x != nil { + return x.StartTime + } + return "" +} + +func (x *ListActivitiesRequest) GetEndTime() string { + if x != nil { + return x.EndTime + } + return "" +} + +func (x *ListActivitiesRequest) GetPageSize() int32 { + if x != nil { + return x.PageSize + } + return 0 +} + +func (x *ListActivitiesRequest) GetPageNum() int32 { + if x != nil { + return x.PageNum + } + return 0 +} + +type ListActivitiesResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Count int32 `protobuf:"varint,1,opt,name=count,proto3" json:"count,omitempty"` + Activities []*Activity `protobuf:"bytes,2,rep,name=activities,proto3" json:"activities,omitempty"` +} + +func (x *ListActivitiesResponse) Reset() { + *x = ListActivitiesResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_gotocompany_shield_v1beta1_shield_proto_msgTypes[126] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ListActivitiesResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ListActivitiesResponse) ProtoMessage() {} + +func (x *ListActivitiesResponse) ProtoReflect() protoreflect.Message { + mi := &file_gotocompany_shield_v1beta1_shield_proto_msgTypes[126] + 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 ListActivitiesResponse.ProtoReflect.Descriptor instead. +func (*ListActivitiesResponse) Descriptor() ([]byte, []int) { + return file_gotocompany_shield_v1beta1_shield_proto_rawDescGZIP(), []int{126} +} + +func (x *ListActivitiesResponse) GetCount() int32 { + if x != nil { + return x.Count + } + return 0 +} + +func (x *ListActivitiesResponse) GetActivities() []*Activity { + if x != nil { + return x.Activities + } + return nil +} + type CheckResourcePermissionResponse_ResourcePermissionResponse struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -6817,7 +7054,7 @@ type CheckResourcePermissionResponse_ResourcePermissionResponse struct { func (x *CheckResourcePermissionResponse_ResourcePermissionResponse) Reset() { *x = CheckResourcePermissionResponse_ResourcePermissionResponse{} if protoimpl.UnsafeEnabled { - mi := &file_gotocompany_shield_v1beta1_shield_proto_msgTypes[124] + mi := &file_gotocompany_shield_v1beta1_shield_proto_msgTypes[127] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6830,7 +7067,7 @@ func (x *CheckResourcePermissionResponse_ResourcePermissionResponse) String() st func (*CheckResourcePermissionResponse_ResourcePermissionResponse) ProtoMessage() {} func (x *CheckResourcePermissionResponse_ResourcePermissionResponse) ProtoReflect() protoreflect.Message { - mi := &file_gotocompany_shield_v1beta1_shield_proto_msgTypes[124] + mi := &file_gotocompany_shield_v1beta1_shield_proto_msgTypes[127] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6888,7 +7125,7 @@ type CheckResourceUserPermissionResponse_ResourcePermissionResponse struct { func (x *CheckResourceUserPermissionResponse_ResourcePermissionResponse) Reset() { *x = CheckResourceUserPermissionResponse_ResourcePermissionResponse{} if protoimpl.UnsafeEnabled { - mi := &file_gotocompany_shield_v1beta1_shield_proto_msgTypes[125] + mi := &file_gotocompany_shield_v1beta1_shield_proto_msgTypes[128] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6901,7 +7138,7 @@ func (x *CheckResourceUserPermissionResponse_ResourcePermissionResponse) String( func (*CheckResourceUserPermissionResponse_ResourcePermissionResponse) ProtoMessage() {} func (x *CheckResourceUserPermissionResponse_ResourcePermissionResponse) ProtoReflect() protoreflect.Message { - mi := &file_gotocompany_shield_v1beta1_shield_proto_msgTypes[125] + mi := &file_gotocompany_shield_v1beta1_shield_proto_msgTypes[128] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7854,523 +8091,596 @@ var file_gotocompany_shield_v1beta1_shield_proto_rawDesc = []byte{ 0x14, 0x72, 0x12, 0x32, 0x10, 0x5e, 0x5b, 0x41, 0x2d, 0x5a, 0x61, 0x2d, 0x7a, 0x30, 0x2d, 0x39, 0x5f, 0x2d, 0x5d, 0x2b, 0x24, 0x52, 0x0a, 0x70, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x18, 0x0a, 0x07, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x65, 0x64, 0x18, 0x04, 0x20, 0x01, - 0x28, 0x08, 0x52, 0x07, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x65, 0x64, 0x32, 0xc1, 0x3f, 0x0a, 0x0d, - 0x53, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x98, 0x01, - 0x0a, 0x09, 0x4c, 0x69, 0x73, 0x74, 0x55, 0x73, 0x65, 0x72, 0x73, 0x12, 0x2c, 0x2e, 0x67, 0x6f, - 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, - 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x55, 0x73, 0x65, - 0x72, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2d, 0x2e, 0x67, 0x6f, 0x74, 0x6f, - 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x2e, 0x76, - 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x55, 0x73, 0x65, 0x72, 0x73, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x2e, 0x92, 0x41, 0x15, 0x0a, 0x04, 0x55, - 0x73, 0x65, 0x72, 0x12, 0x0d, 0x47, 0x65, 0x74, 0x20, 0x41, 0x6c, 0x6c, 0x20, 0x55, 0x73, 0x65, - 0x72, 0x73, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x10, 0x12, 0x0e, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, - 0x61, 0x31, 0x2f, 0x75, 0x73, 0x65, 0x72, 0x73, 0x12, 0x9f, 0x01, 0x0a, 0x0a, 0x43, 0x72, 0x65, - 0x61, 0x74, 0x65, 0x55, 0x73, 0x65, 0x72, 0x12, 0x2d, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, - 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x2e, 0x76, 0x31, 0x62, - 0x65, 0x74, 0x61, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x55, 0x73, 0x65, 0x72, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2e, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, - 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x2e, 0x76, 0x31, 0x62, 0x65, - 0x74, 0x61, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x32, 0x92, 0x41, 0x13, 0x0a, 0x04, 0x55, 0x73, 0x65, - 0x72, 0x12, 0x0b, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x20, 0x55, 0x73, 0x65, 0x72, 0x82, 0xd3, - 0xe4, 0x93, 0x02, 0x16, 0x3a, 0x04, 0x62, 0x6f, 0x64, 0x79, 0x22, 0x0e, 0x2f, 0x76, 0x31, 0x62, - 0x65, 0x74, 0x61, 0x31, 0x2f, 0x75, 0x73, 0x65, 0x72, 0x73, 0x12, 0x9a, 0x01, 0x0a, 0x07, 0x47, - 0x65, 0x74, 0x55, 0x73, 0x65, 0x72, 0x12, 0x2a, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, - 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x2e, 0x76, 0x31, 0x62, 0x65, - 0x74, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x2b, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, - 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, - 0x47, 0x65, 0x74, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, - 0x36, 0x92, 0x41, 0x18, 0x0a, 0x04, 0x55, 0x73, 0x65, 0x72, 0x12, 0x10, 0x47, 0x65, 0x74, 0x20, - 0x61, 0x20, 0x55, 0x73, 0x65, 0x72, 0x20, 0x62, 0x79, 0x20, 0x69, 0x64, 0x82, 0xd3, 0xe4, 0x93, - 0x02, 0x15, 0x12, 0x13, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x75, 0x73, 0x65, - 0x72, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x12, 0xbb, 0x01, 0x0a, 0x0e, 0x4c, 0x69, 0x73, 0x74, - 0x55, 0x73, 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x12, 0x31, 0x2e, 0x67, 0x6f, 0x74, + 0x28, 0x08, 0x52, 0x07, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x65, 0x64, 0x22, 0xfc, 0x02, 0x0a, 0x08, + 0x41, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x61, 0x63, 0x74, 0x6f, + 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x61, 0x63, 0x74, 0x6f, 0x72, 0x12, 0x16, + 0x0a, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, + 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x42, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x03, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, + 0x6e, 0x79, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, + 0x31, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, 0x44, 0x61, 0x74, 0x61, 0x45, + 0x6e, 0x74, 0x72, 0x79, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x12, 0x4e, 0x0a, 0x08, 0x6d, 0x65, + 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x67, + 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, + 0x64, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x76, 0x69, + 0x74, 0x79, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x45, 0x6e, 0x74, 0x72, 0x79, + 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x38, 0x0a, 0x09, 0x74, 0x69, + 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, + 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, + 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, + 0x74, 0x61, 0x6d, 0x70, 0x1a, 0x37, 0x0a, 0x09, 0x44, 0x61, 0x74, 0x61, 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, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x3b, 0x0a, + 0x0d, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 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, 0x09, 0x52, + 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xdb, 0x03, 0x0a, 0x15, 0x4c, + 0x69, 0x73, 0x74, 0x41, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x69, 0x65, 0x73, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x61, 0x63, 0x74, 0x6f, 0x72, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x05, 0x61, 0x63, 0x74, 0x6f, 0x72, 0x12, 0x16, 0x0a, 0x06, 0x61, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x61, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x12, 0x4f, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x3b, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x73, + 0x68, 0x69, 0x65, 0x6c, 0x64, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4c, 0x69, + 0x73, 0x74, 0x41, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x69, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x2e, 0x44, 0x61, 0x74, 0x61, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x04, 0x64, + 0x61, 0x74, 0x61, 0x12, 0x5b, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, + 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3f, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, + 0x61, 0x6e, 0x79, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, + 0x61, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x69, 0x65, + 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, + 0x61, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, + 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x05, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x74, 0x61, 0x72, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x12, + 0x19, 0x0a, 0x08, 0x65, 0x6e, 0x64, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x07, 0x65, 0x6e, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x70, 0x61, + 0x67, 0x65, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x70, + 0x61, 0x67, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x19, 0x0a, 0x08, 0x70, 0x61, 0x67, 0x65, 0x5f, + 0x6e, 0x75, 0x6d, 0x18, 0x08, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x70, 0x61, 0x67, 0x65, 0x4e, + 0x75, 0x6d, 0x1a, 0x37, 0x0a, 0x09, 0x44, 0x61, 0x74, 0x61, 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, 0x09, + 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x3b, 0x0a, 0x0d, 0x4d, + 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 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, 0x09, 0x52, 0x05, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x74, 0x0a, 0x16, 0x4c, 0x69, 0x73, 0x74, + 0x41, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x69, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x05, 0x52, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x44, 0x0a, 0x0a, 0x61, 0x63, 0x74, 0x69, + 0x76, 0x69, 0x74, 0x69, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x67, + 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, + 0x64, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x76, 0x69, + 0x74, 0x79, 0x52, 0x0a, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x69, 0x65, 0x73, 0x32, 0xf9, + 0x40, 0x0a, 0x0d, 0x53, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, + 0x12, 0x98, 0x01, 0x0a, 0x09, 0x4c, 0x69, 0x73, 0x74, 0x55, 0x73, 0x65, 0x72, 0x73, 0x12, 0x2c, + 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x73, 0x68, 0x69, + 0x65, 0x6c, 0x64, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, + 0x55, 0x73, 0x65, 0x72, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2d, 0x2e, 0x67, + 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, + 0x64, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x55, 0x73, + 0x65, 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x2e, 0x92, 0x41, 0x15, + 0x0a, 0x04, 0x55, 0x73, 0x65, 0x72, 0x12, 0x0d, 0x47, 0x65, 0x74, 0x20, 0x41, 0x6c, 0x6c, 0x20, + 0x55, 0x73, 0x65, 0x72, 0x73, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x10, 0x12, 0x0e, 0x2f, 0x76, 0x31, + 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x75, 0x73, 0x65, 0x72, 0x73, 0x12, 0x9f, 0x01, 0x0a, 0x0a, + 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x55, 0x73, 0x65, 0x72, 0x12, 0x2d, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x2e, - 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x55, 0x73, 0x65, 0x72, - 0x47, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x32, 0x2e, + 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x55, 0x73, + 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2e, 0x2e, 0x67, 0x6f, 0x74, 0x6f, + 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x2e, 0x76, + 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x55, 0x73, 0x65, + 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x32, 0x92, 0x41, 0x13, 0x0a, 0x04, + 0x55, 0x73, 0x65, 0x72, 0x12, 0x0b, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x20, 0x55, 0x73, 0x65, + 0x72, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x16, 0x3a, 0x04, 0x62, 0x6f, 0x64, 0x79, 0x22, 0x0e, 0x2f, + 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x75, 0x73, 0x65, 0x72, 0x73, 0x12, 0x9a, 0x01, + 0x0a, 0x07, 0x47, 0x65, 0x74, 0x55, 0x73, 0x65, 0x72, 0x12, 0x2a, 0x2e, 0x67, 0x6f, 0x74, 0x6f, + 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x2e, 0x76, + 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2b, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, + 0x61, 0x6e, 0x79, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, + 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x22, 0x36, 0x92, 0x41, 0x18, 0x0a, 0x04, 0x55, 0x73, 0x65, 0x72, 0x12, 0x10, 0x47, + 0x65, 0x74, 0x20, 0x61, 0x20, 0x55, 0x73, 0x65, 0x72, 0x20, 0x62, 0x79, 0x20, 0x69, 0x64, 0x82, + 0xd3, 0xe4, 0x93, 0x02, 0x15, 0x12, 0x13, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, + 0x75, 0x73, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x12, 0xbb, 0x01, 0x0a, 0x0e, 0x4c, + 0x69, 0x73, 0x74, 0x55, 0x73, 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x12, 0x31, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x55, - 0x73, 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x22, 0x42, 0x92, 0x41, 0x1d, 0x0a, 0x04, 0x55, 0x73, 0x65, 0x72, 0x12, 0x15, 0x4c, 0x69, - 0x73, 0x74, 0x20, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x20, 0x6f, 0x66, 0x20, 0x61, 0x20, 0x55, - 0x73, 0x65, 0x72, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1c, 0x12, 0x1a, 0x2f, 0x76, 0x31, 0x62, 0x65, - 0x74, 0x61, 0x31, 0x2f, 0x75, 0x73, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x2f, 0x67, - 0x72, 0x6f, 0x75, 0x70, 0x73, 0x12, 0xaf, 0x01, 0x0a, 0x0e, 0x47, 0x65, 0x74, 0x43, 0x75, 0x72, - 0x72, 0x65, 0x6e, 0x74, 0x55, 0x73, 0x65, 0x72, 0x12, 0x31, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, - 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x2e, 0x76, 0x31, - 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, - 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x32, 0x2e, 0x67, 0x6f, + 0x73, 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x32, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x73, + 0x68, 0x69, 0x65, 0x6c, 0x64, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4c, 0x69, + 0x73, 0x74, 0x55, 0x73, 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x42, 0x92, 0x41, 0x1d, 0x0a, 0x04, 0x55, 0x73, 0x65, 0x72, 0x12, + 0x15, 0x4c, 0x69, 0x73, 0x74, 0x20, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x20, 0x6f, 0x66, 0x20, + 0x61, 0x20, 0x55, 0x73, 0x65, 0x72, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1c, 0x12, 0x1a, 0x2f, 0x76, + 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x75, 0x73, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x69, 0x64, + 0x7d, 0x2f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x12, 0xaf, 0x01, 0x0a, 0x0e, 0x47, 0x65, 0x74, + 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x55, 0x73, 0x65, 0x72, 0x12, 0x31, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x75, 0x72, 0x72, - 0x65, 0x6e, 0x74, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, - 0x36, 0x92, 0x41, 0x18, 0x0a, 0x04, 0x55, 0x73, 0x65, 0x72, 0x12, 0x10, 0x47, 0x65, 0x74, 0x20, - 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x20, 0x75, 0x73, 0x65, 0x72, 0x82, 0xd3, 0xe4, 0x93, - 0x02, 0x15, 0x12, 0x13, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x75, 0x73, 0x65, - 0x72, 0x73, 0x2f, 0x73, 0x65, 0x6c, 0x66, 0x12, 0xaa, 0x01, 0x0a, 0x0a, 0x55, 0x70, 0x64, 0x61, - 0x74, 0x65, 0x55, 0x73, 0x65, 0x72, 0x12, 0x2d, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, - 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x2e, 0x76, 0x31, 0x62, 0x65, - 0x74, 0x61, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2e, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, - 0x61, 0x6e, 0x79, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, - 0x61, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x3d, 0x92, 0x41, 0x19, 0x0a, 0x04, 0x55, 0x73, 0x65, 0x72, - 0x12, 0x11, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x20, 0x55, 0x73, 0x65, 0x72, 0x20, 0x62, 0x79, - 0x20, 0x49, 0x44, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1b, 0x3a, 0x04, 0x62, 0x6f, 0x64, 0x79, 0x1a, - 0x13, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x75, 0x73, 0x65, 0x72, 0x73, 0x2f, - 0x7b, 0x69, 0x64, 0x7d, 0x12, 0x84, 0x02, 0x0a, 0x1b, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x52, 0x65, - 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x55, 0x73, 0x65, 0x72, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x73, - 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x3e, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, - 0x6e, 0x79, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, - 0x31, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x55, - 0x73, 0x65, 0x72, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x3f, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, - 0x6e, 0x79, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, - 0x31, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x55, - 0x73, 0x65, 0x72, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x64, 0x92, 0x41, 0x3d, 0x0a, 0x05, 0x41, 0x75, 0x74, 0x68, - 0x7a, 0x12, 0x34, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x20, 0x70, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, - 0x69, 0x6f, 0x6e, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6f, - 0x6e, 0x20, 0x61, 0x20, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x20, 0x62, 0x79, 0x20, - 0x61, 0x6e, 0x20, 0x75, 0x73, 0x65, 0x72, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1e, 0x3a, 0x01, 0x2a, - 0x22, 0x19, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x75, 0x73, 0x65, 0x72, 0x73, - 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x2f, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x12, 0xc1, 0x01, 0x0a, 0x11, - 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x55, 0x73, 0x65, - 0x72, 0x12, 0x34, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, - 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x55, - 0x70, 0x64, 0x61, 0x74, 0x65, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x55, 0x73, 0x65, 0x72, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x35, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, + 0x65, 0x6e, 0x74, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x32, + 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x73, 0x68, 0x69, + 0x65, 0x6c, 0x64, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x43, + 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x22, 0x36, 0x92, 0x41, 0x18, 0x0a, 0x04, 0x55, 0x73, 0x65, 0x72, 0x12, 0x10, 0x47, + 0x65, 0x74, 0x20, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x20, 0x75, 0x73, 0x65, 0x72, 0x82, + 0xd3, 0xe4, 0x93, 0x02, 0x15, 0x12, 0x13, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, + 0x75, 0x73, 0x65, 0x72, 0x73, 0x2f, 0x73, 0x65, 0x6c, 0x66, 0x12, 0xaa, 0x01, 0x0a, 0x0a, 0x55, + 0x70, 0x64, 0x61, 0x74, 0x65, 0x55, 0x73, 0x65, 0x72, 0x12, 0x2d, 0x2e, 0x67, 0x6f, 0x74, 0x6f, + 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x2e, 0x76, + 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x55, 0x73, 0x65, + 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2e, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, + 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x2e, 0x76, 0x31, + 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x55, 0x73, 0x65, 0x72, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x3d, 0x92, 0x41, 0x19, 0x0a, 0x04, 0x55, + 0x73, 0x65, 0x72, 0x12, 0x11, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x20, 0x55, 0x73, 0x65, 0x72, + 0x20, 0x62, 0x79, 0x20, 0x49, 0x44, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1b, 0x3a, 0x04, 0x62, 0x6f, + 0x64, 0x79, 0x1a, 0x13, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x75, 0x73, 0x65, + 0x72, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x12, 0x84, 0x02, 0x0a, 0x1b, 0x43, 0x68, 0x65, 0x63, + 0x6b, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x55, 0x73, 0x65, 0x72, 0x50, 0x65, 0x72, + 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x3e, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, + 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x2e, 0x76, 0x31, 0x62, + 0x65, 0x74, 0x61, 0x31, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, + 0x63, 0x65, 0x55, 0x73, 0x65, 0x72, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x3f, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x2e, 0x76, 0x31, 0x62, - 0x65, 0x74, 0x61, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x43, 0x75, 0x72, 0x72, 0x65, - 0x6e, 0x74, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x3f, - 0x92, 0x41, 0x1b, 0x0a, 0x04, 0x55, 0x73, 0x65, 0x72, 0x12, 0x13, 0x55, 0x70, 0x64, 0x61, 0x74, - 0x65, 0x20, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x20, 0x55, 0x73, 0x65, 0x72, 0x82, 0xd3, - 0xe4, 0x93, 0x02, 0x1b, 0x3a, 0x04, 0x62, 0x6f, 0x64, 0x79, 0x1a, 0x13, 0x2f, 0x76, 0x31, 0x62, - 0x65, 0x74, 0x61, 0x31, 0x2f, 0x75, 0x73, 0x65, 0x72, 0x73, 0x2f, 0x73, 0x65, 0x6c, 0x66, 0x12, - 0xca, 0x01, 0x0a, 0x11, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, - 0x74, 0x61, 0x4b, 0x65, 0x79, 0x12, 0x34, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, + 0x65, 0x74, 0x61, 0x31, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, + 0x63, 0x65, 0x55, 0x73, 0x65, 0x72, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x64, 0x92, 0x41, 0x3d, 0x0a, 0x05, 0x41, + 0x75, 0x74, 0x68, 0x7a, 0x12, 0x34, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x20, 0x70, 0x65, 0x72, 0x6d, + 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x61, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x20, 0x6f, 0x6e, 0x20, 0x61, 0x20, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x20, + 0x62, 0x79, 0x20, 0x61, 0x6e, 0x20, 0x75, 0x73, 0x65, 0x72, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1e, + 0x3a, 0x01, 0x2a, 0x22, 0x19, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x75, 0x73, + 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x2f, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x12, 0xc1, + 0x01, 0x0a, 0x11, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, + 0x55, 0x73, 0x65, 0x72, 0x12, 0x34, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, + 0x6e, 0x79, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, + 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x55, + 0x73, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x35, 0x2e, 0x67, 0x6f, 0x74, + 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x2e, + 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x43, 0x75, + 0x72, 0x72, 0x65, 0x6e, 0x74, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x22, 0x3f, 0x92, 0x41, 0x1b, 0x0a, 0x04, 0x55, 0x73, 0x65, 0x72, 0x12, 0x13, 0x55, 0x70, + 0x64, 0x61, 0x74, 0x65, 0x20, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x20, 0x55, 0x73, 0x65, + 0x72, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1b, 0x3a, 0x04, 0x62, 0x6f, 0x64, 0x79, 0x1a, 0x13, 0x2f, + 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x75, 0x73, 0x65, 0x72, 0x73, 0x2f, 0x73, 0x65, + 0x6c, 0x66, 0x12, 0xca, 0x01, 0x0a, 0x11, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4d, 0x65, 0x74, + 0x61, 0x64, 0x61, 0x74, 0x61, 0x4b, 0x65, 0x79, 0x12, 0x34, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, + 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x2e, 0x76, 0x31, + 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4d, 0x65, 0x74, 0x61, + 0x64, 0x61, 0x74, 0x61, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x35, + 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x73, 0x68, 0x69, + 0x65, 0x6c, 0x64, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, + 0x74, 0x65, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x48, 0x92, 0x41, 0x23, 0x0a, 0x0c, 0x4d, 0x65, 0x74, 0x61, + 0x64, 0x61, 0x74, 0x61, 0x20, 0x4b, 0x65, 0x79, 0x12, 0x13, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, + 0x20, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x20, 0x4b, 0x65, 0x79, 0x82, 0xd3, 0xe4, + 0x93, 0x02, 0x1c, 0x3a, 0x04, 0x62, 0x6f, 0x64, 0x79, 0x22, 0x14, 0x2f, 0x76, 0x31, 0x62, 0x65, + 0x74, 0x61, 0x31, 0x2f, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x6b, 0x65, 0x79, 0x12, + 0x9e, 0x01, 0x0a, 0x0a, 0x4c, 0x69, 0x73, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x12, 0x2d, + 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x73, 0x68, 0x69, + 0x65, 0x6c, 0x64, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, + 0x47, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2e, 0x2e, + 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x73, 0x68, 0x69, 0x65, + 0x6c, 0x64, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x47, + 0x72, 0x6f, 0x75, 0x70, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x31, 0x92, + 0x41, 0x17, 0x0a, 0x05, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x0e, 0x47, 0x65, 0x74, 0x20, 0x61, + 0x6c, 0x6c, 0x20, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x11, 0x12, + 0x0f, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x73, + 0x12, 0xa5, 0x01, 0x0a, 0x0b, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, + 0x12, 0x2e, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x73, + 0x68, 0x69, 0x65, 0x6c, 0x64, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x43, 0x72, + 0x65, 0x61, 0x74, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x2f, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x73, + 0x68, 0x69, 0x65, 0x6c, 0x64, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x43, 0x72, + 0x65, 0x61, 0x74, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x22, 0x35, 0x92, 0x41, 0x15, 0x0a, 0x05, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x0c, 0x43, + 0x72, 0x65, 0x61, 0x74, 0x65, 0x20, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x82, 0xd3, 0xe4, 0x93, 0x02, + 0x17, 0x3a, 0x04, 0x62, 0x6f, 0x64, 0x79, 0x22, 0x0f, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, + 0x31, 0x2f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x12, 0x9e, 0x01, 0x0a, 0x08, 0x47, 0x65, 0x74, + 0x47, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x2b, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, - 0x61, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, - 0x61, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x35, 0x2e, 0x67, 0x6f, - 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, - 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4d, - 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x22, 0x48, 0x92, 0x41, 0x23, 0x0a, 0x0c, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, - 0x61, 0x20, 0x4b, 0x65, 0x79, 0x12, 0x13, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x20, 0x4d, 0x65, - 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x20, 0x4b, 0x65, 0x79, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1c, - 0x3a, 0x04, 0x62, 0x6f, 0x64, 0x79, 0x22, 0x14, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, - 0x2f, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x6b, 0x65, 0x79, 0x12, 0x9e, 0x01, 0x0a, - 0x0a, 0x4c, 0x69, 0x73, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x12, 0x2d, 0x2e, 0x67, 0x6f, - 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, - 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x47, 0x72, 0x6f, - 0x75, 0x70, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2e, 0x2e, 0x67, 0x6f, 0x74, + 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x1a, 0x2c, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, + 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, + 0x47, 0x65, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x22, 0x37, 0x92, 0x41, 0x18, 0x0a, 0x05, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x0f, 0x47, 0x65, + 0x74, 0x20, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x20, 0x62, 0x79, 0x20, 0x49, 0x44, 0x82, 0xd3, 0xe4, + 0x93, 0x02, 0x16, 0x12, 0x14, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x67, 0x72, + 0x6f, 0x75, 0x70, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x12, 0xb0, 0x01, 0x0a, 0x0b, 0x55, 0x70, + 0x64, 0x61, 0x74, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x2e, 0x2e, 0x67, 0x6f, 0x74, 0x6f, + 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x2e, 0x76, + 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x47, 0x72, 0x6f, + 0x75, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2f, 0x2e, 0x67, 0x6f, 0x74, 0x6f, + 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x2e, 0x76, + 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x47, 0x72, 0x6f, + 0x75, 0x70, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x40, 0x92, 0x41, 0x1b, 0x0a, + 0x05, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x12, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x20, 0x47, + 0x72, 0x6f, 0x75, 0x70, 0x20, 0x62, 0x79, 0x20, 0x49, 0x44, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1c, + 0x3a, 0x04, 0x62, 0x6f, 0x64, 0x79, 0x1a, 0x14, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, + 0x2f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x12, 0xd4, 0x01, 0x0a, + 0x12, 0x4c, 0x69, 0x73, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, 0x6c, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x73, 0x12, 0x35, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, + 0x79, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, + 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, 0x6c, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x36, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x47, 0x72, 0x6f, 0x75, - 0x70, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x31, 0x92, 0x41, 0x17, 0x0a, - 0x05, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x0e, 0x47, 0x65, 0x74, 0x20, 0x61, 0x6c, 0x6c, 0x20, - 0x47, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x11, 0x12, 0x0f, 0x2f, 0x76, - 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x12, 0xa5, 0x01, - 0x0a, 0x0b, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x2e, 0x2e, - 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x73, 0x68, 0x69, 0x65, - 0x6c, 0x64, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, - 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2f, 0x2e, + 0x70, 0x52, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x22, 0x4f, 0x92, 0x41, 0x26, 0x0a, 0x05, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x1d, + 0x47, 0x65, 0x74, 0x20, 0x61, 0x6c, 0x6c, 0x20, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x73, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x61, 0x20, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x82, 0xd3, 0xe4, + 0x93, 0x02, 0x20, 0x12, 0x1e, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x67, 0x72, + 0x6f, 0x75, 0x70, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x2f, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x73, 0x12, 0x98, 0x01, 0x0a, 0x09, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x6f, 0x6c, 0x65, + 0x73, 0x12, 0x2c, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, + 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4c, + 0x69, 0x73, 0x74, 0x52, 0x6f, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x2d, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x73, 0x68, + 0x69, 0x65, 0x6c, 0x64, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4c, 0x69, 0x73, + 0x74, 0x52, 0x6f, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x2e, + 0x92, 0x41, 0x15, 0x0a, 0x04, 0x52, 0x6f, 0x6c, 0x65, 0x12, 0x0d, 0x47, 0x65, 0x74, 0x20, 0x61, + 0x6c, 0x6c, 0x20, 0x52, 0x6f, 0x6c, 0x65, 0x73, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x10, 0x12, 0x0e, + 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x72, 0x6f, 0x6c, 0x65, 0x73, 0x12, 0x9f, + 0x01, 0x0a, 0x0a, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x6f, 0x6c, 0x65, 0x12, 0x2d, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, - 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x35, - 0x92, 0x41, 0x15, 0x0a, 0x05, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x0c, 0x43, 0x72, 0x65, 0x61, - 0x74, 0x65, 0x20, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x17, 0x3a, 0x04, - 0x62, 0x6f, 0x64, 0x79, 0x22, 0x0f, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x67, - 0x72, 0x6f, 0x75, 0x70, 0x73, 0x12, 0x9e, 0x01, 0x0a, 0x08, 0x47, 0x65, 0x74, 0x47, 0x72, 0x6f, - 0x75, 0x70, 0x12, 0x2b, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, - 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, - 0x47, 0x65, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x2c, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x73, 0x68, - 0x69, 0x65, 0x6c, 0x64, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, - 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x37, 0x92, - 0x41, 0x18, 0x0a, 0x05, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x0f, 0x47, 0x65, 0x74, 0x20, 0x47, - 0x72, 0x6f, 0x75, 0x70, 0x20, 0x62, 0x79, 0x20, 0x49, 0x44, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x16, - 0x12, 0x14, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x67, 0x72, 0x6f, 0x75, 0x70, - 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x12, 0xb0, 0x01, 0x0a, 0x0b, 0x55, 0x70, 0x64, 0x61, 0x74, - 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x2e, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, - 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x2e, 0x76, 0x31, 0x62, 0x65, - 0x74, 0x61, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2f, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, + 0x65, 0x52, 0x6f, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2e, 0x2e, 0x67, + 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, + 0x64, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, + 0x52, 0x6f, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x32, 0x92, 0x41, + 0x13, 0x0a, 0x04, 0x52, 0x6f, 0x6c, 0x65, 0x12, 0x0b, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x20, + 0x52, 0x6f, 0x6c, 0x65, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x16, 0x3a, 0x04, 0x62, 0x6f, 0x64, 0x79, + 0x22, 0x0e, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x72, 0x6f, 0x6c, 0x65, 0x73, + 0x12, 0xc7, 0x01, 0x0a, 0x11, 0x4c, 0x69, 0x73, 0x74, 0x4f, 0x72, 0x67, 0x61, 0x6e, 0x69, 0x7a, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x34, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x2e, 0x76, 0x31, 0x62, 0x65, - 0x74, 0x61, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x40, 0x92, 0x41, 0x1b, 0x0a, 0x05, 0x47, 0x72, - 0x6f, 0x75, 0x70, 0x12, 0x12, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x20, 0x47, 0x72, 0x6f, 0x75, - 0x70, 0x20, 0x62, 0x79, 0x20, 0x49, 0x44, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1c, 0x3a, 0x04, 0x62, - 0x6f, 0x64, 0x79, 0x1a, 0x14, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x67, 0x72, - 0x6f, 0x75, 0x70, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x12, 0xd4, 0x01, 0x0a, 0x12, 0x4c, 0x69, - 0x73, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, - 0x12, 0x35, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x73, - 0x68, 0x69, 0x65, 0x6c, 0x64, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4c, 0x69, - 0x73, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x36, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, - 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x2e, 0x76, 0x31, 0x62, - 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, - 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, - 0x4f, 0x92, 0x41, 0x26, 0x0a, 0x05, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x1d, 0x47, 0x65, 0x74, - 0x20, 0x61, 0x6c, 0x6c, 0x20, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x66, - 0x6f, 0x72, 0x20, 0x61, 0x20, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x20, - 0x12, 0x1e, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x67, 0x72, 0x6f, 0x75, 0x70, - 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x2f, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, - 0x12, 0x98, 0x01, 0x0a, 0x09, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x6f, 0x6c, 0x65, 0x73, 0x12, 0x2c, - 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x73, 0x68, 0x69, - 0x65, 0x6c, 0x64, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, - 0x52, 0x6f, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2d, 0x2e, 0x67, + 0x74, 0x61, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x4f, 0x72, 0x67, 0x61, 0x6e, 0x69, 0x7a, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x35, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, - 0x64, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x6f, - 0x6c, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x2e, 0x92, 0x41, 0x15, - 0x0a, 0x04, 0x52, 0x6f, 0x6c, 0x65, 0x12, 0x0d, 0x47, 0x65, 0x74, 0x20, 0x61, 0x6c, 0x6c, 0x20, - 0x52, 0x6f, 0x6c, 0x65, 0x73, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x10, 0x12, 0x0e, 0x2f, 0x76, 0x31, - 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x72, 0x6f, 0x6c, 0x65, 0x73, 0x12, 0x9f, 0x01, 0x0a, 0x0a, - 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x6f, 0x6c, 0x65, 0x12, 0x2d, 0x2e, 0x67, 0x6f, 0x74, - 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x2e, - 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x6f, - 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2e, 0x2e, 0x67, 0x6f, 0x74, 0x6f, - 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x2e, 0x76, - 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x6f, 0x6c, - 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x32, 0x92, 0x41, 0x13, 0x0a, 0x04, - 0x52, 0x6f, 0x6c, 0x65, 0x12, 0x0b, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x20, 0x52, 0x6f, 0x6c, - 0x65, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x16, 0x3a, 0x04, 0x62, 0x6f, 0x64, 0x79, 0x22, 0x0e, 0x2f, - 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x72, 0x6f, 0x6c, 0x65, 0x73, 0x12, 0xc7, 0x01, - 0x0a, 0x11, 0x4c, 0x69, 0x73, 0x74, 0x4f, 0x72, 0x67, 0x61, 0x6e, 0x69, 0x7a, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x73, 0x12, 0x34, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, - 0x79, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, - 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x4f, 0x72, 0x67, 0x61, 0x6e, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x35, 0x2e, 0x67, 0x6f, 0x74, 0x6f, - 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x2e, 0x76, - 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x4f, 0x72, 0x67, 0x61, 0x6e, - 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x22, 0x45, 0x92, 0x41, 0x24, 0x0a, 0x0c, 0x4f, 0x72, 0x67, 0x61, 0x6e, 0x69, 0x7a, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x12, 0x14, 0x47, 0x65, 0x74, 0x20, 0x61, 0x6c, 0x6c, 0x20, 0x4f, 0x72, 0x67, - 0x61, 0x6e, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x18, 0x12, - 0x16, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x6f, 0x72, 0x67, 0x61, 0x6e, 0x69, - 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0xcf, 0x01, 0x0a, 0x12, 0x43, 0x72, 0x65, 0x61, + 0x64, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x4f, 0x72, + 0x67, 0x61, 0x6e, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x22, 0x45, 0x92, 0x41, 0x24, 0x0a, 0x0c, 0x4f, 0x72, 0x67, 0x61, 0x6e, 0x69, + 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x14, 0x47, 0x65, 0x74, 0x20, 0x61, 0x6c, 0x6c, 0x20, + 0x4f, 0x72, 0x67, 0x61, 0x6e, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x82, 0xd3, 0xe4, 0x93, + 0x02, 0x18, 0x12, 0x16, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x6f, 0x72, 0x67, + 0x61, 0x6e, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0xcf, 0x01, 0x0a, 0x12, 0x43, + 0x72, 0x65, 0x61, 0x74, 0x65, 0x4f, 0x72, 0x67, 0x61, 0x6e, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x12, 0x35, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, + 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x43, + 0x72, 0x65, 0x61, 0x74, 0x65, 0x4f, 0x72, 0x67, 0x61, 0x6e, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x36, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, + 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x2e, 0x76, 0x31, + 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4f, 0x72, 0x67, 0x61, + 0x6e, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x22, 0x4a, 0x92, 0x41, 0x23, 0x0a, 0x0c, 0x4f, 0x72, 0x67, 0x61, 0x6e, 0x69, 0x7a, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x12, 0x13, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x20, 0x4f, 0x72, 0x67, 0x61, + 0x6e, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1e, 0x3a, 0x04, + 0x62, 0x6f, 0x64, 0x79, 0x22, 0x16, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x6f, + 0x72, 0x67, 0x61, 0x6e, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0xc8, 0x01, 0x0a, + 0x0f, 0x47, 0x65, 0x74, 0x4f, 0x72, 0x67, 0x61, 0x6e, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x12, 0x32, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x73, + 0x68, 0x69, 0x65, 0x6c, 0x64, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x47, 0x65, + 0x74, 0x4f, 0x72, 0x67, 0x61, 0x6e, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x33, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, + 0x6e, 0x79, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, + 0x31, 0x2e, 0x47, 0x65, 0x74, 0x4f, 0x72, 0x67, 0x61, 0x6e, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x4c, 0x92, 0x41, 0x26, 0x0a, 0x0c, + 0x4f, 0x72, 0x67, 0x61, 0x6e, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x16, 0x47, 0x65, + 0x74, 0x20, 0x4f, 0x72, 0x67, 0x61, 0x6e, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x62, + 0x79, 0x20, 0x49, 0x44, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1d, 0x12, 0x1b, 0x2f, 0x76, 0x31, 0x62, + 0x65, 0x74, 0x61, 0x31, 0x2f, 0x6f, 0x72, 0x67, 0x61, 0x6e, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x12, 0xda, 0x01, 0x0a, 0x12, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4f, 0x72, 0x67, 0x61, 0x6e, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x35, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x73, 0x68, 0x69, - 0x65, 0x6c, 0x64, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, + 0x65, 0x6c, 0x64, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4f, 0x72, 0x67, 0x61, 0x6e, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x36, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, - 0x61, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4f, 0x72, 0x67, 0x61, 0x6e, 0x69, 0x7a, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x4a, 0x92, - 0x41, 0x23, 0x0a, 0x0c, 0x4f, 0x72, 0x67, 0x61, 0x6e, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x12, 0x13, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x20, 0x4f, 0x72, 0x67, 0x61, 0x6e, 0x69, 0x7a, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1e, 0x3a, 0x04, 0x62, 0x6f, 0x64, - 0x79, 0x22, 0x16, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x6f, 0x72, 0x67, 0x61, - 0x6e, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0xc8, 0x01, 0x0a, 0x0f, 0x47, 0x65, - 0x74, 0x4f, 0x72, 0x67, 0x61, 0x6e, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x32, 0x2e, - 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x73, 0x68, 0x69, 0x65, - 0x6c, 0x64, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x4f, 0x72, - 0x67, 0x61, 0x6e, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x33, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, - 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x47, - 0x65, 0x74, 0x4f, 0x72, 0x67, 0x61, 0x6e, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x4c, 0x92, 0x41, 0x26, 0x0a, 0x0c, 0x4f, 0x72, 0x67, - 0x61, 0x6e, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x16, 0x47, 0x65, 0x74, 0x20, 0x4f, - 0x72, 0x67, 0x61, 0x6e, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x62, 0x79, 0x20, 0x49, - 0x44, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1d, 0x12, 0x1b, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, + 0x61, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4f, 0x72, 0x67, 0x61, 0x6e, 0x69, 0x7a, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x55, 0x92, + 0x41, 0x29, 0x0a, 0x0c, 0x4f, 0x72, 0x67, 0x61, 0x6e, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x12, 0x19, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x20, 0x4f, 0x72, 0x67, 0x61, 0x6e, 0x69, 0x7a, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x62, 0x79, 0x20, 0x49, 0x44, 0x82, 0xd3, 0xe4, 0x93, 0x02, + 0x23, 0x3a, 0x04, 0x62, 0x6f, 0x64, 0x79, 0x1a, 0x1b, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x6f, 0x72, 0x67, 0x61, 0x6e, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, - 0x7b, 0x69, 0x64, 0x7d, 0x12, 0xda, 0x01, 0x0a, 0x12, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4f, - 0x72, 0x67, 0x61, 0x6e, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x35, 0x2e, 0x67, 0x6f, - 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, - 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4f, - 0x72, 0x67, 0x61, 0x6e, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x36, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, - 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, - 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4f, 0x72, 0x67, 0x61, 0x6e, 0x69, 0x7a, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x55, 0x92, 0x41, 0x29, 0x0a, - 0x0c, 0x4f, 0x72, 0x67, 0x61, 0x6e, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x19, 0x55, - 0x70, 0x64, 0x61, 0x74, 0x65, 0x20, 0x4f, 0x72, 0x67, 0x61, 0x6e, 0x69, 0x7a, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x20, 0x62, 0x79, 0x20, 0x49, 0x44, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x23, 0x3a, 0x04, - 0x62, 0x6f, 0x64, 0x79, 0x1a, 0x1b, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x6f, - 0x72, 0x67, 0x61, 0x6e, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x7b, 0x69, 0x64, - 0x7d, 0x12, 0xef, 0x01, 0x0a, 0x16, 0x4c, 0x69, 0x73, 0x74, 0x4f, 0x72, 0x67, 0x61, 0x6e, 0x69, - 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x73, 0x12, 0x39, 0x2e, 0x67, - 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, - 0x64, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x4f, 0x72, - 0x67, 0x61, 0x6e, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x73, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x3a, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, + 0x7b, 0x69, 0x64, 0x7d, 0x12, 0xef, 0x01, 0x0a, 0x16, 0x4c, 0x69, 0x73, 0x74, 0x4f, 0x72, 0x67, + 0x61, 0x6e, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x73, 0x12, + 0x39, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x73, 0x68, + 0x69, 0x65, 0x6c, 0x64, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4c, 0x69, 0x73, + 0x74, 0x4f, 0x72, 0x67, 0x61, 0x6e, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x41, 0x64, 0x6d, + 0x69, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x3a, 0x2e, 0x67, 0x6f, 0x74, + 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x2e, + 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x4f, 0x72, 0x67, 0x61, + 0x6e, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x73, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x5e, 0x92, 0x41, 0x31, 0x0a, 0x0c, 0x4f, 0x72, 0x67, + 0x61, 0x6e, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x21, 0x47, 0x65, 0x74, 0x20, 0x61, + 0x6c, 0x6c, 0x20, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x73, 0x20, 0x6f, 0x66, 0x20, 0x61, 0x6e, 0x20, + 0x4f, 0x72, 0x67, 0x61, 0x6e, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x82, 0xd3, 0xe4, 0x93, + 0x02, 0x24, 0x12, 0x22, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x6f, 0x72, 0x67, + 0x61, 0x6e, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x2f, + 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x73, 0x12, 0xa9, 0x01, 0x0a, 0x0c, 0x4c, 0x69, 0x73, 0x74, 0x50, + 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x12, 0x2f, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x2e, 0x76, 0x31, 0x62, - 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x4f, 0x72, 0x67, 0x61, 0x6e, 0x69, 0x7a, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x22, 0x5e, 0x92, 0x41, 0x31, 0x0a, 0x0c, 0x4f, 0x72, 0x67, 0x61, 0x6e, 0x69, - 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x21, 0x47, 0x65, 0x74, 0x20, 0x61, 0x6c, 0x6c, 0x20, - 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x73, 0x20, 0x6f, 0x66, 0x20, 0x61, 0x6e, 0x20, 0x4f, 0x72, 0x67, - 0x61, 0x6e, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x24, 0x12, - 0x22, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x6f, 0x72, 0x67, 0x61, 0x6e, 0x69, - 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x2f, 0x61, 0x64, 0x6d, - 0x69, 0x6e, 0x73, 0x12, 0xa9, 0x01, 0x0a, 0x0c, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x72, 0x6f, 0x6a, - 0x65, 0x63, 0x74, 0x73, 0x12, 0x2f, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, + 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, + 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x30, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, + 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x2e, 0x76, 0x31, + 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, + 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x36, 0x92, 0x41, 0x1a, 0x0a, + 0x07, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x0f, 0x47, 0x65, 0x74, 0x20, 0x61, 0x6c, + 0x6c, 0x20, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x13, 0x12, + 0x11, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, + 0x74, 0x73, 0x12, 0xb1, 0x01, 0x0a, 0x0d, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x50, 0x72, 0x6f, + 0x6a, 0x65, 0x63, 0x74, 0x12, 0x30, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, - 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x30, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, + 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x31, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, + 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x2e, 0x76, 0x31, 0x62, 0x65, + 0x74, 0x61, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, + 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x3b, 0x92, 0x41, 0x19, 0x0a, 0x07, + 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x0e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x20, + 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x19, 0x3a, 0x04, 0x62, + 0x6f, 0x64, 0x79, 0x22, 0x11, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x70, 0x72, + 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x12, 0xaa, 0x01, 0x0a, 0x0a, 0x47, 0x65, 0x74, 0x50, 0x72, + 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x2d, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, - 0x61, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x36, 0x92, 0x41, 0x1a, 0x0a, 0x07, 0x50, 0x72, - 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x0f, 0x47, 0x65, 0x74, 0x20, 0x61, 0x6c, 0x6c, 0x20, 0x50, - 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x13, 0x12, 0x11, 0x2f, 0x76, - 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x12, - 0xb1, 0x01, 0x0a, 0x0d, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, - 0x74, 0x12, 0x30, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, - 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x43, - 0x72, 0x65, 0x61, 0x74, 0x65, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x31, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, - 0x79, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, - 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x3b, 0x92, 0x41, 0x19, 0x0a, 0x07, 0x50, 0x72, 0x6f, - 0x6a, 0x65, 0x63, 0x74, 0x12, 0x0e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x20, 0x50, 0x72, 0x6f, - 0x6a, 0x65, 0x63, 0x74, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x19, 0x3a, 0x04, 0x62, 0x6f, 0x64, 0x79, - 0x22, 0x11, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, - 0x63, 0x74, 0x73, 0x12, 0xaa, 0x01, 0x0a, 0x0a, 0x47, 0x65, 0x74, 0x50, 0x72, 0x6f, 0x6a, 0x65, - 0x63, 0x74, 0x12, 0x2d, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, - 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, - 0x47, 0x65, 0x74, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x2e, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, - 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x47, - 0x65, 0x74, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x22, 0x3d, 0x92, 0x41, 0x1c, 0x0a, 0x07, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x12, - 0x11, 0x47, 0x65, 0x74, 0x20, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x62, 0x79, 0x20, - 0x49, 0x44, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x18, 0x12, 0x16, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, - 0x61, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, - 0x12, 0xbc, 0x01, 0x0a, 0x0d, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x50, 0x72, 0x6f, 0x6a, 0x65, - 0x63, 0x74, 0x12, 0x30, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, - 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, - 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x31, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, + 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2e, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, - 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x46, 0x92, 0x41, 0x1f, 0x0a, 0x07, 0x50, 0x72, - 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x14, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x20, 0x50, 0x72, - 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x62, 0x79, 0x20, 0x49, 0x44, 0x82, 0xd3, 0xe4, 0x93, 0x02, - 0x1e, 0x3a, 0x04, 0x62, 0x6f, 0x64, 0x79, 0x1a, 0x16, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, - 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x12, - 0xd0, 0x01, 0x0a, 0x11, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x41, - 0x64, 0x6d, 0x69, 0x6e, 0x73, 0x12, 0x34, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, + 0x31, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x3d, 0x92, 0x41, 0x1c, 0x0a, 0x07, 0x50, 0x72, 0x6f, 0x6a, 0x65, + 0x63, 0x74, 0x12, 0x11, 0x47, 0x65, 0x74, 0x20, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x20, + 0x62, 0x79, 0x20, 0x49, 0x44, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x18, 0x12, 0x16, 0x2f, 0x76, 0x31, + 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, + 0x69, 0x64, 0x7d, 0x12, 0xbc, 0x01, 0x0a, 0x0d, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x50, 0x72, + 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x30, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, - 0x61, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x41, 0x64, - 0x6d, 0x69, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x35, 0x2e, 0x67, 0x6f, - 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, - 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x72, 0x6f, - 0x6a, 0x65, 0x63, 0x74, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x22, 0x4e, 0x92, 0x41, 0x26, 0x0a, 0x07, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, - 0x12, 0x1b, 0x47, 0x65, 0x74, 0x20, 0x61, 0x6c, 0x6c, 0x20, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x73, - 0x20, 0x6f, 0x66, 0x20, 0x61, 0x20, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x82, 0xd3, 0xe4, - 0x93, 0x02, 0x1f, 0x12, 0x1d, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x70, 0x72, - 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x2f, 0x61, 0x64, 0x6d, 0x69, - 0x6e, 0x73, 0x12, 0xa4, 0x01, 0x0a, 0x0b, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x73, 0x12, 0x2e, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, - 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, - 0x4c, 0x69, 0x73, 0x74, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x2f, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, - 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, - 0x4c, 0x69, 0x73, 0x74, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x22, 0x34, 0x92, 0x41, 0x19, 0x0a, 0x06, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x12, 0x0f, 0x47, 0x65, 0x74, 0x20, 0x61, 0x6c, 0x6c, 0x20, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x73, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x12, 0x12, 0x10, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, - 0x31, 0x2f, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0xab, 0x01, 0x0a, 0x0c, 0x43, 0x72, - 0x65, 0x61, 0x74, 0x65, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x2f, 0x2e, 0x67, 0x6f, 0x74, - 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x2e, - 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x41, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x30, 0x2e, 0x67, 0x6f, - 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, - 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x41, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x38, 0x92, - 0x41, 0x17, 0x0a, 0x06, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x0d, 0x43, 0x72, 0x65, 0x61, - 0x74, 0x65, 0x20, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x18, 0x3a, - 0x04, 0x62, 0x6f, 0x64, 0x79, 0x22, 0x10, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, - 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0xb6, 0x01, 0x0a, 0x0e, 0x4c, 0x69, 0x73, 0x74, - 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x12, 0x31, 0x2e, 0x67, 0x6f, 0x74, - 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x2e, - 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x4e, 0x61, 0x6d, 0x65, - 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x32, 0x2e, + 0x61, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x31, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, + 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x2e, 0x76, 0x31, 0x62, + 0x65, 0x74, 0x61, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x50, 0x72, 0x6f, 0x6a, 0x65, + 0x63, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x46, 0x92, 0x41, 0x1f, 0x0a, + 0x07, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x14, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, + 0x20, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x62, 0x79, 0x20, 0x49, 0x44, 0x82, 0xd3, + 0xe4, 0x93, 0x02, 0x1e, 0x3a, 0x04, 0x62, 0x6f, 0x64, 0x79, 0x1a, 0x16, 0x2f, 0x76, 0x31, 0x62, + 0x65, 0x74, 0x61, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x69, + 0x64, 0x7d, 0x12, 0xd0, 0x01, 0x0a, 0x11, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x72, 0x6f, 0x6a, 0x65, + 0x63, 0x74, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x73, 0x12, 0x34, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, + 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x2e, 0x76, 0x31, + 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, + 0x74, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x35, + 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x73, 0x68, 0x69, + 0x65, 0x6c, 0x64, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, + 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x73, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x4e, 0x92, 0x41, 0x26, 0x0a, 0x07, 0x50, 0x72, 0x6f, 0x6a, + 0x65, 0x63, 0x74, 0x12, 0x1b, 0x47, 0x65, 0x74, 0x20, 0x61, 0x6c, 0x6c, 0x20, 0x41, 0x64, 0x6d, + 0x69, 0x6e, 0x73, 0x20, 0x6f, 0x66, 0x20, 0x61, 0x20, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, + 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1f, 0x12, 0x1d, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, + 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x2f, 0x61, + 0x64, 0x6d, 0x69, 0x6e, 0x73, 0x12, 0xa4, 0x01, 0x0a, 0x0b, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x2e, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, + 0x61, 0x6e, 0x79, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, + 0x61, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2f, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, + 0x61, 0x6e, 0x79, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, + 0x61, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x34, 0x92, 0x41, 0x19, 0x0a, 0x06, 0x41, 0x63, 0x74, + 0x69, 0x6f, 0x6e, 0x12, 0x0f, 0x47, 0x65, 0x74, 0x20, 0x61, 0x6c, 0x6c, 0x20, 0x41, 0x63, 0x74, + 0x69, 0x6f, 0x6e, 0x73, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x12, 0x12, 0x10, 0x2f, 0x76, 0x31, 0x62, + 0x65, 0x74, 0x61, 0x31, 0x2f, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0xab, 0x01, 0x0a, + 0x0c, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x2f, 0x2e, + 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x73, 0x68, 0x69, 0x65, + 0x6c, 0x64, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, + 0x65, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x30, + 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x73, 0x68, 0x69, + 0x65, 0x6c, 0x64, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, + 0x74, 0x65, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x22, 0x38, 0x92, 0x41, 0x17, 0x0a, 0x06, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x0d, 0x43, + 0x72, 0x65, 0x61, 0x74, 0x65, 0x20, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x82, 0xd3, 0xe4, 0x93, + 0x02, 0x18, 0x3a, 0x04, 0x62, 0x6f, 0x64, 0x79, 0x22, 0x10, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, + 0x61, 0x31, 0x2f, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0xb6, 0x01, 0x0a, 0x0e, 0x4c, + 0x69, 0x73, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x12, 0x31, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x4e, - 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x22, 0x3d, 0x92, 0x41, 0x1f, 0x0a, 0x09, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, - 0x65, 0x12, 0x12, 0x47, 0x65, 0x74, 0x20, 0x61, 0x6c, 0x6c, 0x20, 0x4e, 0x61, 0x6d, 0x65, 0x73, - 0x70, 0x61, 0x63, 0x65, 0x73, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x15, 0x12, 0x13, 0x2f, 0x76, 0x31, - 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, - 0x12, 0xbd, 0x01, 0x0a, 0x0f, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x73, - 0x70, 0x61, 0x63, 0x65, 0x12, 0x32, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, + 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x32, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x73, + 0x68, 0x69, 0x65, 0x6c, 0x64, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4c, 0x69, + 0x73, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x3d, 0x92, 0x41, 0x1f, 0x0a, 0x09, 0x4e, 0x61, 0x6d, 0x65, 0x73, + 0x70, 0x61, 0x63, 0x65, 0x12, 0x12, 0x47, 0x65, 0x74, 0x20, 0x61, 0x6c, 0x6c, 0x20, 0x4e, 0x61, + 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x15, 0x12, 0x13, + 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, + 0x63, 0x65, 0x73, 0x12, 0xbd, 0x01, 0x0a, 0x0f, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4e, 0x61, + 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x32, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, + 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x2e, 0x76, 0x31, 0x62, + 0x65, 0x74, 0x61, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x73, + 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x33, 0x2e, 0x67, 0x6f, + 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, + 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4e, + 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x22, 0x41, 0x92, 0x41, 0x1d, 0x0a, 0x09, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, + 0x12, 0x10, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x20, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, + 0x63, 0x65, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1b, 0x3a, 0x04, 0x62, 0x6f, 0x64, 0x79, 0x22, 0x13, + 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, + 0x63, 0x65, 0x73, 0x12, 0xb6, 0x01, 0x0a, 0x0c, 0x47, 0x65, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x73, + 0x70, 0x61, 0x63, 0x65, 0x12, 0x2f, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, + 0x6e, 0x79, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, + 0x31, 0x2e, 0x47, 0x65, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x30, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, + 0x61, 0x6e, 0x79, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, + 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x43, 0x92, 0x41, 0x20, 0x0a, 0x09, 0x4e, 0x61, + 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x13, 0x47, 0x65, 0x74, 0x20, 0x4e, 0x61, 0x6d, + 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x20, 0x62, 0x79, 0x20, 0x49, 0x44, 0x82, 0xd3, 0xe4, 0x93, + 0x02, 0x1a, 0x12, 0x18, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x6e, 0x61, 0x6d, + 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x12, 0xc8, 0x01, 0x0a, + 0x0f, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, + 0x12, 0x32, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x73, + 0x68, 0x69, 0x65, 0x6c, 0x64, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x55, 0x70, + 0x64, 0x61, 0x74, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x33, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, - 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, - 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x33, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, + 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, + 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x4c, 0x92, 0x41, 0x23, 0x0a, 0x09, + 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x16, 0x55, 0x70, 0x64, 0x61, 0x74, + 0x65, 0x20, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x20, 0x62, 0x79, 0x20, 0x49, + 0x44, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x20, 0x3a, 0x04, 0x62, 0x6f, 0x64, 0x79, 0x1a, 0x18, 0x2f, + 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, + 0x65, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x12, 0xa7, 0x01, 0x0a, 0x0c, 0x4c, 0x69, 0x73, 0x74, + 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x69, 0x65, 0x73, 0x12, 0x2f, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x2e, 0x76, 0x31, - 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4e, 0x61, 0x6d, 0x65, - 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x41, 0x92, - 0x41, 0x1d, 0x0a, 0x09, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x10, 0x43, - 0x72, 0x65, 0x61, 0x74, 0x65, 0x20, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x82, - 0xd3, 0xe4, 0x93, 0x02, 0x1b, 0x3a, 0x04, 0x62, 0x6f, 0x64, 0x79, 0x22, 0x13, 0x2f, 0x76, 0x31, - 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, - 0x12, 0xb6, 0x01, 0x0a, 0x0c, 0x47, 0x65, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, - 0x65, 0x12, 0x2f, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, - 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x47, - 0x65, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x30, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, + 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x69, + 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x30, 0x2e, 0x67, 0x6f, 0x74, 0x6f, + 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x2e, 0x76, + 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x6f, 0x6c, 0x69, 0x63, + 0x69, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x34, 0x92, 0x41, 0x18, + 0x0a, 0x06, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x12, 0x0e, 0x47, 0x65, 0x74, 0x20, 0x61, 0x6c, + 0x6c, 0x20, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x13, 0x12, 0x11, + 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x69, 0x65, + 0x73, 0x12, 0xac, 0x01, 0x0a, 0x0c, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x50, 0x6f, 0x6c, 0x69, + 0x63, 0x79, 0x12, 0x2f, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, + 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, + 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x30, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, + 0x79, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, + 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x39, 0x92, 0x41, 0x17, 0x0a, 0x06, 0x50, 0x6f, 0x6c, 0x69, + 0x63, 0x79, 0x12, 0x0d, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x20, 0x50, 0x6f, 0x6c, 0x69, 0x63, + 0x79, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x19, 0x3a, 0x04, 0x62, 0x6f, 0x64, 0x79, 0x22, 0x11, 0x2f, + 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x69, 0x65, 0x73, + 0x12, 0xb0, 0x01, 0x0a, 0x0d, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x73, 0x12, 0x30, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, - 0x47, 0x65, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x43, 0x92, 0x41, 0x20, 0x0a, 0x09, 0x4e, 0x61, 0x6d, 0x65, 0x73, - 0x70, 0x61, 0x63, 0x65, 0x12, 0x13, 0x47, 0x65, 0x74, 0x20, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, - 0x61, 0x63, 0x65, 0x20, 0x62, 0x79, 0x20, 0x49, 0x44, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1a, 0x12, - 0x18, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, - 0x61, 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x12, 0xc8, 0x01, 0x0a, 0x0f, 0x55, 0x70, - 0x64, 0x61, 0x74, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x32, 0x2e, + 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x31, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, + 0x6e, 0x79, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, + 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x3a, 0x92, 0x41, 0x1d, 0x0a, 0x08, 0x52, 0x65, + 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x11, 0x47, 0x65, 0x74, 0x20, 0x61, 0x6c, 0x6c, 0x20, + 0x52, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x14, 0x12, + 0x12, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x73, 0x12, 0xb7, 0x01, 0x0a, 0x0e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, + 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x31, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, + 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x2e, 0x76, 0x31, 0x62, 0x65, + 0x74, 0x61, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x6c, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x32, 0x2e, 0x67, 0x6f, 0x74, 0x6f, + 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x2e, 0x76, + 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x6c, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x3e, 0x92, + 0x41, 0x1b, 0x0a, 0x08, 0x52, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x0f, 0x43, 0x72, + 0x65, 0x61, 0x74, 0x65, 0x20, 0x52, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x82, 0xd3, 0xe4, + 0x93, 0x02, 0x1a, 0x3a, 0x04, 0x62, 0x6f, 0x64, 0x79, 0x22, 0x12, 0x2f, 0x76, 0x31, 0x62, 0x65, + 0x74, 0x61, 0x31, 0x2f, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0xb0, 0x01, + 0x0a, 0x0b, 0x47, 0x65, 0x74, 0x52, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x2e, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x73, 0x68, 0x69, 0x65, - 0x6c, 0x64, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, - 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x33, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, - 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x55, - 0x70, 0x64, 0x61, 0x74, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x4c, 0x92, 0x41, 0x23, 0x0a, 0x09, 0x4e, 0x61, 0x6d, - 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x16, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x20, 0x4e, - 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x20, 0x62, 0x79, 0x20, 0x49, 0x44, 0x82, 0xd3, - 0xe4, 0x93, 0x02, 0x20, 0x3a, 0x04, 0x62, 0x6f, 0x64, 0x79, 0x1a, 0x18, 0x2f, 0x76, 0x31, 0x62, - 0x65, 0x74, 0x61, 0x31, 0x2f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x2f, - 0x7b, 0x69, 0x64, 0x7d, 0x12, 0xa7, 0x01, 0x0a, 0x0c, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x6f, 0x6c, - 0x69, 0x63, 0x69, 0x65, 0x73, 0x12, 0x2f, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, - 0x61, 0x6e, 0x79, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, - 0x61, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x69, 0x65, 0x73, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x30, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, + 0x6c, 0x64, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x65, + 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2f, 0x2e, + 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x73, 0x68, 0x69, 0x65, + 0x6c, 0x64, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x65, + 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x40, + 0x92, 0x41, 0x1e, 0x0a, 0x08, 0x52, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x12, 0x47, + 0x65, 0x74, 0x20, 0x52, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x62, 0x79, 0x20, 0x49, + 0x44, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x19, 0x12, 0x17, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, + 0x31, 0x2f, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, + 0x12, 0xfa, 0x01, 0x0a, 0x0e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x6c, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x12, 0x31, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, + 0x79, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, + 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x32, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x2e, 0x76, 0x31, 0x62, 0x65, - 0x74, 0x61, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x69, 0x65, 0x73, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x34, 0x92, 0x41, 0x18, 0x0a, 0x06, 0x50, - 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x12, 0x0e, 0x47, 0x65, 0x74, 0x20, 0x61, 0x6c, 0x6c, 0x20, 0x50, - 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x13, 0x12, 0x11, 0x2f, 0x76, 0x31, - 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x69, 0x65, 0x73, 0x12, 0xac, - 0x01, 0x0a, 0x0c, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x12, - 0x2f, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x73, 0x68, - 0x69, 0x65, 0x6c, 0x64, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x43, 0x72, 0x65, - 0x61, 0x74, 0x65, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x30, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x73, - 0x68, 0x69, 0x65, 0x6c, 0x64, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x43, 0x72, - 0x65, 0x61, 0x74, 0x65, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x22, 0x39, 0x92, 0x41, 0x17, 0x0a, 0x06, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x12, - 0x0d, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x20, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x82, 0xd3, - 0xe4, 0x93, 0x02, 0x19, 0x3a, 0x04, 0x62, 0x6f, 0x64, 0x79, 0x22, 0x11, 0x2f, 0x76, 0x31, 0x62, - 0x65, 0x74, 0x61, 0x31, 0x2f, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x69, 0x65, 0x73, 0x12, 0xb0, 0x01, - 0x0a, 0x0d, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, + 0x74, 0x61, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x6c, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x80, 0x01, 0x92, 0x41, 0x39, + 0x0a, 0x08, 0x52, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x2d, 0x52, 0x65, 0x6d, 0x6f, + 0x76, 0x65, 0x20, 0x61, 0x20, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x68, 0x61, 0x76, + 0x69, 0x6e, 0x67, 0x20, 0x61, 0x20, 0x72, 0x6f, 0x6c, 0x65, 0x20, 0x66, 0x72, 0x6f, 0x6d, 0x20, + 0x61, 0x6e, 0x20, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x3e, 0x2a, + 0x3c, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, + 0x2f, 0x7b, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x73, 0x75, 0x62, + 0x6a, 0x65, 0x63, 0x74, 0x2f, 0x7b, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x69, 0x64, + 0x7d, 0x2f, 0x72, 0x6f, 0x6c, 0x65, 0x2f, 0x7b, 0x72, 0x6f, 0x6c, 0x65, 0x7d, 0x12, 0xb0, 0x01, + 0x0a, 0x0d, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x12, 0x30, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4c, 0x69, 0x73, - 0x74, 0x52, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x31, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4c, - 0x69, 0x73, 0x74, 0x52, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x3a, 0x92, 0x41, 0x1d, 0x0a, 0x08, 0x52, 0x65, 0x6c, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x12, 0x11, 0x47, 0x65, 0x74, 0x20, 0x61, 0x6c, 0x6c, 0x20, 0x52, 0x65, 0x6c, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x14, 0x12, 0x12, 0x2f, 0x76, - 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, - 0x12, 0xb7, 0x01, 0x0a, 0x0e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x6c, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x12, 0x31, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, + 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x3a, 0x92, 0x41, 0x1d, 0x0a, 0x08, 0x52, 0x65, 0x73, 0x6f, 0x75, + 0x72, 0x63, 0x65, 0x12, 0x11, 0x47, 0x65, 0x74, 0x20, 0x61, 0x6c, 0x6c, 0x20, 0x52, 0x65, 0x73, + 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x14, 0x12, 0x12, 0x2f, 0x76, + 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, + 0x12, 0xb7, 0x01, 0x0a, 0x0e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x6f, 0x75, + 0x72, 0x63, 0x65, 0x12, 0x31, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, - 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, + 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x32, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x2e, 0x76, 0x31, 0x62, 0x65, - 0x74, 0x61, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x6c, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x3e, 0x92, 0x41, 0x1b, 0x0a, - 0x08, 0x52, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x0f, 0x43, 0x72, 0x65, 0x61, 0x74, - 0x65, 0x20, 0x52, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1a, + 0x74, 0x61, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, + 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x3e, 0x92, 0x41, 0x1b, 0x0a, + 0x08, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x0f, 0x43, 0x72, 0x65, 0x61, 0x74, + 0x65, 0x20, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1a, 0x3a, 0x04, 0x62, 0x6f, 0x64, 0x79, 0x22, 0x12, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, - 0x2f, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0xb0, 0x01, 0x0a, 0x0b, 0x47, - 0x65, 0x74, 0x52, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x2e, 0x2e, 0x67, 0x6f, 0x74, + 0x2f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x12, 0xb0, 0x01, 0x0a, 0x0b, 0x47, + 0x65, 0x74, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x2e, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x2e, - 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x65, 0x6c, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2f, 0x2e, 0x67, 0x6f, 0x74, + 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x65, 0x73, 0x6f, 0x75, + 0x72, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2f, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x2e, - 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x65, 0x6c, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x40, 0x92, 0x41, 0x1e, - 0x0a, 0x08, 0x52, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x12, 0x47, 0x65, 0x74, 0x20, - 0x52, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x62, 0x79, 0x20, 0x49, 0x44, 0x82, 0xd3, + 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x65, 0x73, 0x6f, 0x75, + 0x72, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x40, 0x92, 0x41, 0x1e, + 0x0a, 0x08, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x12, 0x47, 0x65, 0x74, 0x20, + 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x20, 0x62, 0x79, 0x20, 0x49, 0x44, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x19, 0x12, 0x17, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x72, - 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x12, 0xfa, 0x01, - 0x0a, 0x0e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x12, 0xc2, 0x01, + 0x0a, 0x0e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x31, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x73, - 0x68, 0x69, 0x65, 0x6c, 0x64, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x44, 0x65, - 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, + 0x68, 0x69, 0x65, 0x6c, 0x64, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x55, 0x70, + 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x32, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, - 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x80, 0x01, 0x92, 0x41, 0x39, 0x0a, 0x08, 0x52, - 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x2d, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x20, - 0x61, 0x20, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x68, 0x61, 0x76, 0x69, 0x6e, 0x67, - 0x20, 0x61, 0x20, 0x72, 0x6f, 0x6c, 0x65, 0x20, 0x66, 0x72, 0x6f, 0x6d, 0x20, 0x61, 0x6e, 0x20, - 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x3e, 0x2a, 0x3c, 0x2f, 0x76, - 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x2f, 0x7b, 0x6f, - 0x62, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, - 0x74, 0x2f, 0x7b, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x72, - 0x6f, 0x6c, 0x65, 0x2f, 0x7b, 0x72, 0x6f, 0x6c, 0x65, 0x7d, 0x12, 0xb0, 0x01, 0x0a, 0x0d, 0x4c, - 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x12, 0x30, 0x2e, 0x67, - 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, - 0x64, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, - 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x31, + 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x49, 0x92, 0x41, 0x21, 0x0a, 0x08, 0x52, 0x65, + 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x15, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x20, 0x52, + 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x20, 0x62, 0x79, 0x20, 0x49, 0x44, 0x82, 0xd3, 0xe4, + 0x93, 0x02, 0x1f, 0x3a, 0x04, 0x62, 0x6f, 0x64, 0x79, 0x1a, 0x17, 0x2f, 0x76, 0x31, 0x62, 0x65, + 0x74, 0x61, 0x31, 0x2f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x69, + 0x64, 0x7d, 0x12, 0xed, 0x01, 0x0a, 0x17, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x52, 0x65, 0x73, 0x6f, + 0x75, 0x72, 0x63, 0x65, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x3a, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x73, 0x68, 0x69, - 0x65, 0x6c, 0x64, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, - 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x22, 0x3a, 0x92, 0x41, 0x1d, 0x0a, 0x08, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, - 0x12, 0x11, 0x47, 0x65, 0x74, 0x20, 0x61, 0x6c, 0x6c, 0x20, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, - 0x63, 0x65, 0x73, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x14, 0x12, 0x12, 0x2f, 0x76, 0x31, 0x62, 0x65, - 0x74, 0x61, 0x31, 0x2f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x12, 0xb7, 0x01, - 0x0a, 0x0e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, - 0x12, 0x31, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x73, - 0x68, 0x69, 0x65, 0x6c, 0x64, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x43, 0x72, - 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x32, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, - 0x79, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, - 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x3e, 0x92, 0x41, 0x1b, 0x0a, 0x08, 0x52, 0x65, - 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x0f, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x20, 0x52, - 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1a, 0x3a, 0x04, 0x62, - 0x6f, 0x64, 0x79, 0x22, 0x12, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x72, 0x65, - 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x12, 0xb0, 0x01, 0x0a, 0x0b, 0x47, 0x65, 0x74, 0x52, - 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x2e, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, - 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x2e, 0x76, 0x31, 0x62, - 0x65, 0x74, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2f, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, - 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x2e, 0x76, 0x31, 0x62, - 0x65, 0x74, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x40, 0x92, 0x41, 0x1e, 0x0a, 0x08, 0x52, - 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x12, 0x47, 0x65, 0x74, 0x20, 0x52, 0x65, 0x73, - 0x6f, 0x75, 0x72, 0x63, 0x65, 0x20, 0x62, 0x79, 0x20, 0x49, 0x44, 0x82, 0xd3, 0xe4, 0x93, 0x02, - 0x19, 0x12, 0x17, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x72, 0x65, 0x73, 0x6f, - 0x75, 0x72, 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x12, 0xc2, 0x01, 0x0a, 0x0e, 0x55, - 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x31, 0x2e, - 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x73, 0x68, 0x69, 0x65, - 0x6c, 0x64, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, - 0x65, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x32, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x73, - 0x68, 0x69, 0x65, 0x6c, 0x64, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x55, 0x70, - 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x49, 0x92, 0x41, 0x21, 0x0a, 0x08, 0x52, 0x65, 0x73, 0x6f, 0x75, - 0x72, 0x63, 0x65, 0x12, 0x15, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x20, 0x52, 0x65, 0x73, 0x6f, - 0x75, 0x72, 0x63, 0x65, 0x20, 0x62, 0x79, 0x20, 0x49, 0x44, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1f, - 0x3a, 0x04, 0x62, 0x6f, 0x64, 0x79, 0x1a, 0x17, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, - 0x2f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x12, - 0xed, 0x01, 0x0a, 0x17, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, - 0x65, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x3a, 0x2e, 0x67, 0x6f, - 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, - 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x52, 0x65, - 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x3b, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, - 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x2e, 0x76, 0x31, 0x62, - 0x65, 0x74, 0x61, 0x31, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, - 0x63, 0x65, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x59, 0x92, 0x41, 0x3d, 0x0a, 0x05, 0x41, 0x75, 0x74, 0x68, 0x7a, - 0x12, 0x34, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x20, 0x70, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, - 0x6f, 0x6e, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6f, 0x6e, - 0x20, 0x61, 0x20, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x20, 0x62, 0x79, 0x20, 0x61, - 0x6e, 0x20, 0x75, 0x73, 0x65, 0x72, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x13, 0x3a, 0x01, 0x2a, 0x22, - 0x0e, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x42, - 0x76, 0x92, 0x41, 0x14, 0x12, 0x0f, 0x0a, 0x06, 0x53, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x32, 0x05, - 0x30, 0x2e, 0x31, 0x2e, 0x30, 0x2a, 0x01, 0x01, 0x0a, 0x25, 0x63, 0x6f, 0x6d, 0x2e, 0x67, 0x6f, - 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x6e, - 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x42, - 0x06, 0x53, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x5a, 0x2e, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, - 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x6f, 0x74, 0x6f, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x6e, 0x2f, - 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x2f, 0x76, 0x31, 0x3b, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, - 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x65, 0x6c, 0x64, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x43, 0x68, 0x65, 0x63, + 0x6b, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, + 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x3b, 0x2e, 0x67, 0x6f, 0x74, + 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x2e, + 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x52, 0x65, 0x73, + 0x6f, 0x75, 0x72, 0x63, 0x65, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x59, 0x92, 0x41, 0x3d, 0x0a, 0x05, 0x41, 0x75, + 0x74, 0x68, 0x7a, 0x12, 0x34, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x20, 0x70, 0x65, 0x72, 0x6d, 0x69, + 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x20, 0x6f, 0x6e, 0x20, 0x61, 0x20, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x20, 0x62, + 0x79, 0x20, 0x61, 0x6e, 0x20, 0x75, 0x73, 0x65, 0x72, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x13, 0x3a, + 0x01, 0x2a, 0x22, 0x0e, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x63, 0x68, 0x65, + 0x63, 0x6b, 0x12, 0xb5, 0x01, 0x0a, 0x0e, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x63, 0x74, 0x69, 0x76, + 0x69, 0x74, 0x69, 0x65, 0x73, 0x12, 0x31, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, + 0x61, 0x6e, 0x79, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, + 0x61, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x69, 0x65, + 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x32, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, + 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x2e, 0x76, 0x31, + 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x63, 0x74, 0x69, 0x76, 0x69, + 0x74, 0x69, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x3c, 0x92, 0x41, + 0x1e, 0x0a, 0x08, 0x41, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x12, 0x12, 0x47, 0x65, 0x74, + 0x20, 0x61, 0x6c, 0x6c, 0x20, 0x41, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x69, 0x65, 0x73, 0x82, + 0xd3, 0xe4, 0x93, 0x02, 0x15, 0x12, 0x13, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, + 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x69, 0x65, 0x73, 0x42, 0x76, 0x92, 0x41, 0x14, 0x12, + 0x0f, 0x0a, 0x06, 0x53, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x32, 0x05, 0x30, 0x2e, 0x31, 0x2e, 0x30, + 0x2a, 0x01, 0x01, 0x0a, 0x25, 0x63, 0x6f, 0x6d, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, + 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x6e, 0x2e, 0x73, 0x68, 0x69, 0x65, + 0x6c, 0x64, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x42, 0x06, 0x53, 0x68, 0x69, 0x65, + 0x6c, 0x64, 0x5a, 0x2e, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, + 0x6f, 0x74, 0x6f, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x6e, 0x2f, 0x73, 0x68, 0x69, 0x65, 0x6c, + 0x64, 0x2f, 0x76, 0x31, 0x3b, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x76, 0x31, 0x62, 0x65, 0x74, + 0x61, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -8385,7 +8695,7 @@ func file_gotocompany_shield_v1beta1_shield_proto_rawDescGZIP() []byte { return file_gotocompany_shield_v1beta1_shield_proto_rawDescData } -var file_gotocompany_shield_v1beta1_shield_proto_msgTypes = make([]protoimpl.MessageInfo, 126) +var file_gotocompany_shield_v1beta1_shield_proto_msgTypes = make([]protoimpl.MessageInfo, 133) var file_gotocompany_shield_v1beta1_shield_proto_goTypes = []interface{}{ (*UserRequestBody)(nil), // 0: gotocompany.shield.v1beta1.UserRequestBody (*CreateUserRequest)(nil), // 1: gotocompany.shield.v1beta1.CreateUserRequest @@ -8511,17 +8821,24 @@ var file_gotocompany_shield_v1beta1_shield_proto_goTypes = []interface{}{ (*CheckResourcePermissionResponse)(nil), // 121: gotocompany.shield.v1beta1.CheckResourcePermissionResponse (*CheckResourceUserPermissionRequest)(nil), // 122: gotocompany.shield.v1beta1.CheckResourceUserPermissionRequest (*CheckResourceUserPermissionResponse)(nil), // 123: gotocompany.shield.v1beta1.CheckResourceUserPermissionResponse - (*CheckResourcePermissionResponse_ResourcePermissionResponse)(nil), // 124: gotocompany.shield.v1beta1.CheckResourcePermissionResponse.ResourcePermissionResponse - (*CheckResourceUserPermissionResponse_ResourcePermissionResponse)(nil), // 125: gotocompany.shield.v1beta1.CheckResourceUserPermissionResponse.ResourcePermissionResponse - (*structpb.Struct)(nil), // 126: google.protobuf.Struct - (*timestamppb.Timestamp)(nil), // 127: google.protobuf.Timestamp + (*Activity)(nil), // 124: gotocompany.shield.v1beta1.Activity + (*ListActivitiesRequest)(nil), // 125: gotocompany.shield.v1beta1.ListActivitiesRequest + (*ListActivitiesResponse)(nil), // 126: gotocompany.shield.v1beta1.ListActivitiesResponse + (*CheckResourcePermissionResponse_ResourcePermissionResponse)(nil), // 127: gotocompany.shield.v1beta1.CheckResourcePermissionResponse.ResourcePermissionResponse + (*CheckResourceUserPermissionResponse_ResourcePermissionResponse)(nil), // 128: gotocompany.shield.v1beta1.CheckResourceUserPermissionResponse.ResourcePermissionResponse + nil, // 129: gotocompany.shield.v1beta1.Activity.DataEntry + nil, // 130: gotocompany.shield.v1beta1.Activity.MetadataEntry + nil, // 131: gotocompany.shield.v1beta1.ListActivitiesRequest.DataEntry + nil, // 132: gotocompany.shield.v1beta1.ListActivitiesRequest.MetadataEntry + (*structpb.Struct)(nil), // 133: google.protobuf.Struct + (*timestamppb.Timestamp)(nil), // 134: google.protobuf.Timestamp } var file_gotocompany_shield_v1beta1_shield_proto_depIdxs = []int32{ - 126, // 0: gotocompany.shield.v1beta1.UserRequestBody.metadata:type_name -> google.protobuf.Struct + 133, // 0: gotocompany.shield.v1beta1.UserRequestBody.metadata:type_name -> google.protobuf.Struct 0, // 1: gotocompany.shield.v1beta1.CreateUserRequest.body:type_name -> gotocompany.shield.v1beta1.UserRequestBody - 126, // 2: gotocompany.shield.v1beta1.User.metadata:type_name -> google.protobuf.Struct - 127, // 3: gotocompany.shield.v1beta1.User.created_at:type_name -> google.protobuf.Timestamp - 127, // 4: gotocompany.shield.v1beta1.User.updated_at:type_name -> google.protobuf.Timestamp + 133, // 2: gotocompany.shield.v1beta1.User.metadata:type_name -> google.protobuf.Struct + 134, // 3: gotocompany.shield.v1beta1.User.created_at:type_name -> google.protobuf.Timestamp + 134, // 4: gotocompany.shield.v1beta1.User.updated_at:type_name -> google.protobuf.Timestamp 2, // 5: gotocompany.shield.v1beta1.CreateUserResponse.user:type_name -> gotocompany.shield.v1beta1.User 4, // 6: gotocompany.shield.v1beta1.CreateMetadataKeyRequest.body:type_name -> gotocompany.shield.v1beta1.MetadataKeyRequestBody 6, // 7: gotocompany.shield.v1beta1.CreateMetadataKeyResponse.metadatakey:type_name -> gotocompany.shield.v1beta1.MetadataKey @@ -8531,12 +8848,12 @@ var file_gotocompany_shield_v1beta1_shield_proto_depIdxs = []int32{ 2, // 11: gotocompany.shield.v1beta1.UpdateCurrentUserResponse.user:type_name -> gotocompany.shield.v1beta1.User 0, // 12: gotocompany.shield.v1beta1.UpdateUserRequest.body:type_name -> gotocompany.shield.v1beta1.UserRequestBody 2, // 13: gotocompany.shield.v1beta1.ListUsersResponse.users:type_name -> gotocompany.shield.v1beta1.User - 126, // 14: gotocompany.shield.v1beta1.GroupRequestBody.metadata:type_name -> google.protobuf.Struct + 133, // 14: gotocompany.shield.v1beta1.GroupRequestBody.metadata:type_name -> google.protobuf.Struct 18, // 15: gotocompany.shield.v1beta1.CreateGroupRequest.body:type_name -> gotocompany.shield.v1beta1.GroupRequestBody 21, // 16: gotocompany.shield.v1beta1.ListUserGroupsResponse.groups:type_name -> gotocompany.shield.v1beta1.Group - 126, // 17: gotocompany.shield.v1beta1.Group.metadata:type_name -> google.protobuf.Struct - 127, // 18: gotocompany.shield.v1beta1.Group.created_at:type_name -> google.protobuf.Timestamp - 127, // 19: gotocompany.shield.v1beta1.Group.updated_at:type_name -> google.protobuf.Timestamp + 133, // 17: gotocompany.shield.v1beta1.Group.metadata:type_name -> google.protobuf.Struct + 134, // 18: gotocompany.shield.v1beta1.Group.created_at:type_name -> google.protobuf.Timestamp + 134, // 19: gotocompany.shield.v1beta1.Group.updated_at:type_name -> google.protobuf.Timestamp 21, // 20: gotocompany.shield.v1beta1.CreateGroupResponse.group:type_name -> gotocompany.shield.v1beta1.Group 21, // 21: gotocompany.shield.v1beta1.GetGroupResponse.group:type_name -> gotocompany.shield.v1beta1.Group 21, // 22: gotocompany.shield.v1beta1.UpdateGroupResponse.group:type_name -> gotocompany.shield.v1beta1.Group @@ -8544,32 +8861,32 @@ var file_gotocompany_shield_v1beta1_shield_proto_depIdxs = []int32{ 0, // 24: gotocompany.shield.v1beta1.UpdateCurrentUserRequest.body:type_name -> gotocompany.shield.v1beta1.UserRequestBody 21, // 25: gotocompany.shield.v1beta1.ListGroupsResponse.groups:type_name -> gotocompany.shield.v1beta1.Group 65, // 26: gotocompany.shield.v1beta1.Role.namespace:type_name -> gotocompany.shield.v1beta1.Namespace - 126, // 27: gotocompany.shield.v1beta1.Role.metadata:type_name -> google.protobuf.Struct - 127, // 28: gotocompany.shield.v1beta1.Role.created_at:type_name -> google.protobuf.Timestamp - 127, // 29: gotocompany.shield.v1beta1.Role.updated_at:type_name -> google.protobuf.Timestamp - 126, // 30: gotocompany.shield.v1beta1.RoleRequestBody.metadata:type_name -> google.protobuf.Struct + 133, // 27: gotocompany.shield.v1beta1.Role.metadata:type_name -> google.protobuf.Struct + 134, // 28: gotocompany.shield.v1beta1.Role.created_at:type_name -> google.protobuf.Timestamp + 134, // 29: gotocompany.shield.v1beta1.Role.updated_at:type_name -> google.protobuf.Timestamp + 133, // 30: gotocompany.shield.v1beta1.RoleRequestBody.metadata:type_name -> google.protobuf.Struct 31, // 31: gotocompany.shield.v1beta1.CreateRoleRequest.body:type_name -> gotocompany.shield.v1beta1.RoleRequestBody 30, // 32: gotocompany.shield.v1beta1.CreateRoleResponse.role:type_name -> gotocompany.shield.v1beta1.Role 30, // 33: gotocompany.shield.v1beta1.GetRoleResponse.role:type_name -> gotocompany.shield.v1beta1.Role 30, // 34: gotocompany.shield.v1beta1.UpdateRoleResponse.role:type_name -> gotocompany.shield.v1beta1.Role 31, // 35: gotocompany.shield.v1beta1.UpdateRoleRequest.body:type_name -> gotocompany.shield.v1beta1.RoleRequestBody 30, // 36: gotocompany.shield.v1beta1.ListRolesResponse.roles:type_name -> gotocompany.shield.v1beta1.Role - 126, // 37: gotocompany.shield.v1beta1.OrganizationRequestBody.metadata:type_name -> google.protobuf.Struct + 133, // 37: gotocompany.shield.v1beta1.OrganizationRequestBody.metadata:type_name -> google.protobuf.Struct 40, // 38: gotocompany.shield.v1beta1.CreateOrganizationRequest.body:type_name -> gotocompany.shield.v1beta1.OrganizationRequestBody - 126, // 39: gotocompany.shield.v1beta1.Organization.metadata:type_name -> google.protobuf.Struct - 127, // 40: gotocompany.shield.v1beta1.Organization.created_at:type_name -> google.protobuf.Timestamp - 127, // 41: gotocompany.shield.v1beta1.Organization.updated_at:type_name -> google.protobuf.Timestamp + 133, // 39: gotocompany.shield.v1beta1.Organization.metadata:type_name -> google.protobuf.Struct + 134, // 40: gotocompany.shield.v1beta1.Organization.created_at:type_name -> google.protobuf.Timestamp + 134, // 41: gotocompany.shield.v1beta1.Organization.updated_at:type_name -> google.protobuf.Timestamp 42, // 42: gotocompany.shield.v1beta1.CreateOrganizationResponse.organization:type_name -> gotocompany.shield.v1beta1.Organization 42, // 43: gotocompany.shield.v1beta1.GetOrganizationResponse.organization:type_name -> gotocompany.shield.v1beta1.Organization 42, // 44: gotocompany.shield.v1beta1.UpdateOrganizationResponse.organization:type_name -> gotocompany.shield.v1beta1.Organization 42, // 45: gotocompany.shield.v1beta1.ListOrganizationsResponse.organizations:type_name -> gotocompany.shield.v1beta1.Organization 40, // 46: gotocompany.shield.v1beta1.UpdateOrganizationRequest.body:type_name -> gotocompany.shield.v1beta1.OrganizationRequestBody 2, // 47: gotocompany.shield.v1beta1.ListOrganizationAdminsResponse.users:type_name -> gotocompany.shield.v1beta1.User - 126, // 48: gotocompany.shield.v1beta1.ProjectRequestBody.metadata:type_name -> google.protobuf.Struct + 133, // 48: gotocompany.shield.v1beta1.ProjectRequestBody.metadata:type_name -> google.protobuf.Struct 52, // 49: gotocompany.shield.v1beta1.CreateProjectRequest.body:type_name -> gotocompany.shield.v1beta1.ProjectRequestBody - 126, // 50: gotocompany.shield.v1beta1.Project.metadata:type_name -> google.protobuf.Struct - 127, // 51: gotocompany.shield.v1beta1.Project.created_at:type_name -> google.protobuf.Timestamp - 127, // 52: gotocompany.shield.v1beta1.Project.updated_at:type_name -> google.protobuf.Timestamp + 133, // 50: gotocompany.shield.v1beta1.Project.metadata:type_name -> google.protobuf.Struct + 134, // 51: gotocompany.shield.v1beta1.Project.created_at:type_name -> google.protobuf.Timestamp + 134, // 52: gotocompany.shield.v1beta1.Project.updated_at:type_name -> google.protobuf.Timestamp 54, // 53: gotocompany.shield.v1beta1.CreateProjectResponse.project:type_name -> gotocompany.shield.v1beta1.Project 54, // 54: gotocompany.shield.v1beta1.GetProjectResponse.project:type_name -> gotocompany.shield.v1beta1.Project 54, // 55: gotocompany.shield.v1beta1.UpdateProjectResponse.project:type_name -> gotocompany.shield.v1beta1.Project @@ -8577,15 +8894,15 @@ var file_gotocompany_shield_v1beta1_shield_proto_depIdxs = []int32{ 52, // 57: gotocompany.shield.v1beta1.UpdateProjectRequest.body:type_name -> gotocompany.shield.v1beta1.ProjectRequestBody 2, // 58: gotocompany.shield.v1beta1.ListProjectAdminsResponse.users:type_name -> gotocompany.shield.v1beta1.User 65, // 59: gotocompany.shield.v1beta1.Action.namespace:type_name -> gotocompany.shield.v1beta1.Namespace - 127, // 60: gotocompany.shield.v1beta1.Action.created_at:type_name -> google.protobuf.Timestamp - 127, // 61: gotocompany.shield.v1beta1.Action.updated_at:type_name -> google.protobuf.Timestamp - 127, // 62: gotocompany.shield.v1beta1.Namespace.created_at:type_name -> google.protobuf.Timestamp - 127, // 63: gotocompany.shield.v1beta1.Namespace.updated_at:type_name -> google.protobuf.Timestamp + 134, // 60: gotocompany.shield.v1beta1.Action.created_at:type_name -> google.protobuf.Timestamp + 134, // 61: gotocompany.shield.v1beta1.Action.updated_at:type_name -> google.protobuf.Timestamp + 134, // 62: gotocompany.shield.v1beta1.Namespace.created_at:type_name -> google.protobuf.Timestamp + 134, // 63: gotocompany.shield.v1beta1.Namespace.updated_at:type_name -> google.protobuf.Timestamp 30, // 64: gotocompany.shield.v1beta1.Policy.role:type_name -> gotocompany.shield.v1beta1.Role 64, // 65: gotocompany.shield.v1beta1.Policy.action:type_name -> gotocompany.shield.v1beta1.Action 65, // 66: gotocompany.shield.v1beta1.Policy.namespace:type_name -> gotocompany.shield.v1beta1.Namespace - 127, // 67: gotocompany.shield.v1beta1.Policy.created_at:type_name -> google.protobuf.Timestamp - 127, // 68: gotocompany.shield.v1beta1.Policy.updated_at:type_name -> google.protobuf.Timestamp + 134, // 67: gotocompany.shield.v1beta1.Policy.created_at:type_name -> google.protobuf.Timestamp + 134, // 68: gotocompany.shield.v1beta1.Policy.updated_at:type_name -> google.protobuf.Timestamp 64, // 69: gotocompany.shield.v1beta1.ListActionsResponse.actions:type_name -> gotocompany.shield.v1beta1.Action 67, // 70: gotocompany.shield.v1beta1.CreateActionRequest.body:type_name -> gotocompany.shield.v1beta1.ActionRequestBody 64, // 71: gotocompany.shield.v1beta1.CreateActionResponse.action:type_name -> gotocompany.shield.v1beta1.Action @@ -8604,13 +8921,13 @@ var file_gotocompany_shield_v1beta1_shield_proto_depIdxs = []int32{ 66, // 84: gotocompany.shield.v1beta1.GetPolicyResponse.policy:type_name -> gotocompany.shield.v1beta1.Policy 69, // 85: gotocompany.shield.v1beta1.UpdatePolicyRequest.body:type_name -> gotocompany.shield.v1beta1.PolicyRequestBody 66, // 86: gotocompany.shield.v1beta1.UpdatePolicyResponse.policies:type_name -> gotocompany.shield.v1beta1.Policy - 127, // 87: gotocompany.shield.v1beta1.Relation.created_at:type_name -> google.protobuf.Timestamp - 127, // 88: gotocompany.shield.v1beta1.Relation.updated_at:type_name -> google.protobuf.Timestamp + 134, // 87: gotocompany.shield.v1beta1.Relation.created_at:type_name -> google.protobuf.Timestamp + 134, // 88: gotocompany.shield.v1beta1.Relation.updated_at:type_name -> google.protobuf.Timestamp 54, // 89: gotocompany.shield.v1beta1.Resource.project:type_name -> gotocompany.shield.v1beta1.Project 42, // 90: gotocompany.shield.v1beta1.Resource.organization:type_name -> gotocompany.shield.v1beta1.Organization 65, // 91: gotocompany.shield.v1beta1.Resource.namespace:type_name -> gotocompany.shield.v1beta1.Namespace - 127, // 92: gotocompany.shield.v1beta1.Resource.created_at:type_name -> google.protobuf.Timestamp - 127, // 93: gotocompany.shield.v1beta1.Resource.updated_at:type_name -> google.protobuf.Timestamp + 134, // 92: gotocompany.shield.v1beta1.Resource.created_at:type_name -> google.protobuf.Timestamp + 134, // 93: gotocompany.shield.v1beta1.Resource.updated_at:type_name -> google.protobuf.Timestamp 2, // 94: gotocompany.shield.v1beta1.Resource.user:type_name -> gotocompany.shield.v1beta1.User 2, // 95: gotocompany.shield.v1beta1.GroupRelation.user:type_name -> gotocompany.shield.v1beta1.User 21, // 96: gotocompany.shield.v1beta1.GroupRelation.group:type_name -> gotocompany.shield.v1beta1.Group @@ -8629,100 +8946,108 @@ var file_gotocompany_shield_v1beta1_shield_proto_depIdxs = []int32{ 112, // 109: gotocompany.shield.v1beta1.UpdateResourceRequest.body:type_name -> gotocompany.shield.v1beta1.ResourceRequestBody 95, // 110: gotocompany.shield.v1beta1.UpdateResourceResponse.resource:type_name -> gotocompany.shield.v1beta1.Resource 119, // 111: gotocompany.shield.v1beta1.CheckResourcePermissionRequest.resource_permissions:type_name -> gotocompany.shield.v1beta1.ResourcePermission - 124, // 112: gotocompany.shield.v1beta1.CheckResourcePermissionResponse.resource_permissions:type_name -> gotocompany.shield.v1beta1.CheckResourcePermissionResponse.ResourcePermissionResponse + 127, // 112: gotocompany.shield.v1beta1.CheckResourcePermissionResponse.resource_permissions:type_name -> gotocompany.shield.v1beta1.CheckResourcePermissionResponse.ResourcePermissionResponse 119, // 113: gotocompany.shield.v1beta1.CheckResourceUserPermissionRequest.resource_permissions:type_name -> gotocompany.shield.v1beta1.ResourcePermission - 125, // 114: gotocompany.shield.v1beta1.CheckResourceUserPermissionResponse.resource_permissions:type_name -> gotocompany.shield.v1beta1.CheckResourceUserPermissionResponse.ResourcePermissionResponse - 16, // 115: gotocompany.shield.v1beta1.ShieldService.ListUsers:input_type -> gotocompany.shield.v1beta1.ListUsersRequest - 1, // 116: gotocompany.shield.v1beta1.ShieldService.CreateUser:input_type -> gotocompany.shield.v1beta1.CreateUserRequest - 13, // 117: gotocompany.shield.v1beta1.ShieldService.GetUser:input_type -> gotocompany.shield.v1beta1.GetUserRequest - 14, // 118: gotocompany.shield.v1beta1.ShieldService.ListUserGroups:input_type -> gotocompany.shield.v1beta1.ListUserGroupsRequest - 15, // 119: gotocompany.shield.v1beta1.ShieldService.GetCurrentUser:input_type -> gotocompany.shield.v1beta1.GetCurrentUserRequest - 12, // 120: gotocompany.shield.v1beta1.ShieldService.UpdateUser:input_type -> gotocompany.shield.v1beta1.UpdateUserRequest - 122, // 121: gotocompany.shield.v1beta1.ShieldService.CheckResourceUserPermission:input_type -> gotocompany.shield.v1beta1.CheckResourceUserPermissionRequest - 26, // 122: gotocompany.shield.v1beta1.ShieldService.UpdateCurrentUser:input_type -> gotocompany.shield.v1beta1.UpdateCurrentUserRequest - 5, // 123: gotocompany.shield.v1beta1.ShieldService.CreateMetadataKey:input_type -> gotocompany.shield.v1beta1.CreateMetadataKeyRequest - 28, // 124: gotocompany.shield.v1beta1.ShieldService.ListGroups:input_type -> gotocompany.shield.v1beta1.ListGroupsRequest - 19, // 125: gotocompany.shield.v1beta1.ShieldService.CreateGroup:input_type -> gotocompany.shield.v1beta1.CreateGroupRequest - 27, // 126: gotocompany.shield.v1beta1.ShieldService.GetGroup:input_type -> gotocompany.shield.v1beta1.GetGroupRequest - 25, // 127: gotocompany.shield.v1beta1.ShieldService.UpdateGroup:input_type -> gotocompany.shield.v1beta1.UpdateGroupRequest - 106, // 128: gotocompany.shield.v1beta1.ShieldService.ListGroupRelations:input_type -> gotocompany.shield.v1beta1.ListGroupRelationsRequest - 38, // 129: gotocompany.shield.v1beta1.ShieldService.ListRoles:input_type -> gotocompany.shield.v1beta1.ListRolesRequest - 32, // 130: gotocompany.shield.v1beta1.ShieldService.CreateRole:input_type -> gotocompany.shield.v1beta1.CreateRoleRequest - 46, // 131: gotocompany.shield.v1beta1.ShieldService.ListOrganizations:input_type -> gotocompany.shield.v1beta1.ListOrganizationsRequest - 41, // 132: gotocompany.shield.v1beta1.ShieldService.CreateOrganization:input_type -> gotocompany.shield.v1beta1.CreateOrganizationRequest - 48, // 133: gotocompany.shield.v1beta1.ShieldService.GetOrganization:input_type -> gotocompany.shield.v1beta1.GetOrganizationRequest - 49, // 134: gotocompany.shield.v1beta1.ShieldService.UpdateOrganization:input_type -> gotocompany.shield.v1beta1.UpdateOrganizationRequest - 50, // 135: gotocompany.shield.v1beta1.ShieldService.ListOrganizationAdmins:input_type -> gotocompany.shield.v1beta1.ListOrganizationAdminsRequest - 58, // 136: gotocompany.shield.v1beta1.ShieldService.ListProjects:input_type -> gotocompany.shield.v1beta1.ListProjectsRequest - 53, // 137: gotocompany.shield.v1beta1.ShieldService.CreateProject:input_type -> gotocompany.shield.v1beta1.CreateProjectRequest - 60, // 138: gotocompany.shield.v1beta1.ShieldService.GetProject:input_type -> gotocompany.shield.v1beta1.GetProjectRequest - 61, // 139: gotocompany.shield.v1beta1.ShieldService.UpdateProject:input_type -> gotocompany.shield.v1beta1.UpdateProjectRequest - 62, // 140: gotocompany.shield.v1beta1.ShieldService.ListProjectAdmins:input_type -> gotocompany.shield.v1beta1.ListProjectAdminsRequest - 70, // 141: gotocompany.shield.v1beta1.ShieldService.ListActions:input_type -> gotocompany.shield.v1beta1.ListActionsRequest - 72, // 142: gotocompany.shield.v1beta1.ShieldService.CreateAction:input_type -> gotocompany.shield.v1beta1.CreateActionRequest - 78, // 143: gotocompany.shield.v1beta1.ShieldService.ListNamespaces:input_type -> gotocompany.shield.v1beta1.ListNamespacesRequest - 80, // 144: gotocompany.shield.v1beta1.ShieldService.CreateNamespace:input_type -> gotocompany.shield.v1beta1.CreateNamespaceRequest - 82, // 145: gotocompany.shield.v1beta1.ShieldService.GetNamespace:input_type -> gotocompany.shield.v1beta1.GetNamespaceRequest - 84, // 146: gotocompany.shield.v1beta1.ShieldService.UpdateNamespace:input_type -> gotocompany.shield.v1beta1.UpdateNamespaceRequest - 86, // 147: gotocompany.shield.v1beta1.ShieldService.ListPolicies:input_type -> gotocompany.shield.v1beta1.ListPoliciesRequest - 88, // 148: gotocompany.shield.v1beta1.ShieldService.CreatePolicy:input_type -> gotocompany.shield.v1beta1.CreatePolicyRequest - 97, // 149: gotocompany.shield.v1beta1.ShieldService.ListRelations:input_type -> gotocompany.shield.v1beta1.ListRelationsRequest - 100, // 150: gotocompany.shield.v1beta1.ShieldService.CreateRelation:input_type -> gotocompany.shield.v1beta1.CreateRelationRequest - 102, // 151: gotocompany.shield.v1beta1.ShieldService.GetRelation:input_type -> gotocompany.shield.v1beta1.GetRelationRequest - 108, // 152: gotocompany.shield.v1beta1.ShieldService.DeleteRelation:input_type -> gotocompany.shield.v1beta1.DeleteRelationRequest - 110, // 153: gotocompany.shield.v1beta1.ShieldService.ListResources:input_type -> gotocompany.shield.v1beta1.ListResourcesRequest - 113, // 154: gotocompany.shield.v1beta1.ShieldService.CreateResource:input_type -> gotocompany.shield.v1beta1.CreateResourceRequest - 115, // 155: gotocompany.shield.v1beta1.ShieldService.GetResource:input_type -> gotocompany.shield.v1beta1.GetResourceRequest - 117, // 156: gotocompany.shield.v1beta1.ShieldService.UpdateResource:input_type -> gotocompany.shield.v1beta1.UpdateResourceRequest - 120, // 157: gotocompany.shield.v1beta1.ShieldService.CheckResourcePermission:input_type -> gotocompany.shield.v1beta1.CheckResourcePermissionRequest - 17, // 158: gotocompany.shield.v1beta1.ShieldService.ListUsers:output_type -> gotocompany.shield.v1beta1.ListUsersResponse - 3, // 159: gotocompany.shield.v1beta1.ShieldService.CreateUser:output_type -> gotocompany.shield.v1beta1.CreateUserResponse - 8, // 160: gotocompany.shield.v1beta1.ShieldService.GetUser:output_type -> gotocompany.shield.v1beta1.GetUserResponse - 20, // 161: gotocompany.shield.v1beta1.ShieldService.ListUserGroups:output_type -> gotocompany.shield.v1beta1.ListUserGroupsResponse - 9, // 162: gotocompany.shield.v1beta1.ShieldService.GetCurrentUser:output_type -> gotocompany.shield.v1beta1.GetCurrentUserResponse - 10, // 163: gotocompany.shield.v1beta1.ShieldService.UpdateUser:output_type -> gotocompany.shield.v1beta1.UpdateUserResponse - 123, // 164: gotocompany.shield.v1beta1.ShieldService.CheckResourceUserPermission:output_type -> gotocompany.shield.v1beta1.CheckResourceUserPermissionResponse - 11, // 165: gotocompany.shield.v1beta1.ShieldService.UpdateCurrentUser:output_type -> gotocompany.shield.v1beta1.UpdateCurrentUserResponse - 7, // 166: gotocompany.shield.v1beta1.ShieldService.CreateMetadataKey:output_type -> gotocompany.shield.v1beta1.CreateMetadataKeyResponse - 29, // 167: gotocompany.shield.v1beta1.ShieldService.ListGroups:output_type -> gotocompany.shield.v1beta1.ListGroupsResponse - 22, // 168: gotocompany.shield.v1beta1.ShieldService.CreateGroup:output_type -> gotocompany.shield.v1beta1.CreateGroupResponse - 23, // 169: gotocompany.shield.v1beta1.ShieldService.GetGroup:output_type -> gotocompany.shield.v1beta1.GetGroupResponse - 24, // 170: gotocompany.shield.v1beta1.ShieldService.UpdateGroup:output_type -> gotocompany.shield.v1beta1.UpdateGroupResponse - 107, // 171: gotocompany.shield.v1beta1.ShieldService.ListGroupRelations:output_type -> gotocompany.shield.v1beta1.ListGroupRelationsResponse - 39, // 172: gotocompany.shield.v1beta1.ShieldService.ListRoles:output_type -> gotocompany.shield.v1beta1.ListRolesResponse - 33, // 173: gotocompany.shield.v1beta1.ShieldService.CreateRole:output_type -> gotocompany.shield.v1beta1.CreateRoleResponse - 47, // 174: gotocompany.shield.v1beta1.ShieldService.ListOrganizations:output_type -> gotocompany.shield.v1beta1.ListOrganizationsResponse - 43, // 175: gotocompany.shield.v1beta1.ShieldService.CreateOrganization:output_type -> gotocompany.shield.v1beta1.CreateOrganizationResponse - 44, // 176: gotocompany.shield.v1beta1.ShieldService.GetOrganization:output_type -> gotocompany.shield.v1beta1.GetOrganizationResponse - 45, // 177: gotocompany.shield.v1beta1.ShieldService.UpdateOrganization:output_type -> gotocompany.shield.v1beta1.UpdateOrganizationResponse - 51, // 178: gotocompany.shield.v1beta1.ShieldService.ListOrganizationAdmins:output_type -> gotocompany.shield.v1beta1.ListOrganizationAdminsResponse - 59, // 179: gotocompany.shield.v1beta1.ShieldService.ListProjects:output_type -> gotocompany.shield.v1beta1.ListProjectsResponse - 55, // 180: gotocompany.shield.v1beta1.ShieldService.CreateProject:output_type -> gotocompany.shield.v1beta1.CreateProjectResponse - 56, // 181: gotocompany.shield.v1beta1.ShieldService.GetProject:output_type -> gotocompany.shield.v1beta1.GetProjectResponse - 57, // 182: gotocompany.shield.v1beta1.ShieldService.UpdateProject:output_type -> gotocompany.shield.v1beta1.UpdateProjectResponse - 63, // 183: gotocompany.shield.v1beta1.ShieldService.ListProjectAdmins:output_type -> gotocompany.shield.v1beta1.ListProjectAdminsResponse - 71, // 184: gotocompany.shield.v1beta1.ShieldService.ListActions:output_type -> gotocompany.shield.v1beta1.ListActionsResponse - 73, // 185: gotocompany.shield.v1beta1.ShieldService.CreateAction:output_type -> gotocompany.shield.v1beta1.CreateActionResponse - 79, // 186: gotocompany.shield.v1beta1.ShieldService.ListNamespaces:output_type -> gotocompany.shield.v1beta1.ListNamespacesResponse - 81, // 187: gotocompany.shield.v1beta1.ShieldService.CreateNamespace:output_type -> gotocompany.shield.v1beta1.CreateNamespaceResponse - 83, // 188: gotocompany.shield.v1beta1.ShieldService.GetNamespace:output_type -> gotocompany.shield.v1beta1.GetNamespaceResponse - 85, // 189: gotocompany.shield.v1beta1.ShieldService.UpdateNamespace:output_type -> gotocompany.shield.v1beta1.UpdateNamespaceResponse - 87, // 190: gotocompany.shield.v1beta1.ShieldService.ListPolicies:output_type -> gotocompany.shield.v1beta1.ListPoliciesResponse - 89, // 191: gotocompany.shield.v1beta1.ShieldService.CreatePolicy:output_type -> gotocompany.shield.v1beta1.CreatePolicyResponse - 98, // 192: gotocompany.shield.v1beta1.ShieldService.ListRelations:output_type -> gotocompany.shield.v1beta1.ListRelationsResponse - 101, // 193: gotocompany.shield.v1beta1.ShieldService.CreateRelation:output_type -> gotocompany.shield.v1beta1.CreateRelationResponse - 103, // 194: gotocompany.shield.v1beta1.ShieldService.GetRelation:output_type -> gotocompany.shield.v1beta1.GetRelationResponse - 109, // 195: gotocompany.shield.v1beta1.ShieldService.DeleteRelation:output_type -> gotocompany.shield.v1beta1.DeleteRelationResponse - 111, // 196: gotocompany.shield.v1beta1.ShieldService.ListResources:output_type -> gotocompany.shield.v1beta1.ListResourcesResponse - 114, // 197: gotocompany.shield.v1beta1.ShieldService.CreateResource:output_type -> gotocompany.shield.v1beta1.CreateResourceResponse - 116, // 198: gotocompany.shield.v1beta1.ShieldService.GetResource:output_type -> gotocompany.shield.v1beta1.GetResourceResponse - 118, // 199: gotocompany.shield.v1beta1.ShieldService.UpdateResource:output_type -> gotocompany.shield.v1beta1.UpdateResourceResponse - 121, // 200: gotocompany.shield.v1beta1.ShieldService.CheckResourcePermission:output_type -> gotocompany.shield.v1beta1.CheckResourcePermissionResponse - 158, // [158:201] is the sub-list for method output_type - 115, // [115:158] is the sub-list for method input_type - 115, // [115:115] is the sub-list for extension type_name - 115, // [115:115] is the sub-list for extension extendee - 0, // [0:115] is the sub-list for field type_name + 128, // 114: gotocompany.shield.v1beta1.CheckResourceUserPermissionResponse.resource_permissions:type_name -> gotocompany.shield.v1beta1.CheckResourceUserPermissionResponse.ResourcePermissionResponse + 129, // 115: gotocompany.shield.v1beta1.Activity.data:type_name -> gotocompany.shield.v1beta1.Activity.DataEntry + 130, // 116: gotocompany.shield.v1beta1.Activity.metadata:type_name -> gotocompany.shield.v1beta1.Activity.MetadataEntry + 134, // 117: gotocompany.shield.v1beta1.Activity.timestamp:type_name -> google.protobuf.Timestamp + 131, // 118: gotocompany.shield.v1beta1.ListActivitiesRequest.data:type_name -> gotocompany.shield.v1beta1.ListActivitiesRequest.DataEntry + 132, // 119: gotocompany.shield.v1beta1.ListActivitiesRequest.metadata:type_name -> gotocompany.shield.v1beta1.ListActivitiesRequest.MetadataEntry + 124, // 120: gotocompany.shield.v1beta1.ListActivitiesResponse.activities:type_name -> gotocompany.shield.v1beta1.Activity + 16, // 121: gotocompany.shield.v1beta1.ShieldService.ListUsers:input_type -> gotocompany.shield.v1beta1.ListUsersRequest + 1, // 122: gotocompany.shield.v1beta1.ShieldService.CreateUser:input_type -> gotocompany.shield.v1beta1.CreateUserRequest + 13, // 123: gotocompany.shield.v1beta1.ShieldService.GetUser:input_type -> gotocompany.shield.v1beta1.GetUserRequest + 14, // 124: gotocompany.shield.v1beta1.ShieldService.ListUserGroups:input_type -> gotocompany.shield.v1beta1.ListUserGroupsRequest + 15, // 125: gotocompany.shield.v1beta1.ShieldService.GetCurrentUser:input_type -> gotocompany.shield.v1beta1.GetCurrentUserRequest + 12, // 126: gotocompany.shield.v1beta1.ShieldService.UpdateUser:input_type -> gotocompany.shield.v1beta1.UpdateUserRequest + 122, // 127: gotocompany.shield.v1beta1.ShieldService.CheckResourceUserPermission:input_type -> gotocompany.shield.v1beta1.CheckResourceUserPermissionRequest + 26, // 128: gotocompany.shield.v1beta1.ShieldService.UpdateCurrentUser:input_type -> gotocompany.shield.v1beta1.UpdateCurrentUserRequest + 5, // 129: gotocompany.shield.v1beta1.ShieldService.CreateMetadataKey:input_type -> gotocompany.shield.v1beta1.CreateMetadataKeyRequest + 28, // 130: gotocompany.shield.v1beta1.ShieldService.ListGroups:input_type -> gotocompany.shield.v1beta1.ListGroupsRequest + 19, // 131: gotocompany.shield.v1beta1.ShieldService.CreateGroup:input_type -> gotocompany.shield.v1beta1.CreateGroupRequest + 27, // 132: gotocompany.shield.v1beta1.ShieldService.GetGroup:input_type -> gotocompany.shield.v1beta1.GetGroupRequest + 25, // 133: gotocompany.shield.v1beta1.ShieldService.UpdateGroup:input_type -> gotocompany.shield.v1beta1.UpdateGroupRequest + 106, // 134: gotocompany.shield.v1beta1.ShieldService.ListGroupRelations:input_type -> gotocompany.shield.v1beta1.ListGroupRelationsRequest + 38, // 135: gotocompany.shield.v1beta1.ShieldService.ListRoles:input_type -> gotocompany.shield.v1beta1.ListRolesRequest + 32, // 136: gotocompany.shield.v1beta1.ShieldService.CreateRole:input_type -> gotocompany.shield.v1beta1.CreateRoleRequest + 46, // 137: gotocompany.shield.v1beta1.ShieldService.ListOrganizations:input_type -> gotocompany.shield.v1beta1.ListOrganizationsRequest + 41, // 138: gotocompany.shield.v1beta1.ShieldService.CreateOrganization:input_type -> gotocompany.shield.v1beta1.CreateOrganizationRequest + 48, // 139: gotocompany.shield.v1beta1.ShieldService.GetOrganization:input_type -> gotocompany.shield.v1beta1.GetOrganizationRequest + 49, // 140: gotocompany.shield.v1beta1.ShieldService.UpdateOrganization:input_type -> gotocompany.shield.v1beta1.UpdateOrganizationRequest + 50, // 141: gotocompany.shield.v1beta1.ShieldService.ListOrganizationAdmins:input_type -> gotocompany.shield.v1beta1.ListOrganizationAdminsRequest + 58, // 142: gotocompany.shield.v1beta1.ShieldService.ListProjects:input_type -> gotocompany.shield.v1beta1.ListProjectsRequest + 53, // 143: gotocompany.shield.v1beta1.ShieldService.CreateProject:input_type -> gotocompany.shield.v1beta1.CreateProjectRequest + 60, // 144: gotocompany.shield.v1beta1.ShieldService.GetProject:input_type -> gotocompany.shield.v1beta1.GetProjectRequest + 61, // 145: gotocompany.shield.v1beta1.ShieldService.UpdateProject:input_type -> gotocompany.shield.v1beta1.UpdateProjectRequest + 62, // 146: gotocompany.shield.v1beta1.ShieldService.ListProjectAdmins:input_type -> gotocompany.shield.v1beta1.ListProjectAdminsRequest + 70, // 147: gotocompany.shield.v1beta1.ShieldService.ListActions:input_type -> gotocompany.shield.v1beta1.ListActionsRequest + 72, // 148: gotocompany.shield.v1beta1.ShieldService.CreateAction:input_type -> gotocompany.shield.v1beta1.CreateActionRequest + 78, // 149: gotocompany.shield.v1beta1.ShieldService.ListNamespaces:input_type -> gotocompany.shield.v1beta1.ListNamespacesRequest + 80, // 150: gotocompany.shield.v1beta1.ShieldService.CreateNamespace:input_type -> gotocompany.shield.v1beta1.CreateNamespaceRequest + 82, // 151: gotocompany.shield.v1beta1.ShieldService.GetNamespace:input_type -> gotocompany.shield.v1beta1.GetNamespaceRequest + 84, // 152: gotocompany.shield.v1beta1.ShieldService.UpdateNamespace:input_type -> gotocompany.shield.v1beta1.UpdateNamespaceRequest + 86, // 153: gotocompany.shield.v1beta1.ShieldService.ListPolicies:input_type -> gotocompany.shield.v1beta1.ListPoliciesRequest + 88, // 154: gotocompany.shield.v1beta1.ShieldService.CreatePolicy:input_type -> gotocompany.shield.v1beta1.CreatePolicyRequest + 97, // 155: gotocompany.shield.v1beta1.ShieldService.ListRelations:input_type -> gotocompany.shield.v1beta1.ListRelationsRequest + 100, // 156: gotocompany.shield.v1beta1.ShieldService.CreateRelation:input_type -> gotocompany.shield.v1beta1.CreateRelationRequest + 102, // 157: gotocompany.shield.v1beta1.ShieldService.GetRelation:input_type -> gotocompany.shield.v1beta1.GetRelationRequest + 108, // 158: gotocompany.shield.v1beta1.ShieldService.DeleteRelation:input_type -> gotocompany.shield.v1beta1.DeleteRelationRequest + 110, // 159: gotocompany.shield.v1beta1.ShieldService.ListResources:input_type -> gotocompany.shield.v1beta1.ListResourcesRequest + 113, // 160: gotocompany.shield.v1beta1.ShieldService.CreateResource:input_type -> gotocompany.shield.v1beta1.CreateResourceRequest + 115, // 161: gotocompany.shield.v1beta1.ShieldService.GetResource:input_type -> gotocompany.shield.v1beta1.GetResourceRequest + 117, // 162: gotocompany.shield.v1beta1.ShieldService.UpdateResource:input_type -> gotocompany.shield.v1beta1.UpdateResourceRequest + 120, // 163: gotocompany.shield.v1beta1.ShieldService.CheckResourcePermission:input_type -> gotocompany.shield.v1beta1.CheckResourcePermissionRequest + 125, // 164: gotocompany.shield.v1beta1.ShieldService.ListActivities:input_type -> gotocompany.shield.v1beta1.ListActivitiesRequest + 17, // 165: gotocompany.shield.v1beta1.ShieldService.ListUsers:output_type -> gotocompany.shield.v1beta1.ListUsersResponse + 3, // 166: gotocompany.shield.v1beta1.ShieldService.CreateUser:output_type -> gotocompany.shield.v1beta1.CreateUserResponse + 8, // 167: gotocompany.shield.v1beta1.ShieldService.GetUser:output_type -> gotocompany.shield.v1beta1.GetUserResponse + 20, // 168: gotocompany.shield.v1beta1.ShieldService.ListUserGroups:output_type -> gotocompany.shield.v1beta1.ListUserGroupsResponse + 9, // 169: gotocompany.shield.v1beta1.ShieldService.GetCurrentUser:output_type -> gotocompany.shield.v1beta1.GetCurrentUserResponse + 10, // 170: gotocompany.shield.v1beta1.ShieldService.UpdateUser:output_type -> gotocompany.shield.v1beta1.UpdateUserResponse + 123, // 171: gotocompany.shield.v1beta1.ShieldService.CheckResourceUserPermission:output_type -> gotocompany.shield.v1beta1.CheckResourceUserPermissionResponse + 11, // 172: gotocompany.shield.v1beta1.ShieldService.UpdateCurrentUser:output_type -> gotocompany.shield.v1beta1.UpdateCurrentUserResponse + 7, // 173: gotocompany.shield.v1beta1.ShieldService.CreateMetadataKey:output_type -> gotocompany.shield.v1beta1.CreateMetadataKeyResponse + 29, // 174: gotocompany.shield.v1beta1.ShieldService.ListGroups:output_type -> gotocompany.shield.v1beta1.ListGroupsResponse + 22, // 175: gotocompany.shield.v1beta1.ShieldService.CreateGroup:output_type -> gotocompany.shield.v1beta1.CreateGroupResponse + 23, // 176: gotocompany.shield.v1beta1.ShieldService.GetGroup:output_type -> gotocompany.shield.v1beta1.GetGroupResponse + 24, // 177: gotocompany.shield.v1beta1.ShieldService.UpdateGroup:output_type -> gotocompany.shield.v1beta1.UpdateGroupResponse + 107, // 178: gotocompany.shield.v1beta1.ShieldService.ListGroupRelations:output_type -> gotocompany.shield.v1beta1.ListGroupRelationsResponse + 39, // 179: gotocompany.shield.v1beta1.ShieldService.ListRoles:output_type -> gotocompany.shield.v1beta1.ListRolesResponse + 33, // 180: gotocompany.shield.v1beta1.ShieldService.CreateRole:output_type -> gotocompany.shield.v1beta1.CreateRoleResponse + 47, // 181: gotocompany.shield.v1beta1.ShieldService.ListOrganizations:output_type -> gotocompany.shield.v1beta1.ListOrganizationsResponse + 43, // 182: gotocompany.shield.v1beta1.ShieldService.CreateOrganization:output_type -> gotocompany.shield.v1beta1.CreateOrganizationResponse + 44, // 183: gotocompany.shield.v1beta1.ShieldService.GetOrganization:output_type -> gotocompany.shield.v1beta1.GetOrganizationResponse + 45, // 184: gotocompany.shield.v1beta1.ShieldService.UpdateOrganization:output_type -> gotocompany.shield.v1beta1.UpdateOrganizationResponse + 51, // 185: gotocompany.shield.v1beta1.ShieldService.ListOrganizationAdmins:output_type -> gotocompany.shield.v1beta1.ListOrganizationAdminsResponse + 59, // 186: gotocompany.shield.v1beta1.ShieldService.ListProjects:output_type -> gotocompany.shield.v1beta1.ListProjectsResponse + 55, // 187: gotocompany.shield.v1beta1.ShieldService.CreateProject:output_type -> gotocompany.shield.v1beta1.CreateProjectResponse + 56, // 188: gotocompany.shield.v1beta1.ShieldService.GetProject:output_type -> gotocompany.shield.v1beta1.GetProjectResponse + 57, // 189: gotocompany.shield.v1beta1.ShieldService.UpdateProject:output_type -> gotocompany.shield.v1beta1.UpdateProjectResponse + 63, // 190: gotocompany.shield.v1beta1.ShieldService.ListProjectAdmins:output_type -> gotocompany.shield.v1beta1.ListProjectAdminsResponse + 71, // 191: gotocompany.shield.v1beta1.ShieldService.ListActions:output_type -> gotocompany.shield.v1beta1.ListActionsResponse + 73, // 192: gotocompany.shield.v1beta1.ShieldService.CreateAction:output_type -> gotocompany.shield.v1beta1.CreateActionResponse + 79, // 193: gotocompany.shield.v1beta1.ShieldService.ListNamespaces:output_type -> gotocompany.shield.v1beta1.ListNamespacesResponse + 81, // 194: gotocompany.shield.v1beta1.ShieldService.CreateNamespace:output_type -> gotocompany.shield.v1beta1.CreateNamespaceResponse + 83, // 195: gotocompany.shield.v1beta1.ShieldService.GetNamespace:output_type -> gotocompany.shield.v1beta1.GetNamespaceResponse + 85, // 196: gotocompany.shield.v1beta1.ShieldService.UpdateNamespace:output_type -> gotocompany.shield.v1beta1.UpdateNamespaceResponse + 87, // 197: gotocompany.shield.v1beta1.ShieldService.ListPolicies:output_type -> gotocompany.shield.v1beta1.ListPoliciesResponse + 89, // 198: gotocompany.shield.v1beta1.ShieldService.CreatePolicy:output_type -> gotocompany.shield.v1beta1.CreatePolicyResponse + 98, // 199: gotocompany.shield.v1beta1.ShieldService.ListRelations:output_type -> gotocompany.shield.v1beta1.ListRelationsResponse + 101, // 200: gotocompany.shield.v1beta1.ShieldService.CreateRelation:output_type -> gotocompany.shield.v1beta1.CreateRelationResponse + 103, // 201: gotocompany.shield.v1beta1.ShieldService.GetRelation:output_type -> gotocompany.shield.v1beta1.GetRelationResponse + 109, // 202: gotocompany.shield.v1beta1.ShieldService.DeleteRelation:output_type -> gotocompany.shield.v1beta1.DeleteRelationResponse + 111, // 203: gotocompany.shield.v1beta1.ShieldService.ListResources:output_type -> gotocompany.shield.v1beta1.ListResourcesResponse + 114, // 204: gotocompany.shield.v1beta1.ShieldService.CreateResource:output_type -> gotocompany.shield.v1beta1.CreateResourceResponse + 116, // 205: gotocompany.shield.v1beta1.ShieldService.GetResource:output_type -> gotocompany.shield.v1beta1.GetResourceResponse + 118, // 206: gotocompany.shield.v1beta1.ShieldService.UpdateResource:output_type -> gotocompany.shield.v1beta1.UpdateResourceResponse + 121, // 207: gotocompany.shield.v1beta1.ShieldService.CheckResourcePermission:output_type -> gotocompany.shield.v1beta1.CheckResourcePermissionResponse + 126, // 208: gotocompany.shield.v1beta1.ShieldService.ListActivities:output_type -> gotocompany.shield.v1beta1.ListActivitiesResponse + 165, // [165:209] is the sub-list for method output_type + 121, // [121:165] is the sub-list for method input_type + 121, // [121:121] is the sub-list for extension type_name + 121, // [121:121] is the sub-list for extension extendee + 0, // [0:121] is the sub-list for field type_name } func init() { file_gotocompany_shield_v1beta1_shield_proto_init() } @@ -10220,7 +10545,7 @@ func file_gotocompany_shield_v1beta1_shield_proto_init() { } } file_gotocompany_shield_v1beta1_shield_proto_msgTypes[124].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CheckResourcePermissionResponse_ResourcePermissionResponse); i { + switch v := v.(*Activity); i { case 0: return &v.state case 1: @@ -10232,6 +10557,42 @@ func file_gotocompany_shield_v1beta1_shield_proto_init() { } } file_gotocompany_shield_v1beta1_shield_proto_msgTypes[125].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ListActivitiesRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_gotocompany_shield_v1beta1_shield_proto_msgTypes[126].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ListActivitiesResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_gotocompany_shield_v1beta1_shield_proto_msgTypes[127].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*CheckResourcePermissionResponse_ResourcePermissionResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_gotocompany_shield_v1beta1_shield_proto_msgTypes[128].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*CheckResourceUserPermissionResponse_ResourcePermissionResponse); i { case 0: return &v.state @@ -10254,7 +10615,7 @@ func file_gotocompany_shield_v1beta1_shield_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_gotocompany_shield_v1beta1_shield_proto_rawDesc, NumEnums: 0, - NumMessages: 126, + NumMessages: 133, NumExtensions: 0, NumServices: 1, }, diff --git a/proto/v1beta1/shield.pb.gw.go b/proto/v1beta1/shield.pb.gw.go index 4703b7eb1..2f4dea6d5 100644 --- a/proto/v1beta1/shield.pb.gw.go +++ b/proto/v1beta1/shield.pb.gw.go @@ -1741,6 +1741,42 @@ func local_request_ShieldService_CheckResourcePermission_0(ctx context.Context, } +var ( + filter_ShieldService_ListActivities_0 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)} +) + +func request_ShieldService_ListActivities_0(ctx context.Context, marshaler runtime.Marshaler, client ShieldServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq ListActivitiesRequest + var metadata runtime.ServerMetadata + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_ShieldService_ListActivities_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.ListActivities(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_ShieldService_ListActivities_0(ctx context.Context, marshaler runtime.Marshaler, server ShieldServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq ListActivitiesRequest + var metadata runtime.ServerMetadata + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_ShieldService_ListActivities_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := server.ListActivities(ctx, &protoReq) + return msg, metadata, err + +} + // RegisterShieldServiceHandlerServer registers the http handlers for service ShieldService to "mux". // UnaryRPC :call ShieldServiceServer directly. // StreamingRPC :currently unsupported pending https://github.com/grpc/grpc-go/issues/906. @@ -2822,6 +2858,31 @@ func RegisterShieldServiceHandlerServer(ctx context.Context, mux *runtime.ServeM }) + mux.Handle("GET", pattern_ShieldService_ListActivities_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/gotocompany.shield.v1beta1.ShieldService/ListActivities", runtime.WithHTTPPathPattern("/v1beta1/activities")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_ShieldService_ListActivities_0(annotatedContext, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) + if err != nil { + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) + return + } + + forward_ShieldService_ListActivities_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + return nil } @@ -3809,6 +3870,28 @@ func RegisterShieldServiceHandlerClient(ctx context.Context, mux *runtime.ServeM }) + mux.Handle("GET", pattern_ShieldService_ListActivities_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/gotocompany.shield.v1beta1.ShieldService/ListActivities", runtime.WithHTTPPathPattern("/v1beta1/activities")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_ShieldService_ListActivities_0(annotatedContext, inboundMarshaler, client, req, pathParams) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) + if err != nil { + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) + return + } + + forward_ShieldService_ListActivities_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + return nil } @@ -3898,6 +3981,8 @@ var ( pattern_ShieldService_UpdateResource_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2}, []string{"v1beta1", "resources", "id"}, "")) pattern_ShieldService_CheckResourcePermission_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{"v1beta1", "check"}, "")) + + pattern_ShieldService_ListActivities_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{"v1beta1", "activities"}, "")) ) var ( @@ -3986,4 +4071,6 @@ var ( forward_ShieldService_UpdateResource_0 = runtime.ForwardResponseMessage forward_ShieldService_CheckResourcePermission_0 = runtime.ForwardResponseMessage + + forward_ShieldService_ListActivities_0 = runtime.ForwardResponseMessage ) diff --git a/proto/v1beta1/shield.pb.validate.go b/proto/v1beta1/shield.pb.validate.go index 5760fc236..d81f0caba 100644 --- a/proto/v1beta1/shield.pb.validate.go +++ b/proto/v1beta1/shield.pb.validate.go @@ -16710,6 +16710,398 @@ var _ interface { ErrorName() string } = CheckResourceUserPermissionResponseValidationError{} +// Validate checks the field values on Activity with the rules defined in the +// proto definition for this message. If any rules are violated, the first +// error encountered is returned, or nil if there are no violations. +func (m *Activity) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on Activity with the rules defined in +// the proto definition for this message. If any rules are violated, the +// result is a list of violation errors wrapped in ActivityMultiError, or nil +// if none found. +func (m *Activity) ValidateAll() error { + return m.validate(true) +} + +func (m *Activity) validate(all bool) error { + if m == nil { + return nil + } + + var errors []error + + // no validation rules for Actor + + // no validation rules for Action + + // no validation rules for Data + + // no validation rules for Metadata + + if all { + switch v := interface{}(m.GetTimestamp()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, ActivityValidationError{ + field: "Timestamp", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, ActivityValidationError{ + field: "Timestamp", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetTimestamp()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return ActivityValidationError{ + field: "Timestamp", + reason: "embedded message failed validation", + cause: err, + } + } + } + + if len(errors) > 0 { + return ActivityMultiError(errors) + } + + return nil +} + +// ActivityMultiError is an error wrapping multiple validation errors returned +// by Activity.ValidateAll() if the designated constraints aren't met. +type ActivityMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m ActivityMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m ActivityMultiError) AllErrors() []error { return m } + +// ActivityValidationError is the validation error returned by +// Activity.Validate if the designated constraints aren't met. +type ActivityValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e ActivityValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e ActivityValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e ActivityValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e ActivityValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e ActivityValidationError) ErrorName() string { return "ActivityValidationError" } + +// Error satisfies the builtin error interface +func (e ActivityValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sActivity.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = ActivityValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = ActivityValidationError{} + +// Validate checks the field values on ListActivitiesRequest with the rules +// defined in the proto definition for this message. If any rules are +// violated, the first error encountered is returned, or nil if there are no violations. +func (m *ListActivitiesRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on ListActivitiesRequest with the rules +// defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// ListActivitiesRequestMultiError, or nil if none found. +func (m *ListActivitiesRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *ListActivitiesRequest) validate(all bool) error { + if m == nil { + return nil + } + + var errors []error + + // no validation rules for Actor + + // no validation rules for Action + + // no validation rules for Data + + // no validation rules for Metadata + + // no validation rules for StartTime + + // no validation rules for EndTime + + // no validation rules for PageSize + + // no validation rules for PageNum + + if len(errors) > 0 { + return ListActivitiesRequestMultiError(errors) + } + + return nil +} + +// ListActivitiesRequestMultiError is an error wrapping multiple validation +// errors returned by ListActivitiesRequest.ValidateAll() if the designated +// constraints aren't met. +type ListActivitiesRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m ListActivitiesRequestMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m ListActivitiesRequestMultiError) AllErrors() []error { return m } + +// ListActivitiesRequestValidationError is the validation error returned by +// ListActivitiesRequest.Validate if the designated constraints aren't met. +type ListActivitiesRequestValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e ListActivitiesRequestValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e ListActivitiesRequestValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e ListActivitiesRequestValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e ListActivitiesRequestValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e ListActivitiesRequestValidationError) ErrorName() string { + return "ListActivitiesRequestValidationError" +} + +// Error satisfies the builtin error interface +func (e ListActivitiesRequestValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sListActivitiesRequest.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = ListActivitiesRequestValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = ListActivitiesRequestValidationError{} + +// Validate checks the field values on ListActivitiesResponse with the rules +// defined in the proto definition for this message. If any rules are +// violated, the first error encountered is returned, or nil if there are no violations. +func (m *ListActivitiesResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on ListActivitiesResponse with the rules +// defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// ListActivitiesResponseMultiError, or nil if none found. +func (m *ListActivitiesResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *ListActivitiesResponse) validate(all bool) error { + if m == nil { + return nil + } + + var errors []error + + // no validation rules for Count + + for idx, item := range m.GetActivities() { + _, _ = idx, item + + if all { + switch v := interface{}(item).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, ListActivitiesResponseValidationError{ + field: fmt.Sprintf("Activities[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, ListActivitiesResponseValidationError{ + field: fmt.Sprintf("Activities[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return ListActivitiesResponseValidationError{ + field: fmt.Sprintf("Activities[%v]", idx), + reason: "embedded message failed validation", + cause: err, + } + } + } + + } + + if len(errors) > 0 { + return ListActivitiesResponseMultiError(errors) + } + + return nil +} + +// ListActivitiesResponseMultiError is an error wrapping multiple validation +// errors returned by ListActivitiesResponse.ValidateAll() if the designated +// constraints aren't met. +type ListActivitiesResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m ListActivitiesResponseMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m ListActivitiesResponseMultiError) AllErrors() []error { return m } + +// ListActivitiesResponseValidationError is the validation error returned by +// ListActivitiesResponse.Validate if the designated constraints aren't met. +type ListActivitiesResponseValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e ListActivitiesResponseValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e ListActivitiesResponseValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e ListActivitiesResponseValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e ListActivitiesResponseValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e ListActivitiesResponseValidationError) ErrorName() string { + return "ListActivitiesResponseValidationError" +} + +// Error satisfies the builtin error interface +func (e ListActivitiesResponseValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sListActivitiesResponse.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = ListActivitiesResponseValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = ListActivitiesResponseValidationError{} + // Validate checks the field values on // CheckResourcePermissionResponse_ResourcePermissionResponse with the rules // defined in the proto definition for this message. If any rules are diff --git a/proto/v1beta1/shield_grpc.pb.go b/proto/v1beta1/shield_grpc.pb.go index 597bfc2d2..f2103efb5 100644 --- a/proto/v1beta1/shield_grpc.pb.go +++ b/proto/v1beta1/shield_grpc.pb.go @@ -62,6 +62,7 @@ const ( ShieldService_GetResource_FullMethodName = "/gotocompany.shield.v1beta1.ShieldService/GetResource" ShieldService_UpdateResource_FullMethodName = "/gotocompany.shield.v1beta1.ShieldService/UpdateResource" ShieldService_CheckResourcePermission_FullMethodName = "/gotocompany.shield.v1beta1.ShieldService/CheckResourcePermission" + ShieldService_ListActivities_FullMethodName = "/gotocompany.shield.v1beta1.ShieldService/ListActivities" ) // ShieldServiceClient is the client API for ShieldService service. @@ -122,6 +123,8 @@ type ShieldServiceClient interface { UpdateResource(ctx context.Context, in *UpdateResourceRequest, opts ...grpc.CallOption) (*UpdateResourceResponse, error) // Authz CheckResourcePermission(ctx context.Context, in *CheckResourcePermissionRequest, opts ...grpc.CallOption) (*CheckResourcePermissionResponse, error) + // Activity + ListActivities(ctx context.Context, in *ListActivitiesRequest, opts ...grpc.CallOption) (*ListActivitiesResponse, error) } type shieldServiceClient struct { @@ -519,6 +522,15 @@ func (c *shieldServiceClient) CheckResourcePermission(ctx context.Context, in *C return out, nil } +func (c *shieldServiceClient) ListActivities(ctx context.Context, in *ListActivitiesRequest, opts ...grpc.CallOption) (*ListActivitiesResponse, error) { + out := new(ListActivitiesResponse) + err := c.cc.Invoke(ctx, ShieldService_ListActivities_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + // ShieldServiceServer is the server API for ShieldService service. // All implementations must embed UnimplementedShieldServiceServer // for forward compatibility @@ -577,6 +589,8 @@ type ShieldServiceServer interface { UpdateResource(context.Context, *UpdateResourceRequest) (*UpdateResourceResponse, error) // Authz CheckResourcePermission(context.Context, *CheckResourcePermissionRequest) (*CheckResourcePermissionResponse, error) + // Activity + ListActivities(context.Context, *ListActivitiesRequest) (*ListActivitiesResponse, error) mustEmbedUnimplementedShieldServiceServer() } @@ -713,6 +727,9 @@ func (UnimplementedShieldServiceServer) UpdateResource(context.Context, *UpdateR func (UnimplementedShieldServiceServer) CheckResourcePermission(context.Context, *CheckResourcePermissionRequest) (*CheckResourcePermissionResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method CheckResourcePermission not implemented") } +func (UnimplementedShieldServiceServer) ListActivities(context.Context, *ListActivitiesRequest) (*ListActivitiesResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method ListActivities not implemented") +} func (UnimplementedShieldServiceServer) mustEmbedUnimplementedShieldServiceServer() {} // UnsafeShieldServiceServer may be embedded to opt out of forward compatibility for this service. @@ -1500,6 +1517,24 @@ func _ShieldService_CheckResourcePermission_Handler(srv interface{}, ctx context return interceptor(ctx, in, info, handler) } +func _ShieldService_ListActivities_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ListActivitiesRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ShieldServiceServer).ListActivities(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: ShieldService_ListActivities_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ShieldServiceServer).ListActivities(ctx, req.(*ListActivitiesRequest)) + } + return interceptor(ctx, in, info, handler) +} + // ShieldService_ServiceDesc is the grpc.ServiceDesc for ShieldService service. // It's only intended for direct use with grpc.RegisterService, // and not to be introspected or modified (even as a copy) @@ -1679,6 +1714,10 @@ var ShieldService_ServiceDesc = grpc.ServiceDesc{ MethodName: "CheckResourcePermission", Handler: _ShieldService_CheckResourcePermission_Handler, }, + { + MethodName: "ListActivities", + Handler: _ShieldService_ListActivities_Handler, + }, }, Streams: []grpc.StreamDesc{}, Metadata: "gotocompany/shield/v1beta1/shield.proto", diff --git a/test/e2e_test/testbench/testdata/configs/rules/rule.yaml b/test/e2e_test/testbench/testdata/configs/rules/rule.yaml index ab98cea5e..eef000428 100644 --- a/test/e2e_test/testbench/testdata/configs/rules/rule.yaml +++ b/test/e2e_test/testbench/testdata/configs/rules/rule.yaml @@ -1,7 +1,7 @@ rules: - backends: - name: entropy - target: "http://localhost:62568" + target: "http://localhost:62962" frontends: - name: ping path: "/api/ping"